<!-- task=final_full_validation/01_daytime_functional_preflight plan=0 tag=TEST -->

# Plan - TEST Daytime Functional Preflight

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

`CODE_REVIEW-local-G04.md`의 구현 에이전트 소유 섹션을 실제 실행 내용과 검증 출력으로 채우는 것이 구현의 마지막 단계다. 검증 명령을 실행하고, 실제 stdout/stderr 또는 저장된 출력 경로를 붙이고, active 파일은 그대로 둔 뒤 review ready로 보고한다. 최종 판정, log rename, `complete.log`, archive 이동은 code-review 전용이다. 선택된 SDD 결정 또는 Milestone `구현 잠금 > 결정 필요` 항목이 실구현을 막는 경우에만 review stub의 `사용자 리뷰 요청`을 채우고 멈춘다. 환경/secret/서비스 준비, 일반 범위 변경, 검증 증거 공백은 사용자 리뷰 요청이 아니라 검증 결과 또는 후속 plan 대상이다.

## 배경

현재 완료 판단은 최신 full functional PASS와 기존 full performance baseline PASS를 함께 사용한다. 야간 full 성능 검증 전에 낮 시간에 가능한 기능 full 검증과 route dry-run을 먼저 실행해 작업트리, classifier, Dart.web/WSS coverage가 정상인지 확인한다. 이 결과가 PASS여야 야간 성능 baseline 작업이 의미 있는 최신 ref 근거로 이어진다.

## 사용자 리뷰 요청 흐름

직접 사용자에게 질문하지 않는다. 선택된 SDD 결정 또는 Milestone lock 결정이 막는 경우에만 active `CODE_REVIEW-local-G04.md`의 `사용자 리뷰 요청` 섹션에 연결 대상, 차단 근거, 실행한 명령, 재개 조건을 기록한다. code-review가 해당 요청을 검증하고 실제 `USER_REVIEW.md` 작성 여부를 결정한다.

## 분석 결과

### 읽은 파일

- `agent-ops/skills/common/plan/SKILL.md`
- `agent-ops/skills/common/_templates/implementation-user-review-request-section.md`
- `agent-test/local/rules.md`
- `agent-test/local/proto-socket-full-matrix.md`
- `agent-test/local/proto-socket-performance-baseline.md`
- `README.md`
- `agent-roadmap/ROADMAP.md`
- `agent-roadmap/current.md`
- `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_performance.sh`
- `.gitignore`

### 테스트 환경 규칙

- test_env: `local`.
- `agent-test/local/rules.md`와 matched profiles `proto-socket-full-matrix.md`, `proto-socket-performance-baseline.md`를 적용한다.
- 낮 시간 기능 검증 명령은 `bash agent-ops/skills/project/run-proto-socket-test-matrix/scripts/run_full_test.sh --dry-run`과 `bash agent-ops/skills/project/run-proto-socket-test-matrix/scripts/run_matrix.sh --all`이다.
- `run_full_test.sh`는 classifier가 `functional-full`을 추천하지 않으면 본 실행을 skip할 수 있으므로, 이 계획은 최종 기능 근거를 강제로 `run_matrix.sh --all`로 수집한다.
- remote Dart.web host/path/credential 원문은 tracked 문서에 쓰지 않는다.

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

- 동작 변경 없음. 기능 full 검증과 문서 스냅샷 갱신만 수행한다.
- full matrix는 proto sync, 5개 언어 same-language, 20개 native cross 방향, Dart.web/Dart.web(WSS) client coverage를 포함한다.
- 성능 full은 이 subtask에서 실행하지 않는다. 장시간/대규모 성능 증거는 `02+01_nightly_full_performance`로 분리한다.

### 심볼 참조

- none. renamed/removed symbol 없음.

### 분할 판단

- split decision policy 평가 완료.
- 공유 task group: `final_full_validation`.
- `01_daytime_functional_preflight`: 낮 시간 실행 가능한 route dry-run, functional full matrix, 문서 스냅샷 사전 갱신.
- `02+01_nightly_full_performance`: 01 완료 후 야간 full 성능 baseline과 regression 비교.
- 분할 근거: 기능 full 검증은 수분 단위이고, full performance는 20:00 이후 nightly baseline 후보이며 장시간/대규모 부하를 포함한다. 실패 원인과 실행 시간이 달라 별도 review 가능한 subtask로 나눈다.

### 범위 결정 근거

