# 2026-04-03 작업일지

## 오늘 작업

- Plan 자동화 재처리 흐름과 main 반영 안정화
- release/main 브랜치 전략을 정리하고 서버 재시작 오류를 수정
- Plan 메모 검색 기능 추가
- Plan 상세에서 소스 작업 이력/미리보기 확인 흐름 보강
- 모바일 설정 아이콘 터치 불가 이슈를 제스처 오버레이 충돌 제거로 해결
- 작업 상세의 불필요한 `내용 조회` 버튼 제거
- Noti 설정의 서버 토큰 등록/삭제 연동 보강
- 작업 ID 기본값(`작업ID`) 처리 및 중복 제약 완화
- 완료/반영 단계에서도 소스 작업 이력이 누락되지 않도록 저장 로직 보강
- Web Push 등록/호환 처리 보강(미지원 API 404 노출 완화)
- 4월 3일 작업 증적용 스크린샷(앱 설정, 알림 설정) 보강
- Plan 상세 증적 탭 하단에 스크린샷/작업일지/preview/source 전체화면 미리보기 추가

## 이슈 및 메모

- release -> main 자동 머지 이후 브랜치 상태 꼬임이 반복되어 브랜치 전략 재정비 필요
- 모바일 터치 이슈는 기능 오류보다 레이어 겹침(오버레이) 영향이 컸음
- 알림 기능은 로컬 UI 상태와 서버 토큰 상태가 분리되면 재현 어려운 장애로 이어짐
- 작업/이슈 이력 누락은 재처리 판단 정확도에 직접 영향

## 결정 사항

- Plan 자동화 브랜치 기준은 `main` 중심으로 정리
- 실패 후 재실행은 명시적 재처리 요청 기반으로 진행
- 알림 설정은 UI 토글만이 아니라 서버 토큰 등록/삭제와 동기화
- 메모/소스 작업 이력은 완료 단계 이후까지 일관 저장

## 상세 작업 내역

- 자동화 워커의 재처리, 반영, 이력 저장 경로를 손봐 동일 이슈 반복 시 추적 가능성을 높임
- release/main 전개 과정에서 발생하던 복구성 작업을 줄이기 위해 브랜치 운영 규칙을 단순화
- Plan 보드 UX는 모바일 접근성(터치/조회/검색) 중심으로 우선 개선
- 알림 관련 API 미지원 상황에서도 사용자에게 과도한 오류를 직접 노출하지 않도록 완충 처리 추가

## 스크린샷

![settings-app](../assets/worklogs/2026-04-03/settings-app.png)
![settings-notification](../assets/worklogs/2026-04-03/settings-notification.png)

## 소스

- `etc/servers/work-server/src/services/git-service.ts`: 새 이슈 브랜치를 `release`가 아니라 `main` 기준으로 만들도록 바꿔 브랜치 꼬임을 줄였습니다.
- `etc/servers/work-server/src/services/plan-service.ts`: 기본 작업 ID 처리, 중복 제약 해제, 완료 시 소스 이력 저장, `main` 반영 요청 단건화 등 자동화 추적 로직을 보강했습니다.
- `src/features/planBoard/PlanBoardPage.tsx`: 소스 작업 이력과 증적 미리보기 흐름을 상세 화면에 반영했습니다.
- `src/app/main/MainHeader.tsx`, `src/app/main/notificationApi.ts`: 알림 설정을 서버 토큰 상태와 동기화하고 미지원 환경의 404를 사용자 오류로 과하게 노출하지 않도록 조정했습니다.
- `etc/servers/work-server/src/workers/plan-worker.ts`: 재처리와 반영 흐름을 `main` 중심으로 다시 맞췄습니다.

```diff
diff --git a/etc/servers/work-server/src/services/git-service.ts b/etc/servers/work-server/src/services/git-service.ts
-  const baseBranch = releaseTarget || config.releaseBranch;
+  const baseBranch = config.mainBranch;

diff --git a/etc/servers/work-server/src/services/plan-service.ts b/etc/servers/work-server/src/services/plan-service.ts
-  workId: z.string().trim().min(1),
+  workId: z.string().trim().optional().default('작업ID'),
...
+  await createPlanLifecycleSourceWorkHistory(
+    id,
+    '작업완료 처리로 release 반영 대기 상태로 전환했습니다.',
+    currentRow.assigned_branch ?? currentRow.release_target ?? 'release',
+  );
```

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

- M etc/servers/work-server/src/services/plan-service.ts
- M scripts/run-plan-codex-once.mjs
- M etc/servers/work-server/.env.example
- M etc/servers/work-server/README.md
- M etc/servers/work-server/src/config/env.ts
- M etc/servers/work-server/src/services/git-service.ts
- M etc/servers/work-server/src/workers/plan-worker.ts
- M src/app/main/notificationApi.ts
- M src/app/main/MainHeader.tsx
- M etc/servers/work-server/package-lock.json
- M etc/servers/work-server/package.json
- M etc/servers/work-server/src/routes/notification.ts
- M etc/servers/work-server/src/services/notification-service.ts
- A etc/servers/work-server/src/types/web-push.d.ts
- M src/main.tsx
- A src/sw.ts
- M vite.config.ts
- M src/features/planBoard/PlanBoardPage.tsx
- M etc/servers/work-server/src/routes/plan.ts
- M src/features/planBoard/api.ts
- M src/features/planBoard/types.ts
- A etc/servers/work-server/src/services/plan-notification-service.ts
- A src/app/main/notificationApi.ts
- M src/layer/gesture/context/GestureContext.tsx
- M src/styles.css
- M etc/servers/work-server/src/app.ts
- A etc/servers/work-server/src/routes/notification.ts
- M etc/servers/work-server/src/server.ts
- A etc/servers/work-server/src/services/notification-service.ts
- M README.md
- A docs/assets/worklogs/2026-04-02/plan-board-mobile-memo-detail.png
- M docs/worklogs/2026-04-02.md
- M package.json
- M scripts/capture-component-screenshot.mjs
- M scripts/capture-fullscreen-toggle-screenshot.mjs
- A scripts/capture-plan-board-mobile-screenshot.mjs
- M scripts/capture-search-command-screenshot.mjs
- A scripts/worklog-capture-utils.mjs
- M src/app/main/MainSidebar.tsx
- M docs/README.md
- M index.html
- M src/app/main/MainView.tsx
- M src/app/main/types.ts
- M docker-compose.yml
- M src/features/planBoard/index.ts
- A docs/test001.md
- M etc/servers/work-server/docker-compose.yml

## 실행 커맨드

```bash
npm run plan:codex:once
npm run build
npm run capture:settings -- --date 2026-04-03
```

## 변경 파일

- `docs/worklogs/2026-04-03.md`
- `src/features/planBoard/PlanBoardPage.tsx`
- `etc/servers/work-server/src/workers/plan-worker.ts`
- `etc/servers/work-server/src/services/plan-service.ts`
- `etc/servers/work-server/src/services/git-service.ts`
- `src/app/main/MainHeader.tsx`
- `src/app/main/notificationApi.ts`
- `src/layer/gesture/context/GestureContext.tsx`
- `scripts/run-plan-codex-once.mjs`
- `src/styles.css`
