---
name: callback-session-continuity-doctrine-260526
description: callback에는 collector_key 외에 chair_facing_session_id 도 별도 routing field로 취급. key authority ≠ session continuity. ANU key 정상이라도 chair-facing 단절 시 SESSION_DISCONTINUITY 분리 기록. self-key 사고와 혼합 금지
metadata:
  type: feedback
---

# Callback Session Continuity Doctrine (회장 verbatim 2026-05-26 ACCEPTED)

**Rule (4 anchor · 회장 verbatim)**:

1. callback 에는 `collector_key` 뿐 아니라 `chair_facing_session_id` 도 **별도 routing field** 로 취급.
2. **key authority 와 session continuity 는 별개**.
3. ANU key 정상이어도 chair-facing 세션과 단절되면 `SESSION_DISCONTINUITY` 로 기록.
4. **self-key 와 session discontinuity 를 혼합하지 않는다**.

## Why

8 일간 8 incidents 누적 추적 (2026-05-18 ~ 2026-05-26) 결과:
- AUTHORITATIVE (ANU key 정상 발사) 케이스 3건 (0B466540 / E2EC61F2 / EBEF96C8 / 803000CA) 모두 본 chair-facing 세션 inbound 0
- 이 경우 self-key fraud 와 외관 비슷 (★ 회장 매번 "self-key?" 의심 트리거) → 거버넌스 시그널 오염

`cokacdir --session <SID>` 인프라는 존재하나, dispatch → bot prompt → normal callback helper → cron registration 경로에 `chair_facing_session_id` propagation 결선 0. ANU key fail-closed (`task-2553+49`) 는 완성되었으나 session resume 강제 미적용.

## How to apply

### 분류 enum 분리 (★ 절대 혼합 금지)

- `AUTHORITATIVE_CALLBACK_COLLECTOR_PROCESSED` — actual owner = ANU key + 본 세션 inbound 도착 ✅
- `AUTHORITATIVE_CALLBACK_COLLECTOR_PROCESSED_WITH_SESSION_DISCONTINUITY` — actual owner = ANU key + 본 세션 inbound 0 + fresh ANU 세션 spawn (★ governance OK · continuity break)
- `NON_AUTHORITATIVE_SELF_COLLECTOR` — actual owner = executor self-key (★ 별개 사고 · 혼합 금지)
- `CALLBACK_MISSING` — 4 source 모두 부재 확정
- `CALLBACK_PROMPT_TOO_LARGE` — registration 시도 단계 fail (>3900 bytes)

### Reporting 강제 (3 field 분리)

callback envelope / RCA marker / 회장 보고에 다음 3 field 분리 명시:
- `collector_key` (★ ANU key 여부)
- `chair_facing_session_id` (★ 본 chair-facing 세션 SID)
- `delivery_session_id` (★ 실제 callback fire 시 spawn 된 collector 세션 SID)

### Pre-classification gate (★ 회장 보고 전 의무)

ANU 본 세션이 callback 받지 못한 경우:
1. **선검증**: schedule_history JSONL grep + response 어조 + envelope 일관성 4-source cross-check
2. owner_key = ANU key 확인 시 → `AUTHORITATIVE_WITH_SESSION_DISCONTINUITY` 분리 기록
3. owner_key = self-key 확인 시 → `NON_AUTHORITATIVE_SELF_COLLECTOR` (별개 사고)
4. 단정 어구 (`"self-key?"`) 사용 전 위 검증 완료 의무

### task-2686 발행 준비 (★ 회장 verbatim 2026-05-26 ACCEPTED)

- `CHAIR-AUTH-CALLBACK-SESSION-PROPAGATION-WIRING-20260526-JJONGS-IMPLEMENT-001`
- 완료 상태: `CALLBACK_SESSION_PROPAGATION_WIRING_FIX_IMPLEMENTED`
- 7 범위: helper `--session` argv / dispatch prompt sid 전달 / cron 등록 `--session` / finish-task.sh / envelope 3 field / mismatch 분류 / regression
- executor: dev1 헤르메스 또는 dev8 라 (★ dev4/dev5 self-key 사고 봇 제외)
- 실제 dispatch 발사는 **회장 별도 verbatim 대기**

### task-2687 reserved (★ Tier 4 durable registry)

- 4-tuple: `task_id` + `collector_key` + `chair_facing_session_id` + `callback_delivery_session_id`
- 상태: `DURABLE_CALLBACK_ROUTING_REGISTRY_RESERVED`
- task-2686 완료 후 회장 결정

## 관련 doctrine

- [[feedback_callback_session_discontinuity_and_canonical_root_260518]] (★ 원본 박제 5/18)
- [[feedback_callback_authority_actual_owner_key_260524]] (★ self-key vs ANU key 분류)
- [[feedback_callback_self_key_helper_not_wired_260521]] (★ helper 결선 0)
- [[feedback_callback_source_attribution_required_260524]] (★ source 분류 7단계)

## 박제 근거

- spec: `memory/specs/system_callback_session_routing_modular_wiring_gap_analysis_260526.md`
- RCA: `memory/events/task-2684-callback-session-routing-gap-rca-260526.json`
- ACCEPTED: `memory/events/callback-session-continuity-doctrine-accepted-260526.json`
- 사고 trigger: task-2684 dev4 비슈누 callback `803000CA` (★ ANU key 정상 + chair-facing inbound 0)

끝
