# REAL_CALLBACK_SPAWN_CANARY PACKET (packet only — 실행 0, 회장 go 대기)

작성: 2026-06-09 KST / ANU 직접 / base CODE=origin/main 38177185 / **실행 0**
목표: **real callback spawn 검증** (production wake/activation 아님). 단일 ANU-owned 실 envelope 기반 1회.
상태: `REAL_CALLBACK_SPAWN_CANARY_PACKET_REQUESTED_ACTIVE_FALSE`

## 직전 발견 (왜 합성 canary 가 실패했나)
- process_one 의 `verify_collector_authoritative` → `resolve_authoritative_owner(schedule_id)` → `OwnerProbe`: `cokacdir --cron-history <schedule_id> --key <ANU_KEY>` 실조회. outcome: **OWNER_ANU**(ANU 소유 조회 성공) / OWNER_NOT_ANU(access denied·not found) / OWNER_QUERY_FAILED(fail-closed) / OWNER_PENDING(재시도).
- 합성 fixture = collector_envelope 없음 → schedule_id 없음 → OWNER_QUERY_FAILED → QUARANTINE. (안전게이트 정상)
- → verify 통과 = envelope 에 **ANU key 로 cron-history 조회 시 OWNER_ANU 가 나오는 실 schedule_id** 필요.

## 11 항목

### 1. ANU-owned schedule/envelope 어떻게 만들지
- **schedule S(owner-proof 증거)**: ANU key 로 `cokacdir --cron "<benign no-op prompt>" --at "<먼 미래, 예 +1d>" --chat 6937032012 --key <ANU_KEY>` 1개 등록 → `schedule_id S` 획득.
  - 먼 미래(--at +1d) = **세션 spawn 0**(미발사). 등록만으로 ANU 소유.
  - benign prompt = "이 schedule 은 owner-proof 증거. 실행 시 아무 것도 하지 말 것"(어차피 canary 종료 후 remove 라 미발사).
- **fixture envelope**: 격리 temp DATA 의 `task-PILOTCANARY2-<ts>.result.json` 에 `"collector_envelope": {"schedule_id": "S", "self_key_used": false, "collector_role": "ANU"}` + result 필드(task_id/result_json_path/report_path/sha256) + CANARY_DIRECTIVE.

### 2. verify_collector_authoritative 어떻게 통과
- 사전 검증: 등록 직후 `resolve_authoritative_owner(S)` (또는 `cokacdir --cron-history S --key <ANU_KEY>`) 가 **OWNER_ANU** 반환 확인. OWNER_ANU 아니면 즉시 HOLD(잘못된 증거).
- scan_once→process_one→verify_collector_authoritative(envelope.schedule_id=S)→OwnerProbe(S)→OWNER_ANU→verify PASS→wake build.

### 3. 합성 fixture 아니라는 증거
- schedule S = ANU key 로 실제 cokacdir 에 등록된 schedule(cron-list 에 존재, cron-history 조회 OWNER_ANU). 합성/위조 아님 — 실 ANU 소유 schedule 의 id 를 참조.

### 4. scan_once 호출 인자
- `scan_once(root=temp_DATA, paths=[fixture], launcher_fn=build_launcher_fn(temp_DATA))` — driver.main() 미사용. temp DATA = isolated(p0b flags/epoch temp 한정). legacy/production queue 스캔 0(paths 명시).

### 5. real spawn 1회 제한 방법
- scan_once 단일 fixture·1회 호출. dedupe ledger(temp) fail-closed → 재호출 SKIP_DEDUPE. build_launcher_fn = real-wake flag(temp) + sealed key → `partial(launch_wake, dry_run=False)` 1회. **wake cron B = real spawn 1회**(회장 Telegram). schedule S 는 미발사(spawn 0).

### 6. Telegram canary ack 예상 형태
- wake cron B 발사 → ANU 세션 spawn(회장 chat) → fixture CANARY_DIRECTIVE 읽고 **"CANARY_ACK task-PILOTCANARY2-<ts>"** 한 줄 회신 후 종료(기대). ★ autonomous agent 라 보장 아님 — ack 외 행동 시 HOLD(lock).

### 7. canonical write 최대 1건 경로
- 머신러리 canonical write 0. spawned 세션 상한 = `memory/events/task-PILOTCANARY2-<ts>.canary-ack.json` 1건(또는 0, ack 는 Telegram). 초과 시 abort.

### 8. rollback 방법
- (a) `cokacdir --cron-remove S --chat 6937032012 --key <ANU_KEY>` (owner-proof schedule 제거). (b) wake cron B = 1회성(발사 후 자동 소비) — 잔존 시 cron-remove. (c) `rm -rf /tmp/p0b_pilot2_<ts>` (temp DATA+CODE worktree). (d) canonical p0b flag/epoch ABSENT 재확인. (e) canary-ack marker(생성 시) 분리 라벨.

### 9. ACTIVE=false / systemd / activation_epoch 무변동 확인
- canonical `memory/state/p0b_driver_enabled`·`p0b_real_wake_enabled`·`p0b_activation_epoch` = ABSENT 유지(temp 한정만 생성). systemd anu-pickup not-found 유지. 사전/사후 확인.

### 10. legacy result.json 140(현 128) 무변동 확인
- temp DATA 스캔(paths=[fixture]) → canonical events 비스캔. 사전/사후 `ls memory/events/task-*.result.json | wc -l` 동일(128) + 개별 mtime 무변동.

### 11. 실패 시 HOLD_FOR_CHAIR 조건
- schedule S 가 OWNER_ANU 아님 / verify QUARANTINE 재발 / real spawn 2회+ / canonical write(ack 외) / spawned 세션 canary ack 외 행동 / legacy 128 변동 / canonical p0b flag·epoch·systemd 변경 / task-2716 수정 / raw key 새 노출.

## 정직 caveat
- 이 canary = 실 ANU-owned schedule S(미발사) + 실 wake B(1회 real spawn, 회장 Telegram ack). production wake/activation 아님(단일 fixture·ACTIVE=false·legacy 스캔 0).
- spawned 세션 = autonomous → ack ≤1 canonical write 는 prompt scope+audit(코드 게이트 아님). 회장 Telegram 메시지 수신.
- real_callback_spawned 성공 주장은 **실제 ack 수신 + 1회 spawn + canonical clean audit 후에만**.

## 금지 (현재)
실행 / systemd enable / activation_epoch(canonical) / legacy 처리 / production queue 스캔 / 반복 real spawn / ACTIVE=true. **packet 준비까지만.**

## 판정
- **REAL_CALLBACK_SPAWN_CANARY_PACKET_READY_ACTIVE_FALSE** (packet 완성, 실행 0). 실행 = 회장 명시 go + Telegram canary 수신 동의 후.
