# task-2696 — PR152_SESSION_PROPAGATION_FRESH_REEXTRACT (★ 회장 verbatim 2026-05-27 옵션 1 · PR #152 CONFLICTING fresh 재추출)

- Level: Lv.3 (★ session propagation 고유분만 origin/main a2a20f94 기준 fresh 재적용 · PR #155 enforcement 보존)
- 담당: **dev7 이참나** (★ 회장 verbatim 2026-05-27 · 과부하 시 대안 dev3 다그다)
- 제외 5: dev1/dev2/dev4/dev5/dev6 (★ 회장 verbatim · self-key 사고/probation/quarantine)
- chair_authorization_id: **`CHAIR-AUTH-PR152-SESSION-PROPAGATION-FRESH-REEXTRACT-20260527-JJONGS-IMPLEMENT-001`** (★ 회장 verbatim 발급 확정)
- 완료 목표: **`PR152_SESSION_PROPAGATION_FRESH_REEXTRACT_READY`** (★ 회장 verbatim 확정)

## 배경

회장 verbatim 2026-05-27 PR #152 conflict decomposition 후 옵션 1 선택:
- PR #152 (head bd3f7ee, base 319170b9) = CONFLICTING (★ PR #155 a2a20f94 merge 후)
- 충돌 3파일: helper / schema / finish-task.sh
- PR #155 = callback registration enforcement (main 반영) / PR #152 = session propagation
- 두 기능 직교하나 같은 파일 텍스트 충돌
- conflict resolve = PR #155 enforcement 덮어쓸 위험 → **fresh PR 재추출**

박제: `memory/reports/pr-152-conflict-decomposition-packet-260527.md` + `memory/events/pr152-conflict-decomposition-packet-ready-260527.json`

## ★ 목표

origin/main `a2a20f94` 기준 fresh worktree 에서 **PR #152 의 session propagation 고유분만 재적용**.
**PR #155 callback registration enforcement 는 절대 덮어쓰지 않는다.**

## ★ Preflight 4-step (★ 의무)

1. `git fetch origin main`
2. `git ls-remote origin main` → SHA (★ a2a20f94 확인)
3. `git rev-parse origin/main`
4. `gh api repos/Jeon-Jonghyuk/dev_workspace/branches/main`

★ fresh worktree base = origin/main `a2a20f94` (★ PR #155 반영 후 · PR #152 old branch bd3f7ee 재사용 0)

## ★ 필수 구현 8 (★ 회장 verbatim · 모두 의무)

1. helper(`dispatch/normal_fallback_callback_helper.py`)에 session propagation 함수 추가 (★ is_valid_session_id / resolve_chair_facing_sid / SessionPropagationVerdict / classify_session_propagation · PR #155 EnforceResult/assert_normal_callback_actually_registered 와 공존)
2. schema(`anu_normal_callback_envelope_v1.json`)에 3 SID 필드 통합 (★ PR #155 chair_facing_sid 단수 + PR #152 chair_facing_session_id/collector_session_id/delivery_session_id)
3. chair_facing_session_id / collector_session_id / delivery_session_id 명명 정합 (★ PR #155 chair_facing_sid 와 명명 불일치 해소)
4. callback_resume_required 필드 추가 여부 판단 (★ 필요성 입증 후만)
5. finish-task.sh 에서 PR #155 enforcement 단계(L981-1047) 보존 (★ session propagation 단계만 추가)
6. --session argv 전달은 helper/wrapper 범위에서만 구현 (★ cokacdir CLI 변경 0 · dispatch.py 전역 변경 0)
7. collector receipt 에 session continuity evidence 기록
8. PR #155 registration enforcement 코드 절대 훼손 금지 (★ EnforceResult / assert_normal_callback_actually_registered / validator / marker / finish-task.sh L981-1047)

## ★ dispatch/__init__.py 주의 (★ 회장 verbatim)

dispatch/__init__.py 전역 변경 원칙 금지. 단 PR #152 고유분 중 registrar 결선이 dispatch/__init__.py 없이 불가능하다고 **입증되면 즉시 HOLD_FOR_CHAIR 보고하고 수정하지 말라**.

## ★ 필수 검증

- PR #155 enforcement 함수/라인 보존 확인 (★ git diff origin/main 으로 enforce 코드 무변경 evidence)
- callback registration validator regression 재실행 (★ PR #155 의 normal_callback_registration_enforcement + finish_task_callback_fail_closed 통과 유지)
- session propagation regression 추가/재실행 (★ callback_session_propagation/**)
- finish-task.sh smoke
- schema validation
- self-key fail-open runtime 관측 가능성 보고 (★ PR #155 merge 후 self-key 차단 동작하는지 본 task callback 에서 관측)
- forbidden_action_count=0

## ★ 금지 (★ 회장 verbatim)

- PR #152 기존 branch(bd3f7ee)에 conflict resolve
- rebase
- merge main into old branch
- PR #155 enforcement 코드 삭제/덮어쓰기
- dispatch.py 전역 변경
- live settings.json / hooks live / Axis runtime 변경
- PR #154 재검증 / PR #151 처리 / dev6 quarantine 해제
- HARNESS_ENFORCED 전체 선언
- auto-merge / merge

## ★ Spawn Verification Hard Gate (★ dispatch false-ok operational doctrine)

★ dispatch.py status:ok 단독 성공 증거 0. fire 후 5분 내 4 신호:
1. worktree 생성 (task/task-2696-dev7)
2. state file 생성
3. dev7 process 또는 schedule_history running/started
4. task md sha256 일치 + worktree task 인식

★ 4 신호 1+ 부재 → SPAWN_VERIFICATION_FAILED 즉시 HOLD_FOR_CHAIR

## ★ ANU normal callback 4-source 강제 (★ self-key 금지)

- envelope: `memory/events/anu_callback/task-2696-normal-completion.json`
- owner_key: ANU `c119085addb0f8b7` (★ self-key 금지 · PR #155 enforce 가 차단)
- `cokacdir --cron --session 53e89540-5bed-4692-a726-ed857820758a --key c119085addb0f8b7` 강제
- envelope ≤ 3900 bytes / 3 SID 모두 53e89540 / schedule_type=absolute_one_time (★ deferred 어구 금지)
- 4-source: schedule_id + schedule_history status=ok + ANU key channel hit + chair_facing_sid

## allowed_resources

```yaml
allowed_resources:
  paths:
    - "dispatch/normal_fallback_callback_helper.py (★ session 함수 추가 · PR #155 enforce 함수 보존)"
    - "schemas/anu_normal_callback_envelope_v1.json (★ 3 SID 통합 · PR #155 필드 보존)"
    - "scripts/finish-task.sh (★ session propagation 단계만 · L981-1047 enforce 보존)"
    - "dispatch/prompt.py (★ --session argv 결선)"
    - "tests/regression/callback_session_propagation/**"
    - "memory/events/task-2696.*"
    - "memory/reports/task-2696.md"
    - "memory/tasks/task-2696.md"
  forbidden_paths:
    - "/home/jay/.claude/**"
    - "/usr/local/bin/cokacdir"
    - ".github/**"
    - "**/.env*"
    - "**/credentials*"
    - "settings.json"
    - "hooks/**"
    - "dispatch.py (★ 전역 변경 금지 · registrar 결선 불가 입증 시 HOLD_FOR_CHAIR)"
    - "dispatch/__init__.py (★ 전역 변경 금지 · 회장 verbatim 주의 · 불가 입증 시 HOLD_FOR_CHAIR)"
    - "Axis/**"
    - "utils/normal_callback_registration_validator.py (★ PR #155 enforce · 훼손 금지)"
    - "utils/callback_registration_marker.py (★ PR #155 enforce · 훼손 금지)"
    - "scripts/cleanup-stale-tasks.sh"
    - "scripts/cleanup-workspace.py"
    - "scripts/file_cleanup.py"
    - "scripts/task_scope.py"
    - "scripts/git-hooks/**"
    - "scripts/pre_push_guard.py"
    - "PR #154 파일 (★ QUARANTINED)"
    - "PR #151 파일 (★ READ_ONLY_HOLD)"
    - "PR #149 파일"
    - "memory/tasks/task-2691+b.audit.md (★ HELD)"
    - "memory/plans/tasks/task-2568/**"
    - "memory/plans/tasks/task-2569/**"
    - "memory/specs/protection-list.json"
    - "memory/specs/protection-list.md"
    - "durable_registry/**"
    - "utils/qc_verify.py"
    - "utils/replacement_pr_runner.py"
  commands:
    - "git fetch / git log / git diff / git show / git add / git commit / git push / git status / git rev-parse / git ls-remote / git worktree"
    - "python3 -m pytest"
    - "python3 -c"
    - "gh pr view / gh api / gh pr create / gh pr edit / gh pr comment / gh api graphql"
    - "ls / cat / wc / grep / find / tail / head / printf / sha256sum"
    - "cokacdir --cron / cokacdir --cron-list / cokacdir --currenttime / cokacdir --cron-history"
  merge_policy: "task_2696_fresh_pr_create_no_merge_no_auto_pr155_enforce_preserve"
  ttl_hours: 16
```

## ★ frozen anchors

- ANCHOR-1: "origin/main a2a20f94 기준 fresh worktree (★ PR #152 old branch bd3f7ee 재사용 0)"
- ANCHOR-2: "PR #155 callback registration enforcement 코드 절대 훼손 금지 (★ EnforceResult/assert_normal_callback_actually_registered/validator/marker/finish-task.sh L981-1047)"
- ANCHOR-3: "session propagation 고유분만 (★ helper session 함수/schema 3 SID/prompt.py --session/session_propagation tests)"
- ANCHOR-4: "dispatch/__init__.py + dispatch.py 전역 변경 0 · 불가 입증 시 HOLD_FOR_CHAIR"
- ANCHOR-5: "--session argv 는 helper/wrapper 범위만 · cokacdir CLI 변경 0"
- ANCHOR-6: "spawn verification 4 신호 + callback 4-source (★ ANU key · self-key 금지)"
- ANCHOR-7: "conflict resolve / rebase / merge main into old branch 0"

## 보고 필드 (★ 회장 verbatim)

1. fresh branch/head SHA
2. PR #152 고유분 재적용 파일
3. PR #155 enforcement 보존 증거
4. session propagation 구현 요약
5. regression 결과
6. schema 결과
7. finish-task smoke 결과
8. self-key fail-open 관측 여부
9. forbidden_action_count
10. PR 생성 여부

## 종결

성공: **`PR152_SESSION_PROPAGATION_FRESH_REEXTRACT_READY`**

★ 회장 verbatim 2026-05-27 dispatch 승인 + chair_authorization_id `CHAIR-AUTH-PR152-SESSION-PROPAGATION-FRESH-REEXTRACT-20260527-JJONGS-IMPLEMENT-001` 발급 확정.

끝