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

# Plan: 정기 full/protocol-wide 변화의 full-functional 분리 라우팅

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

`full-functional-periodic`는 `anchor-language` 범위를 넘어 고위험/넓은 변경에서 full functional 및 Dart.web/WSS 고정 coverage 정책을 분리 설계하는 작업이다. 구현 중 사용한 실행 커맨드, 산출물, 판단 근거를 active `CODE_REVIEW-local-G05.md`에 필수로 채우고, active 파일을 그대로 둔 채 리뷰 준비를 보고한다. 최종 판정, log rename, `complete.log`, archive 이동은 code-review 스킬 전용이므로 구현 에이전트가 수행하지 않는다. 사용자만 결정할 수 있는 full/비full 분기 문턱값, 야간 pending 정책 임계값, 외부 환경 준비가 필요하면 직접 질문하지 말고 review stub의 `사용자 리뷰 요청` 섹션에 증거와 재개 조건을 남긴다.

## 배경

현재 라우팅은 auto/speed/stability의 기본 분기와 언어 anchor x5 위주로 동작한다. 정기 full 또는 넓은 protocol 범위 변경에서 full matrix와 Dart.web/WSS client coverage를 별도 주기적 라우팅으로 분리하려면 실행 entrypoint와 문서 계약이 필요하다. 이 작업은 full functional이 매 변경 기본값으로 오인되지 않도록 상태와 실행 조건을 고정한다.

## 사용자 리뷰 요청 흐름

