{
  "schema": "dispatch_entry_remediation_proposal_v2.v1",
  "ts_kst": "2026-05-20 22:35 KST",
  "mode": "proposal-only · 자동 진행 0 · 회장 결정 대기",
  "phase2_conclusion": "task-2621 wiring 으로 production-wide 결선 완료 판정 — daily dispatch CLI+import 둘 다 callback contract gate 통과. 잔여 NOT_WIRED production path 없음. doctrine/guide 단계는 완료(byte-limit doctrine + 9 required fields contract). 다음 단계는 모두 LOW~MEDIUM priority defense-in-depth 후보.",
  "proposed_candidates_for_chair_decision": [
    {
      "candidate_id": "P1",
      "title": "S03 cron_dispatch_guard.guard_dispatch_with_owner 를 task-2621 wiring 의 PRE-cron 체인에 추가",
      "priority": "LOW",
      "rationale": "현재 task-2621 PRE-cron 게이트는 enforce_callback_owner(S04) 만 호출 · guard_dispatch_with_owner / guard_callback_registration(S03) 은 미호출. defense-in-depth 강화 후보지만 enforce_callback_owner 가 이미 ANU-key 권위 충족하므로 중복 위험.",
      "expected_files_candidate": ["dispatch/__init__.py (ADDITIVE — task-2621 wiring 블록 안에 1줄 추가)", "tests/regression/test_dispatch_init_callback_wiring.py (regression 1건 추가)"],
      "risk": "LOW — ADDITIVE only · 시그니처 byte-0 · PASS path 무영향. 중복 가능성만 점검 필요.",
      "critical7": false,
      "chair_approval_required": true
    },
    {
      "candidate_id": "P2",
      "title": "callback_owner_enforcer 내부에 dispatch_callback_contract.assert_collector_key_is_independent_anu chain 추가 — 두 시스템 통합",
      "priority": "LOW",
      "rationale": "현재 두 ANU-key 권위(+49 era enforce_callback_owner DEFAULT_ANU_KEYS · task-2614 era assert_collector_key_is_independent_anu) 가 task-2621 wiring 에서 병렬 호출됨. callback_owner_enforcer 내부에서 chain 하면 모든 caller 자동 통합 enforcement. 단 +49 era 모듈 byte-0 깨짐 위험.",
      "expected_files_candidate": ["dispatch/callback_owner_enforcer.py (ADDITIVE — 위 시그니처 byte-0 보장 시)", "tests/regression/test_callback_owner_enforcer_chain.py (신규)"],
      "risk": "MEDIUM — 핵심 +49 era 모듈 변경 · 모든 caller 영향 · 정교한 ADDITIVE 필요",
      "critical7": false,
      "chair_approval_required": true,
      "note": "feedback_dispatch_no_mid_correction 정합 검증 필요. 별도 chair-authorized task."
    },
    {
      "candidate_id": "P3",
      "title": "cancel-on-success 자동화 — collector adjudication durable-success 시점에 fallback safety-net 자동 제거",
      "priority": "MEDIUM",
      "rationale": "현재 collector adjudication 완료 후 fallback cron 수동 제거(또는 fallback fire 시 자체 self-cancel). 자동화 시 노이즈 0 + 운영품질 향상. 단 자동 제거가 idempotent + race-safe 보장 필요(feedback_no_dual_purpose_watcher 정합).",
      "expected_files_candidate": ["anu_v3/callback_4tuple_registry.py 또는 별도 helper", "tests/regression/test_cancel_on_success_automation.py"],
      "risk": "LOW-MEDIUM — collector 측 변경 · production dispatch 영향 0",
      "critical7": false,
      "chair_approval_required": true
    },
    {
      "candidate_id": "P4",
      "title": "다른 cokacdir invocation 사이트 audit (utils/error_alert.py 등) — production 가 아닌 알림/유틸리티 path",
      "priority": "LOW",
      "rationale": "utils/error_alert.py:109 가 'cokacdir <message>' 호출 (--cron 아님 · 알림 한정). dispatch path 가 아니지만 callback contract 정책 적용 여부 검토.",
      "expected_files_candidate": ["utils/error_alert.py 분석만 · 변경 없을 가능성"],
      "risk": "LOW — audit-only",
      "critical7": false,
      "chair_approval_required": false,
      "note": "현 audit 범위에서 read-only 분류 완료 — '알림 한정·dispatch path 아님' 결론. 추가 작업 불필요."
    },
    {
      "candidate_id": "P5",
      "title": "byte-limit runtime guard 구현 (CALLBACK_PROMPT_BYTE_AUDIT step 5)",
      "priority": "DEFERRED_BY_CHAIR",
      "rationale": "회장 명시: 10표본 누적 후 read-only 통계 분석 결과 후 별도 결정. 본 Phase2 audit 범위 아님.",
      "expected_files_candidate": ["callback_prompt_byte_guard_proposal.json 정본 참조"],
      "chair_decision_basis": "10표본 누적 분석 결과 후"
    }
  ],
  "scope_strictly_excluded_in_phase2": {
    "Track_C_task_2619": "별도 회장 승인 동결 유지 · 미접촉",
    "zombie_cron_dev2_dev8": "cross-watcher 간섭 0 · 별도 hygiene backlog",
    "baseline_13_pre_existing_regression_fails": "별도 hygiene backlog",
    "test_orchestration_runtime_2514_import_error": "별도 hygiene backlog",
    "runtime_guard_implementation": "CALLBACK_PROMPT_BYTE_AUDIT 10표본 분석 후 별도 회장 승인 사항"
  },
  "what_NOT_to_do_in_this_proposal": [
    "기존 CLOSED_ALL_SETTLED 산출물 변조 0",
    "task-2620 scope-clarification(ledger 48) 정정 0",
    "task-2621 wiring 변경 0(이미 ACCEPT)",
    "Track C 수정 0",
    "zombie cron 정리 0",
    "+49 era 모듈 강제 merge 0",
    "production path 외 새 dispatch 추가 0",
    "회장 승인 전 자동 진행 0"
  ]
}
