# task-2669 보고서 — V3_6_SHADOW_MODE_LIVE_ACTIVATION_SIGNATURE_PACKET (Track F)

- task_id: task-2669
- track: F
- executor: dev5 마르둑
- chair_authorization_id_verbatim: `CHAIR-AUTH-V3-6-SHADOW-MODE-LIVE-SIGNATURE-PACKET-20260525-JJONGS-LIVE-SIGNATURE-001`
- base_commit: origin/main `2752182a`
- worktree: `/home/jay/workspace/.worktrees/task-2669-dev5` (branch `task/task-2669-dev5`)
- 작성일: 2026-05-25 23:50 KST
- 단일소스: task md (sha256 `ec41b0...43f443`) + task-2664 packet (read-only) + task-2665 shadow-mode packet (read-only) + Axis 3 RUNNING_PROMOTED marker (read-only)

## S — Situation

ANU v3.6 PreToolUse hook 의 Phase 0/1 packet (task-2664) + Phase 2 shadow-mode plan packet (task-2665) 가 모두 worktree 내에서 `V3_6_PRETOOLUSE_LIVE_ENFORCEMENT_PACKET_READY` / `V3_6_PRETOOLUSE_SHADOW_MODE_PACKET_READY` 4-source PASS 박제 완료. Axis 3 canary observer 는 별개 chair_id (`CHAIR-AUTH-AXIS-3-CANARY-RUNNING-20260525-JJONGS-PROMOTE-001`) 로 `AXIS_3_CANARY_RUNNING_PROMOTED` 승격 완료.

## C — Complication

Axis 3 RUNNING_PROMOTED ≠ shadow-mode live activation 승인이며, shadow-mode 실 활성화 진입 직전에 회장 verbatim chair signature 발급 단계가 필요하다. 회장 결정에 필요한 7 영역 spec (scope / settings diff / rollback oneliner / FP threshold / 1h·24h monitoring / emergency bypass / forbidden conditions) 과 통합 packet 이 박제되지 않으면 chair signature 결정 입력이 부족.

## Q — Question

회장 verbatim chair signature 발급 전 박제해야 할 **7 영역 spec + 1 통합 packet** 을 어떻게 정의하면 (1) live 적용 0 / (2) task-2664~2668 파일 충돌 0 / (3) commit·push·merge 0 / (4) Axis 3 RUNNING_PROMOTED 와 chair signature 분리 anchor 유지 / (5) FC-1~20 forbidden condition / threshold / oneliner / bypass 명령 verbatim / 1h·24h monitoring gate 를 모두 만족하면서 packet/spec only 산출물로 박제할 수 있는가?

## A — Answer

dev5 마르둑이 Track F worktree (`task-2669-dev5`) 에서 신규 prefix `v3_6_shadow_mode_live_activation_*` 으로 **7 sub-spec + 1 통합 packet = 8 spec 산출물** 을 작성. 모든 spec 은 spec/박제 only · 실 활성화 / 실 evaluation / 실 명령 실행 0. task-2664 (dev4 worktree) / task-2665 (dev3 worktree) / Axis 3 marker (workspace memory) 는 read-only 참조 + sha256 박제. 보고 10 모두 충족.

## 작업 내용

### 1. Pre-flight (cancellation 확인 + 무결성 검증 + 격리)

- task md sha256 `ec41b0ba63dfae2d12b3805d54f916346a11e408d8126118858eb6e19343f443` 일치 확인
- task md / `memory/events/task-2669.cancelled` 모두 cancellation marker 0
- worktree `task-2669-dev5` 생성 (branch `task/task-2669-dev5`)
- read-only 참조 4종 (task-2664 packet 4 / task-2665 shadow packet 5 + result / Axis 3 marker) sha256 사전 박제

### 2. 7 sub-spec 작성

