# P0B event strategy controlled canary 1-shot packet (설계/준비 전용, 260618)

상태: `P0B_EVENT_STRATEGY_CONTROLLED_CANARY_PACKET_READY_ACTIVE_FALSE` · ACTIVE=false · ★설계/준비 packet만 — 코드/PR/flag ON/canary 실행/real 접촉/callback 발사 0. canonical main 1029131c 기준.

## 1. canary 목적
- WIRED_CANDIDATE(PR #244)가 **실제 1회 경로에서 안전하게 동작 가능한지** 검증.
- ★ **ACTIVE 전환 아님** — controlled one-shot 검증. 끝나면 flag OFF·ACTIVE=false 복귀.

## 2. canary 2단계 분리 (★핵심 안전장치)
### 1단계 — isolated fixture 1-shot (이번 우선, real side effect 0)
- **tmp isolated root**(`tempfile.mkdtemp`) + tmp inbox(`<iso>/memory/events/p0b_live_inbox/`) + fixture result.json 1건.
- 2중 flag(`p0b_driver_enabled`·`p0b_event_strategy_enabled`)를 **tmp root의 state 파일에만** ON. **real canonical(/home/jay/workspace) state 무접촉.**
- scan_live_inbox_once를 isolated root로 1회 호출. **real callback fire 0**(callback_launch_fn 미주입 또는 mock) — owner_proof gate는 통과 검증만(OWNER_PICKUP_READY_NO_FIRE).
- real pickup/fire/move = **real 기준 0**(전부 tmp root 내부). flag ON도 tmp 내부 → real flag 2개 OFF 불변.
- ★ 이 1단계는 **real 부작용 0**이라, 사실상 통합 테스트의 1-shot 확장. 가장 안전한 첫 검증.

### 2단계 — real inbox 1건 1-shot (★별도 회장 승인 전까지 금지)
- real canonical에 real flag 2개 ON + real `memory/events/p0b_live_inbox/`에 result 1건 + **실제 callback 발사(ANU key)**.
- real canonical write 발생·실제 cokacdir cron fire·matrix 갱신 가능성 → 회장 명시 "실행 전 승인 5항목"(실제 canary 실행·flag ON·real inbox/canonical 접촉·callback 발사·post-canary matrix 갱신) **전부 해당**.
- → 1단계 PASS + 회장 별도 승인 후에만.

## 3. flag 계획
- 현재: `p0b_driver_enabled` **OFF/부재** · `p0b_event_strategy_enabled` **OFF/부재** (real canonical).
- 1단계: 두 flag를 **tmp isolated root state 파일에만** ON(`"enabled"` write). real canonical state 파일 **미생성/미변경**.
- 되돌리기: 1단계는 tmp root 자체가 격리라 `shutil.rmtree(tmp)`로 전체 소멸 → 복귀 자동. real canonical flag는 애초에 미접촉(OFF 불변).
- 기본값 OFF 복귀 증거: 실행 후 `ls memory/state/p0b_driver_enabled p0b_event_strategy_enabled` = 부재(OFF) 확인.
- **flag 복귀 실패(real canonical에 flag 잔존) 시 STOP_REPORT.**

## 4. 안전장치
- real pickup/fire/move: 1단계 **real 기준 0** / 2단계(승인 시) **최대 1회**.
- callback/result contract 변경 **0** · systemd/cron 변경 **0** · admin override **0** · activation **0** · ledger robustness/matching 축 **미접촉**.
- canonical write: 1단계 **0**(tmp만) / 2단계는 별도 승인.

## 5. 성공/실패 판정 (1단계 기준, 정확히 1회 발생 항목)
**1단계에서 정확히 1회 발생하는 것:** fixture result 1건 → scan_live_inbox_once 1회 감지 → owner_proof gate 1회 평가(GATE_READY, fire 0) → move-first 분기 1회.
- move 성공 시: completed ledger 1줄 기록(tmp ledger) · processed move 1회
- move 실패(시뮬): completed ledger **미기록** · **VERDICT_LIVE_PENDING_MOVE** · inbox 잔존
- owner_proof gate 유지(non-ANU/self-key 차단) · **self-collector 0**
- dedupe: 동일 (task_id,sha256) 재호출 시 SKIP_DEDUPE
- forbidden/secret 0 · 실행 후 real flag 2개 OFF 복귀 · real ACTIVE=false 복귀
**판정 증거:** tmp ledger 내용 · DriverRecord verdict · real canonical state 부재 · real inbox 무변경.

## 6. STOP 조건
flag 복귀 실패 · real side effect 계획 초과 · callback/result contract 변경 필요 · systemd/canary 범위 1-shot 초과 · ledger robustness/matching 축 번짐 · activation/admin scope 필요 · real canonical 접촉(1단계에서).

## 7. 실행 전 회장 승인 필요 항목 (재확인)
실제 canary 실행 · flag ON(real) · real inbox/canonical 접촉 · callback 발사 · post-canary matrix 갱신. → **2단계 전부 해당**. 1단계도 "실행" 자체는 회장 승인 후.

## 8. 보고 핵심 (회장 요구)
- **canary 실행해도 되는가**: 1단계(isolated fixture)는 real 부작용 0이라 **안전하게 실행 가능**(단 실행 승인은 회장). 2단계(real)는 real 접촉·callback이라 **별도 승인 필수**.
- **남은 위험**: 1단계 = real 거의 0(tmp 격리, 유일 잔여=tmp 정리 누락 → rmtree로 제거). 2단계 = real callback 발사·canonical write·flag 복귀 실패 가능성.
- **실행 시 정확히 1회만 발생하는 것**: §5(감지/gate/move-first 분기 각 1회, 1단계는 fire 0).
- **성공/실패 판정 증거**: §5(tmp ledger·verdict·real state 부재·real inbox 무변경).
- **권고 순서**: **1단계(fixture 1-shot) 먼저** → PASS 증거 보고 → 회장 승인 시 2단계(real 1-shot) 별도.

## 9. 안전 (현재)
코드 수정 0(read-only 분석) · PR/flag ON/canary 실행/real 접촉/callback 발사 0 · canonical main 1029131c 무변경 · 2중 flag OFF · **ACTIVE=false** · ledger robustness/matching 미접촉.
