9.7 KiB
Executable File
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.mddocs/worklogs/2026-03-30.mddocs/worklogs/2026-03-31.mddocs/worklogs/2026-04-01.mddocs/worklogs/2026-04-02.mddocs/worklogs/2026-04-03.mddocs/worklogs/2026-04-04.mddocs/worklogs/2026-04-05.mddocs/worklogs/2026-04-06.mdetc/servers/work-server/src/routes/app-config.tsetc/servers/work-server/src/routes/error-log.tsetc/servers/work-server/src/routes/plan.tsetc/servers/work-server/src/services/app-config-service.tsetc/servers/work-server/src/services/chat-service.tsetc/servers/work-server/src/services/error-log-service.tsetc/servers/work-server/src/services/plan-service.tsetc/servers/work-server/src/workers/plan-worker.tsscripts/capture-feature-screenshot.mjsscripts/capture-menu-screenshot.mjsscripts/worklog-capture-utils.mjssrc/app/main/MainChatPanel.tsxsrc/app/main/MainHeader.tsxsrc/app/main/appConfig.tssrc/app/main/errorLogApi.tssrc/components/markdownPreview/MarkdownPreviewCard.tsxsrc/components/markdownPreview/MarkdownPreviewContent.tsxsrc/components/previewer/PreviewerUI.csssrc/components/previewer/PreviewerUI.tsxsrc/components/previewer/renderers.tsxsrc/features/planBoard/PlanBoardPage.tsxsrc/features/planBoard/api.tssrc/styles.css