# task-2685 — POST_PR150_RUNTIME_WIRING_AUDIT (Track 3 · read-only)

- Level: Lv.3 (★ read-only audit only · 코드 수정 0 · commit/push/PR/merge 0 · runtime 변경 0)
- 담당: **dev1 헤르메스** (★ idle 2h · task-2682 watcher 완료 · self-key 사고 봇 회피 · task-2684 dev4 진행 충돌 0)
- 단일소스: 본 task md
- chair_authorization_id: **`CHAIR-AUTH-POST-PR150-RUNTIME-WIRING-AUDIT-20260526-JJONGS-AUDIT-001`** (★ ANU 권고 · 회장 verbatim 발급 대기 · 야간 verbatim 적용)

## 배경

PR #150 MERGED (commit `319170b95b1330c3e9554eca88973e68f60e93e9`) 후 main repo에 PR watcher classifier 진입. 5 영역 결선 audit 강제 (★ read-only).

## 회장 verbatim 결정 (1:1)

- 범위: read-only audit only
- 코드 수정 / commit / push / PR / merge / runtime 변경 금지
- 완료 상태: `POST_PR150_RUNTIME_WIRING_AUDIT_READY`

## 체크 영역 5 (회장 verbatim)

### 1. PR watcher terminal classifier 결선
- `utils/pr_watcher_terminal_state_classifier.py` 실제 watcher runner import 여부
- fresh Gemini + unresolved > 0 → 즉시 HOLD_FOR_CHAIR 분류 evidence
- LOOP_BOUNDARY가 unresolved보다 우선 안 하는지
- terminal_state 발생 시 ANU normal callback 등록 보장 여부

### 2. task-2680 self-key hardening main 반영 여부
- task-2680 fix가 main에 반영됐는지 (★ main repo HEAD 기준)
- helper가 ANU key를 cron layer까지 강제하는지
- actual owner key를 callback collector gate에서 검증하는지
- self-key callback 발생 시 NON_AUTHORITATIVE_SELF_COLLECTOR 자동 분류 여부
- ANU independent reverify flow 강제 여부

### 3. finish-task.sh callback runner 결선
- `scripts/finish-task.sh`가 normal callback helper 항상 호출 여부
- ANU key 강제 여부
- callback 등록 실패 시 PASS 처리 안 함 여부
- envelope ≤3900 bytes 제한 준수
- normal callback absolute timestamp now+30s 적용
- fallback/dead-man callback과 normal callback 분리

### 4. stale watcher result 무시 로직
- target head vs latest/merged head 비교 여부
- PR merged 시 stale watcher 분류 여부
- stale 결과가 최신 상태 오염 안 함 검증
- STALE_WATCHER_RESULT_IGNORED marker 작성 여부

### 5. Gemini X1 auto loop runtime path
- fresh review 감지
- unresolved 수집
- 6조건 자동 평가
- X1 자동수정
- regression
- commit/push
- thread resolve
- per-head nudge 1회
- watcher 재부착
- terminal state만 회장 보고

## 허용 8

1. read-only 코드 분석 (★ utils/** · scripts/** · dispatch/**)
2. main repo HEAD 기준 git log/diff/show
3. schedule_history evidence 분석
4. memory/specs/system_ci_watch_handoff_*.md 참조
5. memory/events/task-2680.* 참조 (★ hardening fix result)
6. `memory/specs/post_pr150_runtime_wiring_audit_*.md` 작성
7. `memory/events/task-2685.*` 작성
8. `memory/reports/task-2685.md` 작성

## 금지 10 (회장 verbatim)

1. 코드 수정 (★ utils/** · scripts/** · dispatch/** 일체)
2. commit
3. push
4. PR 생성
5. merge
6. runtime 변경
7. live settings.json 변경
8. hooks live 변경
9. dispatch.py 변경
10. Axis runtime · HARNESS_ENFORCED 전체 선언 · BLOCK 확대 · policy 승격

## 완료 상태

성공: **`POST_PR150_RUNTIME_WIRING_AUDIT_READY`**

## 보고 필수 7

1. **5 체크 영역 각 결선 상태 verdict** (★ PASS / FAIL / PARTIAL · evidence 인용)
2. **결선 결함 list** (★ 발견된 결함 path + line · severity)
3. **task-2680 main 반영 여부 evidence** (★ git log + commit SHA · diff stat)
4. **stale watcher 무시 로직 evidence** (★ code path 인용)
5. **Gemini X1 auto loop runtime path evidence** (★ implementation status · gap list)
6. file overlap (★ task-2662~2684 0)
7. forbidden_action_count (target 0)
8. recommended next action (★ 결함 fix는 별도 task + chair signature 강제)

## expected_files (~6)

- `memory/specs/post_pr150_runtime_wiring_audit_packet_260526.md` (★ 통합)
- `memory/specs/post_pr150_runtime_wiring_audit_pr_watcher_classifier_260526.md`
- `memory/specs/post_pr150_runtime_wiring_audit_self_key_hardening_260526.md`
- `memory/specs/post_pr150_runtime_wiring_audit_finish_task_callback_260526.md`
- `memory/specs/post_pr150_runtime_wiring_audit_stale_watcher_logic_260526.md`
- `memory/specs/post_pr150_runtime_wiring_audit_x1_auto_loop_260526.md`
- `memory/events/task-2685.done`
- `memory/events/task-2685.post-pr150-runtime-wiring-audit-result-260526.json`
- `memory/reports/task-2685.md`

## allowed_resources

```yaml
allowed_resources:
  paths:
    - "memory/specs/post_pr150_runtime_wiring_audit_*.md"
    - "memory/events/task-2685.*"
    - "memory/reports/task-2685.md"
    - "memory/tasks/task-2685.md"
    - "INDEX.md"
  read_only_reference:
    - "utils/**"
    - "scripts/**"
    - "dispatch/**"
    - "tests/**"
    - "schemas/**"
    - "hooks/**"
    - "memory/specs/system_ci_watch_handoff_*.md"
    - "memory/feedback_callback_*.md"
    - "/home/jay/workspace/.worktrees/task-2680-dev2/**"
    - "/home/jay/.cokacdir/schedule_history/**"
    - "git log/diff/show (★ main repo HEAD 319170b9 기준)"
  forbidden_paths:
    - "/home/jay/.claude/**"
    - "/usr/local/bin/cokacdir"
    - ".github/**"
    - "**/.env*"
    - "**/credentials*"
  commands:
    - "ls"
    - "cat"
    - "stat"
    - "git log"
    - "git diff"
    - "git show"
    - "sha256sum"
    - "wc"
    - "printf"
    - "grep"
    - "find"
    - "tail"
    - "head"
    - "python3 -c"
    - "python3 -m json.tool"
    - "cokacdir --cron"
    - "cokacdir --cron-history"
    - "cokacdir --currenttime"
    - "touch"
    - "mkdir"
  merge_policy: "audit_packet_only_no_code_no_pr"
  ttl_hours: 48
```

## frozen anchors

- ANCHOR-1: "read-only audit only · 코드 수정 0 · runtime 변경 0"
- ANCHOR-2: "5 체크 영역 모두 verdict + evidence · 결함 fix는 별도 task + chair signature"
- ANCHOR-3: "main repo HEAD 319170b9 기준 audit · worktree-only 산출물은 별도 표기"
- ANCHOR-4: "task-2662~2684 파일 변경 0 · 본 audit prefix `post_pr150_runtime_wiring_audit_*` 차별화"

## 종결

성공: **`POST_PR150_RUNTIME_WIRING_AUDIT_READY`**

끝
