# task-2615 — Track F: integration_dogfood (회장 6-track 시스템화·독립 task·event-gated)

> **Lv**: Lv.4. **Executor**: dev5-team 마르둑 (key 109fa85250c6d46b) 1회 한정. **TTL**: 3h. **상태**: 회장 BATCH_LEVEL_HOLD 시스템화 Track F — preflight EVENT_GATED({A,B,C,D,E}=task-2610~2614 all-settled EVENT 후·회장 규칙2·고정시각/dead-man 아님). 문서-only 금지. **callback: 반드시 독립 ANU key c119085addb0f8b7(executor self key 109fa85250c6d46b 절대 금지·+49 코드 정본).**
> **preflight 정본**: `memory/events/task-2610-batch-hold-system-preflight-decision_260519.json`. **+N 아님 — 독립 task.**

## 1. 목표 (회장 verbatim)

batch-level 결과가 올바르게 나오는지 실증한다(integration dogfood).

## 2. 구현·검증 (회장 verbatim — Track F)

`scripts/run_batch_hold_adjudicator.py`(runtime entrypoint/CLI) · `memory/events/sample.batch-hold-adjudication.result.json`. 2604/2605 HOLD_CANDIDATE + 2608 NOT_STARTED_BY_DESIGN + 2606/2607/2609 PASS fixture를 넣었을 때 batch-level 결과가:
- `2604=AUTO_REMEDIATION_HOLD`
- `2605=AUTO_REMEDIATION_HOLD`
- `2608=WAITING_FOR_DEPENDENCY/NOT_STARTED_BY_DESIGN`
- `Critical7=0`
- `chair_required=false`
로 나오는지 실증. Track A~E 산출물 read-only 결선(import/CLI).

## 3. 진행 게이트 (preflight EVENT_GATED)

{Track A(2610),B(2611),C(2612),D(2613),E(2614)} all-settled durable-success EVENT 후 시작(회장 규칙2 — F는 A~E 산출 후). 고정시각/dead-man 진행트리거 0(+44 durable registry all-settled 감지).

## 4. 공통 원칙 (회장 verbatim)

Critical7만 회장 보고 · non-Critical HOLD는 AUTO_REMEDIATION_HOLD로 자동 수렴 · 개별 collector는 HOLD_CANDIDATE만 기록 · 모든 track 상태 모은 뒤 consolidated adjudication · 문서-only 금지(py/sh/yaml/schema/test/fixture/result 필수) · executor self-* 금지 · independent ANU collector만 authoritative · fallback/dead-man/fixed-time 진행 트리거 금지 · PR/merge/credential/branch/main write 금지.

## 5. expected_files allowlist (DISJOINT — Track A/B/C/D/E 와 0 overlap)

`scripts/run_batch_hold_adjudicator.py` · `memory/events/sample.batch-hold-adjudication.result.json` · **[회장 야간 지시 §6b]** `memory/events/sample.callback-gap-recovery.dogfood.json`(callback-gap recovery 시나리오 실증 산출) · `memory/events/task-2615.{decision,result}.json` · `memory/reports/task-2615.md`. 이 외 write 0. **Track A~E 산출물(task-2614 의 `anu_v3/dispatch_callback_contract.py` 포함)·기존 task-2553·task-2604 multitrack·frozen anchor byte-0(read-only consume·import/CLI only)**. git HEAD·branch 전후 EQUAL.

## 6. 금지 (회장 verbatim 공통)

기존 산출물 변조 · Track A~E 산출물 수정(import/CLI only) · 문서-only 완료 · executor self-* · independent ANU authoritative 약화 · fallback/dead-man/fixed-time 진행트리거(게이트는 event-driven) · PR/branch/main write·merge·credential.

## 6b. 회장 야간 지시 필수 보강 — callback-gap recovery watcher end-to-end dogfood (py/runtime·문서-only 금지)

