<!-- task=m-agent-task-runtime-target-selector/07+06_context_review_recovery plan=4 tag=REFACTOR -->

# Code Review Reference - REFACTOR

> **[IMPLEMENTING AGENT — READ FIRST]** 구현 소유 섹션과 체크리스트에는 실제 source 및 validation evidence만 기록한다. review verdict와 archive/complete 처리는 review agent가 담당한다.

## 개요

date=2026-07-26
task=m-agent-task-runtime-target-selector/07+06_context_review_recovery, plan=4, tag=REFACTOR

## Roadmap Targets

- Milestone: `agent-roadmap/phase/automation-runtime-bridge/milestones/agent-task-runtime-target-selector.md`
- Task ids: `context-failover`, `failure-budget`, `dispatch-integration`, `audit-tests`
- Completion mode: check-on-pass

## Archive Evidence Snapshot

- `plan_cloud_G09_3.log`: mtime-independent numeric review source selection을 반영한 계획.
- `code_review_cloud_G09_3.log`: FAIL Required. leading-zero `_099` review와 `_010` PLAN archive가 canonical recovery identity를 가로챌 수 있다. review/PLAN matcher와 matching PLAN candidate의 strict canonicalization이 필요하다.
- `plan_local_G07_1.log`, `code_review_cloud_G07_1.log`: local/Pi 과거 시도는 진단 evidence일 뿐 resume source가 아니다.

## 이 파일을 읽는 리뷰 에이전트에게

1. source와 implementation evidence를 대조한다.
2. verdict 뒤 active pair를 `code_review_cloud_G09_4.log`와 `plan_cloud_G09_4.log`로 아카이브한다.
3. PASS이면 `complete.log`과 task archive를 작성한다. WARN/FAIL이면 protocol의 next state만 작성하고 `complete.log`는 만들지 않는다.
4. 사용자 route override에 따라 후속 worker/review가 local model 또는 Pi를 호출하지 않았는지 확인한다.

---

## 구현 항목별 완료 여부

| 항목 | 완료 여부 |
|---|---|
| REFACTOR-7 Canonical archive count parsing | [x] |
| TEST-5 Leading-zero archive recovery regression | [x] |

## 구현 체크리스트

- [x] PLAN/review suffix가 canonical ASCII decimal만 허용된다.
- [x] matching PLAN candidate가 canonical regular filename으로 fail closed 한다.
- [x] leading-zero review/PLAN 및 reversed-mtime regression이 canonical recovery identity를 보장한다.
- [x] focused/class/full unittest, `py_compile`, `git diff --check`, provider `0/0/0` evidence를 기록했다.
- [x] 이 파일의 구현 에이전트 소유 섹션을 실제 구현 내용과 검증 출력으로 채웠다.

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

> **[REVIEW AGENT ONLY]** 구현 에이전트는 이 항목을 변경하거나 체크하지 않는다.

- [x] `코드리뷰 결과`에 `PASS`, `WARN`, `FAIL` 중 하나의 판정을 append한다.
- [x] 판정과 차원별 평가, Required/Suggested/Nit 분류가 일치한다.
- [x] active `CODE_REVIEW-cloud-G09.md`를 `code_review_cloud_G09_4.log`로 아카이브한다.
- [x] active `PLAN-cloud-G09.md`를 `plan_cloud_G09_4.log`로 아카이브한다.
- [x] `.gitignore` Agent-Ops block을 확인한다.
- [x] PASS이면 `complete.log`를 작성하고 active `.md`를 남기지 않는다.
- [x] PASS이면 active task directory를 archive 규칙에 따라 이동한다.
- [ ] WARN/FAIL이면 next active pair 또는 USER_REVIEW 상태를 만들고 `complete.log`를 작성하지 않는다.

## 계획 대비 변경 사항

- 계획한 두 소스 파일만 수정했다.
- strict PLAN candidate filter로 인해 non-canonical PLAN이 더 이른 matching identity 경계에서 거절되므로 기존 assertion의 기대 오류를 `matching archived PLAN identity`로 갱신했다.
- PLAN의 non-regular candidate 계약을 직접 고정하기 위해 같은 regression fixture에 canonical 이름의 디렉터리 후보를 추가했다.

## 주요 설계 결정

- archive suffix는 Python `\d` 대신 `0|[1-9][0-9]*`를 사용해 leading zero와 Unicode digit를 동시에 배제한다.
- `matching_plan_log()`는 filename fullmatch와 `is_file()`을 identity read보다 먼저 수행해 malformed/non-file archive가 recovery source가 되거나 예외를 일으키지 않게 한다.
- canonical review의 numeric newest selection과 canonical identity-matching PLAN의 기존 mtime tie-break는 유지했다.

## 검증 결과

- Focused regression:
  - 명령: `env PATH=/usr/bin:/bin python3 agent-ops/skills/project/orchestrate-agent-task-loop/tests/test_dispatch.py SelectorDispatcherIntegrationTest.test_review_recovery_and_runtime_audit_evidence -v`
  - 결과: `Ran 1 test in 0.044s` / `OK`
- Class regression:
  - 명령: `env PATH=/usr/bin:/bin python3 agent-ops/skills/project/orchestrate-agent-task-loop/tests/test_dispatch.py SelectorDispatcherIntegrationTest RepetitionLimitTest RouteDecisionPersistenceTest -v`
  - 결과: `Ran 15 tests in 5.283s` / `OK`