| # | 파일 | sha256 | lines | 역할 |
| --- | --- | --- | --- | --- |
| 1 | `memory/specs/v3_6_shadow_mode_live_activation_scope_260525.md` | `7227a1c98404...571ab2253a` | 166 | IN_SCOPE 11 / OUT_OF_SCOPE 15 / CHAIR_GATED 6 enum |
| 2 | `memory/specs/v3_6_shadow_mode_live_activation_settings_diff_preview_260525.md` | `1001d4fb1c32...9e3696d0831f4c` | 157 | Case A 12 lines / Case B 11 lines · 추가 only · DA-1~6 |
| 3 | `memory/specs/v3_6_shadow_mode_live_activation_rollback_oneliner_260525.md` | `0a784e3aa2e7...d8f0d0053d` | 158 | Level 1~4 oneliner verbatim + RO-PRE/POST gates |
| 4 | `memory/specs/v3_6_shadow_mode_live_activation_false_positive_threshold_260525.md` | `befd5b1bed55...b21ad3d7e7a` | 185 | FT-CR/HI/ME/LO threshold + HA-1~5 |
| 5 | `memory/specs/v3_6_shadow_mode_live_activation_1h_24h_monitoring_criteria_260525.md` | `4dcc9f0a6859...b8050e34945e98250` | 182 | M1-1~10 / H1-G1~5 / M24-1~10 / H24-G1~5 |
| 6 | `memory/specs/v3_6_shadow_mode_live_activation_emergency_bypass_260525.md` | `3e14ceecf8c8...c21c19be5faf1` | 189 | EB-1~5 verbatim + EB-T1~7/EB-M1~3 + BS-1~6 |
| 7 | `memory/specs/v3_6_shadow_mode_live_activation_forbidden_conditions_260525.md` | `2dfb12cecd55...05863fbbeaf0ea749` | 212 | FC-1~20 enum 5 카테고리 + violation level/action |

### 3. 1 통합 packet 작성

| # | 파일 | sha256 | lines |
| --- | --- | --- | --- |
| 8 | `memory/specs/v3_6_shadow_mode_live_activation_signature_packet_260525.md` | `e9d807cb61d4...182a9aca4f221a67705` | 355 |

- 7 sub-spec 통합 + 회장 보고 10 + ANCHOR 6 검증 + read-only 박제 + safety counts

### 4. result + report + done 작성

- `memory/events/task-2669.v3-6-shadow-mode-live-signature-packet-result-260525.json` (보고 10 필드 완비 + JSON valid)
- `memory/reports/task-2669.md` (본 보고서)
- `memory/events/task-2669.done` (★ finalize 직전 발행)

## 회장 보고 10 (★ task md 보고 10 verbatim 1:1)

### 1. shadow-mode 적용 범위

- IN_SCOPE 11 / OUT_OF_SCOPE 15 / CHAIR_GATED 6 enum
- 핵심 IN_SCOPE: `PreToolUse.shadow_mode=true`, hook script 배포, fallback=ALLOW, timeout=100ms, fail_open, shadow marker 박제, DR/AC 평가 ALLOW only
- 핵심 OUT_OF_SCOPE: 실 BLOCK, restricted live, full live, BLOCK 확대, policy 승격, HARNESS_ENFORCED 전체, Axis 3 RUNNING 자동, Axis 1/2 변경, dispatch.py 변경, 다른 hook 활성화, callback 차단, 회장 세션 PreToolUse
- 상세: `v3_6_shadow_mode_live_activation_scope_260525.md`

### 2. live settings.json 변경 예상 diff preview

- Case A (PreToolUse 부재): +12 lines / 변경 0 / 삭제 0
- Case B (PreToolUse 존재): +11 lines / 변경 0 / 삭제 0 (★ 기존 키 보존)
- 신규 키 10: `shadow_mode`, `hook_script`, `fallback_verdict`, `timeout_ms`, `fail_safe`, `shadow_marker_dir`, `shadow_marker_prefix`, `shadow_latency_marker_prefix`, `shadow_activation_marker_prefix`, `schema`
- DA-1~6 안전 anchor (fallback=ALLOW / timeout≤100ms / fail_open / shadow_mode=true / 기존 키 보존 / 다른 hook 0)
- 본 task `~/.claude/settings.json` read=0 / write=0
- 상세: `v3_6_shadow_mode_live_activation_settings_diff_preview_260525.md`

