# task-2697 — PR156_SESSION_PROPAGATION_RELEASE_WATCHER (★ 회장 verbatim 2026-05-27 release path watcher)

- Level: Lv.2 (★ read-only watcher + thread resolve only · 코드 수정 0)
- 담당: **dev3 다그다** (★ 회장 verbatim 추천 · self-key 사고 0 · dev7 작성자 제외)
- 제외 5: dev7 (★ PR #156 작성자) / dev2 (★ PROBATION) / dev4/dev5/dev6 (★ self-key/quarantine)
- chair_authorization_id: **`CHAIR-AUTH-PR156-SESSION-PROPAGATION-RELEASE-WATCH-20260527-JJONGS-WATCH-001`** (★ 회장 verbatim 발급 확정)
- 완료 상태: **`PR156_RELEASE_WATCHER_DISPATCHED`** (★ terminal state 도달 시 ANU callback)

## ★ 본 task = read-only watcher (★ 회장 verbatim)

read-only watcher + thread resolve only. **코드 수정 금지**.

## 배경

task-2696 (dev7 이참나) fresh re-extract 완료 → PR #156 생성:
- branch: task/task-2696-dev7 / head: dd09f520
- origin/main a2a20f94 기준 fresh (★ PR #152 old branch conflict resolve 아님)
- PR #155 callback registration enforcement 무훼손
- session_propagation regression 34 passed / PR #155 regression 30 passed
- schema jsonschema PASS / self-key FAIL_CLOSED runtime 관측 / forbidden 0

박제: `memory/events/task-2696-dispatched-dev7-pr152-session-propagation-fresh-reextract-260527.json`

## CI_WATCH_HANDOFF (★ 12 필드)

```yaml
pr_number: 156
head_sha: dd09f520
branch: task/task-2696-dev7
expected_files: "session propagation 고유분 (helper session 함수 / schema 3 SID / prompt.py --session / finish-task.sh session 단계 / callback_session_propagation tests)"
forbidden_paths:
  - PR #156 코드 수정 (★ commit/push 0)
  - PR #155 enforcement 코드 훼손
  - PR #152 old branch conflict resolve
  - PR #154 / PR #151 / PR #149 혼합
  - dispatch.py 전역 / settings.json / hooks / Axis
  - dev6 quarantine 해제
watcher_owner: dev3 다그다 (★ bot key 0b94683120a691cf)
max_watch_minutes: 120
poll_interval_seconds: 300
gemini_nudge_policy: >
  Gemini fresh review nudge 1회. bot /gemini review 무효 ([[feedback_gemini_external_trigger_gap_260509]]).
  fresh evidence 부재 시 OWNER_GEMINI_TRIGGER_ROUTER · 회장 UI 최후수단.
auto_remediation_policy: >
  thread resolve 는 watcher 가 actual code 반영 확인한 outdated/comment-only 범위만.
  Medium 4 defer 는 ruleset/mergeStateStatus 기준 검증.
  same-PR 코드 push 0. Critical7/credential/expected_files 밖 = ANU callback.
callback_on_terminal_state: >
  ANU key c119085addb0f8b7 + cokacdir --cron --session 53e89540-5bed-4692-a726-ed857820758a 강제.
  4-source 검증 (cron 등록 + schedule_history status=ok + ANU key channel hit + chair_facing_sid).
  envelope schedule_type=absolute_one_time (★ deferred 금지). envelope ≤ 3900 bytes.
  ★ self-key 금지 (★ PR #155 enforce 가 차단 · self-key fail-open closed evidence 동반 보고).
terminal_states:
  - MERGE_READY
  - CHAIR_REQUIRED
  - GEMINI_EXTERNAL_TRIGGER_STALE
  - CI_FAILED_NON_REMEDIABLE
  - LOOP_BOUNDARY
```

## ★ 필수 확인 12 (★ 회장 verbatim)

1. PR #156 head SHA
2. CI 11/11 status
3. gemini-review-gate status
4. phase3-merge-gate status
5. latest Gemini review head match
6. unresolved thread count
7. mergeStateStatus
8. reviewDecision
9. expected_files
10. PR #155 enforcement 보존 여부
11. self-key fail-open closed evidence
12. forbidden_action_count

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

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

★ 4 신호 1+ 실패 → `PR156_WATCHER_SPAWN_VERIFICATION_FAILED` 즉시 HOLD_FOR_CHAIR

## ★ 금지 (★ 회장 verbatim)

- PR #156 merge / auto-merge
- PR #152 old branch conflict resolve
- PR #154 재검증 / PR #151 처리 / dev6 quarantine 해제
- dispatch.py 전역 / live settings.json / hooks live / Axis runtime 변경
- HARNESS_ENFORCED 전체 선언
- branch cleanup

## ★ merge 조건

MERGE_READY 도달해도 merge 하지 말고 **회장 결재 대기**.

## allowed_resources

```yaml
allowed_resources:
  paths:
    - "memory/events/task-2697.*"
    - "memory/reports/task-2697.md"
    - "memory/events/anu_callback/task-2697-normal-completion.json"
  forbidden_paths:
    - "/home/jay/.claude/**"
    - "/usr/local/bin/cokacdir"
    - ".github/**"
    - "**/.env*"
    - "**/credentials*"
    - "settings.json"
    - "hooks/**"
    - "dispatch.py"
    - "Axis/**"
    - "scripts/finish-task.sh"
    - "dispatch/normal_fallback_callback_helper.py (★ PR #156 코드 수정 금지)"
    - "schemas/anu_normal_callback_envelope_v1.json (★ PR #156 코드 수정 금지)"
    - "utils/normal_callback_registration_validator.py (★ PR #155 enforce 보존)"
    - "utils/callback_registration_marker.py (★ PR #155 enforce 보존)"
    - "PR #152 old branch / PR #154 / PR #151 / PR #149 파일"
  commands:
    - "git fetch / git log / git diff / git show / git status / git rev-parse / git ls-remote"
    - "gh pr view / gh api / gh pr edit / gh pr comment / gh api graphql (★ thread resolve only · 코드 push 0)"
    - "python3 -c / python3 -m json.tool / python3 -m pytest (★ regression 재실행 read-only)"
    - "ls / cat / wc / grep / find / tail / head / sha256sum"
    - "cokacdir --cron / cokacdir --cron-list / cokacdir --currenttime / cokacdir --cron-history"
  merge_policy: "pr_156_read_only_watcher_no_merge_no_auto_no_code_change"
  ttl_hours: 4
```

## ★ 보고 필드 (★ 회장 verbatim · terminal state callback 시)

1. schedule_id
2. spawn verification 4 신호
3. CI/Gemini 상태
4. unresolved count
5. Medium 4 defer 상태
6. mergeStateStatus
7. terminal_state
8. forbidden_action_count

## 종결

성공: **`PR156_RELEASE_WATCHER_DISPATCHED`**

★ 회장 verbatim 2026-05-27 watcher dispatch 승인. read-only + thread resolve only. merge 회장 결재 유지.

끝