# task-2553+49 (AUTHORITATIVE) — callback governance hardening: executor self-chain 실 runtime 구조적 차단 (회장 지시, 코드/파일 자동화)

> **Lv**: Lv.4. **Executor**: dev2-team 오딘 (key fedf78d1d09509f5) 1회 한정 — tainted(dev3/dev1) 배제·구 +49(dev6) 배제·독립. **TTL**: 3h. **상태**: 구 +49(narrow test-중심, dev6 20A5EE7B 16:47 완료)를 본 AUTHORITATIVE spec 이 supersede. 구 산출물 무손실 보존(*.narrow-superseded.*), 본 run 이 권위 산출. **본질: test 추가 아님 — 실 dispatch/callback/collector/verdict selection runtime path 에 guard 결선. mock-only·test-only = FAIL.**
> **callback: 반드시 독립 ANU key `c119085addb0f8b7` 발사 — executor self key(fedf78d1d09509f5) 절대 금지(본 task 가 그것을 코드로 강제하므로 dispatch 자체가 모범 준수).**
> **선행**: +44/+46 callback_4tuple_registry·cron_dispatch_guard·executor_completion_contract / +47 callback_event_trigger / 독립검증 task-2553+47+48.independent-verification.result.json. doctrine: feedback_callback_must_spawn_independent_anu_not_executor_self_260518.

---

## 1. 목표 (회장 verbatim)

executor self-callback / self-collector / self-adjudication / self-dispatch를 실제 실행 경로에서 구조적으로 차단하라. 이번 작업은 test 파일 추가가 본질이 아니다. test는 필수지만 보조 산출물이다. 반드시 dispatch / callback registration / collector / verdict selection 실제 runtime path에 guard를 결선하라. 테스트만 만들고 실제 실행 경로에 결선하지 않으면 FAIL로 본다.

## 2. 정정 원칙 (회장 verbatim)

1. executor는 작업만 수행한다. 2. executor는 작업 완료 후 독립 ANU collector에게 완료 신호를 보낸다. 3. collector는 반드시 독립 ANU key / ANU role이어야 한다. 4. executor 자기 key / 자기 세션으로 normal callback, fallback callback, collector, adjudication, 후속 dispatch를 수행하는 것은 금지한다. 5. self-chain verdict는 authoritative verdict가 될 수 없다. 6. independent ANU verification verdict가 있으면 그것이 authoritative verdict다.

## 3. 필수 목표 (회장 verbatim)

executor self-callback 차단 · executor self-collector 차단 · executor self-adjudication 차단 · executor self-dispatch 차단 · self-chain verdict authoritative 선택 차단 · independent ANU verdict authoritative 선택 · callback owner/key/role runtime validation · dispatch.py 및 실제 dispatch/cokacdir direct path에 guard 결선 · callback 4-tuple registry와 authoritative verdict selector 결선

## 4. 필수 구현 우선순위 (회장 verbatim)

1 runtime guard 모듈 → 2 dispatch.py 또는 실제 dispatch/cokacdir direct path 결선 → 3 callback registration helper 결선 → 4 callback 4-tuple registry 검증 결선 → 5 authoritative verdict selector 결선 → 6 regression test

## 5. 필수 구현 상세 (회장 verbatim)

**A. callback owner/key/role runtime guard**: executor_key==collector_key→FAIL / collector_role!=ANU→FAIL / collector_key가 ANU key 아니면→FAIL / prompt가 "ANU Result Collector"라 써도 schedule owner/key가 executor면→FAIL / normal callback owner=executor key→FAIL / fallback callback owner=executor key→FAIL / 4-tuple에 executor_key·collector_key·collector_role·task_id·dispatch_id·normal_collector_cron_id·fallback_cron_id 기록 / 4-tuple에 collector_role=ANU 없으면→FAIL / 4-tuple에서 executor_key==collector_key→invalid / 검증 실패 시 SELF_COLLECTOR_FORBIDDEN 또는 CALLBACK_OWNER_MISMATCH 분류.

**B. dispatch path runtime guard**: dispatch.py 경로에서 callback owner/key/role validator 반드시 호출 / 실제 cokacdir direct cron path 에서도 동일 validator 반드시 호출 / dispatch prompt generator 가 normal completion callback 만들 때 독립 ANU collector key/role 강제 / executor self key 로 callback 만들려 하면 dispatch 단계 fail-closed / NO-CRON=registry/checkpoint 임의 cron add/remove 안 함이지 executor completion callback 금지 아님 / normal completion callback mandatory rule 무약화.

