# v3.6 PreToolUse Shadow-Mode Packet (Track C-1 · Phase 2)

- task_id: task-2665
- chair_authorization_id: `CHAIR-AUTH-V3-6-SHADOW-MODE-PACKET-20260525-JJONGS-PHASE-2-001`
- executor: dev3 다그다 (★ task-2657~2664 chain 모두 다른 봇)
- base_commit: origin/main `2752182a` (PR #148 merged)
- 단일소스: 본 task md + task-2664 packet 4종 (★ read-only 참조 · `V3_6_PRETOOLUSE_LIVE_ENFORCEMENT_PACKET_READY` 4 source PASS 인정)
- 범위: **Phase 2 shadow-mode packet/spec only**
- live_settings_json_change: 0
- live_enforcement: 0
- pretooluse_full_live_enforcement: 0
- commit_push_pr_merge: 0
- 병행 Track: Track A-1 (PR #149) / Track B-1 (Axis 3 observer chain) / Track D-1 (task-2666 backlog separation)

## 1. 본 packet 의 목적

ANU v3.6 PreToolUse hook 을 **실제 BLOCK 없이 marker 만 기록하는 shadow-mode**로 전환하기 위한 4종 plan 을 통합 패킷으로 정리한다.

★ 본 packet은 **plan only**. 실 hook 배포 / settings.json 수정 / shadow-mode 활성화 명령은 본 packet 박제 후 **별도 회장 verbatim signature 강제** 진입 후 진행.

## 2. 4 sibling plan (★ 본 task 산출물 5종 중 4종)

| 문서 | 경로 | 역할 |
| --- | --- | --- |
| 1 | `v3_6_pretooluse_shadow_mode_activation_plan_260525.md` | shadow-mode 활성화 단계 (S1 ~ S6) + 사전 게이트 (PG-1 ~ PG-6) |
| 2 | `v3_6_pretooluse_shadow_mode_smoke_plan_260525.md` | smoke 시나리오 (DENY 10 + ALLOW 4 + LATENCY 1 + Contract PASS 4 + Contract FAIL 4) + PASS criteria (PC-1 ~ PC-10) |
| 3 | `v3_6_pretooluse_shadow_mode_rollback_plan_260525.md` | shadow-mode 자체 비활성화 (★ shadow false-positive trigger SFP-1 ~ SFP-8 + STR-1 ~ STR-7 절차) |
| 4 | `v3_6_pretooluse_shadow_mode_false_positive_audit_plan_260525.md` | 24h observation 후 false-positive audit (FP-1 ~ FP-7) + recommended action 분류 |
| **5** | **본 문서** | 4 plan 통합 packet · task-2664 read-only 참조 박제 · 7 보고 · ANCHOR 일치 검증 |

## 3. task-2664 packet 4종 read-only 참조 fingerprint (★ 박제)

| 파일 | sha256 |
| --- | --- |
| `v3_6_pretooluse_live_enforcement_packet_260525.md` | `a3cda54a84ec79191ea0af536383e1fd647d384f3347c29d24626e2cad5f33c5` |
| `v3_6_pretooluse_deny_rule_candidates_260525.md` | `7ce1d11b043d71e71f1dcae48ceb8806af7438d5a7ee420ad43df1d4b4001a66` |
| `v3_6_pretooluse_allow_contract_candidates_260525.md` | `6eee7f640465e282c1ce8fe5b9ed86b4986a47bae421c35ed3f1ae65664d1da7` |
| `v3_6_pretooluse_rollback_plan_260525.md` | `590c916956ce3fda59a9369e22e4ca691ab31419585027bc26e634626cb74c02` |
| `task-2664.v3-6-pretooluse-live-enforcement-packet-260525.json` (final_verdict marker) | `8ee6122b5d0731b9b7293ea8395d444f353bb7ca93b80af5b3de23d38b42f05f` |

★ 위 5 파일 본 task-2665 작업 중 수정 0 (★ read-only 참조).
★ source path: `/home/jay/workspace/.worktrees/task-2664-dev4/memory/specs/` (★ memory/events for marker).

## 4. Phase 정의 + 본 task 위치

| Phase | 범위 | 본 task-2665 |
| --- | --- | --- |
| Phase 0/1 | spec packet 작성 (deny rule / allow contract / rollback / regression 설계) | 완료 (task-2664) |
| **Phase 2** | **shadow-mode activation + smoke + rollback + false-positive audit plan** | **본 task** (★ plan only) |
| Phase 2 실 활성화 | hook script 배포 + settings.json 추가 + shadow-mode 활성화 명령 + 24h observation | 0 (★ 별도 chair verbatim signature 필요) |
| Phase 3 | restricted live 적용 (★ 특정 deny rule 1-2개부터 진짜 BLOCK) | 0 |
| Phase 4 | full live 적용 | 0 (★ BLOCK 정책 확대 spec 8B.14 위반 회장 결정 강제) |

★ 본 task-2665 종결 시점 = **Phase 2 plan packet 완성**. Phase 2 실 활성화 / Phase 3 이상 진입은 별도 chair verbatim signature 필수.

## 5. shadow-mode 통합 의사코드 (참조 only · 본 task 코드 작성 0)

```text
function pretooluse_shadow_hook(tool, command, context):
    start_ts = monotonic_ns()

    # Step 1: deny rule pattern 매치 평가 (DR-1 ~ DR-17)
    matched_rule = match_deny_rules(command, context)

    # Step 2: allow contract 평가 (AC-1 ~ AC-10)
    contract = extract_watcher_contract(context)
    contract_validation = validate_contract(contract) if contract else None

    # Step 3: would_be_live_verdict 계산 (★ 실 BLOCK 0)
    would_be_live = compute_would_be_live_verdict(matched_rule, contract_validation)

    # Step 4: shadow marker 박제
    if matched_rule:
        emit_shadow_marker({
            "schema": "anu.v3_6.pretooluse_shadow_marker.v1",
            "matched_deny_rule_id": matched_rule.rule_id,
            "matched_deny_patterns": matched_rule.patterns,
            "would_be_live_verdict": would_be_live,
            "allow_contract_present": contract is not None,
            "allow_contract_validation": contract_validation,
            "hook_latency_ms": (monotonic_ns() - start_ts) // 1_000_000
        })

    # Step 5: latency marker 박제 (★ 모든 호출에 대해 sampling)
    if should_sample_latency(command):
        emit_latency_marker(latency_ms)

    # Step 6: 항상 ALLOW 반환 (★ shadow-mode 핵심)
    return {"verdict": "ALLOW", "shadow_mode": True}

function fail_safe_handler(error):
    # FS-1 ~ FS-3 (task-2664 packet section 4 verbatim)
    emit_crash_marker(error)
    return {"verdict": "ALLOW", "fail_safe": True}
```

★ 본 의사코드 = **참조용**. 실제 hook script 작성 = 별도 task.

## 6. 4 sibling plan 요약 (★ 회장 보고 4종)

### 6.1 shadow-mode activation plan summary (★ 보고 #1)

- 단계 S1 ~ S6 정의 (hook script 작성 / fixture / settings.json 추가 / 활성화 명령 / 24h observation / Phase 3 진입 결정)
- 사전 게이트 PG-1 ~ PG-6 (★ PG-1 ~ PG-5 본 task 시점 PASS · PG-6 chair verbatim signature PENDING)
- 활성화 전 검증 AV-1 ~ AV-8 (★ task-2664 packet sha256 / chair_authorization_id verbatim / base_commit / file overlap / forbidden_paths / settings.json 변경 0 / commit/push 0)
- shadow marker schema `anu.v3_6.pretooluse_shadow_marker.v1`
- ★ **본 task-2665 적용 = plan only · 실 활성화 0**

### 6.2 shadow-mode smoke plan summary (★ 보고 #2)

- DENY pattern smoke 10 (RG-1 ~ RG-10) — task-2664 packet section 5.1 verbatim re-anchor
- ALLOW smoke 4 (SM-A1 ~ SM-A4) — task-2664 packet section 5.2 verbatim re-anchor
- LATENCY smoke 1 (SM-L1, p99 ≤ 500ms 목표) — task-2664 packet section 5.3 verbatim re-anchor
- Allow contract PASS smoke 4 (SM-C1 ~ SM-C4)
- Allow contract FAIL smoke 4 (SM-CF1 ~ SM-CF4 · F-1 ~ F-4 fail)
- PASS criteria PC-1 ~ PC-10
- ★ **본 task-2665 적용 = plan only · 실 smoke 실행 0**

### 6.3 shadow-mode rollback plan summary (★ 보고 #3)

- Stage 정의 (Stage-0 본 task 시점 · Stage-1/2/3 별도 task)
- Shadow false-positive trigger SFP-1 ~ SFP-8 (★ task-2664 rollback FP-1 ~ FP-7 + shadow-mode 추가 trigger)
- STR-1 ~ STR-7 (IMMEDIATE DISABLE / GRADED DISABLE / IMMEDIATE FULL DISABLE)
- ★ STR-4 / STR-5 / STR-6 발생 시 즉시 회장 verbatim 보고
- 보존 정책 (★ shadow marker / hook script / fixture / spec packet / chair_authorization_id ledger 영구 보존)
- ★ **본 task-2665 적용 = plan only · 실 rollback 명령 0**

### 6.4 false-positive audit plan summary (★ 보고 #4)

- 24h observation 기간 박제된 shadow marker 분석
- FP-1 ~ FP-7 식별 알고리즘 (★ task-2664 rollback section 2 verbatim re-anchor)
- 8 dimension 분석 (D-1 deny rule 분포 / D-2 owner 분포 / D-3 contract 분포 / D-4 verdict 분포 / D-5 latency / D-6 crash / D-7 callback 영향 / D-8 hour-by-hour)
- audit 결과 marker schema `anu.v3_6.pretooluse_shadow_audit.v1`
- recommended action 분류 (PROMOTE_TO_PHASE_3 / EXTEND_SHADOW_OBSERVATION / ROLLBACK_AND_REFINE / IMMEDIATE_DISABLE)
- ★ 모든 next action에 회장 verbatim signature 강제
- ★ **본 task-2665 적용 = plan only · 실 audit 실행 0**

## 7. 병행 충돌 매트릭스 (★ 보고 #5 · Track A-1 / B-1 / D-1 / task-2664)

### 7.1 expected_files overlap

| 파일 prefix | Track A-1 (PR #149) | Track B-1 (Axis 3 observer) | Track D-1 (task-2666 backlog) | task-2664 (read-only) | task-2665 (본) | overlap |
| --- | --- | --- | --- | --- | --- | --- |
| `memory/specs/v3_6_pretooluse_shadow_mode_*.md` | NO | NO | NO | NO | **YES** | 0 |
| `memory/events/task-2665.done` | NO | NO | NO | NO | **YES** | 0 |
| `memory/events/task-2665.v3-6-pretooluse-shadow-mode-packet-result-260525.json` | NO | NO | NO | NO | **YES** | 0 |
| `memory/reports/task-2665.md` | NO | NO | NO | NO | **YES** | 0 |
| `memory/specs/v3_6_pretooluse_live_enforcement_packet_*.md` | NO | NO | NO | YES | **NO (★ read-only)** | 0 |
| `memory/specs/v3_6_pretooluse_deny_rule_*.md` | NO | NO | NO | YES | **NO (★ read-only)** | 0 |
| `memory/specs/v3_6_pretooluse_allow_contract_*.md` | NO | NO | NO | YES | **NO (★ read-only)** | 0 |
| `memory/specs/v3_6_pretooluse_rollback_plan_*.md` (★ task-2664) | NO | NO | NO | YES | **NO (★ read-only)** | 0 |
| `memory/specs/backlog_*.md` | NO | NO | YES | NO | NO | 0 |
| `memory/events/task-2666*` | NO | NO | YES | NO | NO | 0 |
| `memory/events/task-2664*` | NO | NO | NO | YES | NO | 0 |
| `memory/events/task-2663*` | NO | YES | NO | NO | NO | 0 |
| `memory/events/task-2662*` | YES | NO | NO | NO | NO | 0 |

★ **expected_files overlap = 0** (전 Track 충돌 0)

### 7.2 worktree 격리

| Track | worktree path | branch |
| --- | --- | --- |
| Track A-1 | (별도 봇) | (PR #149 관련) |
| Track B-1 | (별도 봇) | Axis 3 observer chain |
| Track C-1 (★ 본 task) | `/home/jay/workspace/.worktrees/task-2665-dev3` | `task/task-2665-dev3` |
| Track D-1 | (별도 봇 · task-2666) | task/task-2666-dev8 (★ 별도 worktree 확인) |
| task-2664 (★ read-only ref) | `/home/jay/workspace/.worktrees/task-2664-dev4` | (★ 본 task 수정 0) |

★ **worktree 충돌 = 0** (각 track 전용 worktree 격리)

### 7.3 forbidden_paths 정합성

- 본 task의 `forbidden_paths` (task md line 95-148) 에 task-2664 expected files (★ `memory/specs/v3_6_pretooluse_live_enforcement_packet_*.md` / `..._deny_rule_*.md` / `..._allow_contract_*.md` / `..._rollback_plan_*.md`) 명시 → **task-2664 충돌 0**
- task-2666 expected files (`memory/specs/backlog_*.md`) 명시 → **Track D-1 충돌 0**
- task-2657 ~ 2664 / 2666 events 모두 forbidden → **충돌 0**

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

### 8.1 shadow-mode activation plan summary (★ 보고 #1)

- S1 ~ S6 단계 정의 완료 (★ `v3_6_pretooluse_shadow_mode_activation_plan_260525.md`)
- PG-1 ~ PG-5 본 task 시점 PASS / PG-6 회장 verbatim signature PENDING
- shadow marker schema `anu.v3_6.pretooluse_shadow_marker.v1` 정의
- ★ **plan only**

### 8.2 shadow-mode smoke plan summary (★ 보고 #2)

- DENY 10 + ALLOW 4 + LATENCY 1 + Contract PASS 4 + Contract FAIL 4 = **23 시나리오** 정리
- PASS criteria PC-1 ~ PC-10 정의
- task-2664 packet section 5 verbatim re-anchor (RG-1 ~ RG-10 / SM-A1 ~ SM-A4 / SM-L1)
- ★ **plan only**

### 8.3 shadow-mode rollback plan summary (★ 보고 #3)

- Shadow false-positive trigger SFP-1 ~ SFP-8 정의
- STR-1 ~ STR-7 절차 정의 (IMMEDIATE / GRADED / FULL DISABLE)
- 보존 정책 정의 (★ shadow marker / hook script / fixture / spec packet 영구 보존)
- ★ **plan only**

### 8.4 false-positive audit plan summary (★ 보고 #4)

- FP-1 ~ FP-7 식별 알고리즘 정의 (★ task-2664 rollback FP-1 ~ FP-7 verbatim re-anchor)
- 8 dimension 분석 정의
- audit marker schema `anu.v3_6.pretooluse_shadow_audit.v1` 정의
- recommended action 4종 분류 (PROMOTE_TO_PHASE_3 / EXTEND / ROLLBACK_AND_REFINE / IMMEDIATE_DISABLE)
- ★ **plan only**

### 8.5 file overlap 여부 (★ 보고 #5 · task-2662 / task-2663 / task-2664 0)

- task-2662 (Track A-1) 파일 overlap = **0**
- task-2663 (Track B-1) 파일 overlap = **0**
- task-2664 (Track C-1 → read-only 참조) 파일 overlap = **0** (★ 본 task에서 수정 0 · sha256 박제)
- task-2666 (Track D-1) 파일 overlap = **0**
- worktree 충돌 = **0**
- forbidden_paths 정합 = **PASS**

### 8.6 forbidden_action_count (★ 보고 #6 · target 0)

| forbidden_action | count |
| --- | --- |
| live settings.json 변경 | 0 |
| PreToolUse full live enforcement | 0 |
| BLOCK 정책 확대 | 0 |
| policy 승격 | 0 |
| Axis 3 RUNNING 자동 선언 | 0 |
| HARNESS_ENFORCED 전체 선언 | 0 |
| Axis 1/2 runtime 변경 | 0 |
| dispatch.py 변경 | 0 |
| commit / push / PR / merge | 0 |
| task-2662 / task-2663 / task-2664 / task-2666 파일 충돌 | 0 |
| hooks/** 변경 | 0 |
| 실 hook 배포 | 0 |
| 실 shadow-mode 활성화 명령 | 0 |
| 실 smoke 실행 | 0 |
| 실 rollback 명령 | 0 |
| 실 audit 도구 작성 | 0 |
| watcher_contracts 디렉터리 생성 | 0 |
| chair_authorization_id 자체 발급 | 0 |

**forbidden_action_count = 0** ✅

### 8.7 recommended next action (★ 보고 #7 · live 적용 전 회장 verbatim 강제 anchor 명시)

본 task-2665 종결 후 권장 next action:

1. ★ **회장 verbatim signature 발행 강제** — `CHAIR-AUTH-V3-6-SHADOW-MODE-LIVE-ACTIVATION-<YYYYMMDD>-JJONGS-001` 형식 권장
   - **반드시 회장 직접 verbatim 발급** (★ ANU 본체 자체 발급 시 DR-12 위반)
   - 본 packet 4 plan + 통합 packet sha256 회장 인용 후 발급
2. ★ **별도 dev bot dispatch** (★ 본 task-2665 dev3 다그다 외 다른 봇 권장 · 페르소나 격리)
   - dispatch 대상: hook script 작성 (S1) / fixture 작성 (S2) / settings.json 추가 (S3) — 별도 task 분리 권장
3. ★ **Step S1 → S2 → S3 → S4 → S5 → S6 순차 진행** (★ activation plan 참조)
4. ★ **shadow-mode 활성화 후 smoke plan PC-1 ~ PC-10 모두 PASS 확인** (★ smoke plan 참조)
5. ★ **24h observation 후 false-positive audit plan 적용** (★ FP-1 ~ FP-7 분석 · recommended action 결정)
6. ★ **audit recommended action 결정도 회장 verbatim signature 강제** (★ PROMOTE_TO_PHASE_3 / EXTEND / ROLLBACK_AND_REFINE / IMMEDIATE_DISABLE 모두 chair gate)

★ **회장 verbatim signature 없이 settings.json 변경 / hook 배포 / shadow-mode 활성화 / Phase 3 진입 시도 0** (★ 본 packet 영구 anchor)

★ **live 적용 = 본 packet 박제 후 별도 회장 verbatim signature 강제** (★ ANCHOR-4 verbatim 1:1)

## 9. ANCHOR 일치 검증 (★ task md frozen anchors 6 verbatim 1:1)

| ANCHOR | 본 packet 일치 | 근거 |
| --- | --- | --- |
| 1. Phase 2 shadow-mode packet/spec only · live enforcement 적용 0 · live settings.json 변경 0 | ✅ | section 1 / section 4 / section 8.6 |
| 2. Track A-1 / B-1 / D-1 파일 충돌 0 · task-2664 packet read-only 참조 | ✅ | section 3 / section 7 / section 8.5 |
| 3. shadow-mode activation/smoke/rollback/false-positive audit 4종 plan 필수 | ✅ | section 2 / section 6 / section 8.1 ~ 8.4 |
| 4. live 적용은 본 packet 박제 후 별도 회장 verbatim signature 강제 · 본 task는 plan only | ✅ | section 4 / section 8.7 |
| 5. Axis 1/2/3 runtime · dispatch.py · live settings.json · hooks/* 변경 0 · commit/push/PR/merge 0 | ✅ | section 8.6 |
| 6. Axis 3 RUNNING 자동 선언 0 · HARNESS_ENFORCED 전체 선언 0 · BLOCK 정책 확대 0 | ✅ | section 8.6 |

## 10. Safety counts (verbatim 1:1)

```text
live_enforcement_count = 0
live_settings_json_change_count = 0
pretooluse_full_live_enforcement_count = 0
hooks_change_count = 0
dispatch_py_change_count = 0
axis_1_2_runtime_change_count = 0
axis_3_running_auto_declaration_count = 0
harness_enforced_global_declaration_count = 0
block_policy_expansion_count = 0
policy_promotion_count = 0
commit_push_pr_merge_count = 0
task_2662_2663_2664_2666_file_touch_count = 0
real_hook_deploy_count = 0
real_shadow_activation_count = 0
real_smoke_execution_count = 0
real_rollback_command_count = 0
real_audit_tool_creation_count = 0
watcher_contracts_directory_creation_count = 0
chair_authorization_self_issuance_count = 0
```

## 11. 본 packet 최종 verdict

```text
V3_6_PRETOOLUSE_SHADOW_MODE_PACKET_READY
```

★ Phase 2 산출물 5종 (activation / smoke / rollback / false-positive audit 4 plan + 본 통합 packet) 작성 완료.
★ Phase 2 실 활성화 / Phase 3 이상 진입은 별도 chair verbatim signature 필요.

끝
