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

# 계획서: task-2503 — Merge Topology Gate code enforcement for dispatch

**task**: task-2503
**목표**: dispatch 단계에서 병렬 작업의 merge topology를 자동 판정하여, 충돌 가능성이 높은 task를 발행 전 차단/보류/직렬화하는 코드 게이트를 구현한다.
**승인**: 회장 2026-05-08T11:30 "정식 정책 — 즉시 효력 발생"
**근거**: `memory/feedback/feedback_merge_topology_gate_260508.md` (정책 본체) + task-2487+1/task-2502 사고 evidence

---

## 목표

`dispatch.py`(실제로는 dispatch/ 패키지)에 Merge Topology Gate hook을 추가하고,
classifier 모듈/스키마/감사로그/회귀테스트를 구축하여 **회장 §1 명시 정책을 코드로 자동화**한다.

측정 가능 결과:
1. 7개 metadata 필드 누락 시 dispatch 거부 (회장 §1)
2. 동일 파일/함수/verifier overlap 시 BLOCK (회장 §4 룰 1-9 적용)
3. dependency 미머지 시 BLOCK (PR mergedAt==null)
4. cherry_pick_allowed=true 시 REQUIRE_CHAIR_OVERRIDE
5. `--override-merge-topology-gate` flag로만 우회 가능
6. 모든 결정은 `merge-topology-gate.jsonl`에 9 필드로 기록 (append-only)
7. 회귀 테스트 10건 ALL PASS

## 범위

### 포함
- `memory/specs/merge-topology-gate-schema.yml` (신규) — 7 metadata 필드 정의
- `utils/merge_topology_gate.py` (신규) — classifier + audit logger
- `dispatch/__init__.py` — Merge Topology Gate hook 1곳 추가 (dispatch() 함수 내부, task 등록 직전)
- `dispatch/__init__.py` argparse — `--override-merge-topology-gate` flag 추가
- `tests/regression/test_merge_topology_gate_schema_2503.py` (신규)
- `tests/regression/test_merge_topology_gate_classifier_2503.py` (신규)
- `tests/regression/test_merge_topology_gate_dispatch_integration_2503.py` (신규)
- `memory/orchestration-audit/merge-topology-gate.jsonl` (append-only audit log)

### 제외 (회장 §7 절대 금지)
- 자동 cherry-pick 구현 — **금지**
- auto_merge 실행부 통합 — **금지**
- PR #52/#49/#50/#51 수정 — **금지**
- task-2497/2498/2494 재실행 흐름 — **금지**
- dashboard / report_parser / scripts/auto_merge.py 침범 — **금지**

## 위임 계획

- 1단계 (schema + classifier + audit logger + dispatch hook): **루(Lugh, 백엔드)** — dispatch 내부 구조 파악 경험
- 2단계 (회귀 테스트 3종, 10건 케이스): **모리건(Morrigan, 테스터)** — 테스트 작성 전문
- 통합 검증/Codex/Gemini 게이트: 다그다(팀장) 직접 수행
- 페르소나 고정: 브리짓(프론트), 아네(UX) 본 작업에 활성화 안 함 (UI 없음)

## 검증 기준

- schema: `python3 -c "import yaml; yaml.safe_load(open('memory/specs/merge-topology-gate-schema.yml'))"` → exit 0
- classifier: `pytest tests/regression/test_merge_topology_gate_classifier_2503.py -v` → 10 PASS
- schema 테스트: `pytest tests/regression/test_merge_topology_gate_schema_2503.py -v` → ALL PASS
- integration 테스트: `pytest tests/regression/test_merge_topology_gate_dispatch_integration_2503.py -v` → ALL PASS
- 자기참조: 본 task-2503 spec이 자체 Gate를 통과해야 함 (parallel_policy: serial_only, merge_queue_position: 1)
- audit log: 첫 dispatch에서 jsonl 1줄 생성 + 9 필드 모두 존재
- 회장 §7 금지 0건: `git diff` 결과에서 `scripts/auto_merge.py`, `dashboard/`, `report_parser.py`, PR #52 영역 변경 0건