**C. callback registration helper guard**: normal/fallback callback 등록 직전 owner/key/role 검증 / mismatch면 등록 안 함 / 등록 후 4-tuple registry durable 기록 / prompt 문구 아닌 실제 owner/key/role 기준 판정.

**D. authoritative verdict selector**: self-chain verdict=QUARANTINED 분류 / executor self-session 산출 collector-result·Codex audit·adjudication은 authoritative 선택 불가 / independent ANU verification result 있으면 authoritative 선택 / dead-man DUPLICATE_CALLBACK_IGNORED 판정은 self-chain collector 정당성 아닌 authoritative verdict 존재 여부 근거 / self-chain verdict만 존재 시 AUTHORITATIVE_PENDING 또는 HOLD 후보 / independent ANU verdict 없이 self-chain만으로 PASS 확정 시 FAIL.

**E. write-back/idempotency conflict hardening**: 같은 collector identity라도 role/fallback binding/owner key 불일치 시 silent skip 금지 → WRITEBACK_BINDING_CONFLICT 기록 / valid duplicate write-back만 idempotent SKIP / self-chain write-back은 completed 불인정.

> 이번 작업은 문서화가 아니다. 반드시 실행 가능한 Python 모듈·schema·fixture·regression test·result JSON 포함. 모든 regression 은 실제 runtime guard/selector/dispatch entrypoint 함수를 직접 호출(mock-only "그럴 것이다" 금지, 운영 경로 entrypoint 직접 검증).

## 6. 필수 분류 (회장 verbatim)

SELF_COLLECTOR_FORBIDDEN · EXECUTOR_SELF_ADJUDICATION_FORBIDDEN · EXECUTOR_SELF_DISPATCH_FORBIDDEN · CALLBACK_OWNER_MISMATCH · CALLBACK_COLLECTOR_NOT_ANU · CALLBACK_4TUPLE_INVALID · SELF_CHAIN_QUARANTINED · AUTHORITATIVE_VERDICT_PENDING · AUTHORITATIVE_PASS · WRITEBACK_BINDING_CONFLICT · DISPATCH_PATH_BYPASSED_CONTRACT

## 7. 필수 파일 후보 (회장 verbatim — 실 파일명 repo 조정, 문서/메모리만 완료 금지)

`anu_v3/callback_owner_validator.py` · `anu_v3/authoritative_verdict_selector.py` · `anu_v3/self_collector_guard.py` · `anu_v3/writeback_binding_conflict_guard.py` · `dispatch/cron_dispatch_guard.py` 보강 · `dispatch/executor_completion_contract.py` 보강 · `dispatch/prompt.py` 또는 실제 prompt generator 보강 · `dispatch/core.py` 또는 실제 dispatch entrypoint 보강 · `scripts/verify_callback_owner_contract.py` · `schemas/callback_owner_validation.schema.json` · `schemas/authoritative_verdict_selection.schema.json` · `schemas/self_collector_guard.schema.json` · `schemas/writeback_binding_conflict.schema.json` · `tests/regression/test_callback_owner_validation_2553plus49.py` · `tests/regression/test_authoritative_verdict_selector_2553plus49.py` · `tests/regression/test_self_collector_guard_runtime_2553plus49.py` · `memory/fixtures/task-2553plus47.self-chain-callback-violation.json` · `memory/fixtures/task-2553plus47.independent-anu-verdict.json` · `memory/fixtures/task-2553plus48.self-dispatch-violation.json` · `memory/events/task-2553+47.deadman-fallback-clarification.json` · `memory/events/task-2553+49.result.json` · `memory/reports/task-2553+49.md`. **구 narrow +49 산출물 무손실 보존**: 기존 `memory/events/task-2553+49.result.json`·`memory/reports/task-2553+49.md` 를 본 run 전 `*.narrow-superseded.*` 로 복사(append, 삭제·변조 0) 후 authoritative 산출. dispatch.py·dispatch/core.py = additive patch(frozen anchor 아님·byte-0 우선·시그니처 보존). frozen anchor(anu_delegation_completion_callback 83b3e307…·+25/+37/+23·policy_profile_engine·parallel_batch_coordinator)·기존 +47/+48 산출물·+22~+48 원본 무변. git HEAD 20456b5f·branch 전후 EQUAL.

