# 2026-04-08 작업일지

## 오늘 작업

- `Play` 상단 메뉴와 `Play > Test` 진입 경로를 추가했습니다.
- 헤더 최상단 메뉴를 `Docs / Plan / Play` 3개 기준으로 정리했습니다.
- `Play > layout` 화면을 만들고 상하/좌우 분할, 재귀 분할, 크기 단위, 최소 크기, 리사이즈 여부를 조절할 수 있게 확장했습니다.
- Plan 상세에서 긴 `issue`/`error` 본문을 기본 접힘으로 바꾸고 아이콘으로만 펼치도록 정리했습니다.
- `release` 환경에서 `main` 미반영 항목만 모아 보여주는 모달을 추가했습니다.
- 자동화 작업 브랜치 기준을 `release`가 아니라 `main`으로 바로잡고, worklog 자동화는 `hotfix/*` 브랜치를 쓰도록 보강했습니다.
- 누락됐던 `docs/worklogs/2026-04-08.md` 초안이 템플릿 상태로만 남아 있던 문제를 실제 작업 내역 기준으로 다시 정리했습니다.
- 누락됐던 `Play > layout` 스크린샷을 `docs/assets/worklogs/2026-04-08/feature-play-layout.png`로 다시 연결했습니다.

## 이슈 및 해결

- 오늘자 작업일지가 템플릿 문구만 남아 있어 `play`, 자동화 브랜치 정책, release 대기 모달 작업 이력을 문서에서 확인할 수 없었습니다.
- Git 기록 기준으로 2026-04-08 UTC/KST 커밋을 다시 확인해 실제 작업 항목과 변경 파일을 복원했습니다.
- 사용자가 언급한 `history` 기능은 Git 이력상 2026-04-07 13:44:06 UTC 커밋(`plan(history)`)에 생성됐고, 2026-04-08에는 `play`/plan 상세/자동화 보강 작업이 집중됐습니다.
- 스크린샷 섹션이 비어 있고 소스 뷰어의 diff 라벨도 일관되지 않아, 증적 확인 흐름이 한 번에 읽히지 않았습니다.

## 결정 사항

- 2026-04-08 문서는 placeholder 템플릿이 아니라 실제 커밋 증적 기준으로 유지합니다.
- `Play`는 `Test`와 `layout` 두 축으로 관리하고, 레이아웃 실험은 전용 playground에서 확장합니다.
- Plan 소스 뷰어 탭 명칭은 사용자가 바로 이해할 수 있게 `작업란 / 전체소스 / diff`로 정리합니다.
- 자동화 작업 브랜치 base는 `main`, 자동 worklog 정리는 `hotfix/*` 흐름을 따릅니다.
- 2026-04-08 대표 스크린샷은 `Play > layout` 화면으로 고정합니다.

## 상세 작업 내역

- `src/app/main/MainHeader.tsx`, `src/app/main/MainView.tsx`, `src/app/main/MainContent.tsx`, `src/app/main/types.ts`, `src/views/play/TestView.tsx`에서 `Play` 메뉴와 `Play > Test` 화면을 연결했습니다.
- `src/views/play/LayoutPlaygroundView.tsx`와 `src/styles.css`에서 레이아웃 playground를 추가하고, 이후 같은 날 재귀 분할과 초기 빈 상태 진입까지 두 차례 확장했습니다.
- `src/features/planBoard/PlanBoardPage.tsx`에서 긴 이슈 본문 접힘 처리와 소스 작업 미리보기 경험을 보강했습니다.
- `src/App.tsx`, `src/app/main/ReleasePendingMainModal.tsx`, `src/styles.css`에서 `release` 접속 시 `main` 미반영 항목 안내 모달을 추가했습니다.
- `scripts/run-plan-codex-once.mjs`, `etc/servers/work-server/src/services/git-service.ts`, `etc/servers/work-server/src/workers/plan-worker.ts`, `etc/servers/work-server/src/services/plan-service.ts`에서 자동화 브랜치/정리 정책을 수정했습니다.
- 오늘 문서 누락 보완으로 `docs/worklogs/2026-04-08.md`를 실제 기록 기준으로 재작성했습니다.
- `scripts/capture-feature-screenshot.mjs`에 `play-layout` 프리셋을 추가해 오늘자 대표 화면을 다시 캡처할 수 있게 했습니다.
- `src/components/previewer/CodexDiffPreviewer.tsx`에서 소스 뷰어 탭 라벨을 `전체소스 / diff`로 맞췄습니다.