- runner 스크립트 수정은 제외한다. 현재 계획은 검증 실행과 문서 반영만 다룬다.
- C#/Swift 구현, package registry 배포, CI/CD runner 연결은 제외한다.
- `agent-test/runs/**` 결과 파일은 ignored local evidence로만 사용하고 tracked 문서에는 record basename과 해석만 남긴다.

### 빌드 등급

- build lane: `local-G04`.
- review lane: `local-G04`.
- 근거: 코드 변경 없이 deterministic local commands와 작은 문서 갱신만 수행한다. Dart.web remote fallback은 runner 계약 안에 있으나 이 subtask는 long benchmark가 아니다.

## 구현 체크리스트

- [ ] `bash agent-ops/skills/project/run-proto-socket-test-matrix/scripts/run_full_test.sh --dry-run`을 실행해 full functional recommended 여부와 nightly-pending 후보를 기록한다.
- [ ] `bash agent-ops/skills/project/run-proto-socket-test-matrix/scripts/run_matrix.sh --all`을 실행해 최신 기능 full matrix record를 생성하고 `overall_result: PASS`를 확인한다.
- [ ] 새 full matrix record가 기존 README 스냅샷보다 최신이면 `README.md`와 필요한 경우 `agent-roadmap/ROADMAP.md`의 기능 호환성 근거를 record basename/ref 중심으로 갱신한다. raw remote host/path는 tracked 문서에 쓰지 않는다.
- [ ] `git diff --check`와 `rg --sort path -n "검증 스냅샷|잠정 완료|proto-socket-full-matrix" README.md agent-roadmap/ROADMAP.md`를 실행한다.
- [ ] CODE_REVIEW-*-G??.md의 구현 에이전트 소유 섹션을 실제 구현 내용과 검증 출력으로 채운다. 이 항목이 완료되기 전에는 구현이 완료된 것이 아니다.

### [TEST-1] 낮 시간 기능 full 검증과 스냅샷 사전 갱신

#### 문제

`README.md:27`의 기능 호환성 스냅샷은 최신 full matrix record로 유지되어야 한다. 야간 full 성능 baseline 전에 기능 matrix가 깨져 있으면 대규모 병렬 성능 결과를 완료 근거로 해석할 수 없다.

#### 해결 방법

1. full route dry-run으로 nightly-pending 후보를 확인한다.
2. classifier skip 여부와 무관하게 `run_matrix.sh --all`을 직접 실행한다.
3. PASS record가 생성되면 README 기능 호환성 row를 최신 record/ref로 갱신한다.

Before:

```md
README.md:27 | 기능 호환성 | 로컬 기록 `<old>-proto-socket-full-matrix.md`, ref `<old-ref>` | PASS | ...
```

After:

```md
README.md:27 | 기능 호환성 | 로컬 기록 `<new>-proto-socket-full-matrix.md`, ref `<new-ref>` | PASS | ...
```

#### 수정 파일 및 체크리스트

- [ ] `README.md`: 최신 full matrix record/ref 반영 여부 확인.
- [ ] `agent-roadmap/ROADMAP.md`: 잠정 완료 판단이 기능 full PASS와 충돌하지 않는지 확인. 필요 시 record/ref 보강.
- [ ] `CODE_REVIEW-local-G04.md`: 실행 명령, record 경로, PASS/FAIL 표 요약, 문서 갱신 여부 기록.

#### 테스트 작성

- 별도 테스트 파일 작성 없음. 이 task 자체가 검증 실행 계획이며, 기존 full matrix runner가 필요한 테스트를 실행한다.

#### 중간 검증

```bash
bash agent-ops/skills/project/run-proto-socket-test-matrix/scripts/run_full_test.sh --dry-run
bash agent-ops/skills/project/run-proto-socket-test-matrix/scripts/run_matrix.sh --all
```

기대 결과: dry-run은 nightly-pending 후보를 PASS로 오인하지 않는다. `run_matrix.sh --all`은 exit 0, 결과 record `agent-test/runs/*-proto-socket-full-matrix.md`, `overall_result: PASS`를 남긴다.

## 수정 파일 요약

| 파일 | 항목 |
|---|---|
| `README.md` | TEST-1 |
| `agent-roadmap/ROADMAP.md` | TEST-1 |
| `agent-task/final_full_validation/01_daytime_functional_preflight/CODE_REVIEW-local-G04.md` | TEST-1 |

## 최종 검증

```bash
git diff --check
rg --sort path -n "검증 스냅샷|잠정 완료|proto-socket-full-matrix" README.md agent-roadmap/ROADMAP.md
```

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