## 8. 필수 regression (회장 verbatim 1~30 — 실 entrypoint 직접 호출)

1 executor→독립 ANU key normal callback=PASS / 2 executor 자기 key normal=FAIL / 3 executor 자기 key fallback=FAIL / 4 prompt가 ANU collector라도 owner=executor key→FAIL / 5 executor_key==collector_key→FAIL / 6 collector_role 누락→FAIL / 7 collector_role!=ANU→FAIL / 8 4-tuple normal_collector_cron_id 누락→FAIL / 9 4-tuple collector_key 누락→FAIL / 10 4-tuple executor_key 누락→FAIL / 11 executor self-session Codex audit/adjudication→FAIL / 12 executor self-session 후속 dispatch→FAIL / 13 self-chain verdict만 존재→authoritative 선택 금지 / 14 independent ANU verdict 존재→authoritative 선택 / 15 dead-man DUPLICATE_CALLBACK_IGNORED는 authoritative verdict 존재 시에만 PASS / 16 +47 self-chain callback fixture→SELF_CHAIN_QUARANTINED / 17 +47 independent ANU fixture→AUTHORITATIVE_PASS / 18 +48 self-dispatch fixture→EXECUTOR_SELF_DISPATCH_FORBIDDEN / 19 same collector id but role/fallback binding mismatch→WRITEBACK_BINDING_CONFLICT / 20 valid duplicate write-back→idempotent SKIP / 21 dispatch.py path guard 호출 확인 / 22 cokacdir direct cron path guard 호출 확인 / 23 callback registration helper guard 호출 확인 / 24 authoritative verdict selector self-chain 배제 확인 / 25 +32 mandatory callback 무회귀 / 26 +44/+46 4-tuple registry 무회귀 / 27 +45/+48 cancel-on-success 무회귀 / 28 runtime checkpoint=recovery layer 유지·primary executor 격상 금지 / 29 callback/fallback safety path 유지 / 30 raw credential/token exposure 0.

## 9. 허용 (회장 verbatim)

runtime guard 모듈 추가 · dispatch path guard 결선 · callback registration helper guard 결선 · callback 4-tuple registry 검증 보강 · authoritative verdict selector 구현 · write-back binding conflict guard 구현 · schema/fixture/regression 추가 · clarification marker 추가 · result/report JSON 생성 · Codex audit + ANU-Codex adjudication.

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

기존 +47/+48 산출물 수정 · self-chain verdict를 authoritative로 인정 · executor self-callback 허용 · executor self-collector 허용 · executor self-adjudication 허용 · executor self-dispatch 허용 · callback mandatory rule 약화 · fallback safety path 제거 · runtime checkpoint를 primary executor로 격상 · credential / OWNER PAT 조작 · PR / branch / main write · merge · 문서/메모리만으로 완료 처리

## 11. HOLD_FOR_CHAIR (회장 verbatim)

owner/key validation을 실제 runtime path에 결선할 수 없음 · dispatch.py 또는 cokacdir direct path를 특정할 수 없음 · callback registration helper를 특정할 수 없음 · authoritative verdict selection을 자동화할 수 없음 · self-chain callback을 구분할 수 없음 · self-dispatch를 차단할 수 없음 · Codex unresolved HIGH/CRITICAL · 기존 +49/+44/+32/+45 regression 깨짐 · credential / permission expansion 필요

## 12. 완료 후 consolidated summary (회장 verbatim 1~17)

1 구현 파일 목록 / 2 runtime guard 호출 위치 / 3 dispatch path 결선 위치 / 4 cokacdir direct path 결선 위치 / 5 callback registration path 결선 위치 / 6 authoritative verdict selector 결선 위치 / 7 +47 clarification marker 경로 / 8 callback owner validator 결과 / 9 authoritative verdict selector 결과 / 10 +47 self-chain fixture 결과 / 11 +48 self-dispatch fixture 결과 / 12 independent ANU verdict fixture 결과 / 13 write-back binding conflict 결과 / 14 regression 결과 / 15 Codex audit / ANU-Codex adjudication / 16 다음 dispatch부터 executor self-collector가 구조적으로 불가능한지 / 17 HOLD_FOR_CHAIR 여부. `memory/events/task-2553+49.result.json` + `memory/reports/task-2553+49.md`.