- Full unittest:
  - 명령: `env PATH=/usr/bin:/bin python3 -m unittest discover -s agent-ops/skills/project/orchestrate-agent-task-loop/tests -p 'test_*.py'`
  - 결과: `Ran 214 tests in 13.803s` / `OK`
- Compile:
  - 명령: `env PATH=/usr/bin:/bin python3 -m py_compile agent-ops/skills/project/orchestrate-agent-task-loop/scripts/dispatch.py agent-ops/skills/project/orchestrate-agent-task-loop/tests/test_dispatch.py`
  - 결과: exit `0`, stdout/stderr 없음.
- Diff validation:
  - 명령: `git diff --check`
  - 결과: exit `0`, stdout/stderr 없음.
- Provider isolation:
  - 모든 Python 명령은 provider binary가 없는 `PATH=/usr/bin:/bin`에서 실행했다.
  - `SelectorDispatcherIntegrationTest.asyncSetUp()`의 deny guard가 real `invoke`와 `build_command` 호출을 금지했고 focused/class 검증 마지막에 `assert_not_called()`를 통과했다.
  - real provider command/session/process=`0/0/0`.

---

> **[IMPLEMENTING AGENT — BEFORE SAVING]** 구현 소유 섹션을 채운 뒤 review-only 섹션은 변경하지 않는다.

## 섹션 소유권

| Section | Owner | Note |
|---|---|---|
| Header, 개요, Roadmap Targets, Archive Evidence Snapshot | Fixed at stub creation | Implementing agent must not modify. |
| 구현 항목별 완료 여부, 구현 체크리스트 | Implementing agent | Check only after actual implementation/evidence. |
| 코드리뷰 전용 체크리스트 | Review agent only | Implementing agent must not modify or check. |
| 계획 대비 변경 사항, 주요 설계 결정, 검증 결과 | Implementing agent | Record actual source/output only. |
| 코드리뷰 결과 | Review agent appends | Not present in stub. |

## 코드리뷰 결과

- 종합 판정: PASS
- 차원별 평가:
  - correctness: Pass — review/PLAN archive suffix가 canonical ASCII decimal로 제한되고, recovery source 선택 전에 canonical filename과 regular-file 조건을 검사한다.
  - completeness: Pass — 이전 리뷰의 leading-zero review/PLAN source 탈취 두 조건과 non-regular PLAN 후보가 모두 구현 및 회귀 evidence로 닫혔다.
  - test coverage: Pass — `_099` review, `_010` PLAN, Unicode digit, canonical zero/positive suffix, reversed mtime, non-file PLAN을 같은 recovery fixture에서 검증한다.
  - API contract: Pass — archive counter가 생성하는 canonical basename만 logical review recovery identity로 수용하며 기존 active-pair 우선순위와 identity matching을 보존한다.
  - code quality: Pass — 변경은 strict matcher와 후보 filter에 한정되고 debug 출력, dead code, TODO 또는 무관한 소스 변경을 추가하지 않았다.
  - implementation deviation: Pass — 계획한 두 소스 파일과 canonicalization 범위 안에서 구현됐고 제출된 deviation은 필요한 assertion 보강뿐이다.
  - verification trust: Pass — focused 1건, 관련 15건, 전체 214건과 compile/diff 검증을 provider 격리 PATH에서 재실행해 제출 evidence와 일치함을 확인했다.
  - spec conformance: Pass — SDD S09의 결정적 persisted review identity와 S12의 audit source 추적 경계를 canonical archive recovery로 보강했다.
- 발견된 문제: 없음
- 다음 단계: PASS — `complete.log`을 작성하고 task artifact를 월별 archive로 이동한다.
- 리뷰 검증 evidence:
  - `env PATH=/usr/bin:/bin python3 agent-ops/skills/project/orchestrate-agent-task-loop/tests/test_dispatch.py SelectorDispatcherIntegrationTest.test_review_recovery_and_runtime_audit_evidence -v` — `Ran 1 test in 0.036s`, `OK`.
  - `env PATH=/usr/bin:/bin python3 agent-ops/skills/project/orchestrate-agent-task-loop/tests/test_dispatch.py SelectorDispatcherIntegrationTest RepetitionLimitTest RouteDecisionPersistenceTest -v` — `Ran 15 tests in 5.248s`, `OK`.
  - `env PATH=/usr/bin:/bin python3 -m unittest discover -s agent-ops/skills/project/orchestrate-agent-task-loop/tests -p 'test_*.py'` — `Ran 214 tests in 13.790s`, `OK`.
  - `env PATH=/usr/bin:/bin python3 -m py_compile agent-ops/skills/project/orchestrate-agent-task-loop/scripts/dispatch.py agent-ops/skills/project/orchestrate-agent-task-loop/tests/test_dispatch.py` — exit 0, 출력 없음.
  - `git diff --check` — exit 0, 출력 없음.
  - provider 격리 PATH에서 provider binary path 출력 없음; focused/class guard가 `invoke`와 `build_command` 미호출을 확인해 real provider command/session/process 신규 실행 수는 `0/0/0`이다.
