Files
ai-code-app/docs/worklogs/2026-04-06.md
2026-04-21 03:33:23 +09:00

9.7 KiB
Executable File

2026-04-06 작업일지

오늘 작업

  • Plan API의 Load Failed, 완료건 정상처리, 삭제 요청 실패 같은 기본 동작 오류를 먼저 정리
  • Plan 목록/상세에서 작업 ID 표기, 자동화 진행 상태, 로딩/오류 메시지, 복사 버튼 등 사용성 보강
  • Chat 화면이 선택된 Plan 문맥을 더 직접적으로 답하도록 서버 응답과 헤더 UX를 계속 보완
  • Codex Live앱로그 > 에러 로그 구조를 나누고, 에러 로그 상세 화면을 탭/미리보기 중심으로 확장
  • 앱 설정을 드롭다운 구조와 app config 저장 방식으로 재구성하고 DB 동기화, 스냅샷 캐시, 즉시 반영 흐름 정리
  • Docs 작업일지를 산출물 브라우저와 섹션 탭 기반 미리보기 형태로 키우고, ## 소스/## 실행 커맨드/## 변경 파일 포맷을 통일
  • 작업일지 스크린샷 자동화, 중복 제거, 날짜별 연결 규칙을 정리하고 3월 30일~4월 6일 문서를 후속 보강
  • 토큰 미등록 사용자의 Plan/설정 접근 범위를 readonly와 403 기준으로 제한

이슈 및 메모

  • Fastify는 빈 바디인데 Content-Type: application/json만 있는 DELETE 요청을 400으로 거절해 프런트 공통 요청 유틸 수정이 필요했음
  • 완료건 정상처리, 자동 재처리, 자동화 설정 반영 시점이 서로 어긋나면 사용자 입장에서는 저장 실패처럼 보여 서버/프런트 기준을 같이 맞춰야 했음
  • 작업일지 본문만 보여주던 방식으로는 스크린샷, 로그, 코드 diff, 변경 파일을 따라가기 어려워 산출물 브라우저가 필요했음
  • 에러 로그/채팅/작업일지 preview가 각각 다른 규칙으로 렌더링돼 fenced code, 커맨드 블록, 파일 목록 표시가 계속 들쭉날쭉했음
  • 토큰 미등록 사용자에게는 Plan 상세, 메모, 소스 작업, 설정 일부를 그대로 노출하면 안 돼 화면과 API를 동시에 잠가야 했음

결정 사항

  • 공통 API 유틸은 HTTP 메서드가 아니라 실제 바디 유무 기준으로 Content-Type을 설정
  • 자동화 실패 후 메모 저장이나 이슈 조치만으로는 자동 재처리를 다시 켜지 않도록 retry=false 기본값을 유지
  • 작업일지 preview는 Markdown 본문 외 산출물도 같은 카드 안에서 섹션 단위 탭으로 노출
  • 작업일지 ## 소스는 파일 나열보다 "요약 설명 + 대표 diff" 중심으로 고정
  • 앱 설정은 클라이언트 임시 상태가 아니라 DB 저장값과 비교 가능한 app config 구조로 관리
  • 토큰 미등록 사용자는 Plan 관련 쓰기 작업과 민감 상세 열람을 모두 제한

