# Limited Runtime Pilot — ON/OFF & Rollback Spec **v2** (산출물 2/4)

작업 상태명: `LIMITED_RUNTIME_PILOT_DESIGN_PACKET_V2_REDACT_AND_REVISION_APPROVED_ACTIVE_FALSE`
작성: 2026-06-27 (KST) · 작성자: 아누 · 근거: main `189f1f0d` · v1 보정본
**raw key redacted / no literal key retained.** (v1의 raw key literal 1곳 제거 완료 — 보안 메모 별도.)

> v1 대비 변경: ① 명령 예시 전면 placeholder/환경변수화 ② surface-only 성공증거를 driver/audit verdict 중심으로
> ③ post-run driver 재평가 1회를 절차에 명시 ④ Phase 0/1/2 ON/OFF 매핑.

---

## A. flag / 마커 인벤토리 (코드 출처)
- driver 게이트 `memory/state/p0b_driver_enabled` — "enabled"/"disabled" (driver:400-412, governor:53)
- callback 발사 게이트 `memory/state/p0b_callback_launch_enabled` (audit:48)
- 활성 epoch 마커 `memory/state/p0b_activation_epoch` (driver:83)
- kill switch `memory/state/p0b_kill` — 존재 시 즉시 전면 NOOP (driver:86)

## B. Phase별 ON/OFF 매핑 (★v2)
**Phase 0 (kill pytest dry-run)** — flag ON 0. 격리 tmp_path만. canonical 마커 미접촉.
**Phase 1 (surface-only pilot)** — 최소 ON:
- `p0b_driver_enabled`="enabled", `p0b_activation_epoch`=시작 unix.
- `p0b_callback_launch_enabled` = **OFF 유지**(real fire 0). real_launch_fn 미주입.
- → driver/owner-proof/governor/callback gate(NOOP_DISABLED)·OFF 복귀를 real fire 없이 관측.
**Phase 2 (real fire 1-shot)** — 별도 승인 시: 위 + `p0b_callback_launch_enabled`="enabled" + real_launch_fn 주입.

## C. 절대 켜면 안 되는 것
- `activation_intended=True` ∧ `limited_runtime=True` 동시 — 코드 `return 1` fail-closed STOP. pilot은 limited_runtime 단독.
- recurring cron / systemd `enable` / N·T 상수 변경 / 2건+ 동시 투입 / 기존 backlog 소비.

## D. systemd start ↔ enable (불변, v1 유지)
- `start` = 일시 1회. `enable` = 부팅 지속 → **pilot 절대 금지**.
- 권장: **systemd 미사용 + driver 수동 1회 트리거**. 현재 `anu-pickup.path` = inactive·disabled, 이 상태 불변.

## E. surface-only 성공 증거가 어디 남나 (★v2 — 코드 검증)
- driver verdict: `memory/p0b_state/driver_runs.jsonl` (`LIVE_PROCESSED` 또는 의도된 `LIVE_PENDING_OWNER_PROOF`),
  각 행에 `callback_launch_verdict`.
- callback: `memory/p0b_state/callback_launch_audit.jsonl` (`LAUNCH_ENFORCED` surface / `NOOP_DISABLED` / **REAL_FIRED 0**).
- governor: `memory/state/spawn_decisions.jsonl` (의도 외 ALLOW 0, DEDUP_HIT 0).
- ★ surface-only 성공의 1차 신호는 **callback ledger가 아니라 driver/audit verdict + flag OFF 복귀**다
  (real fire 0이므로). 산출물 1 §9 9개 신호와 일치.

## F. pilot 종료 후 OFF 복귀 순서 (고정)
1. (Phase 2였으면) `p0b_callback_launch_enabled` 제거.
2. `p0b_driver_enabled`="disabled" 확인 — auto-disabled 됐으면 그대로, 아니면 강제 write.
3. `p0b_activation_epoch` 제거. 4. (kill 썼으면) `p0b_kill` 제거.
5. (systemd start 했으면) `stop` + inactive·disabled 확인.
6. cron 0 확인. 7. **post-run driver 1회 재평가**(아래 G) → disabled 디스크 확인. 8. closeout archive(산출물 3) 후 보고.

## G. ★ post-run driver 재평가 (v2 신설 — 명시)
- auto-disabled는 "driver가 1회 더 평가될 때" 작동(N/T/kill 게이트는 평가 시점에 판정). 따라서 Phase 1 종료 후
  **driver를 1회 더(격리 또는 동일 조건) 평가**해 `p0b_driver_enabled`가 실제 "disabled"로 복귀했는지 디스크로
  확인하는 단계를 절차에 둔다. 이 재평가도 real fire 0 / canonical write 통제 하에 수행.

## H. rollback 확인 명령 (★v2 — placeholder, raw key 0)
```
# 환경: ANU_OWNER_KEY 는 sealed loader/환경변수로 주입(문서에 literal 미기재)
cat memory/state/p0b_driver_enabled              # → "disabled"
test ! -e memory/state/p0b_callback_launch_enabled && echo "callback OFF"
test ! -e memory/state/p0b_activation_epoch && echo "epoch cleared"
test ! -e memory/state/p0b_kill && echo "kill cleared"
systemctl --user is-active anu-pickup.path       # → inactive
systemctl --user is-enabled anu-pickup.path      # → disabled
/usr/local/bin/cokacdir --cron-list --chat "$CHAT_ID" --key "$ANU_OWNER_KEY"   # schedules 0
tail -1 memory/p0b_state/driver_runs.jsonl       # verdict 확인, activation=disabled
```
> ★ 실제 key/chat literal은 문서에 적지 않는다. 환경변수 또는 sealed key loader 경유만.

## I. 수동 rollback 경로
- 즉시 정지: kill switch 생성(`touch memory/state/p0b_kill`) → 다음 평가 시 `NOOP_KILL_SWITCH` 전면 NOOP(driver:644).
  단 **canonical kill 직접 생성은 pilot 실행 단계의 비상 rollback에서만**(dry-run/설계 단계 금지 — 산출물 4 참조).
- 이후 F의 복귀 순서.

## J. 자동 kill/auto-disabled 경로 (코드)
- N≥3 → `NOOP_N_EXCEEDED_AUTO_DISABLED`(:707) / T 만료 → `NOOP_T_EXPIRED_AUTO_DISABLED`(:724-731) /
  epoch 부재·손상 → `NOOP_ACTIVE_EPOCH_MISSING/INVALID_AUTO_DISABLED` / kill → `NOOP_KILL_SWITCH`.
- Phase 1(fixture 1건)에서는 N 미발동이 정상. auto-disabled는 G의 재평가로 확인.

## K. rollback 실패 시 STOP 상태명
- flag가 disabled로 안 돌아감 / systemd 안 멈춤 / cron 잔존 / driver 계속 ALLOW:
  → **`LIMITED_PILOT_ROLLBACK_FAILED_CHAIR_REQUIRED`**. kill switch 시도 → 그래도 안 멈추면 회장 즉시 보고.

---

## 회장 결정 필요
1. Phase 1 = 시나리오 A(callback flag OFF, real fire 0) 확정.
2. systemd 미사용(driver 수동 트리거) 확정.
3. rollback 실패 STOP 상태명 채택.
