# task-2774+8 결과 — D-2 fire wiring PR (안전 결선·real fire 0, guard-native)

- 정본 sha256(앞16): c6ba97c9373a7b35 (디스크 일치 확인 후 작업)
- base: e4904e2f10c6f1e38610f85a8b3595b252362eec (강제 pull 0)
- worktree: /home/jay/workspace/.worktrees/task-2774+8-dev2 (branch task/task-2774+8-dev2, start_task_guard lock PASS)
- commit: 42fd3dcf (로컬 task 브랜치 — PR/push/merge 0)
- 신규 runner sha256(앞16): 6cefcbd2f54335ac

## 구현 diff (expected_files 안 — 정확히 3파일, 순수 추가 773+/0-)
- dispatch/anu_result_pickup_runner.py (+256/-0)
- tests/regression/test_d2_fire_wiring_2774p8.py (+451)
- memory/plans/spawn_safety_governor/d2_fire_wiring_design_2774p8.md (+66)
★ 0 deletions = attempt_owner_fire / owner_proof_pickup_gate / governor / G2 / G3 /
  D-1 PASS 경로 / build_callback_launch_fn 전부 무수정 입증.

## 새 entrypoint / 결선
- run_approved_oneshot_fire(...): 승인된 1-shot real-fire 의 유일 진입점(일반 runner/pickup/
  driver 자동 호출 0). 순서 fail-closed:
  1) ACTIVE gate = 함수인자 flag_reader (전역 flag 파일 0·p0b_driver_enabled 별개) OFF/부재/예외 → NOOP_DISABLED.
  2) fire_fn 미주입 → FIRE_BLOCKED_NO_FIRE_FN (신규 fail-closed enum·default 실발사 fire_fn 0).
  3) target 미주입 → FIRE_BLOCKED_NO_APPROVAL (ONESHOT_TARGET 하드코딩 자동발사 차단).
  4) 통과 시에만 attempt_owner_fire(approved_one_shot=True, fire_fn=주입, target=주입) 위임.
- build_oneshot_cokacdir_fire_fn(...): production real-fire fire_fn factory(--cron+--once 강제·
  raw key hygiene 고정 라벨·runner 격리 hook). 본 PR production 호출 0.

## 안전 불변식
- FIRE_BLOCKED_NO_FIRE_FN 결선: wrapper 에서 fire_fn 미주입 fail-closed (attempt_owner_fire
  자체 None→FIRE_ERROR 는 2742 회귀 보존 위해 무변경).
- target 인자화/3조건 정확 일치: task_id + abs path + head_sha==canonical HEAD 40자(== only,
  prefix/short SHA 완화 0) — attempt_owner_fire 무수정 재사용. 미일치 fail-closed·fire 0.
- 1회 소진/dedupe: (task_id, head_sha) marker — 2회차 DEDUPED·fire_fn 미호출.
- target 은 호출 인자(파일 manifest 아님) — raw key/민감정보 audit/log 0.
- --once 만(recurring 금지) — factory 가 강제.
- raw key 노출 0: changed 파일 2개에 ANU/executor key 평문 부재(프로그램 검증 PASS).

## 테스트 결과 (mock fire_fn/flag_reader/runner only·실 cokacdir 호출 0)
- 신규 test_d2_fire_wiring_2774p8.py: 21 PASS (회장 11종 전수 + factory 3 + mismatch 세분).
  subprocess.run/Popen assert_not_called 로 real fire 0 입증.
- 회귀 PASS: test_spawn_safety_governor_2774(12) · test_driver_governor_wiring_2774p3(8) ·
  test_controlled_realfire_oneshot_2742(33) · test_late_spawn_reconciliation_2743 ·
  test_os_owner_proof_gate_2741. 합계 146 PASS.
- py_compile PASS (runner + 신규 test).
- 전체 tests/regression: 신규 실패 0 — 12건 사전실패는 베이스라인 e4904e2f 에서도 동일
  (finish-task.sh 내용·HOME env·p0b audit 등 내 변경과 무관). collection 에러 1건(2729p9)은
  타 워크트리 경로명 하드코딩(무관).

## STOP/금지 준수
- real fire 0 · 실 cokacdir --cron 호출(테스트 포함) 0 · 실발사 default fire_fn 0 ·
  approved 조건 완화 0 · expected_files 밖 수정 0 · owner-proof/governor/G2/G3 수정 0 ·
  D-1 PASS 경로 변경 0 · build_callback_launch_fn 수정 0 · raw key 노출 0 · 전역 flag 파일 0 ·
  recurring cron 0 · 자동 PR/merge 0 · ACTIVE 전환 0.

## 대기
PR 미생성(보고 후 대기). PR 생성/merge/real fire 실행은 별도 승인 후.
