{
  "schema": "replacement_pr_runner_migration_options.v1",
  "task_name": "TRACK_F_REPLACEMENT_PR_BASELINE_REAUDIT",
  "ts_kst": "2026-05-21 09:45 KST",
  "mode": "read-only · option evaluation · proposal-only",
  "corrected_baseline": "v1 (utils/replacement_pr_runner.py, 718L) = production sole source · merge_queue_executor wired (L1745) · 19 tests pass. v2 (anu_v2/, 442L) = parallel orphan · main repo caller 0.",
  "options": [
    {
      "id": "OPT_V_NO_MIGRATION_NEEDED",
      "recommended": true,
      "summary": "migration 불필요 — utils/replacement_pr_runner.py 가 곧 v3 import path 자체. v1 이 production sole source 로 정상 작동 (19 tests pass + merge_queue wired). 'v3 shim' 은 직전 audit false baseline (0 lines) 산물.",
      "actions": ["코드 변경 0", "task-2623 기존 spec 폐기 (회장 보류 결정 정합)", "v3 import path = utils.replacement_pr_runner (이미 존재)"],
      "regression_risk": "NONE (변경 0)",
      "blast_radius": "NONE",
      "loc": 0,
      "pros": ["production 무손상", "19 tests 보존", "baseline error 정정으로 가짜 gap 해소"],
      "cons": ["anu_v2 orphan 잔존 (별도 OPT_W 로 처리)"]
    },
    {
      "id": "OPT_W_ANU_V2_DEPRECATION_REVIEW",
      "recommended": "BACKLOG_LOW",
      "summary": "anu_v2/replacement_pr_runner.py 는 main repo caller 0 (orphan). dead-code 가능성 검토 → deprecation 또는 archive. v1 production 무관.",
      "actions": ["anu_v2 replacement runner 사용처 최종 확인 (worktree leftover 제외)", "orphan 확정 시 deprecation 마커 또는 archive 디렉토리 이동", "anu_v2/tests 동반 처리"],
      "regression_risk": "LOW (main repo caller 0)",
      "blast_radius": "LOW (anu_v2 isolated)",
      "loc": "삭제/이동 위주",
      "pros": ["dead-code 정리", "v1/v2 혼동 제거 (향후 audit baseline error 재발 방지)"],
      "cons": ["anu_v2 era 의 다른 4 모듈과 함께 검토 필요 (단독 처리 시 부분성)"],
      "note": "회장 dev 봇 재가동 정책 + dead-code 처리 정책 별도 결정 필요"
    },
    {
      "id": "OPT_X_v1_to_v2_cutover_with_caller_migration",
      "recommended": false,
      "summary": "(페룬 제안) expected_files 4 확장 + v1 → v2 cutover + caller migration",
      "rejected_reason": "v2 가 v1 의 superset 아님 (v1 의 20 module funcs 중 8개가 v2 부재 · merge_queue 의존). v2 production caller 0인데 production wired v1 을 v2 로 교체할 이유 없음. 19 tests 회귀 + merge_queue 파손 위험. 직전 audit false baseline 가정 위에 세워진 옵션.",
      "regression_risk": "HIGH (19+ tests + merge_queue production)",
      "blast_radius": "HIGH"
    },
    {
      "id": "OPT_Y_split_2623abc",
      "recommended": false,
      "summary": "(페룬 제안) task-2623 분할 — v1 deprecate + callers cutover + shim drop-in",
      "rejected_reason": "OPT_X 와 동일 전제 (v1 → v2 방향). v1 이 production sound 인데 deprecate 할 이유 없음. baseline error 정정 후 무의미.",
      "regression_risk": "HIGH",
      "blast_radius": "HIGH"
    },
    {
      "id": "OPT_Z_force_current_spec",
      "recommended": false,
      "summary": "(페룬 제안) 현재 spec 강행 + 19+ 회귀 명시 override",
      "rejected_reason": "회장 verbatim '기존 spec 강행 금지' 직접 위배. baseline error 위 spec 강행은 production 파손.",
      "regression_risk": "CRITICAL",
      "blast_radius": "CRITICAL"
    }
  ],
  "recommendation_final": "OPT_V (NO_MIGRATION_NEEDED) 채택 + OPT_W (anu_v2 deprecation review) 를 LOW backlog 으로 분리. task-2623 기존 spec 은 회장 보류 결정대로 폐기. v3 replacement PR runner gap 은 실재하지 않음 (false-gap).",
  "expected_files_candidates": {
    "OPT_V": "없음 (코드 변경 0)",
    "OPT_W_if_authorized": ["anu_v2/replacement_pr_runner.py (deprecation 마커 또는 archive 이동)", "anu_v2/tests/test_replacement_pr_runner_2537.py (동반)"]
  },
  "critical7_assessment": {
    "is_critical7": false,
    "rationale": "read-only audit · 옵션 평가만 · 코드 변경 0"
  },
  "chair_decision_required": [
    "(1) OPT_V (NO_MIGRATION_NEEDED) ACCEPT — task-2623 기존 spec 폐기 확정",
    "(2) OPT_W (anu_v2 deprecation review) backlog 등록 여부 (dev 봇 재가동 정책 연계)",
    "(3) 직전 Track F audit 5 artifacts invalidated 처리 (replacement_pr_dry_run_matrix 등) — 정정 마커 또는 superseded 표기",
    "(4) task-2624 reconcile evidence contract 독립 진행 가능 여부 확인"
  ],
  "auto_progress": false,
  "scope_invariants_preserved": [
    "read-only audit only", "자동 remediation 0",
    "코드 변경 0", "PR/merge/credential write 0",
    "anu_v2 변경 0", "utils replacement runner 변경 0"
  ]
}
