# task-2553+29 — ANU_PARALLEL_BATCH_COORDINATOR_RUNTIME_REGISTRY 구현 (회장 GO, 코드/파일 자동화)

> **Lv**: Lv.4 — anu_v3 core runtime registry (실행코드/schema/fixture/regression/decision·result JSON). **Executor**: dev7-team 이참나 (key a999e2ea4c06d2fb) 1회 한정. **TTL**: 2.5h.
> **상태**: 회장 GO — read-only batch runtime reconciliation 수용(+26 MERGED·+27 PASS·+28 DONE 실질 완료, HOLD0/Critical7 0/contamination 0). **+26/+27 normal collector callback 누락 → ANU 중앙 자동 통합 불가 = 구조적 gap 인정**. 본 task = 그 gap 의 근본 해결 = 병렬 실행 결과를 ANU 중앙이 **자동 인지·통합**하는 runtime registry 를 코드/파일 단으로 구현. **md 문서화 아님 — 실행코드·schema·fixture·regression·decision/result JSON 필수**.
> **선행**: `memory/events/task-2553.parallel-runtime-reconcile.json` + `memory/reports/task-2553.parallel-runtime-reconcile.md`(reconcile 결과, fixture 입력). **병렬**: +26/+27/+28 RESULT_READY_NO_NORMAL_CALLBACK(fallback PENDING 자동수렴 대기) — 본 task 는 그 산출물 read-only fixture화만(수정 0).

---

## 1. 확정 전제 (변경 불가)