구현 중 사용자 승인 항목은 active `CODE_REVIEW-local-G05.md`의 `사용자 리뷰 요청` 섹션에 기록한다. 구현 에이전트는 사용자에게 직접 질문하거나 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-roadmap/milestones/change-aware-test-routing.md`
- `agent-ops/skills/project/run-proto-socket-test-matrix/SKILL.md`
- `agent-ops/skills/project/run-proto-socket-test-matrix/scripts/run_matrix.sh`
- `agent-ops/skills/project/run-proto-socket-test-matrix/scripts/run_test_by_change.sh`
- `agent-test/local/rules.md`
- `agent-test/local/proto-socket-full-matrix.md`

### 테스트 환경 규칙

- test_env: `local`
- `agent-test/local/rules.md` 존재 및 읽음.
- 전체 매트릭스 라우팅 근거는 `agent-test/local/proto-socket-full-matrix.md` 기준.
- 신규 shell/entrypoint는 기존 문서의 full matrix command와 결과 기록 계약을 유지해야 한다.

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

- 현재 classifier는 full route에서 language별 `functional-full` 후보를 낼 수 있으나, 정기 full/protocol-wide 변경과 매 변경 gate의 분리 계약이 아직 고정되어 있지 않다.
- Dart.web/Dart.web(WSS) client coverage가 full functional route 문서와 entrypoint 계약에서 누락되지 않는지 확인할 focused 검증이 필요하다.

### 심볼 참조

- 현재 계획 단계에서 renamed/removed symbol 없음.
- 새 shell entrypoint를 추가하면 skill 문서, local test rules, milestone 작업 컨텍스트의 명령 참조를 함께 갱신해야 한다.

### 분할 판단

- split policy를 평가했다. 이 subtask는 이미 `agent-task/m-change-aware-test-routing/02_full_functional_periodic`로 분리되어 있으며, `01_dart_web_coverage`와 독립 실행 가능한 full routing policy 작업이다.
- 별도 하위 split은 만들지 않는다. 실행 policy, entrypoint, 문서 계약이 서로 같은 검증 output으로 판단되어야 하며, 분리하면 full route 계약이 문서와 script 사이에서 어긋날 위험이 커진다.

### 범위 결정 근거

- 본 plan은 full-functional periodic 후보 조건, Dart.web/WSS coverage 계약, full vs regular 상태 기준, 필요 시 `run_full_test.sh` 계열 entrypoint, 관련 문서 반영에 한정한다.
- `run_test_by_change.sh`의 server/client direction 보정은 `01_dart_web_coverage` follow-up 범위이며 이 plan에서 다시 수정하지 않는다.
- 성능/안정성 runner의 실제 장시간 측정이나 야간 baseline 확정은 범위 밖이다.

### 빌드 등급

- lane: local, GNN: 05
- 근거: 여러 문서와 shell 계약 정합성이 필요하지만, 변경은 deterministic command와 문서 대조로 local review가 가능하다.

## 구현 체크리스트

- [ ] [RFP-1] `full-functional-periodic` 후보 조건을 프로토콜 변경/범위 확장 변경에서만 발동되도록 분류 조건을 명확화한다.
- [ ] [RFP-2] full functional 요청 시 Dart.web/Dart.web(WSS) client 열이 누락되지 않도록 라우팅 계약을 분리한다.
- [ ] [RFP-3] full vs regular 실행의 `nightly-pending`/`recommended` 상태 기준을 문서로 고정한다.
- [ ] [RFP-4] 필요 시 `run_full_test.sh` 또는 동일 레이어 entrypoint 설계 문서와 실행 플래그를 정합성 있게 추가한다.
- [ ] [RFP-5] 문서 규칙(`agent-test/local/proto-socket-full-matrix.md`, `agent-test/local/rules.md`, 마일스톤 작업 컨텍스트)에 설계 반영.
- [ ] CODE_REVIEW-*-G??.md의 구현 에이전트 소유 섹션을 실제 구현 내용과 검증 출력으로 채운다. 이 항목이 완료되기 전에는 구현이 완료된 것이 아니다.

### [RFP-1] full-functional-periodic 후보 조건 명확화

- `문제`: protocol-wide 또는 넓은 변경에서 full functional 후보가 언제 나와야 하는지 계약이 분리되어 있지 않다.
- `해결 방법`: classifier 또는 entrypoint 문서에서 protocol/schema/communicator/full 요청의 후보 조건을 명확히 기록한다.
- `수정 파일 및 체크리스트`: `run_test_by_change.sh` 또는 full entrypoint 문서에서 조건과 출력 상태를 일치시킨다.
- `테스트 작성`: 별도 test file은 작성하지 않고 dry-run 출력과 문서 대조로 확인한다.
- `중간 검증`: `bash agent-ops/skills/project/run-proto-socket-test-matrix/scripts/run_test_by_change.sh --route full --dry-run` 출력이 full functional 후보를 드러내야 한다.

### [RFP-2] Dart.web/WSS coverage 계약 분리

- `문제`: Dart.web/Dart.web(WSS)는 server-capable x5의 행이 아니지만 full functional client coverage에서는 필수다.
- `해결 방법`: full functional 계약에 Dart.web 및 Dart.web(WSS) client 열 유지 조건을 명시한다.
- `수정 파일 및 체크리스트`: `agent-test/local/proto-socket-full-matrix.md`와 필요 시 skill 문서의 matrix 설명을 갱신한다.
- `테스트 작성`: 문서 계약 변경이므로 별도 test file은 쓰지 않는다.
- `중간 검증`: `rg --sort path "Dart.web|Dart.web\\(WSS\\)" agent-test/local agent-ops/skills/project/run-proto-socket-test-matrix`로 누락 여부를 확인한다.

### [RFP-3] full vs regular 상태 기준 고정

- `문제`: full/regular 실행에서 `recommended`, `skipped-candidate`, `nightly-pending` 의미가 문서와 script 사이에 분리되어 있다.
- `해결 방법`: full route에서 즉시 실행 후보와 야간 후보를 구분하는 상태 기준을 문서로 고정한다.
- `수정 파일 및 체크리스트`: local test rules, full matrix profile, skill 문서 중 실제 사용자 entrypoint가 읽는 문서를 갱신한다.
- `테스트 작성`: 상태 기준 문서 변경으로 별도 test file 없음.
- `중간 검증`: `rg --sort path "nightly-pending|recommended|skipped-candidate" agent-test/local agent-ops/skills/project/run-proto-socket-test-matrix` 결과를 기록한다.

### [RFP-4] full entrypoint 계약 정합화

- `문제`: full functional periodic을 실행할 사용자가 기억해야 할 shell entrypoint와 flag 계약이 명확하지 않다.
- `해결 방법`: 필요 시 `run_full_test.sh` 또는 동일 레이어 entrypoint를 추가하고 기존 `run_matrix.sh --all` 계약과 연결한다.
- `수정 파일 및 체크리스트`: 새 script를 만들 경우 executable bit, usage text, 결과 기록 정책, 호출 문서를 함께 갱신한다.
- `테스트 작성`: shell wrapper 추가 시 `bash -n`과 `--dry-run` 또는 help 출력 검증을 수행한다. wrapper를 추가하지 않으면 그 판단 근거를 review stub에 기록한다.
- `중간 검증`: 추가한 entrypoint 또는 기존 full path command가 local에서 실행 가능해야 한다.

### [RFP-5] 문서 규칙 반영

- `문제`: 구현이 되더라도 local test rules와 roadmap context가 따라오지 않으면 사용자가 full route를 재현하기 어렵다.
- `해결 방법`: `agent-test/local/proto-socket-full-matrix.md`, `agent-test/local/rules.md`, milestone 작업 컨텍스트에 최종 명령과 판정 기준을 반영한다.
- `수정 파일 및 체크리스트`: 문서별로 명령, 판정 기준, skipped/nightly-pending 처리 기준을 맞춘다.
- `테스트 작성`: 문서 변경이므로 별도 test file은 쓰지 않는다.
- `중간 검증`: `rg --sort path "run_full_test|run_matrix.sh --all|full functional|Dart.web" agent-test/local agent-roadmap/milestones/change-aware-test-routing.md` 결과를 기록한다.

## 수정 파일 요약

| 파일 | 항목 |
|---|---|
| `agent-ops/skills/project/run-proto-socket-test-matrix/scripts/*` | RFP-1, RFP-4 |
| `agent-ops/skills/project/run-proto-socket-test-matrix/SKILL.md` | RFP-2, RFP-3, RFP-4 |
| `agent-test/local/proto-socket-full-matrix.md` | RFP-2, RFP-3, RFP-5 |
| `agent-test/local/rules.md` | RFP-3, RFP-5 |
| `agent-roadmap/milestones/change-aware-test-routing.md` | RFP-5 |

## 최종 검증

- `bash agent-ops/skills/project/run-proto-socket-test-matrix/scripts/run_test_by_change.sh --route full --dry-run`
- `rg --sort path "Dart.web|Dart.web\\(WSS\\)" agent-test/local agent-ops/skills/project/run-proto-socket-test-matrix`
- `rg --sort path "nightly-pending|recommended|skipped-candidate" agent-test/local agent-ops/skills/project/run-proto-socket-test-matrix`
- 새 shell entrypoint를 추가했다면 `bash -n <script>`와 해당 script의 `--help` 또는 `--dry-run` 경로를 실행한다.

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