{
  "schema_version": "anu_v2.dispatch_decision.v1",
  "task_id": "task-2547+1",
  "decision": "DISPATCH_OWNER_AUTHORIZED_FIX_AFTER_CHAIN_LIMIT",
  "decided_at": "2026-05-11T00:00:00Z",
  "decided_by": "chair_2026-05-11_Option_B_approval",
  "team": "dev6-team",
  "lead": "페룬(Perun)",
  "branch": "task/task-2547+1-dev6-fix",
  "base_commit": "2bae7b7bd8f9fb816c6dcf2fef35d452529ce8fc",
  "base_ref": "origin/main",
  "original_task": "task-2547",
  "original_pr": 95,
  "original_pr_head": "4dc32dc7c36873ac8f90ad8eac68dffca0a53998",
  "classification": "SELF_POLICY_REPLACEMENT_CHAIN_LIMIT_HIT",
  "owner_decision": "AUTHORIZE_TASK_2547_PLUS_1",
  "owner_reason": "GEMINI_FRESH_REVIEW_VALID_REGRESSION_RISK",
  "track": "A_control_plane",
  "level": "Lv.4",
  "expected_files_count": 4,
  "expected_files_rationale": "PR #95의 18 files 본질 산출물을 무비판적으로 확대 복사하지 않고, origin/main 기준으로 effective diff를 다시 산정. Gemini 4 fix 영향 받는 파일과 회귀 fixture 신규 1건만 포함.",
  "expected_files": [
    "dashboard/helpers.py",
    "report_parser.py",
    "scripts/start_task_guard.py",
    "tests/regression/test_task_id_parser_v3.py"
  ],
  "expected_files_per_fix": {
    "fix_1_task_id_strip_regex_multidot": [
      "dashboard/helpers.py"
    ],
    "fix_2_task_id_extract_regex_multidot": [
      "report_parser.py"
    ],
    "fix_3_commit_prefix_regex_multidot": [
      "scripts/start_task_guard.py"
    ],
    "fix_4_dispatch_init_unused_var_cleanup": [
      "(no diff — origin/main 이미 정리 상태, PR #95 가 추가했던 dead 초기화가 base 에 없음. 회귀 박제는 test_task_id_parser_v3.py 의 test_dispatch_init_is_design_task_no_dead_initialization 로 보존.)"
    ],
    "regression_fixture_new": [
      "tests/regression/test_task_id_parser_v3.py"
    ]
  },
  "files_intentionally_excluded_from_pr95": {
    "dispatch/__init__.py": "origin/main 기조 보존 (dead 초기화 없음). 추가 V2 hardening 은 후속 task로 분리.",
    "scripts/auto_merge.py": "Gemini 4 fix 무관. PR #95 무비판 확대 금지 (회장 §명시).",
    "scripts/done-watcher.py": "Gemini 4 fix 무관.",
    "scripts/notify-completion.py": "Gemini 4 fix 무관.",
    "scripts/pattern-detector.py": "Gemini 4 fix 무관.",
    "scripts/report_utils.py": "Gemini 4 fix 무관 (보고서 제목 task-ID 제거 — 후속).",
    "scripts/token-tracker.py": "Gemini 4 fix 무관.",
    "teams/shared/verifiers/browser_verify.py": "Gemini 4 fix 무관.",
    "utils/task_id_parser.py": "Gemini 4 fix 무관 (이미 _LEGACY_DOTPHASE_PATTERN SSOT 보유).",
    "tests/regression/test_dashboard_report_hardening_2487.py": "PR #95 신규. 본 task 는 Gemini 4 fix 회귀 박제만 책임 — task-2487 hardening 은 후속.",
    "tests/regression/test_dispatch_hardening_2487.py": "PR #95 신규. 후속.",
    "tests/regression/test_dotphase_compat_2487.py": "PR #95 신규. multi-dot 회귀는 test_task_id_parser_v3.py 가 1:1 책임.",
    "tests/regression/test_legacy_compat_2487.py": "PR #95 신규. 후속.",
    "tests/regression/test_scripts_hardening_2487.py": "PR #95 신규. 후속."
  },
  "forbidden_paths": [
    "anu_v2/**",
    "memory/poc/**",
    "tests/poc/**",
    "tools/poc/**",
    "memory/orchestration/phase_b_termination_classifier_spec_*.md",
    "memory/events/task-2487*",
    "memory/events/task-2487+1*",
    "memory/tasks/task-2487.md",
    "memory/tasks/task-2487+1.md",
    ".github/workflows/**",
    "DB / Auth / Deploy / migration paths",
    "memory/orchestration-audit/critical-escalations.jsonl (직접 수정 금지, append-only)",
    "PR #49/#50/#51/#52 branches (read-only)",
    "PR #92/#93/#94 branches (CLOSED 보존, 변경 0)",
    "PR #95 branch (변경 0, 추가 commit/push 금지)",
    "PR #96 branch (MERGED 보존)"
  ],
  "must_fix_4_chair_explicit": {
    "fix_1": "task-ID 제거 정규식 — legacy multi-dot 'task-1234.5.6' 지원, 기존 task-1234/+1/.5 회귀 금지",
    "fix_2": "task-ID 추출 정규식 — report parsing 에서 multi-dot 정확 추출",
    "fix_3": "commit message prefix matching 정규식 — multi-dot prefix 인식, guard 로직 오작동 방지",
    "fix_4": "_is_design_task unused variable 제거 — 동작 변경 없이 정리 (origin/main 이미 정리 상태 — 회귀 박제로 유지)"
  },
  "must_regression_7_chair_explicit": [
    "task-2523.9 실제 패턴 fixture 추가 (test_task_id_parser_v3.py)",
    "task-1234.5.6 multi-dot fixture 추가 (test_task_id_parser_v3.py)",
    "task-1234 base 패턴 유지 fixture",
    "task-1234+1 V2 retry 패턴 유지 fixture",
    "task-1234.5 single-dot 패턴 유지 fixture",
    "report_parser / dashboard helpers / commit prefix guard SUT 회귀 박제",
    "전체 관련 regression PASS (45 신규 + 60 기존 = 105/105)"
  ],
  "must_forbidden_16_chair_explicit": [
    "PR #95 직접 push 금지",
    "PR #95 admin override merge 금지",
    "false positive 강제 resolve 금지",
    "force push 금지",
    "rebase 금지",
    "empty commit 금지",
    "close/reopen 금지",
    "bot /gemini review 금지",
    "owner PAT 금지",
    "default GH_TOKEN fallback 금지",
    "expected_files amendment 로 기존 PR 살리기 금지",
    "md/report 만으로 PASS 처리 금지",
    "PR #49/#50/#51/#52 변경 금지",
    "PR #92/#93/#94 변경 금지",
    "PR #96 변경 금지",
    "다른 task/PR 혼입 / long polling / self-register 반복 금지"
  ],
  "chain_policy_chair_explicit": {
    "this_task": "task-2547+1 — 회장 명시 승인에 따른 예외적 next replacement/fix task",
    "next_chain_policy": "task-2547+1 이후 추가 Gemini code-changing issue 가 또 나오면 자동 task-2547+2 발행 금지, OWNER_DECISION_REQUIRED 로 STOP",
    "escalation_classification": "SELF_POLICY_REPLACEMENT_CHAIN_LIMIT_HIT_V2",
    "next_action_if_chain": "OWNER_DECISION_REQUIRED"
  },
  "preservation_check": {
    "PR_95_head": "4dc32dc7c36873ac8f90ad8eac68dffca0a53998",
    "PR_49_head": "da9a8e1265fb305e2f0efef22b4e3d768a363750",
    "PR_50_head": "464114bfbcf9e2854afda51f2f3bbdd6230ac907",
    "PR_51_head": "0d388b98911188a4054b54187ef731c868dc1722",
    "PR_52_head": "b341e8747eb77fc36378cf357ebaf0d663871b12",
    "PR_92_head": "15cf6ad011e184ca298996d47253501152700287",
    "PR_93_head": "5ad46d999988b4272ecc954add28e9b542dd286e",
    "PR_94_head": "2996be2565ecd8b8ff37840fc43341fa0df40a76",
    "PR_96_head": "429569cdb1e5b4e779f31fcb16d5978c183739a2",
    "PR_92_state": "CLOSED",
    "PR_93_state": "CLOSED",
    "PR_94_state": "CLOSED",
    "PR_96_state": "MERGED"
  }
}
