# CI_WATCH_HANDOFF — task-2998 / PR #245

생성: 2026-08-22 13:52 KST · 생성자: ANU (OWNER 권한 PR 아님 — 봇 dev5 가 open)

## 12 필드

- **pr_number**: 245
- **head_sha**: `129ee9b0989108bc22c09bc20d7bc190959d4887`
- **branch**: `task/task-2998-dev5`
- **expected_files** (5, 정확히 이것만):
  - `src/components/navigation/navigationConfig.ts`
  - `src/components/policy/NewDesignComparisonTable.tsx`
  - `src/config/routes.ts`
  - `tests/navigation.menu.task-2998.test.ts`
  - `tests/e2e/task-2998-menu-consolidation.spec.ts`
- **forbidden_paths**: `server/**` · `supabase/**` · `src/App.tsx` ·
  `src/components/navigation/ContextSubMenu.tsx` ·
  `src/pages/NewDesignComparison.tsx` · `src/pages/PolicyAnalysis.tsx`
- **watcher_owner**: cron watcher (ANU 발사)
- **max_watch_minutes**: 45
- **poll_interval_seconds**: 120
- **gemini_nudge_policy**: `gemini-review-gate` 는 이미 completed/success.
  재실행 불필요. 새 커밋이 push 되어 stale 해지면 `OWNER_GEMINI_TRIGGER_ROUTER` 사용.
  회장 UI 는 최후수단.
- **auto_remediation_policy**:
  - 자동수렴 허용 = expected_files 내부의 lint/format/flaky 재실행/타입 사소 수정
  - 금지 = forbidden_paths 접촉 · 신규 파일 추가 · 제품 로직 변경
  - flaky 의심 시 최대 2회 재실행까지만
- **callback_on_terminal_state**: true — ANU 에게 cron 콜백 (UTF-8 ≤3900 bytes, envelope 만)
- **terminal_states**: `MERGE_READY` · `CHAIR_REQUIRED` ·
  `GEMINI_EXTERNAL_TRIGGER_STALE` · `CI_FAILED_NON_REMEDIABLE` · `LOOP_BOUNDARY`

## ANU 사전 독립검증 (이미 완료 — 재측정 불필요)

ANU 가 워크트리에서 직접 재측정한 값. 워처는 이것을 신뢰해도 된다.

- `npx vitest run` = **1314 passed / 92 files / 0 failed**
- `npx tsc --noEmit` = 에러 0
- `npm run build` = EXIT 0
- 변이테스트 ANU 자작 4종(M1b/M2/M3/M4) 전건 정상 FAIL → 봉인 이빨 실증
- 원격 blob 5/5 로컬 HEAD 와 일치
- `git diff --name-only 36ac664..HEAD` = 정확히 5건, forbidden 침범 0

## 워처가 할 일

1. 2분 간격으로 `gh api repos/Jeon-Jonghyuk/InsuRo/commits/<head_sha>/check-runs` 폴링
2. 미완료 3건(`ci`, `e2e-test`, `diagnostic`)이 terminal 될 때까지 대기
   (나머지 8건은 이미 success: guard·ci/guard·lock-in-check·gemini-review-gate·
   hidden-path-audit·merge-safety-check·qc-check·cancel-kill-switch)
3. 11/11 success + `mergeable_state` 가 `blocked`/`dirty` 아님 → **MERGE_READY**
4. 실패 시 로그 확인 → auto_remediation_policy 범위면 수렴, 아니면 `CI_FAILED_NON_REMEDIABLE`
5. **머지는 하지 않는다.** ANU 가 한다. terminal state 도달 시 콜백만 발사.

## 콜백 형식 (envelope 만 · UTF-8 ≤3900 bytes)

```
task_id=task-2998 pr=245 head_sha=129ee9b terminal_state=<enum>
checks=<n>/11 mergeable_state=<...> auto_remediation=<한 줄>
handoff_path=/home/jay/workspace/memory/tasks/task-2998-ci-watch.md
collector_role=ANU
```
