# Limited Pilot — Phase 1 Surface-only **Preflight Packet** (실행 전 최종 runbook)

작업 상태명: `LIMITED_PILOT_PHASE1_PREFLIGHT_PACKET_APPROVED_ACTIVE_FALSE`
완료 목표 상태명: `LIMITED_PILOT_PHASE1_PREFLIGHT_PACKET_READY_ACTIVE_FALSE`
작성: 2026-06-27 (KST) · 작성자: 아누 · 근거: main `189f1f0d` 코드 직접 확인
**raw key redacted / no literal key retained.**

> ★ 이 packet은 **runbook(실행 전 고정 문서)**다. 작성·채택이 Phase 1 실행 승인이 아니다. Phase 1 실행은 회장
> **별도 승인** 필요. 현재 ACTIVE=false·flags OFF·systemd disabled·real fire 0 유지. Phase 0 dry-run A는 PASS로 닫힘.

---

## 1. Phase 1 목적
- **surface-only limited pilot**: real fire **0**. driver path · owner-proof gate · governor 기록 · callback gate ·
  observability · OFF 복귀를 **실제 canonical flag/epoch를 1회 켰다 끄며** 관측한다.
- **activation 아님**(상시 가동 아님). systemd 미사용. **driver 수동 1회 트리거**. N auto-disable을 성공 필수조건으로
  두지 않음(fixture 1건 < N=3 → 정상 미발동).

## 2. fixture 정의
- **신규 합성 fixture 1건만**: `memory/events/p0b_inbox/task-<PILOT_ID>.result.json`
  (기본 scan 경로 = `INBOX_DIR_REL=memory/events/p0b_inbox`, glob `task-*.result.json`, driver:66/71).
- **실제 사업/코드 task 금지**. terminal-state(MERGE_READY 또는 동등) 단일 result.json.
- **owner-proof = 로컬 canonical HEAD freshness**: result.json의 head_sha가
  `git -C /home/jay/workspace rev-parse HEAD`(현재 `189f1f0d`)와 일치해야 owner-proof gate 통과
  (`_default_head_probe` 로컬 canonical HEAD 하드코딩). 불일치면 `LIVE_PENDING_OWNER_PROOF`(fire 0)로 막힘 — 이것도
  관측 가능한 의도된 결과.
- **fixture 외 inbox backlog 0 조건**: `memory/events/p0b_inbox/`에 fixture 외 `task-*.result.json` **0건**.
- **stale result consumption 금지**: epoch 이전 result는 `NOOP_LEGACY_SKIP`(move 0/wake 0). 과거 잔여물 소비 0.
- ★ 안전노트: surface-only는 **event_strategy flag OFF**라 기본 `p0b_inbox` scan 경로(scan_once)를 탄다(live_inbox
  아님). Phase 1 승인 직전 driver.main 분기를 1회 재확인(event_strategy OFF → p0b_inbox 경로 확정).

## 3. 실행 전 snapshot (기준 기록 — Phase 0와 동일 포맷)
```
# canonical state markers (내용/size/mtime)
p0b_driver_enabled / p0b_callback_launch_enabled / p0b_activation_epoch / p0b_kill
# evidence jsonl 줄 수
driver_runs.jsonl / callback_launch_audit.jsonl / spawn_decisions.jsonl /
p0b_processed_ledger.jsonl / callback_4tuple_index.jsonl
# 기준 카운트
REAL_FIRED(audit) / LIVE_PROCESSED(ledger)
# 환경
cron 0 / systemd anu-pickup.path inactive·disabled / ACTIVE=false(driver_enabled=disabled)
```
(현재 baseline: driver_enabled=disabled · callback/epoch/kill 부재 · driver_runs 2 · audit 1 · spawn 22 · ledger 부재
· 4tuple 3 · REAL_FIRED 1 · LIVE_PROCESSED 0 · cron 0 · systemd inactive·disabled.)

## 4. ON 절차 (Phase 1 — 최소 ON, 순서 고정)
1. `memory/state/p0b_driver_enabled` = "enabled"
2. `memory/state/p0b_activation_epoch` = 시작 unix timestamp (운영창 ≤10분으로 짧게)
3. `memory/state/p0b_callback_launch_enabled` = **OFF 유지(생성 금지)** → callback NOOP_DISABLED/surface-only, real fire 0
4. `memory/state/p0b_kill` = **부재 유지**
5. systemd start/enable **금지** · real_launch_fn **미주입** · event_strategy flag **OFF 유지**
- ★ 켜는 것은 driver_enabled·activation_epoch **2개뿐**. callback/kill/event_strategy/systemd는 전부 OFF.

## 5. driver 실행 방식
- **systemd 미사용.** driver를 **수동 1회 트리거**(limited_runtime 경로 main 1회 실행).
- recurring / loop / sleep polling **금지**. 1회 평가 → 종료.
- 실행 명령은 **실제 실행 전 확인용으로만 문서화**(이 packet 채택은 실행 아님):
  `PYTHONPATH=. python3 -m dispatch.anu_pickup_driver` (limited_runtime=True 경로, real_launch_fn 미주입) — *문서화만*.

## 6. 기대 결과 (surface-only 성공 신호 = verdict 조합)
- driver_runs verdict = `LIVE_PROCESSED`(pickup 완료) **또는** 의도된 `LIVE_PENDING_OWNER_PROOF`(gate 차단 시연)
- callback_launch_verdict ∈ {`LAUNCH_ENFORCED`(surface), `NOOP_DISABLED`} — **`REAL_FIRED` 신규 0**
- cron **0** · duplicate **0**(spawn_decisions 의도 외 DEDUP_HIT 0) · self-key **0**(SELF_KEY_REFUSED 의도 외 0)
- governor 의도 외 ALLOW **0** · fixture 외 consumption **0**(p0b_inbox 잔여 소비 0)
- (processed_ledger LIVE_PROCESSED는 0 또는 1 — 필수 성공조건 아님)

