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

> **Lv**: Lv.4. **Executor**: dev3-team 다그다 (key 0b94683120a691cf) 1회 한정. **TTL**: 3h. **상태**: 회장 +44/+46·+45 ACCEPT 후 우선 진행. 문서화 아님 — 실행코드·schema·fixture·regression·decision/result JSON 필수. **callback: 정정 표준 (a) MANDATORY.**
> **선행**: +44/+46 `anu_v3/callback_4tuple_registry.py`·`anu_v3/artifact_root_resolver.py`·`dispatch/cron_dispatch_guard.py`(byte-0 read-only/additive 재사용). **후속**: +47 완료 후 +48(properly-bound 4-tuple cancel-on-success live remove end-to-end 실증) — +47 의 event-trigger 로 진입(고정시각/dead-man 금지).

---

## 1. 목표 (회장 verbatim)

NORMAL_CALLBACK_REGISTRY_WRITEBACK_AND_EVENT_TRIGGER

## 2. 배경 (회장 verbatim 분리 사유)

event-trigger 미완: normal callback collector durable-success가 callback_4tuple_index에 자동 write-back되지 않아, ANU가 normal callback 완료 시점에 다음 단계/summary를 즉시 진행하지 못했다. (실증: +45 봇 14:24 normal-callback collector 완료했으나 registry 가 role=dispatch/REGISTERED 정지 → 14:44 수동 회수.)

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

- normal collector durable-success 시 callback_4tuple_index에 completed 상태 자동 기록
- normal_collector_cron_id / fallback_cron_id / task_id / dispatch_id / chat_id / role binding 갱신
- dependency / next_action resolver가 completed 이벤트를 즉시 감지
- fixed-time gate나 dead-man fallback을 진행 트리거로 사용하지 않음
- fallback pending은 completed task 진행을 막지 않음
- consolidated summary 조건 충족 시 즉시 summary candidate 생성
- repeated scan은 idempotent
- write 권한 없는 next action은 proposal로만 산출

> 이번 작업은 문서화가 아니다. 반드시 실행 가능한 코드, schema, fixture, regression, decision/result JSON을 포함하라.

## 4. 구현 방향 (코드/파일 자동화 — 문서-only 아님)

1. registry write-back: +44 `Callback4TupleRegistry` 에 normal-callback durable-success 시 `state=COMPLETED` + normal_collector_cron_id/fallback_cron_id/task_id/dispatch_id/chat_id/role binding append (append-only, +44 모듈 byte-0 우선·불가피 시 additive). collector(정정 표준 (a) normal-callback 세션)가 검증 후 1회 write-back.
2. event-trigger next_action resolver(신규 `anu_v3/callback_event_trigger.py`): registry COMPLETED 이벤트를 read-only 감지 → dependency 충족 시 next_action 산출. **fixed-time/dead-man 진행 트리거 미사용**(dead-man=미수신 안전망 한정). fallback pending 이어도 completed task 진행 비차단. consolidated 조건 충족 시 summary candidate 즉시 생성.
3. write 권한 없는 next_action = **proposal JSON 만**(자동 dispatch/merge/closeout 0).
4. idempotent: repeated scan 동일 결과·중복기록 0.
5. schema/fixture/regression/decision/result JSON.

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

`anu_v3/callback_event_trigger.py` · `anu_v3/callback_4tuple_registry.py`(additive patch 한정, byte-0 우선) · `schemas/callback_event_trigger.schema.json` · `schemas/callback_4tuple_writeback.schema.json` · `tests/regression/test_callback_event_trigger_2553plus47.py` · `memory/fixtures/task-2553plus47.*` · `memory/events/task-2553+47.{decision,result}.json` · `memory/events/task-2553+47.next-action-proposal.json` · `memory/reports/task-2553+47.md`. callback_4tuple_index.jsonl=런타임 append(allowlist). artifact_root_resolver.py·cron_dispatch_guard.py·+22~+46 원본·기존 +39/+41/+42/+43/+45 산출물·frozen anchor 무변.

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

dead-man을 진행 트리거로 사용 · 고정시각 cron을 의존 단계 트리거로 사용 · callback/fallback 구조 폐기 · registry를 merge/write executor로 격상 · 권한 없는 dispatch/merge/closeout 실행 · credential/OWNER PAT 조작 · 기존 산출물 변조.

## 7. HOLD_FOR_CHAIR

Critical7 / 권한확대 / forbidden target / Codex unresolved HIGH·CRITICAL / cross-track contamination. + +44 registry byte-0 깨짐 / write-back 이 append-only 위반 / next_action resolver 가 무권한 dispatch 유발 위험.

## 8. 필수 regression (회장 verbatim 1~10)

1 normal collector success→registry completed write-back / 2 completed write-back→next_action READY / 3 fallback pending+normal completed→non-blocking / 4 dead-man only→primary trigger 아님 / 5 fixed-time gate dependency trigger 사용 시 FAIL / 6 repeated scan idempotent / 7 missing fallback binding은 cancel 대상 아님 / 8 +45 사례에서 14:24 normal callback 완료 후 자동 next-action 감지 재현 / 9 registry mismatch→TRACK_MISMATCH / 10 callback mandatory rule 무회귀.

## 9. 완료 후 보고 (회장 verbatim — consolidated 입력, 단독·중간 0)

1 +47 PASS/HOLD / 2 registry write-back 위치 / 3 event-trigger next_action 산출 결과 / 4 fixed-time/dead-man trigger 미사용 증거 / 5 regression 결과 / 6 Codex audit / ANU-Codex adjudication / 7 +48 진입 가능 여부. `memory/events/task-2553+47.result.json` + `memory/reports/task-2553+47.md`.

## 10. callback (a) — 정정 표준 MANDATORY + event-trigger 시연

executor 완료 직후 normal completion callback cron 발사(MANDATORY, 외부 cron tooling). **이 normal-callback collector 세션이 본 task §3 deliverable 을 dogfood**: 회수·검증·adjudication 후 (i) registry COMPLETED write-back, (ii) +47 PASS·+48 진입조건(§9-7) 충족 시 **+48 을 event-driven 즉시 dispatch**(고정시각/dead-man 미사용 — 회장 doctrine 시연). ANU fallback cron 은 normal callback 미수신 안전망 한정(진행 트리거 아님). 4-tuple={task-2553+47, dispatch_cron, normal_collector_cron(필수), fallback_cron}.

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

### 9-R.1 (§10 ↔ §6 2-layer, 확정)
Codex lint 결과 GO_READY(HIGH/CRITICAL 0). 본 9-R 절이 본문(§6/§10)에 우선한다.
- **Layer A — deliverable resolver 경계 (§6 구속)**: `callback_event_trigger.py` 등 산출 모듈은 진행/next_action 트리거로 **고정시각·dead-man 을 사용하지 않는다**(registry COMPLETED 이벤트 read-only 감지만). §6 금지는 이 산출 로직을 구속.
- **Layer B — 정정 표준 (a) callback lifecycle (§10)**: executor normal completion callback cron + 그 normal-callback collector 세션이 §3 deliverable 을 dogfood 하여 registry write-back + (조건 충족 시)+48 event-driven dispatch. 외부 cokacdir tooling, 회장 ★★★ + (a) STANDARDIZED carve-out. ANU fallback = 미수신 안전망 한정(진행 트리거 아님).
→ 두 layer 직교. +48 진입 = +47 event-trigger(고정시각/dead-man 미사용) 명문. CRITICAL0. re-lint 불요(GO_READY). ANU 1회 위임.
