---
task_id: task-2696
type: plan
scope: task
created: 2026-05-27
updated: 2026-05-27
status: completed
---

# 계획서: task-2696 — PR152 SESSION PROPAGATION FRESH RE-EXTRACT

**task**: task-2696
**목표**: origin/main `a2a20f94`(PR #155 merge) 기준 fresh worktree 에서 PR #152 의 session propagation 고유분만 additive 재적용. PR #155 callback registration enforcement 코드 0 훼손.
**승인**: 회장(제이) 2026-05-27 "옵션 1 fresh re-extract" / chair_authorization_id `CHAIR-AUTH-PR152-SESSION-PROPAGATION-FRESH-REEXTRACT-20260527-JJONGS-IMPLEMENT-001`
**근거**: `memory/reports/pr-152-conflict-decomposition-packet-260527.md` (권장 결론 `PR152_FRESH_PR_REEXTRACT_RECOMMENDED`)

---

## 목표

fresh branch `task/task-2696-dev7`(base a2a20f94)에 아래 session propagation 고유분을 additive 적용 후 PR 생성:
- helper session 함수 4개 + 상수/enum + build_anu_owned_callback_request/launch_callback `chair_facing_session_id` param + CLI flag
- schema 3 SID(`chair_facing_session_id`/`collector_session_id`/`delivery_session_id`) + `callback_resume_required` additive
- prompt.py `_inline_chair_facing_sid` + `chair_facing_session_id` param
- finish-task.sh `ANU_CHAIR_FACING_SID` 전파 단계(enforce L1014-1026 영역 미접촉)
- tests/regression/callback_session_propagation/** 5 files

검증: PR #155 enforce diff 0 + PR #155 regression PASS 유지 + session_propagation regression PASS + schema validation + finish-task smoke.

## 범위

### 포함
- dispatch/normal_fallback_callback_helper.py (session 함수 추가 · enforce 함수 보존)
- schemas/anu_normal_callback_envelope_v1.json (3 SID additive · PR #155 필드/required/enum 보존)
- dispatch/prompt.py (--session inline 결선)
- scripts/finish-task.sh (session 전파 단계만 · L1014-1026 enforce 보존)
- tests/regression/callback_session_propagation/** (5 files, test_envelope_schema_fields 는 PR #155 reconcile 적용)

### 제외 (PR #155 중복 / forbidden)
- utils/callback_authority_4source_validator.py (PR #155 normal_callback_registration_validator 와 중복 — packet item 9)
- tests/regression/callback_4source_validator/** · callback_envelope_actual_cron_crosscheck/** · callback_owner_enforcement/** (allowed_resources 외 · PR #155 중복)
- dispatch/__init__.py (forbidden · 결선 불필요 입증됨 — 아래 ANCHOR-4)
- memory/tasks/task-2686+1.md · memory/reports/task-2686+1.md (구 task 산출물)

## 위임 계획

- 구현 전체: **dev7 쿠쿨칸(백엔드)** — Python helper/schema/shell/tests 결선 (단일 백엔드 도메인)
- 독립 검증: **마아트** (G2) — PR #155 enforce 보존 + session 정합 교차검증

## 검증 기준

- PR #155 enforce 보존: `git diff a2a20f94 -- utils/normal_callback_registration_validator.py utils/callback_registration_marker.py` → 0 lines
- helper enforce 함수 무변경: `grep -c "assert_normal_callback_actually_registered\|class EnforceResult" helper` → 유지
- session regression: `pytest tests/regression/callback_session_propagation/ -q` → all PASS
- PR #155 regression: `pytest tests/regression/normal_callback_registration_enforcement/ tests/regression/finish_task_callback_fail_closed/ -q` → all PASS
- schema: jsonschema 로 PR #155 base payload + PR #152 3 SID payload 둘 다 validate PASS
- finish-task smoke: `bash -n scripts/finish-task.sh` + T2686 block 정적 검증