## 스크린샷

![feature-play-layout](../assets/worklogs/2026-04-08/feature-play-layout.png)

## 소스

### 파일 1: `src/app/main/MainView.tsx`

- 상단 메뉴 체계를 `Docs / Plan / Play` 중심으로 재정리하고 `Play > Test`, `Play > layout` 탐색을 연결했습니다.
- 검색 커맨드와 초기 URL 파라미터도 `playSection` 기준으로 함께 맞췄습니다.

```diff
const PLAY_BASE_OPEN_KEYS = ['play-group', 'play-test-group', 'play-layout-group'] as const;
...
+        id: 'page:play:test',
+        keywords: ['play', 'test', '테스트', 'TEST메뉴'],
+      },
+      {
+        id: 'page:play:layout',
+        keywords: ['play', 'layout', 'flex', 'split', '분할', '레이아웃', 'preview'],
```

### 파일 2: `src/views/play/LayoutPlaygroundView.tsx`

- `play > layout` 화면을 추가하고, 같은 날 재귀 분할과 빈 상태 시작 플로우까지 확장했습니다.
- 상하/좌우 시작, `px/%` 단위, 최소 크기, 리사이즈 허용 여부를 화면에서 바로 조정할 수 있습니다.

```diff
diff --git a/src/views/play/LayoutPlaygroundView.tsx b/src/views/play/LayoutPlaygroundView.tsx
+const DEFAULT_LAYOUT_DIRECTION = 'row';
+const EMPTY_LAYOUT: LayoutNode | null = null;
...
+<Button onClick={() => handleCreateRoot('row')}>좌우로 시작</Button>
+<Button onClick={() => handleCreateRoot('column')}>상하로 시작</Button>
...
+<Button onClick={() => handleSplitNode(selectedNodeId, 'row')}>좌우 추가</Button>
+<Button onClick={() => handleSplitNode(selectedNodeId, 'column')}>상하 추가</Button>
```

### 파일 3: `src/app/main/ReleasePendingMainModal.tsx`

- `release` 환경에서 아직 `main`에 반영되지 않은 작업만 모아 보여주는 전용 모달을 추가했습니다.
- `릴리즈완료`, `main반영대기/중/실패` 상태를 기준으로 요약과 현황을 표시합니다.

```diff
diff --git a/src/app/main/ReleasePendingMainModal.tsx b/src/app/main/ReleasePendingMainModal.tsx
+export function ReleasePendingMainModal() {
+  // release 서버에서 main 미반영 항목만 조회
+}
```

### 파일 4: `scripts/run-plan-codex-once.mjs`

- `.auto_codex` 작업 브랜치의 base를 `release`가 아니라 `main`으로 맞췄습니다.
- 같은 날 자동 worklog 쪽은 `hotfix/*` 흐름을 따르도록 서버 로직도 함께 보강됐습니다.

```diff
diff --git a/scripts/run-plan-codex-once.mjs b/scripts/run-plan-codex-once.mjs
-const baseBranch = 'release';
+const baseBranch = 'main';
```

### 파일 5: `src/features/planBoard/PlanBoardPage.tsx`

- 긴 `issue`/`error` 본문은 기본 접힘으로 바꾸고, 이번 보완에서 소스 뷰어 탭 명칭도 `작업란 / 전체소스 / diff`로 정리했습니다.

```diff
diff --git a/src/features/planBoard/PlanBoardPage.tsx b/src/features/planBoard/PlanBoardPage.tsx
-      label: '요약',
+      label: '작업란',
-      label: '전체 소스',
+      label: '전체소스',
-      label: 'Diff',
+      label: 'diff',
```

