# task-2664 — V3.6 PreToolUse Live Enforcement Packet (Track C · Phase 0/1) 보고

- 작성자: **dev4 비슈누** (★ task-2657~2663 chain 무관 신규 영역)
- 작성 시각: 2026-05-25T21:03:00+09:00
- chair_authorization_id: `CHAIR-AUTH-V3-6-PRETOOLUSE-PACKET-20260525-JJONGS-PHASE-0-1-001`
- base: origin/main HEAD `2752182a` (PR #148 merged)
- worktree: `/home/jay/workspace/.worktrees/task-2664-dev4`
- branch: `task/task-2664-dev4`
- task md sha256 verified: `c08b05ccf502ac7c47f7fd11e44de001caa5dd94049e0330c79500185aa781fd`
- 최종 verdict: **`V3_6_PRETOOLUSE_LIVE_ENFORCEMENT_PACKET_READY`**

## 1. 작업 요약

ANU v3.6 Runtime Harness Enforcement (★ ANU 종합 33.8% 평가 중 v3.6 = 30% PARTIAL gap 핵심)에 대한 **Phase 0/1 read-only spec packet** 4종 작성 완료. PR #145 bzaona6au 사건이 드러낸 ANU 본체 direct CI/Gemini polling 패턴을 PreToolUse hook 단계에서 차단하기 위한 spec 후보 정리.

★ **본 task = spec packet 작성만**. live settings.json 적용 / hooks 코드 작성 / 실제 BLOCK 활성화는 별도 chair verbatim signature 후 Phase 2+ 진입.

## 2. 산출물 4 packet

| # | 파일 경로 | bytes | lines | 핵심 |
| --- | --- | --- | --- | --- |
| 1 | `memory/specs/v3_6_pretooluse_live_enforcement_packet_260525.md` | 14,334 | 294 | 통합 spec + canary 재사용 평가 + regression 설계 + 7 보고 |
| 2 | `memory/specs/v3_6_pretooluse_deny_rule_candidates_260525.md` | 9,839 | 278 | 17 deny rule 후보 (DR-1~DR-17 · 1차/2차/critical) |
| 3 | `memory/specs/v3_6_pretooluse_allow_contract_candidates_260525.md` | 6,731 | 183 | 10 allow 조건 + watcher_contract schema v1 + 4 ALLOW pattern |
| 4 | `memory/specs/v3_6_pretooluse_rollback_plan_260525.md` | 6,228 | 131 | 7 FP trigger + 5 rollback 절차 + 7 fail-safe 정책 |

## 3. 7 보고 (★ task md verbatim 1:1)

### 3.1 병행 충돌 여부 (★ #1)

- Track A (task-2662 dev2 오딘 `E9A8FBD2`) 파일 overlap = **0**
- Track B (task-2663 dev6 페룬 `6FF9640A`) 파일 overlap = **0**
- worktree 충돌 = **0** (Track C 전용 `task-2664-dev4`)
- forbidden_paths 명시 정합 = **PASS**

### 3.2 expected_files overlap (★ #2)

- 본 Track C 산출물 7건 prefix = `memory/events/task-2664.*` + `memory/reports/task-2664.md` + `memory/specs/v3_6_pretooluse_*.md`
- Track A prefix (`utils/anu_codex_*`, `schemas/anu_v3_1_*`, `tests/anu_codex_*`, `task-2662.*`) ↔ Track C: **overlap 0**
- Track B prefix (`task-2663.*`, `.axis_3_canary_running_gate_evaluation_audit.jsonl`) ↔ Track C: **overlap 0**
- **결론: EXPECTED_FILES_OVERLAP_ZERO**

### 3.3 deny rule 후보 (★ #3 · spec 8B.4 anchor)

총 **17 후보** (★ DR-1~DR-17). 우선순위 Phase 1 권장:

- **P1 (필수, 8건)**: DR-1 (bzaona6au), DR-2 (statusCheckRollup), DR-3 (while/until+sleep+gh pr view), DR-4 (gh run watch), DR-5 (gh run list sleep loop), DR-6 (checks API sleep loop), DR-12 (chair_auth 자기발급), DR-17 (force push / rm -rf)
- **P2 (강력 권장, 3건)**: DR-15 (runner infra 직접 수정), DR-16 (foreign dirty cleanup), DR-14 (PR #141 pilot 임의 실행)
- **P3 (chair gate, 3건)**: DR-10 (admin override), DR-11 (BOT token), DR-13 (auto-merge)
- **P4 (semantic, 3건)**: DR-7/8/9 (CI/Gemini/phase3 대기 intent)

### 3.4 allow contract 후보 (★ #4 · spec 8B.5/8B.9 anchor)

- watcher_contract schema v1 (★ 9 필수 필드 + callback_only_reporting=true)
- 10 ALLOW 조건 (AC-1~AC-10)
- 4 ALLOW pattern 예시 (AL-1 dev bot polling / AL-2 ci_watch_handoff_runner loop / AL-3 gh run watch / AL-4 single read-only)
- **chair-only no watcher bypass**: DR-10/11/12/13/14/15/17 — valid watcher contract 가 있어도 ALLOW 변환 불가

### 3.5 rollback plan (★ #5 · false-positive 대비)

- **7 FP trigger**: FP-1 (dev bot 정상 polling DENY), FP-2 (ci_watch_handoff_runner DENY), FP-3 (single read-only DENY), FP-4 (callback 차단), FP-5 (hook crash), FP-6 (latency p99 > 500ms), FP-7 (ALLOW=0 for >=1h)
- **5 rollback 절차**: TR-1 (immediate · FP-1~3), TR-2 (immediate + 회장보고 · FP-4), TR-3 (immediate + hook disable · FP-5), TR-4 (graded · FP-6), TR-5 (immediate + 회장보고 · FP-7)
- **fail-safe**: hook crash 시 default ALLOW (fail-open) + escape hatch chair-approved only

### 3.6 canary 결과 재사용 (★ #6 · task-2657 / task-2656)

- task-2657 result (chair_verified · forbidden_action_count=0 · pretooluse_runtime_change=ZERO): **직접 reuse 0 / 간접 reference YES** (regression pattern · anchor preservation)
- task-2656 traffic_count=3 + 3 corrections (chair_verified): **직접 reuse 0 / 간접 reference YES** (shadow-mode baseline)
- task-2643 산출물 (`CI_WATCH_HANDOFF_RUNTIME_ENFORCEMENT_GATE` spec 8B.12): **직접 reuse 0 (read-only) / 간접 reference YES** (직접 상위 spec)
- **종합**: 직접 코드/jsonl reuse = **0** · 간접 reference = **3건** (anchor 유지)

### 3.7 forbidden_action_count (★ #7 · target 0)

| 항목 | 카운트 |
| --- | --- |
| live settings.json 변경 | 0 |
| hooks/** 변경 | 0 |
| dispatch.py 변경 | 0 |
| Axis 1/2 runtime 변경 | 0 |
| commit/push/PR/merge | 0 |
| task-2662 / task-2663 파일 touch | 0 |
| watcher_contracts 디렉터리 실제 생성 | 0 |
| HARNESS_ENFORCED 전체 선언 | 0 |
| BLOCK 정책 확대 | 0 |
| Axis 3 RUNNING 자동 선언 | 0 |
| policy 승격 | 0 |
| **forbidden_action_count** | **0** ✅ |

## 4. ANCHOR 7 일치 검증

| ANCHOR | 검증 |
| --- | --- |
| 1. Phase 0/1 only · read-only packet 중심 · live enforcement 0 | ✅ PASS |
| 2. Track A / Track B 파일 충돌 0 | ✅ PASS (section 3.1) |
| 3. PreToolUse BLOCK 변경은 restricted canary 이후 별도 verbatim 강제 | ✅ PASS (Phase 3+ deferred) |
| 4. live settings.json 변경은 chair signature 전 HOLD | ✅ PASS |
| 5. deny rule + allow contract + rollback plan + canary 결과 재사용 4건 packet | ✅ PASS |
| 6. Axis 3 RUNNING 자동선언 0 · HARNESS_ENFORCED 전체선언 0 · BLOCK 정책 확대 0 | ✅ PASS |
| 7. commit/push/PR/merge 0 · 본 task 산출물 worktree-only 또는 main repo memory/specs 한정 | ✅ PASS |

## 5. BOT token anchor 영향

- ghs_ 없음 · OWNER PAT 만 존재 → push/PR 불가
- 본 task는 commit/push/PR/merge 0 anchor 가 기본 → **영향 0**

## 6. 다음 회장 verbatim 액션 권장

1. Phase 0/1 packet 4종 verbatim 검토 (★ 본 산출물은 worktree 격리)
2. Phase 2 shadow-mode 활성화 여부 별도 chair signature 결정 (★ ANU 자율 진입 0)
3. live settings.json 변경 시점은 별도 chair signature 후 (★ ANCHOR-4 유지)

## 7. 보고 형식 (verbatim)

성공: **`V3_6_PRETOOLUSE_LIVE_ENFORCEMENT_PACKET_READY`** ✅

끝
