# CODE REVIEW cloud G07 - m-change-aware-test-routing/01_change_classifier_core

## 구현 요약

- 상태: 구현 완료
- 변경 파일: `agent-ops/skills/project/run-proto-socket-test-matrix/scripts/run_test_by_change.sh` (신규)
- 계획 파일: `PLAN-cloud-G07.md`

## Roadmap Targets

- Milestone: `agent-roadmap/milestones/change-aware-test-routing.md`
- Completed task ids:
  - `last-pass-point`
  - `diff-source`
  - `path-domain-map`

## 계획 대비 변경 사항

- PLAN에서 언급한 `test_route_common.sh` 또는 `run_test_by_change.sh --classify-only` 두 방안 중 단일 파일 `run_test_by_change.sh`로 구현.
- 출력 계약은 key: value 줄 + Markdown 표 혼합 형식으로 구현 (후속 task에서 grep/sed로 파싱 가능).

## 검증 결과

### 필수 명령

```
bash agent-ops/skills/project/run-proto-socket-test-matrix/scripts/run_test_by_change.sh --classify-only
```

출력 (요약):
```
route: auto
last_pass_record: agent-test/runs/20260607-115737-proto-socket-full-matrix.md
last_pass_ref: 83a8b22
fallback_reason: (없음)
changed_file_count: 14
detected_languages: 없음
detected_domains: docs,test-docs
docs_only: no
untracked_included: yes
```

변경 파일 14개가 언어/도메인 분류 표로 출력됨.

### route별 동작

| route | last_pass_ref | profile |
|-------|--------------|---------|
| auto  | 83a8b22 | proto-socket-full-matrix |
| speed | 85b86fc | proto-socket-performance-quick |
| stability | 85b86fc | proto-socket-stress-full |
| full  | 83a8b22 | proto-socket-full-matrix |

### 보조 명령

```
bash agent-ops/skills/project/run-proto-socket-test-matrix/scripts/run_test_by_change.sh --help
# → 사용법 출력 확인

bash agent-ops/skills/project/run-proto-socket-test-matrix/scripts/run_test_by_change.sh --route bad
# → exit code 2, 오류 메시지 출력 확인

git diff --check -- agent-ops/skills/project/run-proto-socket-test-matrix/scripts
# → exit 0 (whitespace 오류 없음)
```

## 코드리뷰 체크리스트

- [x] 마지막 PASS record 선택이 route별로 동작한다.
- [x] PASS record 부재/해석 불가 fallback이 명확하다.
- [x] tracked, staged, unstaged, untracked 변경 파일이 누락되지 않는다.
- [x] archive 접근 금지 범위를 분석 대상에서 제외한다.
- [x] path/domain/language 분류 출력이 안정적이다.
- [x] 실제 테스트 실행 없이 classify-only 결과만 만든다.

## 사용자 리뷰 요청

_기본값은 `없음`이다. 구현 중 사용자 결정, 사용자 소유 외부 환경/secret/서비스 준비, 또는 계획 범위 변경 없이는 안전하게 진행할 수 없으면 아래 항목을 실제 내용으로 교체하고, 구현을 중단한 뒤 active 파일을 그대로 둔 채 리뷰를 요청한다. 구현 에이전트는 사용자에게 직접 질문하거나 선택지를 제시하거나 `request_user_input`을 호출하지 않는다. 후속 에이전트가 명령 재실행이나 산출물 수집으로 해소할 수 있는 검증 증거 공백만으로는 사용자 리뷰 요청을 작성하지 않는다._

- 상태: 없음
- 사유 유형: 없음
- 결정 필요: 없음
- 차단 근거: 없음
- 실행한 검증/명령: 없음
- 자동 후속 불가 이유: 없음
- 재개 조건: 없음

## 코드리뷰 결과

- 종합 판정: FAIL
- 차원별 평가:
  - Correctness: Fail
  - Completeness: Fail
  - Test coverage: Fail
  - API contract: Fail
  - Code quality: Pass
  - Plan deviation: Fail
  - Verification trust: Pass
- 발견된 문제:
  - Required: `agent-ops/skills/project/run-proto-socket-test-matrix/scripts/run_test_by_change.sh:264`에서 모든 `*.md`, `*.txt`, `docs/*`를 `docs` domain으로 분류하고, `agent-ops/skills/project/run-proto-socket-test-matrix/scripts/run_test_by_change.sh:333`에서 `docs` 외 domain이 없으면 곧바로 `docs_only=yes`로 판정합니다. PLAN의 docs-only 계약은 "tracked docs/README/PORTING guide만 변경된 경우"인데, 현재 구현은 active `agent-task/*.md`, roadmap 문서, 임의 Markdown 파일만 바뀐 경우도 docs-only로 오판할 수 있습니다. 후속 라우팅이 테스트를 축소하거나 생략하는 입력으로 쓰는 값이라 계약 위반입니다. fix: docs-only 후보를 tracked human-facing docs 경로로 한정하고, `agent-task/**`, roadmap 운영 문서, 기타 임의 Markdown은 별도 domain 또는 `other`로 처리하거나 docs-only 계산에서 제외/비대상으로 분리하세요. 이 edge를 임시 파일/fixture 없이 재현 가능한 명령으로 검증 결과에 남기세요.
- 다음 단계: FAIL이므로 user-review gate는 트리거하지 않고 후속 `PLAN-cloud-G07.md`와 `CODE_REVIEW-cloud-G07.md`를 작성한다.

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

- [x] `코드리뷰 결과`에 `PASS`, `WARN`, `FAIL` 중 하나의 판정을 append한다.
- [x] 판정과 `차원별 평가`, Required/Suggested/Nit 분류가 서로 일치한다.
- [x] active `CODE_REVIEW-cloud-G07.md`를 `code_review_cloud_G07_0.log`로 아카이브한다.
- [x] active `PLAN-cloud-G07.md`를 `plan_cloud_G07_0.log`로 아카이브한다.
- [x] `.gitignore`의 Agent-Ops 관리 block이 `agent-task/**/*.md`와 `agent-task/**/*.log`를 unignore하고 `agent-roadmap/current.md`를 ignore하는지 확인한다.
- [ ] PASS이면 `agent-ops/skills/common/code-review/templates/complete-log-template.md` 기준으로 `complete.log`를 작성하고 active `.md` 파일을 남기지 않는다.
- [ ] PASS이면 active task 디렉터리를 archive로 이동하고 최종 archive 경로에서 이 체크리스트를 갱신한다.
- [ ] PASS이고 task group이 `m-<milestone-slug>`이면 런타임이 읽을 완료 이벤트 메타데이터를 보고하고, roadmap 수정이나 `update-roadmap` 직접 호출을 하지 않는다.
- [x] WARN/FAIL이고 user-review gate가 트리거되지 않았으므로 다음 active `PLAN-cloud-G07.md`와 `CODE_REVIEW-cloud-G07.md`를 작성하고 `complete.log`를 작성하지 않는다.
- [ ] USER_REVIEW이면 `agent-ops/skills/common/code-review/templates/user-review-template.md` 기준으로 `USER_REVIEW.md`를 작성하고 active `PLAN-*.md`, `CODE_REVIEW-*.md`, `complete.log`를 남기지 않는다.