### 파일 6: `src/components/previewer/CodexDiffPreviewer.tsx`

- worklog 소스 탭과 Plan 소스 뷰어의 모드 라벨을 `전체소스 / diff`로 통일했습니다.
- 기존 `Raw Diff` 표기를 `diff`로 바꿔 사용자가 탭 목적을 바로 읽을 수 있게 맞췄습니다.

```diff
diff --git a/src/components/previewer/CodexDiffPreviewer.tsx b/src/components/previewer/CodexDiffPreviewer.tsx
-            { label: '전체 소스', value: 'source' },
-            { label: 'Raw Diff', value: 'diff' },
+            { label: '전체소스', value: 'source' },
+            { label: 'diff', value: 'diff' },
```

### 파일 7: `scripts/capture-feature-screenshot.mjs`

- `Play > layout` 화면도 기존 worklog 캡처 흐름으로 다시 만들 수 있게 프리셋을 추가했습니다.
- 오늘자 누락 스크린샷은 이 프리셋으로 `feature-play-layout.png`를 생성해 연결했습니다.

```diff
diff --git a/scripts/capture-feature-screenshot.mjs b/scripts/capture-feature-screenshot.mjs
+  'play-layout': {
+    topMenu: 'play',
+    screenshotFileName: 'feature-play-layout.png',
+    targetSelector: '.app-main-card',
+    query: { playSection: 'layout' },
+  },
```

### 파일 8: `docs/assets/worklogs/2026-04-08/feature-play-layout.png`

- `Play > layout` 대표 화면을 다시 캡처해 오늘자 스크린샷 섹션과 바로 연결했습니다.
- 2026-04-08 작업일지에서 비어 있던 시각 증적을 채우는 실제 산출물 파일입니다.

```diff
Binary file added: docs/assets/worklogs/2026-04-08/feature-play-layout.png
```

## 실행 커맨드

```bash
git -c safe.directory=/workspace/auto_codex/repo log --since='2026-04-08 00:00' --until='2026-04-08 23:59:59' --stat --oneline --decorate
git -c safe.directory=/workspace/auto_codex/repo log --since='2026-04-08 00:00' --until='2026-04-08 23:59:59' --name-status --format='commit %H%nAuthor: %an%nDate: %ad%nSubject: %s' --date=iso
git -c safe.directory=/workspace/auto_codex/repo log --follow --name-status -- src/features/history/HistoryPage.tsx
npm run dev -- --host 127.0.0.1 --port 4173
CAPTURE_BASE_URL=http://127.0.0.1:4173 node scripts/capture-feature-screenshot.mjs play-layout 2026-04-08
```

## 변경/신규 파일 (전체, 중복 제거, Git 기록 기준)

- M src/app/main/MainHeader.tsx
- M src/app/main/MainContent.tsx
- M src/app/main/MainSidebar.tsx
- M src/app/main/MainView.tsx
- M src/app/main/types.ts
- M src/app/main/clientIdentity.ts
- M src/App.tsx
- A src/app/main/ReleasePendingMainModal.tsx
- A src/views/play/TestView.tsx
- A src/views/play/LayoutPlaygroundView.tsx
- M src/features/planBoard/PlanBoardPage.tsx
- M src/styles.css
- M src/store/appStore/types/index.ts
- M scripts/run-plan-codex-once.mjs
- M etc/servers/work-server/src/services/git-service.ts
- A etc/servers/work-server/src/services/git-service.test.ts
- M etc/servers/work-server/src/services/plan-service.ts
- M etc/servers/work-server/src/services/plan-service.test.ts
- M etc/servers/work-server/src/workers/plan-worker.ts
- M AGENTS.md
- A docs/worklogs/2026-04-08.md
- M src/components/previewer/CodexDiffPreviewer.tsx
- M scripts/capture-feature-screenshot.mjs
- A docs/assets/worklogs/2026-04-08/feature-play-layout.png