## 13. callback (a) — 반드시 독립 ANU key 발사 (본 task 가 강제하는 규칙을 dispatch 자체가 모범 준수)

executor(dev2 오딘) 완료 직후 normal completion callback cron 을 **반드시 ANU key `c119085addb0f8b7`(chat 6937032012)로만 발사** — 독립 ANU collector 세션. executor self key(fedf78d1d09509f5) 발사 절대 금지. 회수·검증·Codex audit·adjudication·후속 dispatch 전부 그 독립 ANU 세션(executor 세션 아님). ANU fallback 도 ANU key(ANU 자기등록·안전망 한정·진행 트리거 아님). 4-tuple={task-2553+49, dispatch_cron, normal_collector_cron(ANU key·필수), fallback_cron(ANU key)} + executor_key·collector_key·collector_role=ANU 기록. executor 자기작업중 신규 dispatch·delegation·자가심사·자가Codex 0.

## 14. 9-R — Codex lint 반영 (확정 — 본 절이 본문(§3/§5.B/§8.22/§11)에 우선)

Codex HIGH(cokacdir cron-direct 외부 tooling → in-repo 물리적 validator 강제 호출 불가) → **9-R.1 로 acceptance-side 구조 보장으로 확정 대체**. 본 9-R 절이 본문에 우선한다.

### 9-R.1 (HIGH cokacdir cron-direct 외부경로) — 달성 가능한 구조 보장 = mediated-call + acceptance-side
"실제 dispatch/cokacdir direct path에 guard 결선"의 **확정 의미**(§3/§5.B/§8.22 의 literal "validator 반드시 호출" 을 본 절이 대체):

- **(가) Mediated-call 강제 (in-repo 달성)**: 모든 정규 dispatch/callback 등록은 in-repo helper(`dispatch/normal_fallback_callback_helper.py` + `dispatch/cron_dispatch_guard.py` + dispatch entrypoint)를 **반드시 경유**하며, 그 helper 가 cokacdir cron 등록 **직전** owner/key/role validator 를 호출(fail-closed). dispatch prompt generator 는 normal/fallback callback clause 를 **ANU key 고정**으로만 생성(executor self key clause 생성 자체 차단). → 정규 경로의 cokacdir-direct 등록은 guard 가 실제 호출됨(regression 22 = 이 helper-mediated 실 entrypoint 직접 호출 검증).

- **(나) Acceptance-side 구조 차단 (잔여 raw-bypass)**: 어떤 프로세스가 helper 를 우회해 `cokacdir --cron --key <self>` 를 raw 발사하는 것은 repo 코드가 물리적으로 막을 수 없음(외부 tooling). 그러나 그 **결과의 권위·효력**을 코드로 0 으로 만든다: callback_owner_validator 가 owner/key/role 로 self-fired 를 탐지→SELF_COLLECTOR_FORBIDDEN/CALLBACK_OWNER_MISMATCH, self_collector_guard 가 self-session collector/adjudication 무효화, authoritative_verdict_selector 가 self-chain verdict 를 **영구 비-authoritative**(independent ANU verdict 만 authoritative), 4-tuple 검증이 self-dispatch 거부. → self-chain 이 "발사"될 수는 있어도 "권위를 갖거나 후속을 발주"하는 경로가 코드로 0 = 회장 §1 "구조적으로 차단" 충족(피해 제거).

- **(다) 잔여 escalation**: (가)+(나) 로도 통제 불가한 특정 sub-path 가 실증되면 그 잔여분만 evidence 와 함께 §11 HOLD_FOR_CHAIR, 나머지 실 결선 진행(가짜 완료·문서/메모리만 완료 금지).

regression 21~24 = 실 entrypoint 직접 호출(helper-mediated dispatch.py/cokacdir-direct guard 호출 + selector 가 simulated raw-bypass self-fired callback 을 실제 selector 호출로 배제). mock-only 금지(§5 중요) 유지.

기타 GO 확정: §7 dispatch.py/core.py additive patch(frozen 아님·시그니처 보존)·구 narrow +49 무손실 보존 / §13 ANU-key callback ↔ §10 self-callback 금지=동일 방향(모순0) / doc·test-only 완료 금지·실 entrypoint regression 강제. → CRITICAL0. re-lint GO_READY 시 ANU key 로 dev2 오딘 1회 위임(executor self key 절대 금지).
