# Backlog Item 1 — task-2642 d4098b04 Separation Packet (★ spec only · 실 처리 0)

- task: task-2666 (Track D-1 · BACKLOG_SEPARATION_PACKET_TRIAGE_4_ITEMS)
- chair_authorization_id: `CHAIR-AUTH-BACKLOG-SEPARATION-PACKET-20260525-JJONGS-TRIAGE-001`
- scope: 별도 PR 생성안 + dependency 분석 + risk assessment (★ 실 PR 생성 0)
- ttl_hours: 48

## 1. Current State (★ git log 직접 확인)

- commit sha: `d4098b042822728d6b09ee235e8d2f8f6a3fff1f`
- commit title: `task-2642 — CI_WATCH_HANDOFF_RUNNER 신설 (회장 verbatim 정책 코드화 · ANU 직접 CI/Gemini 대기 금지)`
- author: `jeon-jonghyuk-taskctl-bot[bot]`
- committed_at: `2026-05-23 20:12:34 +0900`
- parent: `0e172435a2d7d3664ae63320c2f96c12882df0e3` (★ origin/main Merge PR #144 task-2641 — 당시 origin/main tip)
- branches containing: `task/task-2642-runner` (★ local only · origin 미반영) + `task/task-2659-dev6` (★ task-2659 branch가 d4098b04 위에 또 쌓음) + `task/task-2660-dev1` (★ task-2660 c6425611이 d4098b04 위에 쌓음) + `task/task-2661-dev5`
- diff scale: 26 files / **3053 insertions** / 0 deletions (★ 신규 모듈 전용 · 기존 파일 변경 0)

## 2. Anchor Discrepancy (★ task md vs 실제)

task md item 1 표현: "local main 잔류 unmerged commit · origin/main 미반영"

★ **실제 측정 결과**: `/home/jay/workspace` HEAD `5a29d3ee`에서 `git log origin/main..HEAD` 5건은 task-2568/2569 commits이며 **d4098b04는 포함 안 됨**. d4098b04는 `task/task-2642-runner` branch tip + 후속 task branch chain(2659/2660/2661 worktree branches)에만 보존 중. ★ 즉 "local main에 잔류"가 아니라 **"local repo branch refs에만 잔류 · main HEAD chain 미포함"** 가 정확한 박제. (★ packet 작성 시 표현 보정 필요 · 회장 결정 위임)

## 3. Affected Paths (26 files · 신규 추가만)

```
utils/ci_watch_handoff_audit.py                                       (240 lines · 신규)
utils/ci_watch_handoff_runner.py                                      (730 lines · 신규)
utils/ci_watch_handoff_schema.py                                      (232 lines · 신규)
tests/regression/test_ci_watch_handoff_audit.py                       (322 lines · 신규)
tests/regression/test_ci_watch_handoff_runner.py                      (510 lines · 신규)
tests/regression/test_ci_watch_handoff_runner_fixture_parametrized.py (219 lines · 신규)
tests/regression/test_ci_watch_handoff_schema.py                      (263 lines · 신규)
tests/fixtures/ci_watch_handoff_runner/INDEX.md                       (36 lines · 신규)
tests/fixtures/ci_watch_handoff_runner/*/PROVENANCE.md (×6)           (★ fixture set 6 시나리오)
tests/fixtures/ci_watch_handoff_runner/*/evidence.json (×6)
tests/fixtures/ci_watch_handoff_runner/*/expected.json (×6)
```

★ 회장 verbatim 본 commit 사유 박제: **"CI_WATCH_HANDOFF_RUNNER 정책 코드화 · ANU 직접 CI/Gemini 대기 금지"** — 정책 자산 (★ 폐기 불가)

## 4. Dependency Analysis

- **Upstream**: parent `0e172435` (origin/main 당시 tip · 현재 HEAD 2752182a까지 66 commits 진행)
- **Downstream (★ local-only)**:
  - c6425611 (task-2660 Phase 2) — parent로 d4098b04 사용 → 본 packet Item 2와 직접 연계
  - 2de8118e (task-2659 SPAWN_VISIBILITY_GUARD canonical promotion · PR #147 source) — branch가 d4098b04를 포함 (★ 단 PR #147 자체는 base origin/main · d4098b04를 base에서 분리 가능)
- **origin/main 반영 0**: 66 commits 동안 d4098b04 미반영 (★ task-2641 PR #144 merge 이후 어떤 PR 도 본 commit을 가져가지 않음)

## 5. Risk Assessment

| 위험 분류 | 평가 | 근거 |
| --- | --- | --- |
| Merge conflict | **LOW** | 신규 파일 26건 only · 기존 파일 변경 0. origin/main 66 commits 동안 `utils/ci_watch_handoff_*` / `tests/regression/test_ci_watch_handoff_*` / `tests/fixtures/ci_watch_handoff_runner/*` 동일 path 신규 추가 가능성 사전 점검 필요 |
| Functional regression | **LOW** | 신규 모듈 · 기존 호출 site 0 (★ runtime wiring 0). pytest regression suite 4개 자체 검증 강제 |
| Branch GC | **MEDIUM** | `task/task-2642-runner` 또는 후속 task branch(2660/2659/2661) 일괄 삭제 시 d4098b04 reachable 0 → git GC 회수 위험 (★ forensic tag 박제 권장) |
| 정책 합치성 | **N/A — 정책 자산** | 회장 verbatim "정책 코드화" — 폐기 불가 anchor |

## 6. PR 생성안 (★ 실 생성 0 · 회장 결정 시 적용)

- **source ref**: `task/task-2642-runner` (★ local-only branch · push 필요)
- **base**: `origin/main` (현재 HEAD `2752182a`)
- **rebase 정책**: `--onto origin/main task/task-2642-runner~1 task/task-2642-runner` 또는 cherry-pick `d4098b04` onto origin/main (★ d4098b04 단일 commit이므로 cherry-pick 단순)
- **사전 충돌 scan**: `git diff origin/main..d4098b04 --name-only` 26 path가 origin/main에 미존재하는지 확인 (★ 본 packet 작성 시점에는 미실행 · PR 생성안 step 1 강제)
- **PR title**: `[task-2642] CI_WATCH_HANDOFF_RUNNER 신설 — 회장 verbatim 정책 코드화 (ANU 직접 CI/Gemini 대기 금지)`
- **PR body 필수 anchor**: chair_authorization_id (★ task-2642 자체의 chair_auth id 사전 박제 필요 · 본 packet 범위 외 · 회장 결정 시 발급), regression 4 suite PASS evidence, "기존 파일 변경 0" anchor
- **merge policy**: `squash` (★ 단일 commit이므로 squash 효과 동일) · Gemini 리뷰 ≥ 1 + High 0 미수정 후 merge
- **의존 task 매핑**: 0건 (★ 본 packet에서 ANU 직접 CI/Gemini wiring과 연계되지만 동기 의존 없음)
- **recommended timing**: ★ Track B-1 (Axis 3 observer chain) + Track C-1 (v3.6 shadow-mode) 종료 후 또는 별도 회장 결정 — 본 task 범위 외

## 7. forbidden_action_count (본 packet 작성 행위 기준)

**0**. 실 push / PR 생성 / merge / branch 삭제 / local main reset / task-2642 실제 처리 — 전 0.

## 8. ANCHOR 6 점검 (task md 명시)

- ANCHOR-1 packet only ✅ (★ 본 파일은 spec 만)
- ANCHOR-2 Track A/B/C 파일 충돌 0 ✅ (★ memory/specs/backlog_item_1_*.md 단일 신규)
- ANCHOR-3 4건 분리 ✅ (★ 본 파일은 Item 1 단독)
- ANCHOR-4 live settings/dispatch/hooks/Axis runtime 변경 0 ✅
- ANCHOR-5 Axis 3 RUNNING 자동선언 0 ✅
- ANCHOR-6 task-2642 실제 처리 0 ✅
