---
name: ★★ Merge Topology Gate (병렬 작업 dispatch 정책)
description: 병렬 작업은 dispatch 단계에서 Merge Topology Gate 통과 시에만 허용. 동일 파일/함수/verifier/lifecycle/migration 병렬 금지. 의존성 선후 강제. 체리픽 복구 경로 한정.
type: feedback
---

# ★★ Merge Topology Gate — 병렬 작업 dispatch 정책

> 회장 정식 정책 (2026-05-08T11:30 명시) — task-2487+1 / task-2502 사고 후 도입.

## 발효 시점

2026-05-08 즉시. 모든 신규 dispatch에 적용.

## 1. dispatch 시점 의무 metadata (7건)

각 task는 dispatch 시점에 다음 7건을 task 파일에 **명시 필수**:

| 필드 | 정의 | 예시 |
|---|---|---|
| `expected_files` | 본 task가 변경할 예상 파일 목록 | `["utils/task_id_parser.py", "tests/regression/test_*.py"]` |
| `risk_area` | 변경 영향 risk 영역 | `verifier_layer / ssot / ci_workflow / migration / lifecycle_state` |
| `dependency` | 선행 PR / task 머지 필요 여부 | `["task-2485+1.merged", "task-2502.merged"]` 또는 `none` |
| `parallel_policy` | 병렬 허용 분류 | `parallel_safe / limited_parallel / serial_only` |
| `merge_queue_position` | 머지 순서 강제 | 정수 (작은 순부터 머지) 또는 `n/a` (병렬 안전) |
| `stale_recheck_required` | main 변경 시 재검증 의무 | `true / false` |
| `cherry_pick_allowed` | 체리픽 허용 여부 (복구 경로만) | `false (정상 경로) / recovery_only` |

dispatch.py는 위 7건이 task 파일에 없으면 거부해야 한다 (구현 후속).

## 2. 병렬 금지 영역 (Serial Only — 5종)

다음 중 하나라도 해당하면 **두 task가 절대 병렬 dispatch 불가**:

1. **동일 파일** — 같은 .py/.md/.yml 파일을 두 task 모두 수정
2. **동일 함수** — 다른 파일이라도 같은 함수 정의/import 변경
3. **동일 verifier** — `teams/*/qc/verifiers/*.py` 같은 verifier 수정
4. **동일 lifecycle state machine** — finish-task / qc_verify / done-watcher 등
5. **동일 migration/schema** — DB schema, task_id_parser SSOT, ruleset 등

→ 이 경우 `parallel_policy: serial_only` + `merge_queue_position` 정수 강제

## 3. Limited Parallel (제한 병렬)

파일은 다르지만 같은 QC/merge lifecycle에 속한 작업:

- 예: 같은 `gemini-review-gate` CI를 거치는 PR 다수
- 예: 같은 `taskctl-state-guard` 하에서 동시 머지 시도

→ `parallel_policy: limited_parallel` + `merge_queue_position` 강제 + 머지 순서 직렬화

## 4. Parallel Safe (안전 병렬)

read-only 분석 / 문서화 / 분리된 도메인 (예: marketing vs dev) / 서로 다른 디렉토리 + 의존성 0:

→ `parallel_policy: parallel_safe` + `merge_queue_position: n/a`

## 5. 의존성 강제 (Serial Dependency)

선행 task 산출물을 후행 task가 사용하는 경우:

- **후행 task는 선행 PR 머지 후 dispatch** (premature dispatch 금지)
- 후행 task spec에 `dependency: [선행 task ID]` 명시
- 선행 PR이 closed/replaced 시 후행 task spec 재검토 의무

**위반 사례**:
- task-2487+1 → task-2502 (SSOT 함수 main 미반영 상태에서 verifier 수정 시도 → SCOPE-GUARD violation)

## 6. 체리픽 정책

- **체리픽은 정상 경로 아님**, 복구 경로(recovery)로만 허용
- **자동 cherry-pick 금지**
- 필요 시 **replacement PR을 생성**하고 **회장 승인** 후 처리
- task spec의 `cherry_pick_allowed: false` 기본값. 복구 경로 시 `recovery_only` + 회장 승인 evidence 필수

## 7. Why (정책 도입 사유)

### 위반 사례 incident 기반:

1. **task-2487+1 SCOPE-GUARD violation** (2026-05-08): SSOT 함수가 main에 부재한 상태에서 verifier 수정 시도 → utils/task_id_parser.py + workflow paths + 다른 task plans 60+ 파일 침범
2. **6팀 batch ESCALATED_VERIFIER_LIMITATION** (2026-05-08): 6팀 동시 dispatch 후 finish-task 단계에서 동일 verifier import error 동시 발생 → branch isolation 결함의 실시간 재현
3. **task-2487 stuck pattern** (2026-05-08): PR open 후 1시간 무반응 → STUCK_AFTER_PR_OPEN 분류 신설

### 핵심 인사이트
> 병렬 작업의 함정은 **파일 충돌** 뿐 아니라 **lifecycle/verifier/SSOT/main_HEAD/worktree 분기**에서 발생함. 단순 디렉토리 분리만으로는 충돌 방지 불가.

## 8. dispatch.py 의무 (구현 후속)

dispatch.py는 task 파일을 받으면 다음을 검증:

1. 7 metadata 필드 존재 여부
2. expected_files가 다른 active task의 expected_files와 겹치는지
3. risk_area가 동일한 active task가 있는지
4. dependency 명시된 선행 task가 머지됐는지 (PR `mergedAt != null`)
5. merge_queue_position 충돌 여부

위반 시 dispatch 거부 + 회장 승인 후 `--override-merge-topology-gate` 플래그로만 우회.

## 9. 박제 위치

- 본 룰: `memory/feedback/feedback_merge_topology_gate_260508.md` (본 파일)
- Phase B 통합 항목: `memory/orchestration/phase_b_integration_items_260507.md §10` (신설)
- backlog 13번: dispatch.py Merge Topology Gate 구현 (Phase B integration items §9.4)

## 10. 시행 (Enforcement)

- **즉시 효력 발생** (2026-05-08T11:30)
- 신규 dispatch (task-2503+ 또는 task-2497/2498 재실행 등)는 본 룰 의무 적용
- 기존 발사된 task (task-2502 등)는 회고 적용 — 추후 metadata 보강
- 본 룰 위반 dispatch는 회장 명시적 `--override-merge-topology-gate` 승인 없이는 거부
