# task-2729+1 P0-A — ANU normal collector 회수·finalize 보고

- 수집자(collector): ANU normal collector (schedule E74F8E6E, owner_key c119085addb0f8b7, self-collector 아님)
- 실행 시각(KST): 2026-06-05 14:35~14:42
- 대상: task-2729+1 P0-A (CI_WATCHER lifecycle / terminal callback contract 보강, ACTIVE=false, record-only)
- executor: dev6-team 페룬/스바로그/벨레스 (dispatch cron 6060A3D0, status=ok)

---

## 결론 (한 줄)
P0-A 산출물은 검증 완료(96 PASS·PR#174 clean 4파일·ACTIVE=false). EXTERNAL_DIRTY_BLOCKER는 ANU가 해소했으나, **.done은 2차 게이트(NORMAL_CALLBACK_REGISTRATION_ENFORCEMENT, 회장 verbatim·hold_for_chair)로 여전히 차단** → 회장 결정 필요. PR#174 머지 미실행(merge_policy:none).

---

## 1. ANU 조치 ① — EXTERNAL_DIRTY_BLOCKER 해소 (완료)
- 블로커 정체: 메인 워크스페이스(/home/jay/workspace, 현재 task-2716 브랜치 체크아웃)의 무관 dirty 2건
  - `utils/replacement_pr_runner.py` (task-2729+1 forbidden_path)
  - `tests/regression/test_replacement_pr_runner_2510.py`
- 진단: 두 파일 모두 **working-tree 0 라인(빈 스텁) = task-2510 stale leftover**. 정식 내용(718/493 라인)은 이미 커밋됨(PR#61 머지본, 과거 복구 커밋 5803cf34 "task-2510 leftovers empty .py x2" 이력 존재).
- 조치: 백업(`/tmp/anu_dirty_backup_2729/`) 후 `git restore --source=HEAD` 로 2파일 HEAD 내용 복원 → working-tree clean. (비파괴·복원가능, system callback-cause.json 권고 "무관 dirty 정리 — task 재실행 불필요"와 일치.)
- 부수효과 없음: task-2716-dev4 실제 작업파일 무변경. 신규 cron 미등록(현재 등록 cron은 dead-man 15F3B739 1건뿐).

## 2. finish-task.sh task-2729+1 dev6 재실행 결과
- GIT-GATE: **PASS** (커밋 3건, 필터 후 uncommitted 0, 마지막 커밋 변경 1건)
- IMPACT-GATE: PASS / CI-PREFLIGHT pytest exit=0: **PASS** / scope: 기존 .scope-guard-done(false-violation 재검증 PASS) 스킵 / G3: Lv.2 skip / G4: soft PASS (PR open 허용)
- 머지 단계: PROJECT_PATH 미지정 → **스킵**(PR#174 미머지, 의도된 동작 — merge_policy:none 준수)
- **NORMAL-CALLBACK-ENFORCE: FAIL → .done 생성 차단 (exit 1)**

## 3. 잔여 블로커 — NORMAL_CALLBACK_REGISTRATION_ENFORCEMENT (회장 verbatim 2026-05-27)
4-source validator(`utils/normal_callback_registration_validator`) 결과:
- schedule_id: **FAIL** — envelope에 `schedule_id` 필드 부재
- schedule_history: FAIL — schedule_id 부재로 skip
- owner_key: **FAIL** — envelope는 `anu_key`만 보유, validator가 요구하는 `owner_key` 필드명 부재
- inbound_receipt: PASS (14 hits)

근본 원인: executor가 envelope 생성 시 `owner_key`/`schedule_id` 미기입 + 정식 normal-collector cron의 `status=ok` schedule_history 부재.
현재 status=ok 이력이 있는 schedule는 executor dispatch(6060A3D0)뿐이며, 이는 collector가 아님. collector(E74F8E6E)는 본 실행이 종료돼야 이력이 기록됨(순환 의존).

★ ANU 판단: 본 게이트는 "envelope 작성만으로 완료 처리"를 코드로 차단하는 fail-closed 무결성 게이트이며 marker가 `hold_for_chair:true`를 명시. envelope를 수기 편집하여 게이트를 강제 통과시키는 것은 게이트가 막으려는 패턴 그 자체이고, .done 생성은 외부발신(notify-completion·followup cron)을 동반하는 비가역 행위이므로 **ANU 단독 우회 금지**. → 회장 결정 대기.

## 4. ANU 조치 ② — PR #174 머지
- 상태: OPEN, headRefName task/task-2729+1-dev6, changedFiles = expected 4파일(clean), mergeStateStatus=**BLOCKED**, reviewDecision 미정.
- 조치: **머지 미실행** (merge_policy: none_chair_approval_required, 회장 승인 전 금지). 승인 시 착수.

## 5. ANU 조치 ③ — P0-A → P0-B 연속 판단
- P0-A 산출물 품질: PASS (검증 완료). 단 **.done 미생성 + PR 미머지** = task lifecycle 미완결.
- 권고: **P0-B 자동 연속 보류(HOLD)**. P0-A가 정식 종결(.done + 머지)된 후 진행.

---

## 회장 결정 요청 (2건)
1. **PR #174 머지 승인** 여부 (승인 시 ANU가 PR convergence·머지 착수).
2. **normal callback registration 처리 방침**: (a) envelope에 정식 collector schedule_id/owner_key 보강을 ANU에 승인할지, 또는 (b) 정식 재등록 경로로 처리할지. — 무결성 게이트라 회장 verbatim 지침 필요.

## 보존/증적
- 메인 워크스페이스 2파일: 복원(clean) 상태 유지. 빈 스텁 백업: /tmp/anu_dirty_backup_2729/
- 관련 마커: memory/events/task-2729+1.external-dirty-blocker.json, .callback-cause.json, .normal-callback-not-registered.json(14:41 재발행), .anu-callback-registered.json
- dead-man safety-net cron: 15F3B739 (2026-06-05 15:33 발화 예정)