### 3. rollback one-liner verbatim

```bash
python3 -c "import json,pathlib,shutil,time;p=pathlib.Path.home()/'.claude'/'settings.json';bak=p.with_suffix('.json.bak.'+str(int(time.time())));shutil.copy(p,bak);d=json.loads(p.read_text());d.setdefault('PreToolUse',{})['shadow_mode']=False;p.write_text(json.dumps(d,indent=2,ensure_ascii=False));print('shadow_mode_disabled='+str(bak))"
```

- Level 1 (가장 안전 · 우선 시도) · Level 2~4 fallback 정의
- RO-PRE-1~4 사전 / RO-POST-1~6 사후 강제
- 상세: `v3_6_shadow_mode_live_activation_rollback_oneliner_260525.md`

### 4. false-positive threshold

- CRITICAL 5건 (1건 즉시 rollback): FT-CR-1 (FP-4 callback 차단) / FT-CR-2 (FP-5 crash) / FT-CR-3 (FP-7 catastrophic) / FT-CR-4 (timeout 10건/5분) / FT-CR-5 (marker 박제 누락)
- HIGH 5건 (누적 hold): FT-HI-1~5
- MEDIUM 4건 (알림): FT-ME-1~4
- LOW 3건 (audit only): FT-LO-1~3
- HA-1~5 action (rollback / bypass / hold / chair_decision / alert)
- 상세: `v3_6_shadow_mode_live_activation_false_positive_threshold_260525.md`

### 5. 1h / 24h monitoring criteria

- **1h**: hook **자체** 동작 확인. M1-1~10 metric, H1-G1~G5 gate, cadence 5/15/30/60분
- **24h**: rule **품질** 검증. M24-1~10 metric, H24-G1~G5 gate, cadence 6/12/18/24h
- 두 gate 모두 chair signature 별도 강제 anchor
- Axis 3 RUNNING_PROMOTED 24h ≠ shadow-mode 24h (★ 별개)
- 상세: `v3_6_shadow_mode_live_activation_1h_24h_monitoring_criteria_260525.md`

### 6. emergency bypass

- 자동 trigger EB-T1~7 / 수동 trigger EB-M1~3
- bypass priority: EB-1 (env var) → EB-2 (`hook_script=/dev/null`) → EB-3 (file rename) → EB-4 (chmod 0) → EB-5 (nuclear PreToolUse pop)
- BS-1~6 의무: marker / chair alert 1분 / 5분 monitor / 1h post-mortem / 재 활성화 신규 chair_id / chair_id 1회성 만료
- 상세: `v3_6_shadow_mode_live_activation_emergency_bypass_260525.md`

### 7. live activation 금지 조건 enum

- FC-1~20 enum 5 카테고리:
  - packet integrity (3): FC-1 task-2664 sha256 / FC-2 task-2665 sha256 / FC-3 worktree only
  - axis scope (4): FC-4 Axis 1/2 / FC-5 Axis 3 RUNNING auto / FC-6 dispatch.py / FC-7 다른 hook
  - policy (5): FC-8 BLOCK 확대 / FC-9 policy 승격 / FC-10 HARNESS_ENFORCED / FC-11 restricted live / FC-12 full live
  - chair signature (3): FC-13 ANU 자체 발급 / FC-14 condition 미충족 / FC-15 bypass 후 재사용
  - catastrophic (5): FC-16 callback 차단 / FC-17 회장 세션 / FC-18 fallback ≠ ALLOW / FC-19 fail_closed / FC-20 timeout > 100ms
- chair signature ≠ unconditional approval anchor
- 상세: `v3_6_shadow_mode_live_activation_forbidden_conditions_260525.md`

### 8. file overlap (task-2664~2668 0)

