{
  "schema": "replacement_pr_runner_callers_matrix.v1",
  "task_name": "TRACK_F_REPLACEMENT_PR_BASELINE_REAUDIT",
  "ts_kst": "2026-05-21 09:45 KST",
  "mode": "read-only · caller graph",
  "v1_callers_utils_replacement_pr_runner": [
    {
      "path": "utils/merge_queue_executor.py",
      "type": "PRODUCTION_WIRED",
      "sites": [
        {"line": 63, "form": "from utils.replacement_pr_runner import ReplacementPRRunner (top-level try)"},
        {"line": 84, "form": "ReplacementPRRunner = None (ImportError fallback)"},
        {"line": 102, "form": "ReplacementPRRunner (재export/사용)"},
        {"line": 162, "form": "REPLACEMENT_PR_RUNNER_HOOK = 'replacement_pr_runner' (task-2510 hook const)"},
        {"line": 1120, "form": "replacement_runner: Optional[Any] = None (ctx attribute)"},
        {"line": 1255, "form": "W2 ctx.replacement_runner.execute() 호출 (effective diff != expected_files 분기)"},
        {"line": 1745, "form": "replacement_runner=ReplacementPRRunner(runner=runner, dry_run=args.dry_run) (실 instantiate)"}
      ],
      "breakage_if_v1_removed": "merge queue replacement 분기 전면 파손 (production)"
    },
    {
      "path": "tests/e2e/test_auto_merge_e2e_replay_2515.py",
      "type": "TEST_E2E",
      "sites": [
        {"line": 41, "form": "from utils.replacement_pr_runner import ReplacementPRRunner"},
        {"line": 116, "form": "ReplacementPRRunner(runner=runner, dry_run=True)"},
        {"line": 689, "form": "module reload 검증 ('utils.replacement_pr_runner')"},
        {"line": 697, "form": "assert mqe.ReplacementPRRunner is not None (wiring assertion)"}
      ],
      "breakage_if_v1_removed": "e2e replay wiring assertion fail"
    },
    {
      "path": "tests/regression/test_replacement_pr_runner_2510.py",
      "type": "TEST_REGRESSION_19_CASES",
      "sites": [
        {"line": 1, "form": "module docstring (task-2510 12 케이스 → 19 확장)"},
        {"line": 20, "form": "from utils.replacement_pr_runner import (...) 다수 symbols"}
      ],
      "current_status": "19 passed in 0.15s (exit 0)",
      "breakage_if_v1_removed": "19 cases ImportError fail"
    },
    {
      "path": "tests/regression/test_orchestration_runtime_2514.py",
      "type": "TEST_REGRESSION",
      "sites": [{"line": 87, "form": "from utils.replacement_pr_runner import (...)"}],
      "breakage_if_v1_removed": "collection/import fail 가능"
    }
  ],
  "v1_callers_main_repo_count": 4,
  "v2_callers_anu_v2_replacement_pr_runner": {
    "main_repo_production_callers": [],
    "main_repo_production_caller_count": 0,
    "non_main_references": [
      {"location": ".worktrees/task-2537-dev4/anu_v2/tests/test_replacement_pr_runner_2537.py", "type": "WORKTREE_LEFTOVER_TEST"},
      {"location": ".worktrees/task-2561-dev2/...", "type": "WORKTREE_LEFTOVER"},
      {"location": ".worktrees/task-2564-dev5/...", "type": "WORKTREE_LEFTOVER"},
      {"location": ".worktrees/task-2566-dev1/...", "type": "WORKTREE_LEFTOVER"},
      {"location": ".worktrees/task-2549plus1-dev2/...", "type": "WORKTREE_LEFTOVER"},
      {"location": "(다수 .worktrees/* + anu_v2/tests/test_replacement_pr_runner_2537.py)", "type": "ISOLATED_SELF_TEST"}
    ],
    "interpretation": "anu_v2.replacement_pr_runner 는 main repo 의 어떤 production 모듈도 import 하지 않음. 참조는 전부 (a) 옛 dev 작업 worktree leftover, (b) anu_v2 자체 test. → main production path 기준 anu_v2 replacement runner = ORPHAN (사용처 0)"
  },
  "caller_summary": {
    "v1_production_wired": true,
    "v1_main_callers": 4,
    "v2_production_wired": false,
    "v2_main_callers": 0,
    "conclusion": "v1 = production sole source · v2 = parallel orphan (main repo caller 0). 직전 audit '0 lines stub · anu_v2 가 실 구현' 결론과 정반대."
  },
  "scope_invariants_preserved": [
    "read-only audit only", "코드 변경 0", "PR/merge/credential write 0"
  ]
}
