<!-- task=m-agent-task-runtime-target-selector/04+03_failover_budget plan=11 tag=ROUTE_POLICY -->
# Code Review Reference - ROUTE_POLICY
## 구현 항목별 완료 여부
| 항목 | 완료 여부 |
|---|---|
| KST route와 failover | [ ] |
| budget 및 selfcheck integration | [ ] |
## 구현 체크리스트
- [ ] KST 경계 Gemini Laguna initial route matrix와 회귀 테스트를 작성한다.
- [ ] provider failure 단방향 Gemini Laguna failover를 구현하고 검증한다.
- [ ] actual invocation target transition 기반 10회 shared stage budget을 검증한다.
- [ ] completing Laguna pinned selfcheck dispatcher integration을 검증한다.
- [ ] 전체 Python suite, py_compile, git diff check를 통과한다.
- [ ] CODE_REVIEW 파일의 구현 에이전트 소유 섹션을 실제 구현 내용과 검증 출력으로 채운다.
## 검증 결과
구현 에이전트가 실제 stdout stderr와 exit code를 기록한다.

## 코드리뷰 결과

### 종합 판정

FAIL

### 차원별 평가

- Correctness: Fail — KST 주야간 1차 route는 반영됐지만 정규 후보 쌍, 단방향 Gemini↔Laguna failover, completing-target selfcheck가 dispatcher 실행 경로에 구현되지 않았다.
- Completeness: Fail — 구현 체크리스트가 전부 미완료이고 plan/review pair가 필수 분석·SDD mapping·구현 evidence를 갖추지 못했다.
- Test coverage: Fail — selector 테스트는 시간대별 단일 후보와 수동 alternate/budget helper만 검증하고 dispatcher의 오래된 정적 기대도 남아 S02/S06/S07/S10 회귀를 포착하지 못한다.
- API contract: Fail — selector의 `failover` API가 dispatcher 호출·persisted decision·logical context 소비 경계에 연결되지 않았다.
- Code quality: Pass — 관찰 범위에서 신규 debug 출력, dead code 또는 포맷 오류는 확인되지 않았다.
- Implementation deviation: Fail — 주간 Gemini·야간 Laguna 1차 선택만 반영됐고 Milestone/SDD가 요구하는 역순 alternate 후보와 실제 failover·selfcheck lifecycle은 빠져 있다.
- Verification trust: Fail — 최신 179개 suite는 정적 route 기대 불일치 2건으로 실패했고 SDD 후보 순서 재현도 실패했으며, 활성 리뷰에는 구현 검증 원문이 없다.

### 발견된 문제

- Required — `agent-ops/skills/project/orchestrate-agent-task-loop/scripts/execution_target_policy.py:93`: KST 주야간 1차 target은 선택하지만 `candidates=(target,)`이라 주간 Gemini→Laguna와 야간 Laguna→Gemini의 canonical alternate가 없다. 두 후보를 시간대별 역순으로 반환하고 `tests/test_execution_target_policy.py:107` 및 `tests/test_select_execution_target.py:398`의 단일 후보 기대를 네 경계 후보 순서 matrix로 교체한다.
- Required — `agent-ops/skills/project/orchestrate-agent-task-loop/scripts/dispatch.py:1099`: dispatcher selector bridge는 `initial|resume`만 호출하고 qualified provider failure를 `transition=failover` 및 `failure_class`로 전달하지 않는다. `run_escalating`의 legacy `promoted_spec` 전환 대신 selector decision을 갱신·영속화하고 `build_context_package`를 실제 다음 invocation에 연결하는 주간/야간 단방향 통합 회귀를 추가한다.
- Required — `agent-ops/skills/project/orchestrate-agent-task-loop/scripts/dispatch.py:3064`: failure budget audit가 현재 invocation `spec`이 아니라 persisted decision의 `selected`와 기존 transition trigger를 기록한다. 실제 호출 target/transition을 기록하도록 바꾸고 primary 1회 실패→재open→alternate 9회 실패가 동일 stage 10회 예산과 `last_target`/`last_transition`을 증명하도록 `tests/test_dispatch.py:5327`을 교체한다.
- Required — `agent-ops/skills/project/orchestrate-agent-task-loop/scripts/dispatch.py:1157`: selfcheck stage 판별은 정적 lane/grade helper에 남아 있고 실제 Gemini→Laguna 완료 decision을 dispatcher가 만들거나 pinned Laguna selfcheck로 소비하는 통합 경로와 테스트가 없다. 실제 완료 target의 local/cloud 성격으로 stage를 정하고 Laguna decision을 새 initial route 없이 재사용하는 S10 회귀를 추가한다.
- Required — `agent-task/m-agent-task-runtime-target-selector/04+03_failover_budget/plan_local_G08_11.log:1`: 리뷰 대상 plan/review pair는 15~16행 축약본으로 `Roadmap Targets`, SDD Acceptance/Evidence Map, 수정 파일·설계 항목·집중 검증과 구현 evidence를 누락했고 모든 체크가 비어 있다. 정상 plan workflow가 S02/S06/S07/S10 기반 self-sufficient follow-up pair를 만들고 구현 에이전트가 실제 stdout/stderr와 exit code를 채운다.

### 검증 근거

- `test_execution_target_policy.py`: 5 tests PASS, exit 0. 주야간 1차 대상은 검증하지만 시간대별 후보가 하나뿐인 상태를 명시적으로 정답으로 둔다.
- `SelectorRouteMatrixTests SelectorFailoverContractTests`: 7 tests PASS, exit 0. 시간 경계 1차 선택은 검증하지만 단일 후보와 수동 삽입한 cloud alternate를 기대하므로 승인 SDD failover drift를 통과시킨다.
- `DynamicFailoverBudgetTest`: 3 tests PASS, exit 0. 실제 selector failover invocation·completing Laguna selfcheck·actual target audit를 실행하지 않는다.
- 전체 Python suite: 179 tests 중 2 failures, exit 1. `TaskStageTest.test_local_route_grade_boundaries`의 G07/G08 정적 Gemini 기대가 새 야간 Laguna 정책과 불일치한다.
- `py_compile`: PASS, exit 0, stdout/stderr 없음.
- `git diff --check`: PASS, exit 0, stdout/stderr 없음.
- SDD S02/S06 최소 재현: 주간 07:00은 Gemini 단일 후보만 반환해 기대한 Gemini→Laguna 후보 순서 assertion이 즉시 실패, exit 1.

### 다음 단계

- FAIL follow-up: code-review가 현재 pair를 자체 route 기반 log 이름으로 아카이브하고, plan skill이 S02/S06/S07/S10 구현과 검증을 위한 새 PLAN/CODE_REVIEW pair를 fresh routing으로 생성한다.

## 코드리뷰 전용 체크리스트

> **[REVIEW AGENT ONLY]** 이 체크리스트는 코드리뷰 에이전트만 사용한다.

- [x] `코드리뷰 결과`에 `FAIL` 판정을 append했다.
- [x] 판정과 차원별 평가, Required/Suggested/Nit 분류가 일치한다.
- [x] active review를 `code_review_cloud_G08_11.log`로 아카이브했다.
- [x] active plan을 `plan_local_G08_11.log`로 아카이브했다.
- [x] `.gitignore` Agent-Ops block의 task markdown/log unignore와 `agent-roadmap/current.md` ignore를 확인했다.
- [x] FAIL 후속 `PLAN-local-G08.md`/`CODE_REVIEW-cloud-G08.md` plan 12 pair를 작성했고 `complete.log`를 만들지 않았다.