상세 작업 내역

  • src/features/planBoard/api.ts에서 요청 타임아웃/재시도와 헤더 구성을 다듬어 Load Failed, 삭제 실패, 정상처리 갱신 문제를 함께 줄였음
  • src/features/planBoard/PlanBoardPage.tsx에서 작업 ID 표기, 자동화 상태 설명, 오류 알림 복사, 진행중 우선 정렬, readonly 처리, 작업일지 산출물 브라우저를 순차 반영
  • etc/servers/work-server/src/services/chat-service.ts는 Chat 화면이어도 planId가 있으면 상태/이력/이슈를 같이 답하게 보강했고, 응답 제한 이유도 더 직접적으로 바꿨음
  • src/app/main/MainChatPanel.tsx와 서버 에러 로그 라우트/서비스를 연결해 앱로그 > 에러 로그 화면과 상세 탭/최대화/참조 preview를 정리했음
  • src/app/main/MainHeader.tsx, src/app/main/appConfig.ts, etc/servers/work-server/src/routes/app-config.ts 계층에서 앱 설정 드롭다운, DB 저장, 동기화, 캐시, 즉시 반영 흐름을 묶었음
  • src/components/markdownPreview/MarkdownPreviewCard.tsx, src/components/markdownPreview/MarkdownPreviewContent.tsx, src/components/previewer/*는 작업일지/산출물 preview를 공통 포맷 레이어로 렌더링하게 바꿨음
  • scripts/capture-menu-screenshot.mjs, scripts/capture-feature-screenshot.mjs, scripts/worklog-capture-utils.mjs로 메뉴/기능 캡처와 작업일지 연결을 자동화했고, 불필요한 날짜 참조는 다시 정리했음
  • docs/worklogs/2026-03-30.md부터 docs/worklogs/2026-04-06.md까지 문서 포맷과 스크린샷/소스/커맨드/변경 파일 섹션을 현재 규칙에 맞게 보강했음

스크린샷

  • 저장소 기준 연결된 스크린샷 없음

소스

  • Plan 기본 동작 안정화: 완료건 정상처리, 삭제, 재시도, 오류 표시에 걸친 프런트/서버 동작을 정리했습니다.
  • src/features/planBoard/api.ts, src/features/planBoard/PlanBoardPage.tsx, etc/servers/work-server/src/services/plan-service.ts: 요청 헤더, 타임아웃, 목록 정렬, readonly, 완료 처리와 자동 재처리 기준을 함께 맞췄습니다.
  • Chat/앱로그 확장: 선택된 Plan 문맥 응답과 에러 로그 상세 뷰를 계속 키웠습니다.
  • etc/servers/work-server/src/services/chat-service.ts, src/app/main/MainChatPanel.tsx, src/app/main/errorLogApi.ts: Chat 답변 문맥, 앱로그 메뉴 구조, 에러 로그 조회/상세/preview 흐름을 연결했습니다.
  • 작업일지/증적 preview 정리: 문서 본문, 코드, 커맨드, 변경 파일을 같은 시각 규칙으로 렌더링하게 통일했습니다.
  • src/components/markdownPreview/MarkdownPreviewContent.tsx, src/components/previewer/renderers.tsx, docs/templates/worklog-template.md: 작업일지 포맷과 preview 렌더러를 섹션 중심으로 정리했습니다.
diff --git a/src/features/planBoard/api.ts b/src/features/planBoard/api.ts
+  const hasBody = init?.body !== undefined && init.body !== null;
...
-  headers.set('Content-Type', 'application/json');
+  if (hasBody && !headers.has('Content-Type')) {
+    headers.set('Content-Type', 'application/json');
+  }
diff --git a/src/app/main/MainHeader.tsx b/src/app/main/MainHeader.tsx
- <button>앱 설정</button>
+ <Dropdown menu={{ items: appConfigMenus }}>
+   <button>앱 설정</button>
+ </Dropdown>
diff --git a/src/components/previewer/renderers.tsx b/src/components/previewer/renderers.tsx
+export function renderMarkdownSectionPreview(section, context) {
+  if (section.type === 'code') return <CodeBlockPreview {...context} />;
+  if (section.type === 'command') return <CommandLogPreview {...context} />;
+  return <DefaultSectionPreview {...context} />;
+}

변경 파일 (전체, 중복 제거, KST 기준)

  • M src/app/main/MainChatPanel.tsx
  • M src/styles.css
  • M etc/servers/work-server/src/services/app-config-service.ts
  • M etc/servers/work-server/src/workers/plan-worker.ts
  • M src/app/main/MainHeader.tsx
  • M src/components/window/WindowUI.tsx
  • M src/app/main/MainSidebar.tsx
  • M src/app/main/MainView.tsx
  • M etc/servers/work-server/src/services/plan-service.ts
  • M src/features/planBoard/PlanBoardPage.tsx
  • M src/features/planBoard/api.ts
  • M etc/servers/work-server/src/services/plan-policy.test.ts
  • M etc/servers/work-server/src/app.ts
  • M etc/servers/work-server/src/services/error-log-service.ts
  • M src/app/main/errorLogApi.ts
  • M src/app/main/MainContent.tsx
  • M src/app/main/types.ts
  • A etc/servers/work-server/src/routes/error-log.ts
  • A etc/servers/work-server/src/services/error-log-service.ts
  • M src/App.tsx
  • A src/app/main/errorLogApi.ts
  • M etc/servers/work-server/src/routes/app-config.ts
  • M src/app/main/appConfig.ts
  • A etc/servers/work-server/src/routes/app-config.ts
  • A etc/servers/work-server/src/services/app-config-service.ts
  • M etc/servers/work-server/src/config/env.ts
  • M etc/servers/work-server/src/routes/plan.ts
  • M etc/servers/work-server/src/services/git-service.ts
  • M etc/servers/work-server/src/services/notification-service.ts
  • A src/app/main/appConfig.ts
  • M etc/servers/work-server/src/services/chat-service.ts
  • M src/features/planBoard/charts.tsx
  • M src/features/planBoard/types.ts
  • A docs/worklogs/2026-04-03.md
  • A docs/worklogs/2026-04-04.md
  • A docs/worklogs/2026-04-05.md
  • A docs/worklogs/2026-04-06.md
  • M etc/servers/work-server/src/services/plan-notification-service.ts
  • M etc/servers/work-server/package.json
  • A etc/servers/work-server/src/services/plan-notification-policy.ts
  • A etc/servers/work-server/src/services/plan-policy.test.ts
  • A etc/servers/work-server/src/services/plan-retry-policy.ts
  • M src/sw.js

실행 커맨드

npx tsc -b
npm run build:app
npm run capture:menu -- --date 2026-04-06
npm run capture:feature -- --date 2026-04-06
npm run plan:codex:once

변경 파일

  • docs/templates/worklog-template.md
  • docs/worklogs/2026-03-30.md
  • docs/worklogs/2026-03-31.md
  • docs/worklogs/2026-04-01.md
  • docs/worklogs/2026-04-02.md
  • docs/worklogs/2026-04-03.md
  • docs/worklogs/2026-04-04.md
  • docs/worklogs/2026-04-05.md
  • docs/worklogs/2026-04-06.md
  • etc/servers/work-server/src/routes/app-config.ts
  • etc/servers/work-server/src/routes/error-log.ts
  • etc/servers/work-server/src/routes/plan.ts
  • etc/servers/work-server/src/services/app-config-service.ts
  • etc/servers/work-server/src/services/chat-service.ts
  • etc/servers/work-server/src/services/error-log-service.ts
  • etc/servers/work-server/src/services/plan-service.ts
  • etc/servers/work-server/src/workers/plan-worker.ts
  • scripts/capture-feature-screenshot.mjs
  • scripts/capture-menu-screenshot.mjs
  • scripts/worklog-capture-utils.mjs
  • src/app/main/MainChatPanel.tsx
  • src/app/main/MainHeader.tsx
  • src/app/main/appConfig.ts
  • src/app/main/errorLogApi.ts
  • src/components/markdownPreview/MarkdownPreviewCard.tsx
  • src/components/markdownPreview/MarkdownPreviewContent.tsx
  • src/components/previewer/PreviewerUI.css
  • src/components/previewer/PreviewerUI.tsx
  • src/components/previewer/renderers.tsx
  • src/features/planBoard/PlanBoardPage.tsx
  • src/features/planBoard/api.ts
  • src/styles.css