# task-2553+54 — ANU_RUNTIME_EVENT_LOOP_FROM_DURABLE_REGISTRY (회장 정정·결정, 코드/파일 자동화)

> **Lv**: Lv.4. **Executor**: dev5-team 마르둑 (key 109fa85250c6d46b) 1회 한정 — +47/+53 registry/event 모듈 미저작·self-collector tainted chain 비관여(독립). **TTL**: 3h. **상태**: 회장 정정 — +53 durable write-back 수용하나 "사후 복원" 불충분, **즉시 진행** 요구. 문서-only 금지 — 실행 모듈·schema·fixture·regression·decision/result JSON 필수. **callback: 반드시 독립 ANU key c119085addb0f8b7 발사(executor self key 109fa85250c6d46b 절대 금지·+49 코드 강제 정본).**
> **선행**: +44 callback_4tuple_registry(callback_4tuple_index.jsonl)·+47 callback_event_trigger·+49 self_collector_guard/authoritative_verdict_selector·+53 batch_settle_writeband/consolidated_summary_candidate(read-only/additive consume).

## 1. 목표 (회장 verbatim)

ANU_RUNTIME_EVENT_LOOP_FROM_DURABLE_REGISTRY. 우리가 원하는 것은 사후 복원이 아니라 즉시 진행이다. normal callback durable-success → registry write-back → ANU runtime event loop가 즉시 감지 → batch coordinator 취합 → 다음 작업 dispatch 또는 consolidated summary 생성까지 자동 진행.

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

1. durable registry append/update를 progress event로 해석하는 runtime event loop 구현. 2. normal callback collector가 COMPLETED write-back하면 event loop가 즉시 next_action 평가. 3. 단독 task면 next_action resolver 실행. 4. 병렬 batch면 batch_id 기준 all-settled 평가. 5. all-settled이면 consolidated summary candidate 생성. 6. next phase 있으면 ANU-key dispatch candidate 생성. 7. fallback/dead-man pending은 normal completed task 진행을 막지 않음. 8. dead-man/fixed-time cron을 progress trigger로 미사용. 9. event loop idempotent. 10. 같은 registry event 다회 read해도 중복 dispatch/중복 summary 0. 11. event loop 결과를 decision/result JSON 기록. 12. 권한 있는 dispatch 아니면 proposal로만 남기고 권한 경계 준수.

> 문서화 아님 — 실행 가능 Python 모듈·schema·fixture·regression·decision/result JSON 필수. regression 실 entrypoint 직접 호출(mock-only 금지).

## 3. 핵심 원칙 (회장 verbatim)

- schedule_history는 audit log다. - durable registry는 state source다. - event loop는 progress trigger다. - cron-list는 현재 예약 상태일 뿐 권위 상태가 아니다. - fallback/dead-man은 미수신 안전망이지 진행 트리거가 아니다.

## 4. 필수 regression (회장 verbatim 1~16, 실 entrypoint 직접 호출)

1 single task COMPLETED write-back→next_action READY / 2 batch 1/3 completed→WAIT / 3 batch 3/3 completed→ALL_SETTLED / 4 all-settled→consolidated summary candidate / 5 fallback pending+normal completed→non-blocking / 6 dead-man fired duplicate→no duplicate next_action / 7 same event scanned twice→idempotent / 8 self-chain completed record→ignored/quarantined / 9 non-ANU collector record→ignored/HOLD / 10 fixed-time/dead-man progress trigger 사용 시 FAIL / 11 missing registry→no action·recovery state / 12 registry mismatch→TRACK_MISMATCH/HOLD / 13 unauthorized dispatch→proposal only / 14 authorized ANU-key dispatch candidate 생성 / 15 +50/+51/+52 fixture로 all-settled 재현 / 16 +53 result를 event loop input으로 사용해 next summary READY 재현.

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

