{
  "schema": "anu_v2.dispatch_decision.v1",
  "task_id": "task-2560",
  "title": "FUC-4 per-PR exception isolation in ExecutorScheduler",
  "track": "A",
  "level": "Lv.2",
  "severity": "MEDIUM",
  "team": "dev5",
  "owner_persona": "marduk",
  "dispatched_at": "2026-05-13T00:30:00+00:00",
  "chairman_directive_ts": "2026-05-12T00:00:00+00:00",
  "본질": "ExecutorScheduler._handle_single_diagnosis per-PR try/except isolation. 한 PR 예외가 cycle 전체를 중단하지 않게 한다.",
  "필수_구현_7": [
    "_handle_single_diagnosis per-PR isolation",
    "실패 PR만 FAILED/ESCALATED marker 생성",
    "다음 PR diagnosis 진행",
    "cycle 전체 중단 0",
    "exception summary decision/audit 기록",
    "Critical 7이면 critical escalation marker",
    "non-critical exception이면 cycle 유지"
  ],
  "필수_테스트_6": [
    "PR A exception raise",
    "PR B 정상 처리",
    "failed PR marker 생성",
    "next PR owner_trigger path 유지",
    "whole cycle crash 0",
    "long polling 0"
  ],
  "expected_files": [
    "anu_v2/executor_scheduler.py",
    "anu_v2/tests/test_executor_scheduler_per_pr_isolation.py",
    "anu_v2/fixtures/executor_per_pr_exception_isolation.json",
    "memory/reports/task-2560.md",
    "memory/events/task-2560.dispatch-decision.json",
    "memory/plans/tasks/task-2560/plan.md",
    "memory/plans/tasks/task-2560/context-notes.md",
    "memory/plans/tasks/task-2560/checklist.md"
  ],
  "forbidden_paths": [
    "anu_v2/owner_trigger_only.py",
    "anu_v2/auto_gemini_triage.py",
    "anu_v2/idle_pr_diagnoser.py",
    "anu_v2/merge_queue_executor.py",
    "anu_v2/polling_policy.py",
    "anu_v2/owner_trigger_audit.py",
    "anu_v2/owner_trigger_decision.py",
    "anu_v2/owner_trigger_pat.py",
    "anu_v2/replacement_pr_runner.py",
    "anu_v2/pr_open_gemini_trigger_prevention.py",
    "anu_v2/gemini_stale_prevention_runner.py",
    "anu_v2/post_merge_smoke_runner.py",
    "anu_v2/worktree_cleanup.py",
    "anu_v2/merge_queue_executor.py",
    "dashboard/",
    "scripts/ci.sh",
    ".github/workflows/",
    "team_prompts/",
    ".env",
    ".env.keys"
  ],
  "forbidden_pr_branches": [
    "PR #98~#111 branch 변경 0"
  ],
  "금지_7": [
    "owner_trigger_only.py 수정",
    "auto_gemini_triage.py 수정",
    "task-2558 expected_files 재수정",
    "task-2562(G4 Task B)와 같은 PR 섞기",
    "task-2561(baseline noise)과 같은 PR 섞기",
    "회장 수동 /gemini review",
    "force push / rebase / admin override"
  ],
  "completion_conditions_6": [
    "regression PASS",
    "expected_files strict",
    "forbidden path 0",
    "CI/Gemini/CLEAN",
    "BOT squash merge",
    "post-merge smoke + reconcile evidence"
  ],
  "escalation_mapping": {
    "per_pr_isolation_regression": "EXECUTOR_REGRESSION",
    "forbidden_hit": "FORBIDDEN_PATH_HIT",
    "task_2558_area_mutate": "OUT_OF_SCOPE_MUTATE",
    "ci_failure": "CI_FAILURE"
  },
  "authoritative": true,
  "chat_notifications": 0
}