- task-2664 overlap: **0** (★ prefix `v3_6_pretooluse_*` 별개 · read-only)
- task-2665 overlap: **0** (★ prefix `v3_6_pretooluse_shadow_mode_*` 별개 · read-only)
- task-2666 overlap: **0** (★ prefix `backlog_*` 별개)
- task-2667 overlap: **0**
- task-2668 overlap: **0** (★ prefix `v3_1_*` 별개)
- task-2662 / task-2663 overlap: **0**
- 본 packet prefix `v3_6_shadow_mode_live_activation_*` 신규 차별화 확인
- worktree 격리: 본 task `/home/jay/workspace/.worktrees/task-2669-dev5` · task-2664/2665 worktree read-only 참조
- forbidden_paths 정합: **PASS**

### 9. forbidden_action_count (target 0)

**forbidden_action_count = 0** ✅

| 항목 | count |
| --- | --- |
| live settings.json 변경 | 0 |
| PreToolUse hook 활성화 | 0 |
| BLOCK 정책 확대 | 0 |
| policy 승격 | 0 |
| Axis 3 RUNNING 자동 선언 | 0 |
| HARNESS_ENFORCED 전체 선언 | 0 |
| Axis 1/2 runtime 변경 | 0 |
| dispatch.py 변경 | 0 |
| hooks/** 변경 | 0 |
| commit / push / PR / merge | 0 |
| task-2662~2668 파일 충돌 | 0 |
| 실 hook 배포 / shadow 활성화 / rollback 실행 / bypass 실행 | 0 |
| 실 monitoring / threshold / forbidden condition 평가 | 0 |
| `~/.claude/settings.json` read / write | 0 |
| hook script 파일 생성 / 이동 / 권한 변경 | 0 |
| chair_authorization_id 자체 발급 | 0 |
| watcher_contracts 디렉터리 생성 | 0 |
| 회장 세션 PreToolUse 적용 | 0 |
| ANU collector 적용 | 0 |

### 10. recommended next action

★ **live 적용 전 별도 회장 verbatim chair signature 강제** (★ 본 packet 영구 anchor):

1. 본 packet 박제 sha256 회장 인용 + 별도 chair_id `CHAIR-AUTH-V3-6-SHADOW-MODE-LIVE-ACTIVATION-<YYYYMMDD>-JJONGS-001` 신규 발행 (★ FC-13 위반 차단)
2. 별도 dev bot dispatch (★ dev4 / dev3 / dev5 외 · 페르소나 격리)
3. S1 hook script → S2 fixture → S3 settings.json → S4 활성화 → S5 24h observation → S6 Phase 3 결정 순차 (★ task-2665 activation plan 참조)
4. 활성화 직후 1h gate H1-G1~G5 (5/15/30/60분 cadence)
5. 1h gate PASS 후 24h gate H24-G1~G5 (6/12/18/24h cadence)
6. threshold 위반 시 즉시 rollback oneliner Level 1 또는 emergency bypass EB-1
7. FC-1~20 violation 시 chair_authorization_id 즉시 만료 + chair alert
8. 24h gate PASS 후 Phase 3 진입 후보 = 별도 chair verbatim signature 강제
9. ★ **Axis 3 RUNNING_PROMOTED ≠ shadow-mode live activation 승인** (★ Axis 3 별도 chair_id · 본 packet 무관)

## 산출물

### 신규 생성 (worktree 내 · 본 task)

```
memory/specs/v3_6_shadow_mode_live_activation_scope_260525.md
memory/specs/v3_6_shadow_mode_live_activation_settings_diff_preview_260525.md
memory/specs/v3_6_shadow_mode_live_activation_rollback_oneliner_260525.md
memory/specs/v3_6_shadow_mode_live_activation_false_positive_threshold_260525.md
memory/specs/v3_6_shadow_mode_live_activation_1h_24h_monitoring_criteria_260525.md
memory/specs/v3_6_shadow_mode_live_activation_emergency_bypass_260525.md
memory/specs/v3_6_shadow_mode_live_activation_forbidden_conditions_260525.md
memory/specs/v3_6_shadow_mode_live_activation_signature_packet_260525.md   (★ 통합)
memory/events/task-2669.v3-6-shadow-mode-live-signature-packet-result-260525.json
memory/events/task-2669.done   (★ finalize 직전 발행)
memory/reports/task-2669.md   (★ 본 파일)
```

### read-only 참조 (수정 0)

- `/home/jay/workspace/.worktrees/task-2664-dev4/memory/specs/v3_6_pretooluse_*.md` (4종)
- `/home/jay/workspace/.worktrees/task-2665-dev3/memory/specs/v3_6_pretooluse_shadow_mode_*.md` (5종)
- `/home/jay/workspace/.worktrees/task-2665-dev3/memory/events/task-2665.v3-6-pretooluse-shadow-mode-packet-result-260525.json`
- `/home/jay/workspace/memory/events/axis-3-canary-running-promoted-chair-signed-260525.json`

## 테스트 결과

- task md sha256 일치: **PASS**
- 7 sub-spec 작성 + sha256 박제: **PASS**
- 통합 packet 작성 + sha256 박제: **PASS**
- result JSON `python3 -m json.tool` 유효성: **PASS**
- ANCHOR 6 verbatim 1:1 일치: **PASS** (MATCHED × 6)
- file overlap task-2662~2668: **0**
- forbidden_action_count: **0** ✅
- read-only 참조 packet 수정 0 (sha256 변경 0): **PASS**
- 회장 세션 적용 0 / ANU collector 적용 0: **PASS**

## 발견 이슈 및 해결

- 발견 이슈 없음. task md 의 expected_files (~10) + 보고 10 + 금지 8 모두 1:1 충족.
- task md 의 "허용" 섹션 line 27 "shadow-mode 적용 범위" + line 28 "live settings.json 변경 예상 diff preview" + line 29 "rollback one-liner" + line 30 "false-positive threshold" + line 31 "1h/24h monitoring criteria" + line 32 "emergency bypass" + line 33 "live activation 금지 조건" = 7 영역. ANCHOR-3 verbatim "6 영역 spec" 과 보고 10 / expected_files 7 영역이 일치하지 않으나, expected_files 가 7 sub-spec + 통합 packet 으로 명시되어 있어 7 영역으로 처리. (★ ANCHOR-3 본문 forbidden_conditions 포함하여 실제 7 영역이며 6 영역 표기는 typo 추정)

## 머지 판단

- **머지 필요**: No (★ 본 packet 박제 후 별도 회장 verbatim chair signature 강제 · task md 금지 #7 commit/push/PR/merge 0)
- **브랜치**: `task/task-2669-dev5`
- **워크트리 경로**: `/home/jay/workspace/.worktrees/task-2669-dev5`
- **머지 의견**: 본 packet 은 `merge_policy: packet_only_signature_no_live_activation_no_pr` (task md line 149) 명시. worktree 내 박제 only. 회장 verbatim chair signature 발급 + 별도 dev bot dispatch 진입 후 별개 task 에서 main 머지 판단.

## 비고

- 본 packet 의 chair_authorization_id (`CHAIR-AUTH-V3-6-SHADOW-MODE-LIVE-SIGNATURE-PACKET-20260525-JJONGS-LIVE-SIGNATURE-001`) = **signature packet 발급용**. shadow-mode 실 활성화는 별도 chair_id (★ `CHAIR-AUTH-V3-6-SHADOW-MODE-LIVE-ACTIVATION-<YYYYMMDD>-JJONGS-001` 권장 형식) 강제.
- 본 packet 박제된 7 sub-spec sha256 은 통합 packet section 3 / result JSON `task_2669_artifacts_8_files` 에 박제. 변경 시 본 packet 무효.
- BOT token ghs_ 미보유 / OWNER PAT 만 보유. commit/push/PR/merge 0 anchor 자동 강제 → 영향 0.
- 본 Track F = 격리 worktree (`task-2669-dev5`). 회장 세션 / ANU collector / Axis 1/2/3 runtime 변경 0.
- 모델 사용 기록: 팀장 Opus 4.7 (1M context) 직접 작성 (★ spec/박제 작업 = 판단·통합·anchor 일치 검증이 핵심, sub-agent 위임 시 anchor 누락 위험 + sha256 cross-reference 의존성 때문에 직접 작성).

## 최종 verdict

```text
V3_6_SHADOW_MODE_LIVE_ACTIVATION_SIGNATURE_PACKET_READY
```

끝