reconcile 결과: +26(dev5, PR#129 MERGED commit 4187332c, gate-0 6-check PASS, hold false) / +27(dev6, DONE/PASS, coordinator read-only 무변) / +28(dev1, DONE, fixture-only fallback-only 변형, .done 존재). missing normal-collector cron = +26·+27(자가등록 누락), +28=by-design 부재. fallback 3건(44AE69D5·CC33E68C·17E127B4) PENDING. cross-task contamination 0. 데이터 손실 0(결과 정상 산출).

## 2. 목표 (회장 verbatim)

병렬 실행된 task 들의 dispatch / result / normal callback / fallback / collector / closeout 상태를 **코드/파일 단에서 자동 등록·회수·통합**하는 runtime registry 를 구현한다. md 문서화 아님 — 실행 가능한 코드·schema·fixture·regression·decision/result JSON 포함.

## 3. 구현 목표 (회장 verbatim 1~12)

1. dispatch 시 task runtime registry 에 기록
2. task_id / executor / dispatch_cron_id / expected normal_collector / fallback_callback / expected artifacts 등록
3. result.json 또는 .done 이 먼저 도착했는데 normal callback 이 없으면 RESULT_READY_NO_NORMAL_CALLBACK 으로 자동 분류
4. RESULT_READY_NO_NORMAL_CALLBACK 은 작업 실패가 아니라 collector recovery 대상임을 명시
5. fallback pending 이어도 result 가 완전하면 batch state 에 반영
6. normal collector 누락 시 즉시 collector recovery 가 가능한지 판단
7. fallback 이 발화하면 duplicate / result-ready / missing-result / stale 을 registry 기준으로 분류
8. 4-tuple mismatch 는 TRACK_MISMATCH 로 분류
9. batch_state 를 단일 권위 파일로 유지
10. consolidated summary 를 자동 생성
11. 한 track 의 callback 누락이 독립 track 의 완료를 막지 않도록 join policy 적용
12. closeout 가능 여부는 batch state 에서 자동 산출

## 4. 필수 구현 파일 후보 (회장 verbatim)

- `anu_v3/parallel_runtime_registry.py`
- `anu_v3/batch_runtime_reconciler.py`
- `anu_v3/callback_4tuple_index.py`
- `anu_v3/result_ready_recovery.py`
- `anu_v3/batch_join_policy.py`
- `schemas/parallel_runtime_registry.schema.json`
- `schemas/batch_runtime_reconcile.schema.json`
- `schemas/task_runtime_record.schema.json`
- `tests/regression/test_parallel_runtime_registry_2553.py`
- `memory/fixtures/task-2553.runtime-reconcile.fixture.json`
- `memory/events/task-2553.parallel-runtime-registry.result.json`
- `memory/reports/task-2553.parallel-runtime-registry.md`

**fixture 입력 = 이번 +26/+27/+28 reconciliation 결과**(`memory/events/task-2553.parallel-runtime-reconcile.json` read-only → `memory/fixtures/task-2553.runtime-reconcile.fixture.json` 로 복사·정규화, 원본 수정 0).

**batch_state 단일 권위 파일 = 신규 registry 전용 파일** `memory/events/task-2553.parallel-runtime-registry.batch-state.json`(신규·writable, +29 산출). **frozen `memory/events/task-2553.parallel-batch-state.json`(회장 durable v1)은 read-only 입력일 뿐 본 task 의 권위 파일 아님 — mutation·coupling 0**. 둘은 별개 파일(혼동·덮어쓰기 0).

## 5. 필수 regression (회장 verbatim 1~15)

1. dispatch ok + result exists + normal callback missing → RESULT_READY_NO_NORMAL_CALLBACK
2. result ready + fallback pending → batch final state 를 막지 않음
3. result ready + fallback later fires → DUPLICATE_CALLBACK_IGNORED 또는 RESULT_READY_ALREADY_COLLECTED
4. normal callback completed → NORMAL_COLLECTOR_COMPLETED
5. dispatch ok + no result + fallback pending → WAIT_FOR_FALLBACK
6. fallback fires + no result → RESULT_MISSING/BOT_STALE
7. task_id mismatch → TRACK_MISMATCH
8. dispatch_cron_id mismatch → TRACK_MISMATCH
9. normal collector belongs to different task → TRACK_MISMATCH
10. fallback belongs to different task → TRACK_MISMATCH
11. one track HOLD does not block independent DONE track
12. cross-task artifact contamination → BATCH_HOLD
13. batch_state can represent +26 MERGED, +27 PASS, +28 DONE simultaneously
14. closeout eligibility is derived from batch_state, not chat memory
15. consolidated summary contains only final decision fields

## 6. 허용 (회장 verbatim)

- registry/reconciler 코드 구현
- schema/fixture/regression 작성
- +26/+27/+28 산출물 read-only fixture화
- batch_state JSON 생성
- consolidated summary 생성
- Codex audit + ANU-Codex adjudication

## 7. 금지 (회장 verbatim — D-SPEC-EXACTNESS 원문 박제)

- PR/branch/main write
- merge
- cron 신규 등록
- cron 제거
- dev 재가동
- credential/OWNER PAT 조작
- +26/+27/+28 산출물 수정
- closeout 확정
- task 결과 변조
- pending fallback 강제 삭제

추가 scope: executor 자기작업중 신규 dispatch·delegation·executor handoff 0 / live `/home/jay/workspace`(repo root) git tracked HEAD/branch/ref(`task/task-2553p1-f1-clean-replacement` `20456b5f`) 전후 assertEqual(task-2553+29.* + 신규 anu_v3/schemas/tests 파일 = git-untracked batch-internal, 위반 아님) / `anu_v3/parallel_batch_coordinator.py`·`memory/events/task-2553.parallel-batch-state.json`·`utils/anu_delegation_completion_callback.py`(sha 83b3e307…)·+22/+24/+25/+26/+27/+28 frozen anchor 무변(신규 registry 는 별도 모듈, 기존 coordinator code mutation 0).

## 8. HOLD_FOR_CHAIR (회장 verbatim)

- registry가 +26/+27/+28 상태를 일관되게 표현하지 못함
- callback 4-tuple ambiguity
- cross-task contamination 발견
- Codex HIGH/CRITICAL unresolved
- expected_files/forbidden target 충돌
- registry 구현에 credential/write 권한 필요
- closeout 판단이 evidence 없이 필요함

적중 시: 작업중단 + hold-for-chair packet + §10 보고 통합. cron 제거·pending fallback 강제 삭제·closeout 확정 시도 0.

## 9. 무변경 anchor (byte-0)

`anu_v3/parallel_batch_coordinator.py`·`memory/events/task-2553.parallel-batch-state.json`(회장 durable v1, read-only)·`utils/anu_delegation_completion_callback.py` sha `83b3e307c8207c76a3e311c408aab4951373bd317896e51687d3007907b0c3d4`·anu_v3 frozen·+22 profile·+24 verifier·+25 seam·+26/+27/+28 산출물 무변. 신규 registry = anu_v3 별도 신규 모듈(기존 import 결합·mutation 0).

## 10. 완료 후 보고 (회장 verbatim 1~10 — consolidated 통합, 단독·중간 0)

1. 구현 파일 목록 2. +26/+27/+28 batch_state 재현 결과 3. RESULT_READY_NO_NORMAL_CALLBACK 처리 증거 4. fallback pending 비차단 증거 5. 4-tuple mismatch 방어 증거 6. regression 결과 7. Codex audit 결과 8. ANU-Codex adjudication 결과 9. batch coordinator ACCEPT/HOLD 판정 10. closeout 가능 여부 제안.

## 11. 원칙 (회장 verbatim)

이번 작업은 병렬 실행 자체가 아니라, **병렬 실행 결과를 ANU 중앙이 자동으로 인지·통합하는 runtime registry 구현**이다. 실행은 병렬. 각 track 은 loop. 판단은 batch registry/coordinator. 회장은 최종 decision 만 본다.

## 12. ANU-Codex loop + callback (자동, 중간보고 0)

batch plan(§3§4§5) → Codex lint → ANU refine(9-R) → re-lint → **ANU(orchestrator) 1회 위임**(loop 기계; executor 자기작업중 신규 dispatch·cron·delegation·handoff 0, 필요 시 HOLD_FOR_CHAIR) → registry/reconciler/4tuple-index/recovery/join-policy 코드 + schema + fixture(+26/+27/+28 read-only) + regression 15 → post-result audit → adjudication → result.json + report → consolidated summary. **callback (a) — +29 NO-CRON 변형(회장 §7 "cron 신규 등록"·"cron 제거" 금지 우선)**: 본 task 는 **어떤 cron 도 신규 등록·제거 0** — executor normal-collector cron 0, ANU fallback cron 0. 회수는 executor 정상종료 시 `memory/events/task-2553.parallel-runtime-registry.result.json` + `memory/events/task-2553+29.done` 산출 + **본 task 가 구현하는 runtime registry 자체의 reconcile read**(dogfooding: registry 가 자기 완료를 result/.done 존재로 자동 인지 — cron callback 의존 제거가 본 task 목적과 정합). executor 는 +26/+27/+28/타 track 산출물 read-only(수정·인용·register 0), batch 통합은 ANU 사후. §8 트리거만 회장 보고, 그외 LOW/MED·fixture·regression·false-positive 자동 수렴. 9-R 이 본문에 우선.

## 13. 9-R — Codex lint 반영 (agent ab1da02493f921c1d: C1/H0/M2/L0 → 자동 수렴)

### 9-R.1 (CRITICAL §7↔§12) +29 = NO-CRON 변형
회장 §7 "cron 신규 등록"·"cron 제거" 금지가 callback (a) 표준 normal-collector 자가등록과 모순 → **본 task 는 어떤 cron 도 신규 등록·제거 0**(executor normal-collector cron 0, ANU fallback cron 0). 회수 = result.json + `task-2553+29.done` + 본 task 가 구현하는 runtime registry 의 reconcile read(dogfooding). cron-callback 의존 제거가 본 task 목적과 정합 — §12 확정, §7 verbatim 우선.

### 9-R.2 (MED §3.9/§4/§9) batch_state 권위 파일 = 신규 전용 경로
batch_state 단일 권위 = 신규 writable `memory/events/task-2553.parallel-runtime-registry.batch-state.json`. frozen `memory/events/task-2553.parallel-batch-state.json`(회장 durable v1)은 **read-only 입력**일 뿐 권위 파일 아님 — mutation·coupling·overwrite 0. 별개 파일 명시(§4 보강).

### 9-R.3 (MED §3.9/§9/§11) 신규 registry ↔ 기존 coordinator = 파일 레벨 contract
신규 registry 는 standalone — 기존 `anu_v3/parallel_batch_coordinator.py` 를 import·mutation·edit 0. 통합은 **파일 레벨 contract** 만(registry 가 reconcile fixture·frozen state 를 read-only 소비 → 자기 batch-state JSON emit). 코드 결합 0, handoff 경계 = 파일 산출/소비 명확.

→ 9-R.1~9-R.3 으로 C1+M2 해소. HIGH0/LOW0. 9-R 이 본문에 우선. Codex re-lint GO_READY 시 ANU 1회 위임.

## 14. task-2553 계열

+26=PR#129 merge(MERGED) / +27=coordinator closeout(PASS) / +28=callback observation fixture(DONE) / **+29(본건)=ANU_PARALLEL_BATCH_COORDINATOR_RUNTIME_REGISTRY**(병렬 결과 자동 인지·통합 코드/파일 구현, +26/+27/+28 reconcile=fixture).
