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

- Level: Lv.2 (★ read-only watcher + thread resolve only · 코드 수정 0)
- 담당: **dev1 헤르메스** (★ 회장 verbatim 2026-05-27 승인 · self-key 사고 0)
- chair_authorization_id: **`CHAIR-AUTH-PR155-CALLBACK-ENFORCEMENT-RELEASE-WATCH-20260527-JJONGS-WATCH-001`** (★ 회장 verbatim 발급 확정)
- 완료 상태: **`PR155_RELEASE_WATCHER_DISPATCHED`** (★ terminal state 도달 시 ANU callback)

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

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

## CI_WATCH_HANDOFF (★ 회장 verbatim 12 필드)

```yaml
pr_number: 155
head_sha: af24dbf5c4eb0356207d73ea6e5ec5300504e27d
branch: task/task-2694+1-dev7
expected_files:
  - dispatch/normal_fallback_callback_helper.py
  - schemas/anu_normal_callback_envelope_v1.json
  - scripts/finish-task.sh
  - utils/callback_registration_marker.py
  - utils/normal_callback_registration_validator.py
  - tests/regression/normal_callback_registration_enforcement/** (5 files)
  - tests/regression/finish_task_callback_fail_closed/** (3 files)
forbidden_paths:
  - PR #155 코드 수정 (★ commit/push 0)
  - PR #152 / PR #154 / PR #151 / PR #149 파일 혼합
  - expected_files 밖 수정
  - dispatch.py 전역 변경
  - live settings.json / hooks live / Axis runtime
  - HARNESS_ENFORCED 전체 선언
  - dev6 quarantine 해제
watcher_owner: dev1 헤르메스 (★ bot key c38fb9955616e24d)
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 최후수단. OWNER nudge 실패/권한 오류 시에만 회장 보고.
auto_remediation_policy: >
  outdated=True thread (5건) + actual code 반영 확인된 thread → resolve 허용.
  security-high 3건 actual code 방어 확인됨 (Path Traversal validator:164-172 / Arbitrary File validator:272) → resolve 후 Gemini re-review fresh trigger.
  ★ same-PR 코드 push 0 ([[feedback_same_pr_push_after_gemini_doctrine_enforcement_260511]] · 코드 이미 반영 / thread resolve 만).
  Critical7 / credential expansion / expected_files 밖 / admin override = 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 + chair_facing_sid).
  envelope schedule_type=absolute_one_time (★ deferred 어구 금지). envelope ≤ 3900 bytes.
terminal_states:
  - MERGE_READY
  - CHAIR_REQUIRED
  - GEMINI_EXTERNAL_TRIGGER_STALE
  - CI_FAILED_NON_REMEDIABLE
  - LOOP_BOUNDARY
```

## ★ 허용 작업 (★ 회장 verbatim)

- outdated=True thread resolve
- actual code 반영 확인된 thread resolve
- Gemini fresh review nudge 1회
- CI/Gemini watcher (polling)
- merge-ready 판정
- ANU callback 보고

## ★ 금지 (★ 회장 verbatim)

- PR #155 코드 수정 / commit / push / merge / auto-merge
- expected_files 밖 수정
- PR #152 / PR #154 / PR #151 혼합
- dev6 quarantine 해제
- live settings.json / hooks live / dispatch.py 전역 / Axis runtime 변경
- HARNESS_ENFORCED 전체 선언

## allowed_resources

```yaml
allowed_resources:
  paths:
    - "memory/events/task-2695.*"
    - "memory/reports/task-2695.md"
    - "memory/events/anu_callback/task-2695-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 #155 코드 수정 금지 · read-only watcher)"
    - "utils/normal_callback_registration_validator.py (★ PR #155 코드 수정 금지)"
    - "utils/callback_registration_marker.py (★ PR #155 코드 수정 금지)"
    - "schemas/anu_normal_callback_envelope_v1.json (★ PR #155 코드 수정 금지)"
    - "PR #152 / 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"
    - "ls / cat / wc / grep / find / tail / head / sha256sum"
    - "cokacdir --cron / cokacdir --cron-list / cokacdir --currenttime / cokacdir --cron-history"
  merge_policy: "pr_155_read_only_watcher_no_merge_no_auto_no_code_change"
  ttl_hours: 4
```

## ★ merge 조건 (★ 회장 verbatim)

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

## ★ 현재 PR #155 상태 (★ ANU 본 세션 read-only audit 결과)

- CI: 11/11 SUCCESS
- mergeable: MERGEABLE / mergeStateStatus: BLOCKED
- reviewDecision: 빈 값 (★ approval 0)
- review threads: 8 total / 8 unresolved (★ outdated=True 5건 / outdated=False 3건: #2 medium, #5 security-high Path Traversal, #6 security-high Arbitrary File)
- security-high 3건 actual code 방어 확인됨 (★ ANU 직접 git show af24dbf5 검증)

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

1. schedule_id
2. spawn verification 4 신호
3. thread resolve 결과
4. Gemini freshness
5. unresolved count
6. CI status
7. mergeStateStatus
8. reviewDecision
9. terminal_state
10. forbidden_action_count

## 종결

성공: **`PR155_RELEASE_WATCHER_DISPATCHED`**

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

## 레벨

Lv.2 normal · read-only watcher · **코드 수정 없음** (thread resolve + ANU callback only · PR #155 코드 commit/push 0).
> 비고(헤르메스 2026-05-27): 본 섹션은 git_evidence verifier가 본 task를 non-code(코드 수정 없음)로 정확히 인식하도록 추가. dispatch 시 누락된 표준 non-code 마커이며, 본문이 5회 선언한 "코드 수정 0/금지" 사실과 동일. 작업 범위·요구사항 불변.

끝