# task-2776 — live_inbox evidence wiring 결과 보고서

상태: **MERGE_CANDIDATE** (PR 생성 완료 · merge 금지 — ANU 독립검증/Gemini/CI 후 회장/ANU 판단)
담당: dev2-team · 레벨: 코드+테스트(Lv.2) · merge_policy=manual
base HEAD: `189f1f0de60146bb172c9fb540bf80114f7bbb4a`

## 무엇을 했나 (1줄)
main 의 event_strategy/live_inbox 분기에서 `scan_live_inbox_once(..., write_evidence=True)` 를
**명시 전달**해, actual main runtime 경로의 LIVE_* verdict 가 `driver_runs.jsonl` 에 영속되게 결선했다.

## 근본 원인 / 수정
- `scan_live_inbox_once` 의 `write_evidence` 기본값은 `False`. main 의 event_strategy 분기(driver:~2354)가
  이를 미전달 → `_emit` 이 `_append_evidence` 를 호출하지 않음 → actual main runtime 경로에서 LIVE_*
  verdict(LIVE_PENDING_OWNER_PROOF 등) evidence 0줄 → OBSERVED 로 닫지 못하는 gap(Phase 1 retry).
- 수정: 해당 호출에 `write_evidence=True` 1줄 명시 전달(+설명 주석). else 의 `scan_once`
  (`write_evidence=True` 기본) 경로와 **대칭**으로 일관.
- 부작용/중복 0: `report_records` 는 reporter_outbox/ledger(보고용)이고 `_append_evidence` 는
  `EVIDENCE_JSONL_REL`(memory/p0b_state/driver_runs.jsonl, 증거)라 **별도 파일** — 이중 기록 아님.
  main live scan 1회에 LIVE_* evidence 정확히 1줄 append(테스트 ④로 명시 검증).
- fire/move/callback contract·activation gate 무변경 — 영속만 추가.

## 변경 파일 (expected_files 외 변경 0)
1. `dispatch/anu_pickup_driver.py` — +11 (기능 1줄 `write_evidence=True` + 설명 주석 10줄)
2. `tests/regression/test_live_inbox_evidence_wiring_2776.py` — 신규(테스트 6개)

## 테스트 (필수 5종 + 정적 결선)
1. **main-path LIVE_PENDING 영속(★)**: `main(limited_runtime=True)` **격리 root**, event_strategy ON +
   live fixture(head_sha mismatch) → driver_runs 에 `LIVE_PENDING_OWNER_PROOF` evidence persisted ·
   callback 호출 0 · LIVE_PROCESSED(REAL_FIRED) 0 · fixture move 0(live_inbox 잔존·processed 비어있음) ·
   완료 ledger 미생성(canonical write 0). ★ 함수 직접 호출 아닌 main() runtime 경로 격리.
2. **event_strategy OFF 회귀 0**: 플래그 부재 → else(scan_once) 1회 도달 · scan_live 미진입.
3. **callback flag OFF safety**: callback_launch_enabled 부재 + 실 production callback fn → ACTIVE flag
   OFF 단락 → audit jsonl 미생성(real fire 0 · cron 0) · LIVE_* evidence 영속.
4. **duplicate evidence 방지**: main live scan 1회 → LIVE_PENDING_OWNER_PROOF 정확히 1줄(중복 0) ·
   driver_runs ≠ reporter_outbox 경로 분리 확인.
5. **ACTIVE=false / disabled NOOP**: driver flag 부재 → 2중 게이팅 차단 → scan_live 미호출 ·
   LIVE_* evidence 영속 0.
6. (보강) 정적 결선 검증: main 소스의 scan_live_inbox_once 호출에 `write_evidence=True` 포함.

### 음성 대조(negative control)
write_evidence=True 제거 시 테스트 ①③④⑥ FAIL, ②⑤ PASS — 테스트가 결선 gap 을 실제로 포착함을 확인.

## 회귀 (전부 PASS) — 139 passed
- `test_live_inbox_evidence_wiring_2776.py` (신규 6)
- `test_limited_activation_bounds_2775.py` (63)
- `test_p0b_event_strategy_2760.py` + `test_p0b_event_strategy_wiring_2760.py` (36)
- `test_anu_pickup_driver_2721.py` (34)
- `python3 -m py_compile` PASS · expected_files 밖 수정 0.

## 안전 posture (PR 게이트)
ACTIVE=false 유지 · real fire 0 · flags OFF 유지(p0b_driver_enabled/event_strategy/callback_launch
파일 미생성·미변경) · systemd 무접촉 · canary/recurring/backlog/archive 무접촉 · merge 0.

## 금지/STOP 준수
activation·real fire·flag ON·event_strategy ON(실제 canonical)·systemd·canary·recurring·
backlog·archive 28건·pending fixture 이동·merge 모두 미수행. STOP 조건 해당사항 없음.

## bounded fix doctrine
HIGH/Critical 0 · medium 0(코드 1줄 + 테스트) · style-only(Pyright 미해소 import/unused-arg)는
2775 테스트와 동일 부트스트랩 패턴·의도된 test-double 시그니처 → non-blocking.

## 다음 단계 (ANU)
독립검증 → fresh Gemini review → CI green 확인 → MERGE_CANDIDATE 최종 판정(merge 는 ANU/회장).
