{
  "id": "OS_LEVEL_PICKUP_RUNNER_DECISION_PENDING_ACTIVE_FALSE",
  "ts_kst": "2026-06-09 22:10 KST",
  "packet_doc": "memory/plans/p0b-pickup/os_level_pickup_runner_decision_packet_260609.md",
  "purpose": "ARCHITECTURE_PACKET 구현 전 결정 4건 확정(권고안 명시)+보강 6항. read-only 설계. 구현/설치/ACTIVE=true/queue 처리 0.",
  "evidence_confirmed": "driver verdict 9종(WAKE_BUILT/PICKUP_SKIP/QUARANTINE/FIRE_FAILED/NOOP_DISABLED/NOT_TARGET/NOT_READY/LEGACY_SKIP/MAX_FILES_DEFER) / owner-proof 4-outcome(ANU/NOT_ANU/QUERY_FAILED/PENDING fail-closed) / dedupe ledger / legacy-epoch(fail-open 금지) / MAX_FILES=50",
  "decisions": {
    "1_path_vs_timer": "권고 PATH+TIMER 병행. path=즉시(저지연) but 부팅/중단시 기존파일 유실·PathExistsGlob 재발화 애매. timer(120s)=완결성 safety-net. dedupe+.done.acked+flock 가 중복 흡수→병행 안전. 비용 timer 1개",
    "2_collector_schema": "권고 collector_result.json 고정: task_id/source_result_sha256/verdict/ts_kst/runner_version + owner_proof{outcome,schedule_id,query_ok} + dedupe{hit,ledger_key} + scope{pass} + closeout_action{none|done_acked|quarantined|deferred} + agent_relay{required,reason}. raw key 0(argv_len·sha만). 위치 memory/events/task-<id>.collector_result.json(원본 분리 1:1). agent_relay.required=예외 라우팅 단일 분기점",
    "3_relay": "권고 2-tier. 기본=cokacdir --sendfile 보고(데이터 처리 0·알림만·coupling-free·늦/실패해도 데이터 안전). 예외(agent_relay.required)=cokacdir --cron ANU 1회 relay(merge/dispatch/PR 금지). 예외 경로만 coupling 영향 but 데이터 이미 안전",
    "4_devbot_enforce": "권고 단계적 2+1. 즉시=result.json callback_schedule_created:false 필드 강제(runner 위반 관측)+dispatch prompt 명문(현행). 후속=PreToolUse hook 으로 dev bot 세션 cokacdir --cron 실차단(가장 강·세션 settings 결선 필요·난이도). self-collector 근원 최종 차단=hook"
  },
  "reinforcement": {
    "5_deterministic": "target 판별/schema/flag 게이트/readiness/legacy/dedupe/owner-proof(read)/scope/.done→.acked/collector_result 기록/MAX_FILES defer. 전부 LLM 불요→green-path agent wake 0 완결",
    "6_agent_exception": "owner-proof QUARANTINE 사유 해석/Gemini finding 분류/모호 merge-ready/Critical7 종합보고/consolidated multi-PR report→agent_relay.required=true+reason. relay 보고만, 실행=회장 승인. 수거/dedupe/owner-proof 는 runner 가 이미 완결",
    "7_owner_proof": "resolve_authoritative_owner(envelope.schedule_id, RealCokacdirCronHistoryProbe)→cokacdir --cron-history --key ANU read-only. ANU만 통과/NOT_ANU·QUERY_FAILED→QUARANTINE(fail-closed)/PENDING→재시도(false quarantine 차단). self_key_used:true→거부. read 전용→cron-fire 의존 0→inbound-coupling 무관",
    "8_idempotency": "3중: dedupe ledger(task_id closeout 존재→SKIP)+.done.acked marker+flock single-flight. 키=(task_id,source_result_sha256). path 재발화/timer 중복/재부팅 흡수→real 처리 1회 idempotent",
    "9_legacy_0": "activation_epoch 마커. epoch 부재→skip(epoch_absent, fail-open 금지)/mtime<epoch→NOOP_LEGACY_SKIP/mtime≥epoch→정상. events 128 무변동·queue 미터치",
    "10_preconditions": ["path+timer 설계 확정", "deterministic closeout regression(각 verdict·green-path wake 0)", "owner-proof read quiet window 성공(coupling 무관)", "devbot 계약+hook 결선 검증", "relay 경계(merge/dispatch/PR 0)", "dry-run 무부작용", "legacy 128 NOOP", "회장 승인 후 systemd path+timer 설치+통제 1회 canary", "real activation 회장 승인"]
  },
  "capability_matrix": {
    "decision_1_path_timer": "RECOMMEND_PATH_PLUS_TIMER",
    "decision_2_schema": "RECOMMEND_COLLECTOR_RESULT_SCHEMA_FIXED",
    "decision_3_relay": "RECOMMEND_2TIER_SENDFILE_DEFAULT_CRON_EXCEPTION",
    "decision_4_devbot_enforce": "RECOMMEND_FIELD_PROMPT_NOW_HOOK_FOLLOWUP",
    "owner_proof": "CRON_HISTORY_READ_ONLY_4OUTCOME_FAILCLOSED",
    "ACTIVE": "false", "production_activation_gate": "HARD BLOCK"
  },
  "forbidden_now": ["구현", "systemd 설치", "ACTIVE=true", "production queue 처리", "daemon restart", "direct Claude launch", "추가 canary 실행"],
  "state_preserved": "canonical HEAD 75fdf540(task-2716) 무손상 / events 무변동 / p0b flags(driver/real_wake/epoch) ABSENT / systemd anu-pickup NOT installed.",
  "verdict": "OS_LEVEL_PICKUP_RUNNER_DECISION_PACKET_READY — 4 결정 권고(path+timer / collector_result schema / 2-tier relay / field+prompt now·hook followup) + 보강 6항. 구현/설치/canary=회장 별도 승인."
}
