<!-- task=m-change-aware-test-routing/02_full_functional_periodic plan=2 tag=REVIEW_RFP -->

# Plan: RFP 리뷰 FAIL 보완

## 이 파일을 읽는 구현 에이전트에게

이 계획은 `code_review_local_G05_0.log`의 Required 이슈만 좁게 보완한다. 구현이 끝나면 실행한 명령, 실제 stdout/stderr, 판단 근거를 active `CODE_REVIEW-local-G06.md`의 구현 에이전트 소유 섹션에 채우고 active 파일을 그대로 둔 채 리뷰 준비를 보고한다. 최종 판정, log rename, `complete.log`, archive 이동은 code-review 스킬 전용이므로 구현 에이전트가 수행하지 않는다. 사용자만 결정할 수 있는 범위 충돌, 사용자 소유 외부 환경, secret, 서비스 준비가 필요하면 직접 질문하지 말고 `CODE_REVIEW-local-G06.md`의 `사용자 리뷰 요청` 섹션에 정확한 증거와 재개 조건을 남긴 뒤 중단한다.

## 배경

G05 리뷰에서 `run_full_test.sh`가 classifier 출력의 `functional-full` recommended 여부를 실제 실행 gate로 쓰지 않는 문제가 확인되었다. 현재 script는 `has_recommended`를 계산하지만 `--dry-run` 메시지에만 사용하고, dry-run이 아니면 `run_matrix.sh`를 항상 호출한다. 이 때문에 문서와 classifier가 `skipped-candidate` 또는 `noop`으로 둔 상황에서도 full matrix가 실행될 수 있다.

## 사용자 리뷰 요청 흐름

구현 중 사용자 판단이 필요한 사항은 active review stub의 `사용자 리뷰 요청` 섹션에 기록한다. 구현 에이전트는 사용자에게 직접 질문하거나 chat 선택지를 만들지 않으며, code-review 스킬이 user-review 필요성을 검증하고 `USER_REVIEW.md` 작성 여부를 결정한다. 후속 에이전트가 명령 재실행이나 산출물 수집으로 해소할 수 있는 검증 공백은 사용자 리뷰 요청이 아니라 검증 결과 또는 계획 대비 변경 사항으로 기록한다.

## Roadmap Targets

- Milestone: `agent-roadmap/milestones/change-aware-test-routing.md`
- Task ids:
  - `full-functional-periodic`: protocol/넓은 변경에서 full functional 5x5 + Dart.web/WSS coverage 분리 라우팅
- Completion mode: check-on-pass

## 분석 결과

### 읽은 파일

- `agent-task/m-change-aware-test-routing/02_full_functional_periodic/plan_local_G05_0.log`
- `agent-task/m-change-aware-test-routing/02_full_functional_periodic/code_review_local_G05_0.log`
- `agent-ops/skills/project/run-proto-socket-test-matrix/scripts/run_full_test.sh`
- `agent-ops/skills/project/run-proto-socket-test-matrix/scripts/run_test_by_change.sh`
- `agent-ops/skills/project/run-proto-socket-test-matrix/SKILL.md`
- `agent-test/local/rules.md`
- `agent-test/local/proto-socket-full-matrix.md`

### 테스트 환경 규칙

- test_env: `local`
- `agent-test/local/rules.md` 존재 및 읽음.
- 이번 변경은 shell entrypoint gate 보완이므로 전체 matrix 재실행보다 wrapper의 deterministic stdout/stderr와 matrix 호출 여부 smoke를 우선한다.

### 테스트 커버리지 공백

- 기존 검증은 `functional-full`이 recommended인 현재 작업트리 dry-run만 확인했다.
- follow-up은 `functional-full` 미추천 출력에서 `run_matrix.sh`가 호출되지 않는지, recommended 출력에서는 기존 `--all`/`--unit --proto` 호출이 유지되는지 focused smoke로 검증해야 한다.

### 심볼 참조

- renamed/removed symbol 없음.
- public user-facing option 추가가 필요하지 않다. 기존 `--dry-run`, `--skip-network`, `--help` 계약을 유지한다.

### 분할 판단

- Required 이슈는 `run_full_test.sh`의 gate 하나에 한정된다.
- 문서 보정은 gate 동작 설명이 실제와 어긋나는 경우에만 함께 수정한다.

### 범위 결정 근거

