# task-2553+19 — task-2553+17 BATCH_COORDINATOR Codex HIGH 4 FIX → ANU-Codex CONVERGED (Track B, 회장 병행 GO, 코드/파일 자동화)

> **Lv**: Lv.4 — coordinator 통합결함 4 HIGH in-place 수정 + 수렴까지 loop. **Executor**: dev4-team 비슈누 (key 7943afbe12c12f7d) 1회 한정 (resolver-reinjection: +17 원작자 dev1 회피). **TTL**: 2h.
> **상태**: 회장 병행 결정 Track B. task-2553+17 = ANU 자체 PASS ↔ 독립 Codex audit **FAIL unresolved_high=4** → **NOT CONVERGED**. 본 task = HIGH 4 수정 → ANU-Codex **CONVERGED 까지 loop**. md 박제만 금지.
> **병행**: Track A(task-2553+18, PR#129 2 thread) SAFE_PARALLEL — expected_files ∅, A 비대기·독립.

---

## 1. 확정 전제 (task-2553+17 collector 독립 Codex audit — 변경 불가 입력)

+17 coordinator: regression **23 passed** 독립 재현 ✓, frozen anchor 10/10 byte-0 ✓, contamination 0 ✓. 단 독립 Codex audit(codex-cli 0.106.0) **FAIL — unresolved_high=4 / critical=0**, ANU PASS ↔ Codex FAIL = **NOT CONVERGED**. 기구현 파일(in-place 수정 대상, rebuild 아님): `anu_v3/{parallel_batch_coordinator,batch_dependency_matrix,callback_track_registry,batch_join_policy,track_loop_state,goal_loop_planner}.py` + `schemas/{parallel_batch_plan,parallel_batch_state,track_result,goal_request}.schema.json` + `tests/regression/test_parallel_batch_coordinator_2553.py` + fixture/durable-state/summary.

## 2. 수정 대상 — Codex HIGH 4 (verbatim, 정밀)

1. **HIGH-1** `classify_callbacks()` 가 관측 callback 4-tuple 을 실검증 안 함 — `CallbackEvent` 에 cron ID 부재, 관측 identity 를 registry 자체에서 재구성 → 실제 cron-ID 불일치(TRACK_MISMATCH) 탐지 불가. (`parallel_batch_coordinator.py:149`, `callback_track_registry.py:95`)
2. **HIGH-2** `classify_callbacks()` 출력 키(`track_id:kind`) ↔ `batch_next_action()` 조회 키(bare `track_id`) **불일치** → callback 분류가 batch 결정에 미반영. (`parallel_batch_coordinator.py:176/201`)
3. **HIGH-3** `batch_next_action()` 이 모든 `CALLBACK_PENDING` 을 chair-blocking 처리, `pending_blocks_chair_decision()` 비사용 → non-blocking 규칙(9-R.6) 미적용. (`parallel_batch_coordinator.py:208`, `batch_join_policy.py:94`)
4. **HIGH-4** `write_state()`/`write_summary()` 무조건 `write_text()` → "신규 deliverable 만 기록·기존 tracked 파일 불변(9-R.1)" 미강제(기존 경로 덮어쓰기 가능). (`parallel_batch_coordinator.py:274`)

부수(자동 수렴, 회장 보고 0): MED — final-authority selector schema/packet 선호 미구현(source→ts만) / TrackLoopState callback-precedence `NORMAL_COLLECTOR_COMPLETED` 외 초기화 미보존. Track3 MED — fold-in 이 `track_id.endswith(goal_id)`/`task_id==goal_id` 네이밍 휴리스틱 의존(식별자 불일치 시 goal silent skip). Codex LOW — regression 이 classify_callbacks→batch_next_action **end-to-end 콜백 경로 미검증**(PASS 커버리지 한계).

## 3. 목표 (회장 verbatim)

task-2553+17 batch coordinator Codex HIGH 4건 수정 → ANU-Codex **CONVERGED 까지 loop**.

## 4. 처리 (ANU-Codex loop, in-place 수정)

1. HIGH-1: `CallbackEvent` 에 observed cron ID 필드 추가, `classify_callbacks()` 가 registry 4-tuple ↔ 관측 cron-ID 실대조 → 불일치 시 `TRACK_MISMATCH`(registry 재구성 self-fulfilling 제거).
2. HIGH-2: classify 출력 키 ↔ batch_next_action 조회 키 **단일 정규화**(동일 키 스킴, 9-R.2 callback identity 정합) → 분류가 batch 결정 반영.
3. HIGH-3: `batch_next_action()` 이 `pending_blocks_chair_decision()`(batch_join_policy) 호출 → CALLBACK_PENDING 중 non-blocking(normal authority 확정/그 track 비의존)은 chair-blocking 아님(9-R.6 규칙 적용).
4. HIGH-4: `write_state()`/`write_summary()` 가 기존 tracked 파일 경로 덮어쓰기 금지 강제(신규 deliverable만 write, 기존 git-tracked 경로 감지 시 거부/별경로) — 9-R.1 invariant 코드 강제.
5. **regression 보강**: `test_parallel_batch_coordinator_2553.py` 에 classify_callbacks→batch_next_action **end-to-end 콜백 경로** 검증 케이스 + HIGH-1~4 회귀 가드 추가(기존 23 무회귀). MED/Track3-MED 도 같은 loop 내 자동 보강(회장 보고 0).
6. **독립 Codex 재audit** → unresolved HIGH/CRITICAL 0 + ANU 분류 ↔ Codex **CONVERGED** 될 때까지 loop(자동 micro-fix·재audit). 반복충돌(동일 HIGH 미수렴 반복)·HIGH 잔존 불가피 → HOLD_FOR_CHAIR.

## 5. 허용

기구현 anu_v3 coordinator 6모듈+4 schema+regression+fixture **in-place 수정** / 신규 regression case / 독립 Codex 재audit 반복 / ANU-Codex adjudication / result·report·evidence marker / durable parallel-batch-state 갱신(coordinator 자체 산출, 9-R.1 신규/갱신 규칙 준수) / normal+fallback callback.

## 6. 금지 (회장 verbatim + scope)

merge / production code 변경(anu_v2/owner_trigger_pat.py 등 운영코드) / PR #128·#129·#102 변경·GitHub write 일체 / **Track A closeout artifact**(task-2553+13.*·task-2553+1.*) 변경 / F2·phase3·mqe 변경 / **기존 anu_v3 frozen anchor 10개 byte-0**(pre_authorized_*·isolated_worktree_evidence·goal_activation_controller·pre_authorized_activation_runner·branch_ref_allocator·utils/anu_delegation_completion_callback·completion_callback_fallback_cancel — 본 task 무수정, sha 전후 동일 증거) / credential·OWNER PAT / unrelated callback·cron 조작 / **Track A expected_files(PR#129·test_load_otp_sysmodules_2553plus14.py·task-2553+18.*) 접촉**. live `/home/jay/workspace` invariant = git tracked HEAD/branch/ref + frozen anchor sha 전후 동일(coordinator 신규/갱신 파일은 deliverable, 9-R.1).

## 7. HOLD_FOR_CHAIR

기존 frozen anchor 변경 필요 / production·PR·GitHub write 필요 / Track A 도메인 touch 필요 / Codex unresolved HIGH·CRITICAL 잔존 불가피 / ANU-Codex 반복충돌(동일 HIGH 미수렴 N회) / goal(CONVERGED) 달성불가 / Critical7 / credential·permission expansion. 적중 시 `task-2553+19.hold-for-chair.json` + (consolidated summary 경유) 회장 보고.

## 8. 완료 (consolidated summary 통합 — 단독 보고 0)

batch consolidated summary 항목2(coordinator: ACCEPT/HOLD_FOR_CHAIR) + 항목3(goal-loop generalization) + 항목4. final packet(result.json): HIGH 4 각 수정 내용·전후 / 보강 regression 결과(end-to-end 포함, 무회귀) / 독립 Codex 재audit verdict(unresolved HIGH/CRITICAL=0) / ANU-Codex CONVERGED 판정 / frozen anchor 10/10 byte-0 sha 증거 / Track A artifact untouched / HOLD 여부.

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

batch plan → Codex lint(본 spec) → ANU refine(9-R) → re-lint → dispatch(dev4 1회 TTL2h, callback (a) normal+fallback, 4-tuple task_id=task-2553+19 분리·Track A artifact 인용 0) → HIGH 4 in-place 수정 → regression 보강 → 독립 Codex 재audit loop until CONVERGED → adjudication → result.json → batch 통합. 회장 보고 트리거만.

## 11. 9-R — Codex lint 반영 (NEEDS_REFINEMENT → 자동 수렴, agent ad1e26aed139d3991: CRITICAL0/HIGH2/MED1)

### 9-R.1 (HIGH) CONVERGED loop 하드 ceiling
re-audit/micro-fix cycle **최대 3회**. 3회 후에도 unresolved HIGH/CRITICAL 잔존 또는 ANU↔Codex 미수렴(동일 HIGH 반복) → **HOLD_FOR_CHAIR**(무한 retry 금지). 각 cycle = HIGH 수정 → regression 재실행 → 독립 Codex 재audit → 수렴 판정. cycle count·각 verdict result.json 기록.

### 9-R.2 (HIGH) self-reference state-writer paradox 해소 — tracked/untracked 명시
HIGH-4 write-guard 동작 정밀: write 대상 경로가 **git-tracked**(`git ls-files --error-unmatch <path>` 성공)면 → **거부/HOLD**(기존 tracked 파일 불변 강제). **git-untracked**(신규 deliverable)면 → write 허용. coordinator 자기 산출 `memory/events/task-2553.parallel-batch-state.json`·`memory/reports/task-2553.parallel-batch-summary.md` 는 **git-untracked 신규 deliverable**(9-R.1 invariant 비대상) → 자기 갱신 허용(paradox 없음, idempotent overwrite-by-design 명시). tracked 경로면 별경로/거부. 본 규칙 자체를 regression 으로 검증(tracked→reject / untracked→allow).

### 9-R.3 (MED) scope 최소화 — HIGH 4 + Codex LOW(regression gap) 만 mandatory
CONVERGED 판정 필수 = **HIGH 4 수정 + Codex LOW(classify→batch_next_action end-to-end 콜백 경로 regression 미검증) 해소**(end-to-end 커버리지가 HIGH-1/2/3 회귀가드의 전제). MED 2(final-authority selector schema/packet 선호·TrackLoopState callback-precedence init)·Track3 MED 1(naming-heuristic fold-in)은 **동일 edit 로 trivial 하면 포함, 아니면 follow-up 후보 분리(비차단)** — CONVERGED 판정 차단요소 아님. scope creep 0(unrelated refactor 금지).

→ 9-R.1~9-R.3 로 HIGH2+MED1 해소. CRITICAL0. Codex re-lint GO_READY 시 dispatch.

## 10. task-2553 계열

+17=coordinator+goal-loop(ANU PASS↔Codex FAIL 4 HIGH, NOT CONVERGED) / **+19(Track B 본건)=+17 Codex HIGH 4 fix→CONVERGED** / +18=Track A(PR#129 2 thread, 병행) / +16=PR#129 merge lifecycle HOLD.
