---
task_id: task-2516
type: checklist
scope: task
created: 2026-05-09
updated: 2026-05-09
status: completed
---

# 체크리스트: task-2516

**task**: task-2516

---

## Phase 1 — 루(백엔드) — replacement_pr_runner.py minimal fix

- [x] A. top-level `from utils.merge_queue_executor import (...)` 블록(line 33-39) 제거.
- [x] B. 같은 이름의 wrapper 함수 4개(`compare_effective_diff`, `detect_forbidden_paths`, `assert_no_forbidden_git_flags`, `load_task_spec`) 추가 + 각 wrapper 내부에 lazy import.
- [x] C. `TaskSpec`은 `TYPE_CHECKING` 분기로 import + 런타임 `Any` fallback.
- [x] D. import smoke: `from utils import merge_queue_executor as m; assert m._WIRING_AVAILABLE` PASS.

## Phase 2 — 루(백엔드) — 테스트 보강

- [x] A. `tests/regression/test_replacement_pr_runner_2510.py` — wiring 활성화 검증 회귀 케이스 1건 추가 (`_WIRING_AVAILABLE=True` + `ReplacementPRRunner is not None` assert).
- [x] B. `tests/e2e/test_auto_merge_e2e_replay_2515.py` — ctx hook 없이 default runtime path 1건 추가 (clean auto-merge case 재사용).

## Phase 3 — 모리건(테스터) — 검증

- [x] A. `pytest tests/regression/test_replacement_pr_runner_2510.py -q` → ALL PASS.
- [x] B. `pytest tests/e2e/test_auto_merge_e2e_replay_2515.py -q` → ALL PASS (기존 108 + 1).
- [x] C. import smoke: `python3 -c "from utils import merge_queue_executor as m; assert m._WIRING_AVAILABLE and m.ReplacementPRRunner is not None"` exit 0.
- [x] D. `python3 -c "from utils.replacement_pr_runner import ReplacementPRRunner"` 단독 import 성공.
- [x] E. effective diff 정확히 3 파일.

## 검증

- [x] Codex 사전 검증 PASS
- [x] Gemini PR 리뷰 — High 0건
- [x] 마아트 독립 검증 PASS
- [x] G3 독립 검증 PASS
- [x] CI 11/11 SUCCESS
- [x] QC 8항목 검증 완료
- [x] 최종 보고서 작성 + 3문서 status: completed