- 포함: `run_full_test.sh`의 non-dry-run recommended gate, 필요한 최소 문서 문구 보정, focused shell smoke.
- 제외: classifier 정책 재설계, full matrix 실제 장시간 실행, performance/stability nightly runner 구현, roadmap 상태 전환.

### 빌드 등급

- lane: local, GNN: 06
- 근거: 실패 원인이 명확한 shell control-flow bug이며, temp stub 기반 stdout/stderr로 local deterministic 검증이 가능하다.

## 구현 체크리스트

- [x] [REVIEW_RFP-1] `run_full_test.sh` non-dry-run 경로에 `functional-full` recommended gate를 적용하고, recommended/non-recommended 양방향 focused smoke를 실제 stdout/stderr로 기록한다.
- [x] CODE_REVIEW-*-G??.md의 구현 에이전트 소유 섹션을 실제 구현 내용과 검증 출력으로 채운다. 이 항목이 완료되기 전에는 구현이 완료된 것이 아니다.

### [REVIEW_RFP-1] run_full_test.sh recommended gate 적용 및 검증

- `문제`: `run_full_test.sh`가 `has_recommended`를 계산하지만 dry-run 이후 실행 경로에서 사용하지 않아 `functional-full` 미추천 상태도 full matrix를 실행한다.
- `해결 방법`: classifier 출력에 `| recommended | functional-full ` row가 없으면 non-dry-run에서도 `run_matrix.sh`를 호출하지 않고 명확한 skipped/미실행 메시지를 출력한 뒤 성공 종료한다. recommended가 있으면 기존처럼 `--skip-network`는 `run_matrix.sh --unit --proto`, 기본은 `run_matrix.sh --all`을 호출한다. classifier 실패 exit는 기존처럼 전파한다.
- `수정 파일 및 체크리스트`: `agent-ops/skills/project/run-proto-socket-test-matrix/scripts/run_full_test.sh`를 우선 수정한다. 문서가 "recommended 상태만 실행" 계약을 충분히 표현하지 못하면 `agent-ops/skills/project/run-proto-socket-test-matrix/SKILL.md` 또는 `agent-test/local/proto-socket-full-matrix.md`의 해당 문구만 좁게 보정한다.
- `테스트 작성`: 별도 test file은 추가하지 않는다. temp directory에 현재 `run_full_test.sh`와 stub `run_test_by_change.sh`/`run_matrix.sh`를 두는 focused smoke로 matrix 호출 여부를 확인한다.
- `중간 검증`:
  - `bash -n agent-ops/skills/project/run-proto-socket-test-matrix/scripts/run_full_test.sh`
  - `bash agent-ops/skills/project/run-proto-socket-test-matrix/scripts/run_full_test.sh --help`
  - `bash agent-ops/skills/project/run-proto-socket-test-matrix/scripts/run_full_test.sh --dry-run`
  - temp stub classifier가 `functional-full` 미추천 표를 출력할 때 non-dry-run 실행이 matrix marker를 만들지 않는지 확인한다.
  - temp stub classifier가 `| recommended | functional-full | all | ... |`을 출력할 때 non-dry-run 실행이 matrix marker를 만들고, `--skip-network`일 때 stub matrix가 `--unit --proto` 인자를 받는지 확인한다.

## 수정 파일 요약

| 파일 | 항목 |
|---|---|
| `agent-ops/skills/project/run-proto-socket-test-matrix/scripts/run_full_test.sh` | recommended gate 적용 |
| `agent-ops/skills/project/run-proto-socket-test-matrix/SKILL.md` | 필요 시 entrypoint 실행 조건 문구 보정 |
| `agent-test/local/proto-socket-full-matrix.md` | 필요 시 skipped/recommended 실행 조건 문구 보정 |

## 최종 검증

- `bash -n agent-ops/skills/project/run-proto-socket-test-matrix/scripts/run_full_test.sh`
- `bash agent-ops/skills/project/run-proto-socket-test-matrix/scripts/run_full_test.sh --help`
- `bash agent-ops/skills/project/run-proto-socket-test-matrix/scripts/run_full_test.sh --dry-run`
- temp stub 기반 non-recommended run: matrix stub 미호출
- temp stub 기반 recommended run: matrix stub 호출 및 `--skip-network` 인자 확인

모든 코드 변경 완료 후 반드시 `CODE_REVIEW-*-G??.md`의 구현 에이전트 소유 섹션을 채운다. 이 파일 작성이 구현의 마지막 단계다.
