# TRACK B — LAYER 5 SESSION CONTINUITY HARDENING 상세 설계 (★ read-only · 회장 verbatim 2026-05-27)

- 작성: 2026-05-27T09:15 KST · ANU 본 chair-facing session
- 모드: read-only design (★ 실 적용 별도 chair signature 후)
- 전제: task-2694+1 dogfood PASS / SESSION_DISCONTINUITY = 별도 Layer 5 track 분리 확정
- 기존 baseline packet: `memory/reports/layer-5-cokacdir-session-wrapper-wiring-design-packet-260526.md` (★ 본 packet 이 구체화)

## 0. SESSION_DISCONTINUITY 실증 (★ task-2694+1)

- callback cron (7FA863F5) 정상 발사 + ANU collector spawn 정상
- 단 spawn workspace_path = `/home/jay/.cokacdir/workspace/7FA863F5` (★ fresh ANU session)
- 본 chair-facing session `53e89540` workspace 와 다름 → **chair-facing inbound 0**
- `*received*` marker 부재
- 즉, **collector_key 는 ANU 정상이나 chair_facing_session 단절** ([[feedback_callback_session_continuity_doctrine_260526]] 정확히 일치)

## 1. cokacdir --session propagation chain (★ 7 항목 회장 verbatim)

### 1.1 현재 chain (★ task-2694+1 실측)

```
[helper] cokacdir --cron --session 53e89540-... --key c119085addb0f8b7 --at <T>
  → cokacdir 가 --session 53e89540 받음 (★ CLI 정식 지원 확인됨)
  → cron fire 시 ANU collector spawn
  → ★ spawn workspace_path = /home/jay/.cokacdir/workspace/7FA863F5 (fresh)
  → ★ 본 chair-facing 53e89540 session 으로 resume 안 됨
```

★ **gap**: cokacdir 가 `--session 53e89540` 을 받지만, cron fire 시 그 session 으로 **resume** 하지 않고 schedule_id 기반 **fresh workspace** spawn. → chair-facing inbound 0.

### 1.2 검증 필요 (★ read-only)

- cokacdir `--session` 의미: (a) cron 등록 metadata 저장만 (b) fire 시 해당 session resume 시도 (c) spawn 된 session 에 env 인계
- ★ task-2694+1 실측: (c) 또는 (a) 동작 / (b) resume 미동작

## 2. helper argv wiring (★ 회장 verbatim)

- 현재: helper(`dispatch/normal_fallback_callback_helper.py`) 가 `--session 53e89540` 전달 ✓ (★ PR #155 에서 동작)
- gap: helper 가 전달한 --session 이 collector resume 으로 이어지지 않음 (★ cokacdir 레벨)
- 보강: helper 가 envelope 에 `chair_facing_sid` + `resume_required: true` flag 명기 → collector entrypoint 가 read

## 3. collector receipt routing (★ 회장 verbatim)

- 현재: envelope `inbound_evidence` + `collector_receipt` 둘 다 envelope 자체 path (★ self-referential)
- gap: authoritative receipt 가 본 chair-facing session 53e89540 에 도달했다는 별도 evidence 0
- 보강: collector entrypoint(`utils/normal_completion_callback_collector_entrypoint.py`) 가 spawn 시 `memory/events/anu_callback/<tid>-normal-completion.received.json` 작성 + `chair_facing_sid` 명기 + `received_in_session` 실제 spawn session id 기록

## 4. chair-facing session resume path (★ 회장 verbatim)

- 핵심 미해결: cron fire 시 collector 가 fresh spawn 이 아닌 본 chair-facing session 53e89540 으로 resume 되어야 chair-facing inbound 발생
- 옵션:
  - (A) cokacdir CLI 자체 resume 기능 (★ 변경 금지 영역 · 외부 CLI)
  - (B) collector entrypoint 가 spawn 후 본 session telegram inbound 발사 (★ ANU chat 으로 메시지 push)
  - (C) file-based handoff: collector 가 receipt 파일 작성 → 본 chair-facing session 이 다음 turn 에 read (★ durable registry task-2687 연계)

## 5. authoritative receipt source of truth (★ 회장 verbatim)

- 현재 SOT 후보 3개 충돌: envelope 자체 / cron-history response / schedule_history log
- 보강: **단일 SOT = `memory/events/anu_callback/<tid>-normal-completion.received.json`** (★ collector 가 spawn 시 작성 · envelope 와 분리)
- received marker 필수 field: `chair_facing_sid` / `received_in_session` / `received_at` / `schedule_id` / `match: chair_facing_sid == received_in_session`

## 6. session continuity runtime evidence (★ 회장 verbatim · text 주장 금지)

PASS 기준 runtime evidence:
1. received marker 파일 실재
2. `match: true` (★ chair_facing_sid == received_in_session)
3. 본 chair-facing session 이 다음 turn 에서 inbound 인지 (★ telegram inbound 또는 system_prompt 변경)
4. cron-history workspace_path 가 본 chair-facing workspace 와 일치 또는 handoff 완료

## 7. fresh session spawn vs resume policy (★ 회장 verbatim)

| 정책 | 적용 |
|---|---|
| fresh spawn 허용 케이스 | collector 가 독립 처리 후 receipt file 작성 + 본 chair-facing session 이 file read (★ async handoff) |
| resume 필수 케이스 | chair-facing inbound 즉시 필요 (★ 회장 실시간 보고) |
| 현재 task-2694+1 | fresh spawn (★ receipt file 작성도 self-referential envelope 만 · 별도 received marker 0) → SESSION_DISCONTINUITY |
| 목표 | fresh spawn + received marker 작성 + 본 chair-facing session file read handoff (★ 옵션 C) |

## 8. 적용 순서 (★ 회장 verbatim 후 별도 chair signature)

1. 현재 (★ 2026-05-27): 본 상세 설계 packet 작성 완료
2. 별도 chair signature: collector entrypoint received marker 작성 wiring (★ 옵션 C · task-2695 예정)
3. task-2695 PASS 후: cokacdir --session resume 동작 검증 (★ read-only) + 옵션 A/B 가능성
4. 운영 안정화 후: durable registry (task-2687.reserved) 활성화

## 9. 변경 금지 영역 (★ 회장 verbatim)

- cokacdir CLI 자체 변경 0
- dispatch.py 전역 변경 0
- live settings.json / hooks live / Axis runtime 0
- durable registry 즉시 구현 0 (★ task-2687.reserved 유지)

끝