## 7. OFF 복귀 절차 (성공/실패/중단 공통, 순서 고정)
1. `p0b_driver_enabled` = "disabled" 확인 — 아니면 강제 write
2. `p0b_activation_epoch` 제거
3. `p0b_callback_launch_enabled` 부재 확인
4. `p0b_kill` 부재 확인
5. **post-run driver 1회 재평가** — 동일 조건(또는 격리)으로 driver를 1회 더 평가해 `p0b_driver_enabled`가 실제
   "disabled" 복귀했는지 디스크 확인. 이 재평가도 real fire 0 / canonical write 통제 하에.
6. systemd anu-pickup.path inactive·disabled 확인
7. cron 0 확인

## 8. closeout archive 필수 항목 (Phase 1 종결 조건)
경로: `memory/reports/limited_pilot_phase1_<PILOT_ID>/`
- driver_runs snapshot · callback_launch_audit snapshot · spawn_decisions snapshot · callback_4tuple_index snapshot
- p0b_processed_ledger snapshot **또는 부재 기록**
- final_flags (driver_enabled 값 + callback/epoch/kill 부재 확인)
- cron 0 결과 · systemd inactive·disabled 결과 · ACTIVE=false 결과
- pilot summary markdown (성공/실패 상태명 + §6 지표 판정)
- ★ archive 미완 = closeout 미완 = Phase 1 미종결.

## 9. STOP 조건 (하나라도 발생 시 즉시 중단 → §7 OFF 복귀)
- real fire 발생 · callback flag 생성 · systemd start/enable 발생 · recurring 등록
- fixture 외 backlog consumption · `p0b_driver_enabled` OFF 복귀 실패 · epoch/kill marker 이상
- duplicate/recursive spawn · self-key 시도 · archive 실패 · canonical dirty 발생
- → 중단 상태명 `LIMITED_PILOT_ABORTED_BY_GUARD`, 복귀 실패 시 `LIMITED_PILOT_ROLLBACK_FAILED_CHAIR_REQUIRED`.

## 10. Phase 1 성공/실패 상태명
- 성공: **`LIMITED_PILOT_PHASE1_SURFACE_ONLY_SUCCESS_OBSERVED_ACTIVE_FALSE_RESTORED`**
- 실패: **`LIMITED_PILOT_PHASE1_FAILED_ROLLBACK_REQUIRED`**
- rollback 실패: **`LIMITED_PILOT_ROLLBACK_FAILED_CHAIR_REQUIRED`**

---

## 완료 보고용 정리 (이 packet 기준)
- **preflight packet 경로**: `memory/designs/limited_pilot_phase1_surface_only_preflight_packet_260627.md`
- **Phase 1 실행 전 남은 blocker**: 회장 Phase 1 실행 승인(미승인) · fixture 1건 생성(미생성) · 실행 직전 driver.main
  scan 분기 1회 재확인 · **★실측 backlog blocker(아래)**. 기술적 결함 blocker는 없음.
- **★ 실측 backlog blocker (2026-06-27)**: 현재 `memory/events/p0b_inbox/`에 기존 `task-*.result.json` **28건 잔존**
  → **backlog 0 미충족**. Phase 1은 fixture 1건만 둬야 하므로, 이 28건을 **정리(아카이브) 또는 격리**하는 선행
  작업이 필요. (epoch-scope·NOOP_LEGACY_SKIP로 driver가 소비 안 할 가능성이 높으나, backlog 0 원칙상 선행 정리
  필수.) **이 정리는 backlog consumption/이동이라 회장 승인 영역 — 현재 미실행.**
- **fixture 준비 가능 여부**: 가능(신규 합성 result.json 1건, head_sha=현재 canonical HEAD). 단 위 28건 정리 후 투입.
- **backlog 0 확인 방식**: `ls memory/events/p0b_inbox/task-*.result.json | wc -l` → fixture 외 **0**이어야 함.
  (현재 실측 = 28 → 미충족.)
- **켜고 끄는 flag**: 켬 = `p0b_driver_enabled`(enabled) + `p0b_activation_epoch`(시작 unix) **2개뿐**. 끔/유지 OFF =
  callback_launch_enabled · kill · event_strategy · systemd. 종료 시 driver_enabled→disabled, epoch 제거.
- **closeout archive 경로**: `memory/reports/limited_pilot_phase1_<PILOT_ID>/`
- **ANU 판단 (Phase 1 승인해도 되는가)**: Phase 0 PASS + 안전경계 코드 검증 완료 + surface-only는 real fire 0이라
  위험 최소. runbook도 고정됨. **단 현재 그대로는 Phase 1 실행 불가** — `p0b_inbox` backlog 28건이 backlog 0 원칙을
  위반하기 때문. 따라서 ANU 판단은 **"backlog 28건 정리(별도 승인)를 선행한 뒤에야 Phase 1 surface-only 승인 가능"**.
  선행 조건: ① backlog 28건 정리/격리 ② fixture 1건 생성(head_sha=canonical HEAD) ③ 실행 직전 driver.main 분기
  재확인 ④ ON/OFF·archive runbook 엄수. 회장 별도 승인 전까지 실행 0.
