# task-2560 — checklist

## 코드

- [x] `ExecutorScheduler._safe_handle_single_diagnosis` 추가 — per-PR try/except.
- [x] `BotSessionExitRequired` re-raise (cycle 종료 신호).
- [x] non-critical → ACTION_PR_EXCEPTION_ISOLATED + `.failed` marker.
- [x] critical 7 → ACTION_PR_EXCEPTION_CRITICAL_ESCALATED + `.critical-escalated` marker.
- [x] exception summary `.exception.json` 박제 (schema v1).
- [x] `_record_pr_exception_marker` 헬퍼 — fcntl 락 + fsync.
- [x] `run_one_cycle` wrapper 호출로 교체.
- [x] `SchedulerCycleResult` 신규 필드 (isolated/critical/crashed counter).
- [x] `__all__` 신규 상수 export.

## 테스트 (6 필수)

- [x] PR A exception raise 시나리오.
- [x] PR B 정상 처리.
- [x] failed PR marker 생성.
- [x] next PR owner_trigger path 유지.
- [x] whole cycle crash 0.
- [x] long polling 0.
- [x] 부수: critical exception escalation marker.
- [x] 부수: BotSessionExitRequired 전파.
- [x] 부수: Critical 7 분류 표 + summary helper.

## 회귀

- [x] `python3 -m pytest anu_v2/tests/` 전체 통과 (455/455).

## 문서

- [x] plan.md
- [x] context-notes.md
- [x] checklist.md (본 파일)
- [ ] memory/reports/task-2560.md
- [ ] memory/events/task-2560.dispatch-decision.json

## forbidden 0 확인

- [x] anu_v2/owner_trigger_only.py 변경 0
- [x] anu_v2/auto_gemini_triage.py 변경 0
- [x] anu_v2/idle_pr_diagnoser.py / merge_queue_executor.py / 기타 anu_v2 변경 0
- [x] PR #98~#111 branch 변경 0
- [x] dashboard/ 변경 0
- [x] force push / rebase / admin override 0

## PR lifecycle (14 standard)

- [x] cokacdir → workspace
- [x] worktree task-2560-dev5
- [x] 코드 + 테스트 + 3문서
- [ ] BOT identity commit
- [ ] PR 생성 (BOT)
- [ ] Gemini fresh (owner_trigger_only / executor_scheduler 자동)
- [ ] unresolved 0
- [ ] CI 11/11
- [ ] CLEAN
- [ ] BOT squash merge (admin override 0)
- [ ] post-merge smoke + reconcile evidence
- [ ] .done
