{
  "candidate_task_id": "task-2504",
  "title": "Merge Topology Gate dispatch.py integration",
  "spawned_from": "task-2503 Phase 1 amendment 2026-05-08T11:32",
  "amendment_reference": "memory/tasks/task-2503.md §Phase 1 / Phase 2 분리",
  "priority": "★★",
  "level": "Lv.3+",
  "parallel_policy": "serial_only",
  "cherry_pick_allowed": false,
  "merge_queue_position": 1,
  "stale_recheck_required": true,
  "preconditions": [
    "task-2503 Phase 1 PR merged",
    "회장 명시 승인 (회장 amendment 2026-05-08T11:32 §Phase 2)"
  ],
  "phase_2_scope": {
    "must_implement": [
      "dispatch/__init__.py main() 진입 시 utils.merge_topology_gate.run_gate 호출 hook",
      "BLOCK 시 dispatch 거부 + sys.exit(1) + audit log 기록 (production)",
      "REQUIRE_CHAIR_OVERRIDE 시 --override-merge-topology-gate 플래그 검증",
      "LIMITED_PARALLEL 시 merge_queue_position 검증 + audit warn",
      "tests/regression/test_merge_topology_gate_dispatch_integration_2504.py (신규)",
      "scripts/finish-task.sh 또는 scripts/auto_merge.py 통합 (회장 결정 시)"
    ],
    "must_not_break": [
      "task-2497/2498/2494 재실행 흐름",
      "PR #52/#49/#50/#51 영역",
      "기존 dispatch routing 분류 결정 (task-2474 호환)",
      "legacy task (metadata 누락 task) 호환성 — fail-open 또는 ALLOW 처리"
    ]
  },
  "phase_1_evidence_in_workspace": {
    "schema": "memory/specs/merge-topology-gate-schema.yml",
    "classifier": "utils/merge_topology_gate.py (pure function, dispatch import 미수행)",
    "cli_dry_run": "python utils/merge_topology_gate.py --dry-run --task-file <path>",
    "audit_jsonl_path": "memory/orchestration-audit/merge-topology-gate.jsonl",
    "regression_tests_phase_1": [
      "tests/regression/test_merge_topology_gate_schema_2503.py",
      "tests/regression/test_merge_topology_gate_classifier_2503.py",
      "tests/regression/test_merge_topology_gate_audit_format_2503.py"
    ],
    "self_reference_pass": "memory/events/task-2503.self-reference-pass"
  },
  "phase_2_files_pre_existing_in_branch": {
    "warning": "task-2503 Phase 1 amendment 이전 commit fc49a9fd에 Phase 2 변경이 포함됨. Phase 1 PR에 절대 포함 금지.",
    "violating_changes": [
      "dispatch/__init__.py — --override-merge-topology-gate argparse 등록 + main() merge_topology_gate hook block (Phase 2 영역)",
      "tests/regression/test_merge_topology_gate_dispatch_integration_2503.py — dispatch hook 검증 테스트 (Phase 2 영역, 파일명도 task-2504로 재명명 권장)"
    ],
    "remediation_options": [
      "옵션 A: Phase 1 PR을 origin/main에서 새 branch로 생성하고 Phase 1 expected_files만 cherry-pick",
      "옵션 B: 현재 branch에서 git revert로 dispatch/__init__.py + dispatch_integration test 제거 후 Phase 2 branch에 별도 cherry-pick 보존",
      "옵션 C: Phase 2 task-2504 발행 시 fc49a9fd commit을 base로 활용 (회장 명시 승인 필요)"
    ],
    "recommended_option": "A — origin/main에서 clean Phase 1 branch 생성 (가장 깨끗한 PR diff)"
  },
  "issued_at": "2026-05-08T12:35:00+09:00",
  "issued_by": "task-2503 Phase 1 amendment compliance"
}
