## 구현 체크리스트

- [ ] [RWD-1] `run_test_by_change.sh`에 언어별 direction(map: server/client/both) 집계를 추가해 파일명 힌트 기반으로 방향 후보를 계산한다.
- [ ] [RWD-2] `functional routing` 출력에서 direction이 명확한 언어는 `functional-server-x5` 또는 `functional-client-x5`로 분기하고, 불명확 시 `functional-both-x5`를 기본값으로 유지한다.
- [ ] [RWD-3] 기존 `functional-both-x5` 처리 경로는 `transport/queue` 또는 명시 라우팅일 때 유지되며 중복 문자열이 없도록 검증한다.
- [ ] [RWD-4] 실행 명령: `bash agent-ops/skills/project/run-proto-socket-test-matrix/scripts/run_test_by_change.sh --route auto --dry-run`에서 변경 언어/방향 조합별 추천 row 출력이 기대대로 나오는지 확인한다.
- [ ] CODE_REVIEW-local-G01.md의 구현 에이전트 소유 섹션을 실제 구현 내용과 검증 출력으로 채운다. 이 항목이 완료되기 전에는 구현이 완료된 것이 아니다.

## 구현 에이전트 소유

- 구현 항목:
- 적용한 diff:
- 검증 출력:
- 실패/예외 및 대응:
- 최종 의견:

## 사용자 리뷰 요청
- 없음

## 코드리뷰 결과

- 종합 판정: FAIL
- 차원별 평가:
  - correctness: Fail
  - completeness: Fail
  - test coverage: Fail
  - API contract: Pass
  - code quality: Warn
  - plan deviation: Fail
  - verification trust: Fail
- 발견된 문제:
  - Required: `agent-ops/skills/project/run-proto-socket-test-matrix/scripts/run_test_by_change.sh:445`의 명시 라우팅 분기에서 `speed`/`stability`처럼 `functional_status != recommended`인 경우에도 파일명 direction에 따라 `functional-server-x5` 또는 `functional-client-x5` skipped 후보를 냅니다. 계획의 RWD-3는 명시 라우팅에서 기존 `functional-both-x5` 경로 유지를 요구하므로, 해당 else branch는 direction을 쓰지 말고 `add_recommendation "skipped-candidate" "functional-both-x5" "$lang" ...`를 유지해야 합니다. 임시 worktree에서 `dart/lib/src/server_probe.dart`를 둔 뒤 `--route speed --dry-run`을 실행하면 현재 출력은 `skipped-candidate | functional-server-x5 | dart`입니다.
  - Required: `agent-task/m-change-aware-test-routing/01_dart_web_coverage/CODE_REVIEW-local-G01.md:3`의 구현 체크리스트와 `agent-task/m-change-aware-test-routing/01_dart_web_coverage/CODE_REVIEW-local-G01.md:11`의 구현 에이전트 소유 섹션이 비어 있습니다. 계획의 마지막 필수 항목 자체가 이 파일을 실제 구현 내용과 검증 출력으로 채우는 것이므로, 현재 active review artifact만으로는 구현 완료를 인정할 수 없습니다.
  - Required: `agent-ops/skills/project/run-proto-socket-test-matrix/scripts/CODE_REVIEW-local-G01.md:1`에 리뷰 산출물이 source script 디렉터리 아래 untracked 파일로 생성되었습니다. 이 파일은 task artifact가 아니며 `run_test_by_change.sh --route auto --dry-run`의 변경 파일 목록에도 `test-docs` 변경으로 섞입니다. 올바른 task 디렉터리의 review 파일에 필요한 내용을 남기고, 잘못 생성된 source tree artifact는 제거해야 합니다.
  - Required: `agent-roadmap/milestones/change-aware-test-routing.md:42`, `agent-roadmap/milestones/change-aware-test-routing.md:48`, `agent-roadmap/milestones/change-aware-test-routing.md:49`가 이번 구현 plan 범위 밖에서 완료 체크로 변경되어 있습니다. code-review 루프에서는 PASS 후 `complete.log`의 `Roadmap Completion` 메타데이터를 런타임이 소비해야 하므로, 구현 follow-up은 roadmap 상태를 직접 완료 처리하지 않아야 합니다. 이 diff가 이번 task 산출물이라면 되돌리고, 사용자 또는 별도 task 소유 변경이라면 소유권과 제외 근거를 follow-up review에 명시해야 합니다.
- 다음 단계: FAIL 후속으로 `PLAN-local-G02.md`와 `CODE_REVIEW-local-G02.md`를 작성한다.

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

- [x] `코드리뷰 결과`에 `PASS`, `WARN`, `FAIL` 중 하나의 판정을 append한다.
- [x] 판정과 `차원별 평가`, Required/Suggested/Nit 분류가 서로 일치한다.
- [x] active `CODE_REVIEW-*-G??.md`를 `code_review_{review_lane}_GNN_N.log`로 아카이브한다.
- [x] active `PLAN-*-G??.md`를 `plan_{build_lane}_GNN_M.log`로 아카이브한다.
- [x] `.gitignore`의 Agent-Ops 관리 block이 `agent-task/**/*.md`와 `agent-task/**/*.log`를 unignore하고 `agent-roadmap/current.md`를 ignore하는지 확인한다.
- [x] WARN/FAIL이고 user-review gate가 트리거되지 않았으면 다음 active `PLAN-{build_lane}-GNN.md`와 `CODE_REVIEW-{review_lane}-GNN.md`를 작성하고 `complete.log`를 작성하지 않는다.
