---
task_id: task-2693
type: plan
scope: task
created: 2026-05-26
updated: 2026-05-26
status: completed
---

# 계획서: task-2693 — PR #152 callback owner enforcement + unresolved 6 remediation

**task**: task-2693
**목표**: PR #152(`task/task-2686-dev8`, head `e2570b7f`)의 unresolved 6 review thread 해소 + callback owner enforcement 코드 보강 + regression 추가. 머지/auto-merge/live infra 변경 0.
**승인**: 회장 verbatim 2026-05-26 결정 1+2 — `CHAIR-AUTH-PR152-CALLBACK-OWNER-ENFORCEMENT-UNRESOLVED6-20260526-JJONGS-IMPLEMENT-001`
**근거**: `memory/events/chair-verbatim-pr-152-unresolved-6-remediation-approved-260526.json`, `memory/tasks/task-2693.md`

---

## 목표

1. PR #152 unresolved 6 review thread 모두 해소 (high 2 + medium 4)
2. PR #152 expected_files 내부 hardening 6항목 적용 (회장 결정 2 scope)
3. regression 3 디렉토리 추가 (callback_owner_enforcement / callback_envelope_actual_cron_crosscheck / callback_4source_validator)
4. ANU normal callback 4-source 검증 envelope 박제 (`memory/events/anu_callback/task-2693-normal-completion.json`)

## 범위

### 포함 (PR #152 내부 한정)
- `dispatch/normal_fallback_callback_helper.py` — line 92, 753, 811 isinstance/mismatch 수정
- `dispatch/prompt.py` — line 48 sid validation
- `schemas/anu_normal_callback_envelope_v1.json` — canonical_root const→pattern
- `utils/callback_authority_4source_validator.py` (신규) — 4-source 검증기
- `utils/anu_callback_registrar.py` — ANU key 강제 (self-key fail-closed) 강화
- `utils/pr_watcher_terminal_state_classifier.py` — AUTHORITATIVE_BUT_SESSION_DISCONTINUITY enum 보강
- `tests/regression/callback_owner_enforcement/**`
- `tests/regression/callback_envelope_actual_cron_crosscheck/**`
- `tests/regression/callback_4source_validator/**`

### 제외 (★ 회장 verbatim 금지 11 + 외부 분리 4)
- PR #152 merge / auto-merge 금지
- durable_registry / dispatch.py 전역 / settings.json / hooks live / Axis runtime 변경 금지
- PR #154 / PR #151 / task-2691+b 와 혼합 금지
- dev6 quarantine 해제 금지

## 위임 계획

- **Phase 1 (구현)**: **토르(backend)** — Thread 1+3 (HIGH mismatch fix), Thread 4 (explicit isinstance), Thread 5 (isinstance defense), Thread 2 (prompt sid validation), Thread 6 (schema const→pattern), callback_authority_4source_validator.py 신규
- **Phase 2 (Regression)**: **헤임달(tester)** — 3 regression 디렉토리 작성 + pytest 통과
- **Phase 3 (통합/검증)**: **오딘** — pytest 회귀 + 6조건 평가 작성 + envelope 박제 + thread resolve

## 검증 기준

- pytest: `python3 -m pytest tests/regression/callback_session_propagation tests/regression/callback_owner_enforcement tests/regression/callback_envelope_actual_cron_crosscheck tests/regression/callback_4source_validator -q` → 0 fail
- 6조건 평가 thread별: 모두 PASS → X1 자동수렴 허용
- envelope 3 SID = `53e89540-5bed-4692-a726-ed857820758a` 일치 + ANU key `c119085addb0f8b7`
- forbidden_action_count = 0
- PR #154/PR #151/task-2691+b 혼합 = 0 evidence
