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

# 체크리스트: task-2693

**task**: task-2693

---

## Phase 0 — 사전 게이트 (오딘)

- [x] A. Preflight 4-step (fetch + ls-remote + rev-parse + gh api) SHA 일치 확인
- [x] B. PR #152 head SHA / branch / unresolved 6 thread 식별
- [x] C. 3문서 작성 (plan/context-notes/checklist)
- [ ] D. Codex 사전 게이트 PASS (codex_gate_check.py)
- [ ] E. 6조건 thread별 평가 작성 (PR #152 expected_files 내 / 위험 0)

## Phase 1 — 코드 수정 (토르 backend)

- [ ] A. Thread 1+3 (HIGH) `dispatch/normal_fallback_callback_helper.py:811` — is_valid_session_id 검사 제거 (mismatch 감지 분기)
- [ ] B. Thread 4 (MED) `dispatch/normal_fallback_callback_helper.py:92` — explicit isinstance 검증
- [ ] C. Thread 5 (MED) `dispatch/normal_fallback_callback_helper.py:753` — chair_sid/collector_sid/delivery_sid isinstance 방어
- [ ] D. Thread 2 (MED) `dispatch/prompt.py:48` — _inline_chair_facing_sid sid 검증
- [ ] E. Thread 6 (MED) `schemas/anu_normal_callback_envelope_v1.json:60` — canonical_root const→pattern
- [ ] F. `utils/callback_authority_4source_validator.py` 신규 (4-source 검증기)
- [ ] G. `utils/anu_callback_registrar.py` ANU key fail-closed 강화 (이미 존재하면 신규 함수 추가)
- [ ] H. `utils/pr_watcher_terminal_state_classifier.py` AUTHORITATIVE_BUT_SESSION_DISCONTINUITY enum 보강 (이미 존재하면 검증만)

## Phase 2 — Regression (헤임달 tester)

- [ ] A. `tests/regression/callback_owner_enforcement/` 작성 (ANU key fail-closed / self-key 등록 거부)
- [ ] B. `tests/regression/callback_envelope_actual_cron_crosscheck/` 작성 (envelope vs actual cron owner 양방향)
- [ ] C. `tests/regression/callback_4source_validator/` 작성 (4-source 일치 / 불일치 분류)
- [ ] D. pytest 통과 확인

## Phase 3 — 통합/검증 (오딘)

- [ ] A. 전체 regression pytest 통과 (4 디렉토리)
- [ ] B. L1 스모크: `python3 -c "from utils.callback_authority_4source_validator import ...; ..."` 실 호출 1건
- [ ] C. ANU envelope 박제 (`memory/events/anu_callback/task-2693-normal-completion.json`)
- [ ] D. PR #152 thread 6건 resolve + fresh Gemini nudge 1회
- [ ] E. watcher 재부착 (필요 시)
- [ ] F. 보고서 작성 (필수 9 필드 모두)
- [ ] G. G3 독립 검증 PASS
- [ ] H. 3문서 status → completed

## 검증

- [ ] 테스트 통과 확인 (pytest 0 fail)
- [ ] QC 검증 완료 (qc_verify.py PASS)
- [ ] forbidden_action_count = 0
- [ ] PR #154/151/task-2691+b 혼합 evidence = 0
- [ ] 최종 보고