cron-list만 보고 완료/미완료 단정 · schedule_history만으로 progress trigger · dead-man/fixed-time을 진행 트리거로 사용 · executor self-dispatch · executor self-collector · registry를 primary executor로 격상 · 권한 없는 실제 dispatch/merge/write · 기존 산출물 수정 · 문서-only 완료

## 6. HOLD_FOR_CHAIR

Critical7 · Codex unresolved HIGH/CRITICAL · credential/permission expansion · expected_files overlap/충돌 · forbidden target · executor self-callback/collector/adjudication/dispatch · callback owner≠ANU key · authoritative selector 우회 · fallback/dead-man 또는 fixed-time 진행트리거 · registry/checkpoint primary executor 격상 · 기존 +44/+47/+49/+53 regression 깨짐 · registry mismatch silent skip 강요 · 목표 달성 불가.

## 7. expected_files allowlist (이 외 write 0)

`anu_v3/runtime_event_loop.py`(신규: durable registry append/update→progress event→next_action/all-settled/consolidated/dispatch-candidate) · `schemas/runtime_event_loop_result.schema.json` · `tests/regression/test_runtime_event_loop_2553plus54.py` · `memory/fixtures/task-2553plus54.*` · `memory/events/task-2553+54.{decision,result}.json` · `memory/events/task-2553.runtime-event-loop-result_260518.json` · `memory/reports/task-2553+54.md`. **기존 +44/+47/+49/+53/+50/+51/+52 산출물·policy_profile_engine·frozen anchor byte-0(read-only consume)**. callback_4tuple_index.jsonl=read(+append-only state source, 신규 write-back 로직 추가 금지 — +53 소관, 본 task=read/event 해석). git HEAD 20456b5f·branch 전후 EQUAL.

## 8. 권한 경계 (회장 §2.12)

event loop 는 **감지·평가·proposal** 까지 자동. 실제 dispatch 는 권한 있는 ANU-key dispatch candidate proposal 로만 산출(자동 실 dispatch/merge/write 0 — 권한 경계 준수). self-chain/non-ANU collector record = +49 selector/guard 경유 ignored/quarantined/HOLD.

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

executor(dev5 마르둑) 완료 직후 normal completion callback cron **ANU key c119085addb0f8b7(chat 6937032012)로만 발사** → 독립 ANU collector 세션. executor self key(109fa85250c6d46b) 절대 금지(+49 코드 정본·위반 시 CallbackRegistrationBlocked/SELF_COLLECTOR_FORBIDDEN). 회수·검증·Codex audit·adjudication 은 그 독립 ANU 세션. ANU fallback=ANU key·안전망 한정·진행 트리거 아님. next_action=normal-callback durable-success event 기준(고정시각/dead-man 금지). 4-tuple+collector_role=ANU 기록.

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

Codex HIGH(§7 callback_4tuple_registry.py carve-out 모호) → **9-R.1 확정**: `anu_v3/callback_4tuple_registry.py` 는 **+44 소관·완전 byte-0·수정 절대 0** — expected_files write allowlist 에서 **제거**(상기 §7 반영). 본 task event loop 는 `callback_4tuple_index.jsonl` 의 **read-only consumer** (state source 해석만). durable-success write-back 로직은 +53 소관·신설 0. 만약 registry 구조상 불가피한 read helper 가 필요하다 판단되면 silent edit 0 — §6 HOLD_FOR_CHAIR escalation(가짜 완료 금지). 잔여 GO 확정: §2.6 "ANU-key dispatch candidate"=proposal(자동 실 dispatch 0, §2.12/§8 권한경계) / self-chain·non-ANU = +49 selector/guard 경유 ignored/quarantined / schedule_history=audit only·cron-list≠권위·fallback≠진행트리거 일관 / idempotent(§2.9/2.10·reg6/7) / regression 실 entrypoint 직접 호출(mock-only FAIL) / 기존 +44/+47/+49/+53/+50~52·engine·frozen byte-0. → CRITICAL0. re-lint GO_READY 시 ANU key 로 dev5 마르둑 1회 위임.
