---
task_id: task-2509
type: plan
scope: task
created: 2026-05-08
updated: 2026-05-08
status: completed
---

# 계획서: task-2509

**task**: task-2509
**목표**: queue 선두 PR이 자동 머지 10조건을 만족하면 회장 승인 없이 squash merge + post-merge smoke + 후행 stale 재검증을 수행하는 `utils/merge_queue_executor.py` 모듈과 12 케이스 회귀 테스트를 구현한다.
**승인**: 회장 2026-05-08 "정책 문서화가 아니라 코드 자동화 단계로 전환"
**근거**: `memory/tasks/task-2509.md` (회장 §1~14 + 회귀 §1~12)

---

## 목표

`utils/merge_queue_executor.py` (CLI + 모듈) + `tests/regression/test_merge_queue_executor_2509.py` (12 케이스) 작성. CLI: `python3 utils/merge_queue_executor.py --pr <N> --dry-run` → `AUTO_MERGE_ALLOWED` 또는 `BLOCKED_WITH_REASON` JSON 출력. PR #57 → #56 → #55 fixture로 dry-run 재현.

## 범위

### 포함
- 14개 검증 단계 (queue head → squash merge → post-merge smoke → 후행 stale 재검증)
- Critical 7종 enum + escalation 인터페이스 박제
- 후속 모듈 hook 4종 (replacement_pr_runner, auto_gemini_triage, post_merge_smoke_runner, critical_escalation_reporter)
- 회귀 테스트 12 케이스 (subprocess mock + state machine 검증)
- audit/evidence 박제 (`memory/events/{task_id}.merge-queue.json`, `memory/orchestration-audit/merge-queue.jsonl`)
- CLI entrypoint + dry-run JSON 출력

### 제외 (다음 페이즈)
- replacement_pr_runner 실제 구현 (task-2510)
- auto_gemini_triage 실제 구현 (task-2511)
- post_merge_smoke_runner 실제 구현 (task-2512)
- critical_escalation_reporter 실제 구현 (task-2513)
- 실제 PR 자동 머지 운영 (본 task는 dry-run + 인터페이스 박제까지)

## 위임 계획

- 백엔드(루): 기존 untracked `utils/merge_queue_executor.py` 검토 + 보강 (state machine 누락 지점, fixture replay 진입점, audit schema 일치성)
- 테스터(모리건): `tests/regression/test_merge_queue_executor_2509.py` 12 케이스 작성 (subprocess CompletedProcess mock fixture 활용)
- 팀장(다그다): 통합 + dry-run 실행 + L1 + Gemini PR 리뷰 대응

## 검증 기준

- pytest: `cd /home/jay/workspace/.worktrees/task-2509-dev3 && python3 -m pytest tests/regression/test_merge_queue_executor_2509.py -v` → 12 PASS
- L1 dry-run: `python3 utils/merge_queue_executor.py --pr 99 --task-file <fixture> --dry-run --no-audit` → JSON `decision` 필드 출력
- 회귀: PR #57 task-2509 fixture로 dry-run 시 `WAITING_FOR_PREDECESSOR` 또는 `AUTO_MERGE_ALLOWED` 결정 재현
- 정적: `pyright utils/merge_queue_executor.py` 0 error
- forbidden flag: 코드 내 `--admin` `--force` `rebase` 호출 0건 (assert_no_forbidden_git_flags 단위테스트)