회장 2026-05-20 야간 최종 지시. task-2614 §7b 의 `anu_v3/dispatch_callback_contract.py`(callback 계약+recovery watcher)를 read-only import/CLI 결선하여 **end-to-end 실증**(새 범위 아님·BATCH_LEVEL_HOLD 필수 보강). `memory/events/sample.callback-gap-recovery.dogfood.json` 산출.

end-to-end dogfood 시나리오(전부 실증·mock-only FAIL):
1. batch HOLD_CANDIDATE 입력 → `2604=AUTO_REMEDIATION_HOLD` · `2605=AUTO_REMEDIATION_HOLD` 분류
2. Critical7 케이스만 CHAIR_HOLD · 그 외 non-Critical AUTO_REMEDIATION_HOLD 자동 수렴
3. dependency `2608=NOT_STARTED_BY_DESIGN`(WAITING_FOR_DEPENDENCY) 분류 · `2606/2607/2609=PASS`
4. `Critical7=0` · `chair_required=false`
5. **callback-gap recovery 실증**: `result exists + normal callback missing + fallback missing` 주입 → `DISPATCH_CONTRACT_VIOLATION` 탐지 → recovery watcher 가 **idempotent**하게 독립 ANU collector spawn(정확히 1회·중복 spawn 0) → 무조율 dead-man/fixed-time 진행트리거 아님(조건 미충족 시 no-op) 실증
6. independent ANU collector authoritative · executor self-chain 비권위(self-key collector/adjudication/dispatch fail-closed) 실증
7. HIGH/CRITICAL 0 또는 non-Critical 자동수렴 완료

## 7. 완료 조건 (회장 verbatim)

모든 regression PASS · Codex HIGH/CRITICAL 0 또는 non-critical 자동분류·재lint PASS · 2604/2605/2608/2609 사례 재현 PASS · **callback-gap recovery watcher 시나리오 실증 PASS(§6b)** · 문서-only 아님 · runtime entrypoint 또는 CLI로 실행 가능 · final consolidated result 생성.

## 8. HOLD_FOR_CHAIR (회장 verbatim)

shared invariant 파손 또는 Critical7 = 전체 CHAIR_HOLD. 그 외 non-Critical은 AUTO_REMEDIATION_HOLD 자동 수렴.

## 9. callback (a) — 독립 ANU key 강제 + final consolidated

완료 직후 normal completion callback **ANU key c119085addb0f8b7로만 발사** → 독립 ANU collector 회수·검증·Codex·adjudication. non-Critical HIGH 잔존 시 AUTO_REMEDIATION_HOLD 자동 수렴. HIGH/CRITICAL 0 또는 non-critical 자동분류·재lint PASS 후 +53 write-back → +54·+55 dogfood → {A~F} all-settled 시 last-settle collector final consolidated result(회장 보고 7항목). executor self key 109fa85250c6d46b 절대 금지(+49 정본). ANU fallback=ANU key·안전망 한정·진행 트리거 아님.

## 10. 9-R (확정 — 본 절 본문 우선)

원 spec ANU-Codex lint = GO_READY 였으나 **§6b 회장 야간 지시 필수 보강 증강으로 ANU-Codex re-lint 필수**. 정합성: §6b 는 회장 verbatim mandate(새 범위 아님·BATCH_LEVEL_HOLD 필수 보강) · event-gated({A,B,C,D,E} all-settled·fixed-time 아님) · Track A~E(task-2614 dispatch_callback_contract.py 포함) import/CLI only(산출물 byte-0) · runtime entrypoint/CLI 실행 가능·non-doc · 2604/2605/2608/2609 재현 실증 · callback-gap recovery watcher end-to-end 실증(DISPATCH_CONTRACT_VIOLATION→idempotent 독립 ANU collector spawn·중복 0·무조율 dead-man 아님·self-key fail-closed) · independent ANU authoritative · expected_files DISJOINT · shared invariant 보존 · 문서-only 금지. **ANU-Codex re-lint GO_READY 확정 후 dispatch**. ANU key 로 dev5 마르둑 1회 위임. callback=normal(ANU key)+fallback safety-net(ANU key·cancel-on-success) 둘 다 등록.
