docs(agent-ops): full 테스트 라우팅 계약을 정리한다

This commit is contained in:
toki 2026-06-10 18:17:03 +09:00
parent a8d61bbe9f
commit a2d05ddb9b
5 changed files with 504 additions and 6 deletions

View file

@ -1,6 +1,6 @@
---
name: run-proto-socket-test-matrix
description: Run and summarize the Proto Socket validation matrix across proto schema sync plus Dart, Go, Kotlin, Python, and TypeScript tests. Use when the user asks for "전체 테스트", "전체테스트해", "전체 검증", "테스트 매트릭스", "proto 동기화 검사", "언어별 크로스 테스트", "언어간 크로스 테스트", "크로스 테스트해", "통신 테스트", or similar requests that require proto sync, same-language unit/transport tests, and cross-language server/client communication checks with PASS/FAIL tables.
description: Run and summarize the Proto Socket validation matrix across proto schema sync plus Dart, Go, Kotlin, Python, and TypeScript tests. Use when the user asks for "전체 테스트", "전체테스트해", "전체 검증", "테스트 매트릭스", "테스트 해봐", "속도 테스트 해봐", "안정성 테스트 해봐", "테스트 해줘", "proto 동기화 검사", "언어별 크로스 테스트", "언어간 크로스 테스트", "크로스 테스트해", "통신 테스트", or similar requests that require proto sync, same-language unit/transport tests, and cross-language server/client communication checks with PASS/FAIL tables.
---
# Run Proto Socket Test Matrix
@ -15,10 +15,14 @@ Proto Socket의 proto schema sync와 지원 언어 전체 테스트 상태를
- 사용자가 “proto 동기화 검사”, “프로토 동기화”, “스키마 sync”처럼 proto 복사본 동기화 검증을 요청할 때
- 사용자가 “언어간 크로스 테스트해”, “언어별 크로스 테스트”, “통신 테스트”처럼 언어 간 통신 검증을 요청할 때
- 새 언어 추가, 통신 구현 변경, 테스트 정리 후 지원 언어 매트릭스의 현재 통과 여부를 표로 정리해야 할 때
- 사용자가 “테스트 해봐”, “속도 테스트 해봐”, “안정성 테스트 해봐”처럼 변경 기반 자동 라우팅/성능/안정성 분기를 요청할 때
- 사용자가 “전체 테스트 해봐”처럼 범위를 지정하지 않은 전체 검증 요청을 빠르게 정리해야 할 때
## 입력
- `scope`: `all`, `unit`, `cross`, `proto` 중 하나. 사용자가 범위를 지정하지 않으면 `all`.
- `route-mode`: `auto`, `speed`, `stability`, `full` 중 하나. 사용자가 4분류 요청을 할 때 실행 entrypoint를 전환할 때 사용한다.
- `route-command`: `auto`, `speed`, `stability``run_test_by_change.sh --route <mode> --dry-run`으로 후보를 먼저 보고한다. `full``run_full_test.sh --dry-run`으로 classifier 결과, full functional 추천 여부, nightly-pending 미실행/PASS 아님 항목을 먼저 보고한 뒤 `run_full_test.sh` 본 실행으로 이동한다.
- `report-format`: 기본은 Markdown 표. 실패 시 실패 로그 tail과 재현 명령을 함께 적는다.
## 먼저 확인할 것
@ -31,11 +35,16 @@ Proto Socket의 proto schema sync와 지원 언어 전체 테스트 상태를
## 실행 절차
1. **범위 결정**
- “전체 테스트”, “전체 검증”, “테스트 매트릭스” 요청은 `all`로 실행한다.
- “전체 테스트”, “전체 검증”, “테스트 매트릭스” 요청은 `all`로 실행한다. 단, “전체 테스트 해봐”처럼 user-entrypoint 라우팅 문구는 아래 `full` route 규칙을 우선한다.
- “proto 동기화 검사”, “프로토 sync” 요청은 `proto`로 실행한다.
- “언어간 크로스 테스트”, “크로스 테스트”, “통신 테스트” 요청은 사용자가 유닛 테스트도 요구하지 않는 한 `cross`로 실행한다.
- “유닛 테스트”, “동일 언어 테스트” 요청은 `unit`으로 실행한다.
- “테스트 해봐”는 변경 기반 route를 auto로 계산해 기능/성능/안정성 후보를 함께 제시한다.
- “속도 테스트 해봐”는 `speed` route를 우선해 성능 후보를 중심으로 계산한다.
- “안정성 테스트 해봐”는 `stability` route를 우선해 안정성 후보를 중심으로 계산한다.
- “전체 테스트 해봐”는 `full` route를 우선해 `run_full_test.sh --dry-run`으로 full functional periodic 실행 계약을 먼저 계산한다.
- “성능 측정”, “성능 기준선”, “performance baseline”, “regression gate” 요청은 matrix가 아니라 성능 전용 shell을 실행한다.
- `route-mode`는 문장에 따라 자동 해석한다. 실행 전 `auto`/`speed`/`stability`는 `run_test_by_change.sh --route <mode> --dry-run`, `full``run_full_test.sh --dry-run` 출력으로 추천/예외 항목을 사용자에게 먼저 보고한다.
2. **스크립트 실행**
- 저장소 루트에서 다음 중 하나를 실행한다.
@ -182,7 +191,7 @@ tools/check_proto_sync.sh
## full-functional-periodic 정책 (RFP-1, RFP-2, RFP-3)
- `run_test_by_change.sh --route full --dry-run` 출력이 `functional-full`, `functional-full-dart-web`, `functional-full-dart-web-wss``recommended` 상태로 포함하면 full functional periodic이 발동된다.
- `run_full_test.sh --dry-run` 출력이 `functional-full`, `functional-full-dart-web`, `functional-full-dart-web-wss``recommended` 상태로 포함하면 full functional periodic이 발동된다. 이 dry-run은 내부에서 `run_test_by_change.sh --route full --dry-run` classifier를 호출한다.
- full functional 호출 시 `run_matrix.sh --all` 또는 `--cross` 실행으로 언어 PASS 매트릭스(Dart.io, Dart.web, Dart.web(WSS), Go, Kotlin, Python, TypeScript)와 크로스테스트 상세 표를 반드시 확인한다.
- Dart.web과 Dart.web(WSS)는 브라우저 client runtime이므로 서버 행에는 넣지 않는다.
- Dart.web/WSS client coverage는 full matrix의 `Dart.web``Dart.web(WSS)` 열에서 각 server-capable 언어 행이 모두 `PASS`여야 한다.
@ -194,4 +203,5 @@ tools/check_proto_sync.sh
- `--route auto` 또는 `--route speed`에서 성능 영향 가능 변경은 `performance-quick`을 낮 시간 참고값으로 추천한다. 이 결과는 야간 baseline 완료 근거로 쓰지 않는다.
- `--route auto` 또는 `--route stability`에서 transport/queue/concurrency 변경은 `stability-quick`을 추천하고 timeout, nonce/type mismatch, FIFO, pending leak, queue/gateway backlog를 hard gate로 본다.
- `--route full` + `docs_only=no`이면 full functional periodic 발동. `performance-full`/`stability-full` 같은 nightly-pending 항목은 별도 기록만 하고 실행하지 않음.
- `run_full_test.sh [--dry-run]`로 classifier → recommended 확인 → matrix 실행 workflow 실행.
- `run_full_test.sh --dry-run`은 실행 전 보고 전용이다. `### Nightly pending (미실행, PASS 아님)` 항목은 20:00 이후 별도 실행 후보이며 dry-run 또는 daytime full route의 PASS 근거가 아니다.
- `run_full_test.sh`는 classifier -> recommended 확인 -> matrix 실행 workflow를 실행한다.

View file

@ -56,8 +56,8 @@
- [x] [daytime-performance-quick] 성능 영향 가능 변경은 낮 시간 quick performance를 선택한다. 검증: quick 결과는 변경 후 속도 참고값이며 야간 baseline으로 기록하지 않는다.
- [x] [daytime-stability-quick] queue, gateway, concurrency, transport 변경은 낮 시간 quick stability/stress를 선택한다. 검증: timeout, nonce mismatch, type mismatch, FIFO violation, pending leak, queue/gateway backlog가 hard gate로 남는다.
- [ ] [nightly-heavy-routing] sustained, high parallel, 1MB payload, 장시간 leak 확인은 20:00 이후 full/nightly 후보로 분리한다. 검증: 낮 시간 full 장시간 측정은 baseline 완료 근거로 쓰이지 않는다.
- [ ] [periodic-full-routing] 정기 full test는 functional full 5x5와 performance/stability nightly full을 구분해 실행 후보를 만든다. 검증: 정기 full이 매 수정 gate와 분리된다.
- [x] [nightly-heavy-routing] sustained, high parallel, 1MB payload, 장시간 leak 확인은 20:00 이후 full/nightly 후보로 분리한다. 검증: 낮 시간 full 장시간 측정은 baseline 완료 근거로 쓰이지 않는다.
- [x] [periodic-full-routing] 정기 full test는 functional full 5x5와 performance/stability nightly full을 구분해 실행 후보를 만든다. 검증: 정기 full이 매 수정 gate와 분리된다.
### Epic: [user-entrypoints] 사용자 요청 4분류
@ -114,3 +114,4 @@
- 완료(직접 처리): `functional-routing` anchor 보강 -> `anchor-language-x5`, `anchor-language-both-x5`; 검증=`bash -n .../run_test_by_change.sh`, focused dry-run server/client/transport, public-api unit smoke
- 완료(직접 처리): `performance-stability-routing` daytime quick 보강 -> `daytime-performance-quick`, `daytime-stability-quick`; 검증=`bash -n .../run_test_by_change.sh`, focused temp repo route smoke(auto/speed/stability/full), `rg --sort path ...`
- 계획 작성: `agent-task/m-change-aware-test-routing/03_nightly_periodic_contract/PLAN-cloud-G07.md` -> `nightly-heavy-routing`, `periodic-full-routing`
- 계획 작성: `agent-task/m-change-aware-test-routing/04_user_entrypoints_full_route/PLAN-local-G01.md` -> `full-test-route`

View file

@ -0,0 +1,283 @@
<!-- task=m-change-aware-test-routing/04_user_entrypoints_full_route plan=0 tag=UEP_FULL -->
# Code Review Reference - UEP_FULL
> **[IMPLEMENTING AGENT — READ FIRST] Filling in this file is the mandatory final step of implementation.**
> The task is NOT complete until every implementation-owned section below is filled in.
> Complete the `구현 체크리스트`; the final checklist item is mandatory before saving.
> Fill implementation-owned sections, then stop with active files in place and report ready for review.
> If implementation is blocked by a user-only decision, user-owned external environment prerequisite, or scope conflict, fill `사용자 리뷰 요청` with evidence and stop with active files in place; code-review decides whether to write `USER_REVIEW.md`.
> Finalization (`코드리뷰 결과`, log rename, `complete.log`, archive moves, `코드리뷰 전용 체크리스트`) is review-agent-only.
## 개요
date=2026-06-10
task=m-change-aware-test-routing/04_user_entrypoints_full_route, plan=0, tag=UEP_FULL
## Roadmap Targets
- Milestone: `agent-roadmap/milestones/change-aware-test-routing.md`
- Task ids:
- `full-test-route`: `전체 테스트 해봐`는 functional full 5x5를 기본으로 실행하고, performance/stability full은 시간대에 따라 즉시 실행 또는 nightly pending으로 분리한다.
- Completion mode: check-on-pass
## 이 파일을 읽는 리뷰 에이전트에게
> **[REVIEW AGENT ONLY]** 아래 종결 절차는 코드리뷰 에이전트 전용이다. 구현 에이전트는 이 섹션을 실행하지 않는다.
각 항목의 구현을 실제 소스 파일과 대조하고, `검증 결과` 섹션의 출력이 코드와 일치하는지 확인한다. 리뷰 완료는 아래 순서까지 끝난 상태를 의미한다.
1. 판정을 append한다.
2. `CODE_REVIEW-local-G01.md` -> `code_review_local_G01_0.log`, `PLAN-local-G01.md` -> `plan_local_G01_0.log`로 아카이브한다.
3. PASS이면 `complete.log` 작성 후 active task 디렉터리를 `agent-task/archive/YYYY/MM/m-change-aware-test-routing/04_user_entrypoints_full_route/`로 이동한다.
4. PASS이고 task group이 `m-<milestone-slug>`이면 완료 이벤트 메타데이터를 보고한다. roadmap 상태 체크와 `update-roadmap` 호출은 런타임 책임이다.
5. 적용 가능한 `코드리뷰 전용 체크리스트` 항목을 최종 `.log` 위치에서 체크한 뒤 보고한다.
---
## 구현 항목별 완료 여부
| 항목 | 완료 여부 |
|------|---------|
| [UEP_FULL-1] Full route entrypoint wording | [x] |
| [UEP_FULL-2] Nightly pending wording | [x] |
| [UEP_FULL-3] Full route dry-run evidence | [x] |
## 구현 체크리스트
- [x] [UEP_FULL-1] `SKILL.md`의 `전체 테스트 해봐` 라우팅 설명을 `run_full_test.sh --dry-run` -> `run_full_test.sh` 흐름과 일치시킨다.
- [x] [UEP_FULL-2] full route에서 nightly pending 항목이 미실행/PASS 아님으로 보고되는 문구를 `SKILL.md`, local test docs, runner 출력 계약 사이에서 일치시킨다.
- [x] [UEP_FULL-3] `run_full_test.sh --dry-run`과 deterministic `rg --sort path`로 full route 계약을 검증하고 실제 stdout/stderr를 review stub에 남긴다.
- [x] CODE_REVIEW-*-G??.md의 구현 에이전트 소유 섹션을 실제 구현 내용과 검증 출력으로 채운다. 이 항목이 완료되기 전에는 구현이 완료된 것이 아니다.
## 구현 내용
> **[IMPLEMENTING AGENT]** 구현한 변경을 파일별로 기록한다.
- 변경 파일:
- `agent-ops/skills/project/run-proto-socket-test-matrix/SKILL.md`
- `agent-test/local/proto-socket-full-matrix.md`
- `agent-test/local/proto-socket-performance-baseline.md`
- `agent-task/m-change-aware-test-routing/04_user_entrypoints_full_route/CODE_REVIEW-local-G01.md`
- 주요 변경:
- `전체 테스트 해봐` route를 `run_full_test.sh --dry-run` 실행 전 보고 후 `run_full_test.sh` 본 실행으로 이어지는 계약으로 정리했다.
- full route의 `nightly-pending` 항목을 `미실행`, `PASS 아님`, `20:00 이후 별도 실행 후보`로 SKILL/local profile/runner 출력 계약이 같은 의미를 갖도록 맞췄다.
- local full matrix와 performance baseline profile의 `last_rule_updated_at`을 2026-06-10으로 갱신했다.
- 의도적으로 변경하지 않은 파일/범위:
- `run_full_test.sh`는 이미 `### Nightly pending (미실행, PASS 아님)`과 20:00 이후 별도 실행 후보를 출력하므로 코드 변경하지 않았다.
- `auto-test-route`, `speed-test-route`, `stability-test-route`와 실제 야간 performance/stability full 실행은 범위 밖으로 유지했다.
## 계획 대비 변경 사항
> **[IMPLEMENTING AGENT]** PLAN과 달라진 점, 명령 변경, 생략한 검증과 이유를 기록한다.
- `run_full_test.sh`는 PLAN의 "필요한 경우만" 대상이었고 기존 출력이 계약을 충족해 수정하지 않았다.
- 검증 명령은 PLAN의 최종 검증 3개를 그대로 실행했다.
## 검증 결과
> **[IMPLEMENTING AGENT]** 실제 실행한 명령과 stdout/stderr를 기록한다. 요약만 쓰지 않는다.
### Command: `bash -n agent-ops/skills/project/run-proto-socket-test-matrix/scripts/run_full_test.sh`
```text
exit code: 0
stdout: (없음)
stderr: (없음)
```
### Command: `bash agent-ops/skills/project/run-proto-socket-test-matrix/scripts/run_full_test.sh --dry-run`
```text
## Classifier
## 변경 기반 분류 결과
route: full
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,other,test-docs
docs_only: no
untracked_included: yes
### 변경 파일 목록
| 파일 | 언어 | 도메인 |
|------|------|--------|
| 1 | | other |
| README.md | | docs |
| agent-ops/skills/project/run-proto-socket-test-matrix/SKILL.md | | test-docs |
| agent-ops/skills/project/run-proto-socket-test-matrix/scripts/run_full_test.sh | | test-docs |
| agent-ops/skills/project/run-proto-socket-test-matrix/scripts/run_matrix.sh | | test-docs |
| agent-ops/skills/project/run-proto-socket-test-matrix/scripts/run_test_by_change.sh | | test-docs |
| agent-roadmap/ROADMAP.md | | other |
| agent-roadmap/milestones/change-aware-test-routing.md | | other |
| agent-roadmap/milestones/large-payload-followup-optimization.md | | other |
| agent-roadmap/milestones/nightly-large-payload-baseline.md | | other |
| agent-roadmap/milestones/workspace-port-env-standardization.md | | other |
| agent-task/m-change-aware-test-routing/04_user_entrypoints_full_route/CODE_REVIEW-local-G01.md | | other |
| agent-task/m-change-aware-test-routing/04_user_entrypoints_full_route/PLAN-local-G01.md | | other |
| agent-task/m-performance-hotspot-optimization/17+16_compat_matrix/CODE_REVIEW-cloud-G07.md | | other |
### 라우팅 추천 결과
| 상태 | 테스트 후보 | 대상 | 근거 |
|---|---|---|---|
| recommended | functional-full | all | full periodic: 전체 범위의 functional 검증을 기본 발동 |
| recommended | functional-full-dart-web | Dart.web client | full functional: Dart.web client coverage 의무 포함 |
| recommended | functional-full-dart-web-wss | Dart.web(WSS) client | full functional: Dart.web(WSS) client coverage 의무 포함 |
| nightly-pending | performance-full | performance baseline | full periodic: performance full은 20:00 이후 야간 후보. 후보 command: run_performance.sh --full |
| nightly-pending | stability-full | queue/gateway/transport | full periodic: stability full/long-run은 20:00 이후 야간 후보. 후보 command: run_stress.sh --full --profile sustained,parallel,payload |
| recommended | runner-docs-selfcheck | test-docs | full periodic: test-docs self-check도 함께 발동 |
### Dry-run 완료
full functional recommended — 실제 실행하려면 --dry-run 옵션을 제거하라.
### Nightly pending (미실행, PASS 아님)
다음 항목은 실행하지 않았으며 PASS 근거가 아닙니다. 20:00 이후 별도 실행 후보:
- performance-full: `bash agent-ops/skills/project/run-proto-socket-test-matrix/scripts/run_performance.sh --full`
- stability-full: `bash agent-ops/skills/project/run-proto-socket-test-matrix/scripts/run_stress.sh --full --profile sustained,parallel,payload`
```
### Command: `rg --sort path -n "전체 테스트 해봐|route-mode|route-command|nightly-pending|performance-full|stability-full|20:00|PASS 아님|미실행" agent-ops/skills/project/run-proto-socket-test-matrix agent-test/local`
```text
agent-ops/skills/project/run-proto-socket-test-matrix/SKILL.md:19:- 사용자가 “전체 테스트 해봐”처럼 범위를 지정하지 않은 전체 검증 요청을 빠르게 정리해야 할 때
agent-ops/skills/project/run-proto-socket-test-matrix/SKILL.md:24:- `route-mode`: `auto`, `speed`, `stability`, `full` 중 하나. 사용자가 4분류 요청을 할 때 실행 entrypoint를 전환할 때 사용한다.
agent-ops/skills/project/run-proto-socket-test-matrix/SKILL.md:25:- `route-command`: `auto`, `speed`, `stability`는 `run_test_by_change.sh --route <mode> --dry-run`으로 후보를 먼저 보고한다. `full`은 `run_full_test.sh --dry-run`으로 classifier 결과, full functional 추천 여부, nightly-pending 미실행/PASS 아님 항목을 먼저 보고한 뒤 `run_full_test.sh` 본 실행으로 이동한다.
agent-ops/skills/project/run-proto-socket-test-matrix/SKILL.md:45: - “전체 테스트 해봐”는 `full` route를 우선해 `run_full_test.sh --dry-run`으로 full functional periodic 실행 계약을 먼저 계산한다.
agent-ops/skills/project/run-proto-socket-test-matrix/SKILL.md:47: - `route-mode`는 문장에 따라 자동 해석한다. 실행 전 `auto`/`speed`/`stability`는 `run_test_by_change.sh --route <mode> --dry-run`, `full`은 `run_full_test.sh --dry-run` 출력으로 추천/예외 항목을 사용자에게 먼저 보고한다.
agent-ops/skills/project/run-proto-socket-test-matrix/SKILL.md:199:- `nightly-pending`: 야간 별도 실행 후보. 실행하지 않은 것을 PASS로 보고하지 않음.
agent-ops/skills/project/run-proto-socket-test-matrix/SKILL.md:200: - `performance-full` 후보 command: `bash agent-ops/skills/project/run-proto-socket-test-matrix/scripts/run_performance.sh --full` (20:00 이후 시작한 record만 baseline 후보)
agent-ops/skills/project/run-proto-socket-test-matrix/SKILL.md:201: - `stability-full` 후보 command: `bash agent-ops/skills/project/run-proto-socket-test-matrix/scripts/run_stress.sh --full --profile sustained,parallel,payload` (20:00 이후 시작한 record만 야간 측정 후보)
agent-ops/skills/project/run-proto-socket-test-matrix/SKILL.md:202:- `skipped-candidate`: 미실행 후보. runner가 실행하지 않음.
agent-ops/skills/project/run-proto-socket-test-matrix/SKILL.md:205:- `--route full` + `docs_only=no`이면 full functional periodic 발동. `performance-full`/`stability-full` 같은 nightly-pending 항목은 별도 기록만 하고 실행하지 않음.
agent-ops/skills/project/run-proto-socket-test-matrix/SKILL.md:206:- `run_full_test.sh --dry-run`은 실행 전 보고 전용이다. `### Nightly pending (미실행, PASS 아님)` 항목은 20:00 이후 별도 실행 후보이며 dry-run 또는 daytime full route의 PASS 근거가 아니다.
agent-ops/skills/project/run-proto-socket-test-matrix/scripts/run_full_test.sh:10:# nightly-pending 후보는 별도 기록만 하고 실행하지 않는다.
agent-ops/skills/project/run-proto-socket-test-matrix/scripts/run_full_test.sh:66:# nightly-pending 항목 리포트 (미실행, PASS 아님)
agent-ops/skills/project/run-proto-socket-test-matrix/scripts/run_full_test.sh:69: rows="$(printf '%s\n' "$classify_output" | grep '| nightly-pending |' || true)"
agent-ops/skills/project/run-proto-socket-test-matrix/scripts/run_full_test.sh:72: printf '\n### Nightly pending (미실행, PASS 아님)\n\n'
agent-ops/skills/project/run-proto-socket-test-matrix/scripts/run_full_test.sh:73: printf '다음 항목은 실행하지 않았으며 PASS 근거가 아닙니다. 20:00 이후 별도 실행 후보:\n\n'
agent-ops/skills/project/run-proto-socket-test-matrix/scripts/run_full_test.sh:80: performance-full)
agent-ops/skills/project/run-proto-socket-test-matrix/scripts/run_full_test.sh:83: stability-full)
agent-ops/skills/project/run-proto-socket-test-matrix/scripts/run_test_by_change.sh:108: patterns="proto-socket-full-matrix proto-socket-performance-quick proto-socket-performance-full proto-socket-stress-quick proto-socket-stress-full"
agent-ops/skills/project/run-proto-socket-test-matrix/scripts/run_test_by_change.sh:111: patterns="proto-socket-performance-quick proto-socket-performance-full"
agent-ops/skills/project/run-proto-socket-test-matrix/scripts/run_test_by_change.sh:114: patterns="proto-socket-stress-full proto-socket-stress-quick proto-socket-performance-full proto-socket-performance-quick"
agent-ops/skills/project/run-proto-socket-test-matrix/scripts/run_test_by_change.sh:334:# nightly-pending 별도 시간대 실행 후보
agent-ops/skills/project/run-proto-socket-test-matrix/scripts/run_test_by_change.sh:335:# skipped-candidate 사용자 라우팅/설정상 미실행 후보
agent-ops/skills/project/run-proto-socket-test-matrix/scripts/run_test_by_change.sh:376: # status=nightly-pending: 별도 시간대/대용량 후보
agent-ops/skills/project/run-proto-socket-test-matrix/scripts/run_test_by_change.sh:381: # performance/stability full은 즉시 PASS 근거가 아닌 nightly-pending 후보로 분리한다.
agent-ops/skills/project/run-proto-socket-test-matrix/scripts/run_test_by_change.sh:446: add_recommendation "nightly-pending" "performance-full" "performance baseline" "full periodic: performance full은 20:00 이후 야간 후보. 후보 command: run_performance.sh --full"
agent-ops/skills/project/run-proto-socket-test-matrix/scripts/run_test_by_change.sh:447: add_recommendation "nightly-pending" "stability-full" "queue/gateway/transport" "full periodic: stability full/long-run은 20:00 이후 야간 후보. 후보 command: run_stress.sh --full --profile sustained,parallel,payload"
agent-ops/skills/project/run-proto-socket-test-matrix/scripts/run_test_by_change.sh:456: add_recommendation "nightly-pending" "stability-full" "queue/gateway/transport" "full periodic: 장시간 백로그/누수 확인은 야간 후보. 후보 command: run_stress.sh --full --profile sustained,parallel,payload"
agent-ops/skills/project/run-proto-socket-test-matrix/scripts/run_test_by_change.sh:544: add_recommendation "nightly-pending" "performance-full" "performance baseline" "sustained/high parallel/1MB payload 지표는 20:00 이후 야간 full 후보. 후보 command: run_performance.sh --full"
agent-ops/skills/project/run-proto-socket-test-matrix/scripts/run_test_by_change.sh:550: add_recommendation "nightly-pending" "stability-full" "queue/gateway/transport" "장시간 leak/backlog 확인은 20:00 이후 야간 후보. 후보 command: run_stress.sh --full --profile sustained,parallel,payload"
agent-test/local/proto-socket-full-matrix.md:14:- `전체 테스트 해봐`처럼 full route 실행 전 보고와 functional full 실행 계약 확인이 필요한 경우
agent-test/local/proto-socket-full-matrix.md:61:- `전체 테스트 해봐` route는 `run_full_test.sh --dry-run`으로 classifier 결과와 nightly-pending 항목을 먼저 보고한 뒤, full functional이 recommended이면 `run_full_test.sh` 본 실행으로 `run_matrix.sh --all`을 호출한다.
agent-test/local/proto-socket-full-matrix.md:199:- 실패 또는 미실행 항목을 PASS로 기록하지 않는다.
agent-test/local/proto-socket-full-matrix.md:225:- `nightly-pending`: 해당 테스트 kind는 **별도 시간대(야간) 실행 후보**.
agent-test/local/proto-socket-full-matrix.md:226: - 실행하지 않은 nightly-pending 항목을 PASS로 보고하지 않는다.
agent-test/local/proto-socket-full-matrix.md:228: - `performance-full` 후보 command: `bash agent-ops/skills/project/run-proto-socket-test-matrix/scripts/run_performance.sh --full` (20:00 이후 시작한 record만 baseline 후보)
agent-test/local/proto-socket-full-matrix.md:229: - `stability-full` 후보 command: `bash agent-ops/skills/project/run-proto-socket-test-matrix/scripts/run_stress.sh --full --profile sustained,parallel,payload` (20:00 이후 시작한 record만 야간 측정 후보)
agent-test/local/proto-socket-full-matrix.md:230:- `skipped-candidate`: 현재 라우팅/설정상 **미실행 후보**. runner가 실행하지 않음.
agent-test/local/proto-socket-full-matrix.md:235:- `--route full` (nightly-pending 포함): periodic full. `recommended` + `nightly-pending`를 모두 포함.
agent-test/local/proto-socket-full-matrix.md:237: - nightly-pending: `performance-full`, `stability-full` 등. `run_full_test.sh --dry-run`의 `### Nightly pending (미실행, PASS 아님)` 출력에 남기며, 실행하지 않은 nightly full은 PASS 근거가 아니다.
agent-test/local/proto-socket-performance-baseline.md:44:- full 성능 기준 후보 측정 (`nightly-pending`, 20:00 이후 야간 후보): `bash agent-ops/skills/project/run-proto-socket-test-matrix/scripts/run_performance.sh --full`
agent-test/local/proto-socket-performance-baseline.md:52:- 최종 baseline 후보를 만들 때는 `run_performance.sh --full`을 실행한다. 20:00 이후 시작한 record만 baseline 후보로 본다.
agent-test/local/proto-socket-performance-baseline.md:53:- full route에서 `performance-full`이 `nightly-pending`이면 미실행 항목이며 PASS 아님으로 보고한다. 20:00 이전 dry-run 또는 daytime route 출력은 baseline PASS 근거가 아니다.
agent-test/local/rules.md:85:- classifier 추천 상태: `recommended`(즉시 실행), `nightly-pending`(야간 별도 실행), `skipped-candidate`(미실행), `noop`(변경 없음)
agent-test/local/rules.md:89:- 실행하지 않은 `nightly-pending` 항목을 PASS로 보고하지 않는다
agent-test/local/rules.md:90:- `--route full` + `docs_only=no`이면 full functional periodic과 별도로 `performance-full`/`stability-full` nightly 후보를 남긴다
```
## 사용자 리뷰 요청
> **[IMPLEMENTING AGENT]** 사용자만 결정할 수 있는 blocker가 있을 때만 채운다.
- 상태: 없음
- 필요한 결정:
- 근거:
- 재개 조건:
## 코드리뷰 결과
> **[REVIEW AGENT ONLY]** `PASS`, `WARN`, `FAIL` 중 하나를 append한다.
### 종합 판정: PASS
### 차원별 평가
| 차원 | 판정 | 메모 |
|---|---|---|
| correctness | Pass | `전체 테스트 해봐`가 `run_full_test.sh --dry-run` 선보고 후 `run_full_test.sh` 본 실행으로 이어지는 계약이 `SKILL.md`에 반영되어 있고 dry-run 출력도 `functional-full`/Dart.web/WSS recommended와 nightly-pending을 함께 보고한다. |
| completeness | Pass | UEP_FULL-1~3 구현 항목과 최종 리뷰 스텁 작성 항목이 모두 충족되었다. |
| test coverage | Pass | 계획상 신규 test file은 만들지 않고 `bash -n`, dry-run, deterministic `rg --sort path`, `git diff --check`로 검증하는 범위였으며 모두 통과했다. |
| API contract | Pass | shell entrypoint와 출력 계약의 public wording만 정리했으며 runner CLI 계약 변경은 없다. |
| code quality | Pass | debug 출력, dead code, formatting 오류 없음. |
| plan deviation | Pass | `run_full_test.sh` 자체 변경이 필요 없다는 판단은 현재 출력 계약과 일치한다. 리뷰 중 `SKILL.md`의 broad `전체 테스트` bullet에 `전체 테스트 해봐` precedence만 명확히 보정했다. |
| verification trust | Pass | 리뷰 중 계획의 최종 검증 명령을 재실행했고, dry-run/검색 출력이 스텁 증거와 일치한다. |
### 발견된 문제
- Nit - `agent-ops/skills/project/run-proto-socket-test-matrix/SKILL.md:38`의 broad `전체 테스트` bullet이 `전체 테스트 해봐` full route 우선순위를 흐릴 수 있어 리뷰 중 같은 의도의 문구 보정으로 수정 완료.
### 리뷰 검증
```text
$ bash -n agent-ops/skills/project/run-proto-socket-test-matrix/scripts/run_full_test.sh
exit code: 0
$ bash agent-ops/skills/project/run-proto-socket-test-matrix/scripts/run_full_test.sh --dry-run
exit code: 0
confirmed: route=full, functional-full/Dart.web/Dart.web(WSS)=recommended, performance-full/stability-full=nightly-pending, Nightly pending section says 미실행/PASS 아님.
$ rg --sort path -n "전체 테스트 해봐|route-mode|route-command|nightly-pending|performance-full|stability-full|20:00|PASS 아님|미실행" agent-ops/skills/project/run-proto-socket-test-matrix agent-test/local
exit code: 0
confirmed: SKILL.md, run_full_test.sh, run_test_by_change.sh, local full/performance docs share the full-route/nightly-pending wording.
$ git diff --check
exit code: 0
```
### 다음 단계
PASS: `complete.log` 작성 후 active task directory를 archive로 이동한다.
## 차원별 평가
> **[REVIEW AGENT ONLY]**
| 차원 | 판정 | 메모 |
|---|---|---|
| 정확성 | Pass | full route dry-run과 본 실행 계약이 문서/runner 출력과 일치한다. |
| 범위 준수 | Pass | `full-test-route` 문구 정합화와 dry-run 증거 확보 범위 안에서 완료했다. |
| 검증 신뢰도 | Pass | 계획 검증 명령을 리뷰 중 재실행했다. |
| 로드맵 메타데이터 | Pass | Roadmap Targets에 `full-test-route`가 명시되어 있다. |
## 코드리뷰 전용 체크리스트
> **[REVIEW AGENT ONLY]** 이 체크리스트는 코드리뷰 에이전트만 사용한다.
- [x] `코드리뷰 결과`에 `PASS`, `WARN`, `FAIL` 중 하나의 판정을 append한다.
- [x] 판정과 `차원별 평가`, Required/Suggested/Nit 분류가 서로 일치한다.
- [x] `검증 결과`의 명령 출력이 실제 코드/문서와 일치하는지 확인한다.
- [x] PASS이면 `complete.log`에 `Roadmap Completion` 섹션과 `full-test-route`를 기록한다.
- [x] PASS이면 active task 디렉터리를 `agent-task/archive/YYYY/MM/m-change-aware-test-routing/04_user_entrypoints_full_route/`로 이동한다.
## 소유권 표
| 섹션 | 구현 에이전트 | 리뷰 에이전트 |
|---|---:|---:|
| 구현 항목별 완료 여부 | 예 | 검토 |
| 구현 체크리스트 | 예 | 검토 |
| 구현 내용 | 예 | 검토 |
| 계획 대비 변경 사항 | 예 | 검토 |
| 검증 결과 | 예 | 검토 |
| 사용자 리뷰 요청 | 예 | 검토 |
| 코드리뷰 결과 | 아니오 | 예 |
| 차원별 평가 | 아니오 | 예 |
| 코드리뷰 전용 체크리스트 | 아니오 | 예 |

View file

@ -0,0 +1,43 @@
# Complete - m-change-aware-test-routing/04_user_entrypoints_full_route
## 완료 일시
2026-06-10
## 요약
`full-test-route` user entrypoint wording을 full functional dry-run/report/run 계약과 nightly-pending PASS 제외 문구에 맞췄고, review loop 1회차에서 PASS로 종료했다.
## 루프 이력
| Plan | Review | Verdict | 메모 |
|------|--------|---------|------|
| `plan_local_G01_0.log` | `code_review_local_G01_0.log` | PASS | `전체 테스트 해봐` full route 계약과 nightly-pending 미실행/PASS 아님 증거 확인 완료. |
## 구현/정리 내용
- `agent-ops/skills/project/run-proto-socket-test-matrix/SKILL.md`에 `전체 테스트 해봐` full route dry-run 선보고 및 본 실행 흐름을 명시했다.
- `nightly-pending`의 `performance-full`/`stability-full` 항목이 20:00 이후 별도 실행 후보이며 PASS 근거가 아니라는 문구를 SKILL/local test profile/runner 출력 계약과 대조했다.
- 리뷰 중 broad `전체 테스트` bullet에 `전체 테스트 해봐` full route 우선순위 문구를 보정했다.
## 최종 검증
- `bash -n agent-ops/skills/project/run-proto-socket-test-matrix/scripts/run_full_test.sh` - PASS; exit code 0.
- `bash agent-ops/skills/project/run-proto-socket-test-matrix/scripts/run_full_test.sh --dry-run` - PASS; `functional-full`, `functional-full-dart-web`, `functional-full-dart-web-wss`가 `recommended`로 출력되고 `performance-full`, `stability-full`은 `nightly-pending` 및 `미실행, PASS 아님` 섹션에 남았다.
- `rg --sort path -n "전체 테스트 해봐|route-mode|route-command|nightly-pending|performance-full|stability-full|20:00|PASS 아님|미실행" agent-ops/skills/project/run-proto-socket-test-matrix agent-test/local` - PASS; SKILL, runner, local full/performance docs의 관련 문구 확인 완료.
- `git diff --check` - PASS; whitespace/error output 없음.
## Roadmap Completion
- Milestone: `agent-roadmap/milestones/change-aware-test-routing.md`
- Completed task ids:
- `full-test-route`: PASS; evidence=`plan_local_G01_0.log`, `code_review_local_G01_0.log`; verification=`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 --dry-run`, `rg --sort path -n "전체 테스트 해봐|route-mode|route-command|nightly-pending|performance-full|stability-full|20:00|PASS 아님|미실행" agent-ops/skills/project/run-proto-socket-test-matrix agent-test/local`, `git diff --check`
- Not completed task ids: 없음
## 잔여 Nit
- 없음
## 후속 작업
- 없음

View file

@ -0,0 +1,161 @@
<!-- task=m-change-aware-test-routing/04_user_entrypoints_full_route plan=0 tag=UEP_FULL -->
# Plan - UEP_FULL
## 이 파일을 읽는 구현 에이전트에게
`CODE_REVIEW-local-G01.md`의 구현 에이전트 소유 섹션을 채우는 것이 구현의 마지막 단계다. 구현 후 실제 출력과 증빙을 남기고 active 파일을 유지한 채 리뷰 준비 상태를 보고한다. 사용자 결정, 사용자 소유 환경, scope 충돌이 구현을 막으면 사용자에게 직접 묻지 말고 `사용자 리뷰 요청` 섹션에 근거와 재개 조건을 기록한다. finalization, `complete.log`, archive 이동은 code-review 전용이다.
## 배경
`user-entrypoints` 에픽의 `full-test-route`는 `전체 테스트 해봐` 요청을 full functional 실행과 nightly pending 후보 보고로 안정적으로 연결해야 한다. 현재 사용자 요청 문구는 `SKILL.md`에 일부 반영되었지만, full route의 실행 전 보고, 실행 명령, 미실행 nightly 항목의 PASS 제외 문구를 같은 계약으로 닫는 후속 구현이 필요하다.
## 사용자 리뷰 요청 흐름
구현 중 blocker는 active review stub의 `사용자 리뷰 요청` 섹션에 기록한다. 구현 에이전트는 chat에서 직접 질문하거나 선택지를 제시하거나 `request_user_input`을 호출하지 않는다. code-review가 사용자 리뷰 요청의 타당성을 검증하고 실제 `USER_REVIEW.md` 작성 여부를 결정한다.
## Roadmap Targets
- Milestone: `agent-roadmap/milestones/change-aware-test-routing.md`
- Task ids:
- `full-test-route`: `전체 테스트 해봐`는 functional full 5x5를 기본으로 실행하고, performance/stability full은 시간대에 따라 즉시 실행 또는 nightly pending으로 분리한다.
- Completion mode: check-on-pass
## 분석 결과
### 읽은 파일
- `agent-roadmap/current.md`
- `agent-roadmap/milestones/change-aware-test-routing.md`
- `agent-ops/rules/project/rules.md`
- `agent-ops/rules/common/rules-roadmap.md`
- `agent-ops/skills/common/router.md`
- `agent-ops/skills/common/plan/SKILL.md`
- `agent-test/local/rules.md`
- `agent-test/local/proto-socket-full-matrix.md`
- `agent-test/local/proto-socket-performance-baseline.md`
- `agent-ops/skills/project/run-proto-socket-test-matrix/SKILL.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_test_by_change.sh`
### 테스트 환경 규칙
- test_env: `local`
- `agent-test/local/rules.md` 존재 및 읽음.
- 적용 profile: `agent-test/local/proto-socket-full-matrix.md`, `agent-test/local/proto-socket-performance-baseline.md`.
- 적용 명령: full 실행 기본은 `bash agent-ops/skills/project/run-proto-socket-test-matrix/scripts/run_matrix.sh --all`, full route 계약 확인은 `bash agent-ops/skills/project/run-proto-socket-test-matrix/scripts/run_full_test.sh --dry-run`.
- 문서 계약 확인은 `rg --sort path`로 수행한다. Markdown 파일에는 `bash -n`을 적용하지 않는다.
### 테스트 커버리지 공백
- 사용자 entrypoint 문장 인식과 실행 전 보고 계약을 직접 검증하는 test file은 없다.
- full route 변경은 `run_full_test.sh --dry-run` 출력과 deterministic `rg --sort path` 계약 확인으로 보완한다.
- 실제 long-running performance/stability full 실행은 이 plan 범위가 아니다. nightly pending 후보 표기와 PASS 제외 계약만 닫는다.
### 심볼 참조
- renamed/removed symbol: none.
### 분할 판단
- split decision policy를 평가했다.
- shared task group: `agent-task/m-change-aware-test-routing`.
- active subtask: `04_user_entrypoints_full_route`.
- predecessor: 없음. 디렉터리명이 `04_...`이므로 runtime dependency는 없다.
- `full-test-route`는 user-entrypoint 중 full 실행 계약만 다루며, `auto/speed/stability` shell/result contract와 독립적으로 리뷰 가능하다. 따라서 단일 split subtask로 둔다.
### 범위 결정 근거
- 이번 plan은 `full-test-route`만 완료 대상으로 삼는다.
- `auto-test-route`, `speed-test-route`, `stability-test-route`는 문구 일부 반영만 있었고 완료 검증이 부족하므로 이 plan의 Roadmap Targets에 넣지 않는다.
- `speed-test-shell`, `stability-test-shell`, `result-report-contract` 구현은 `skill-and-runner-contract` 에픽의 별도 후속 작업이다.
- 실제 성능 최적화, 야간 baseline 수집, 장시간 stress 실행은 이번 plan 범위에서 제외한다.
### 빌드 등급
- build: `local-G01`; review: `local-G01`.
- 문서와 얇은 runner 계약 정합화 중심이며, 검증은 dry-run과 deterministic search로 한정된다.
## 구현 체크리스트
- [ ] [UEP_FULL-1] `SKILL.md`의 `전체 테스트 해봐` 라우팅 설명을 `run_full_test.sh --dry-run` -> `run_full_test.sh` 흐름과 일치시킨다.
- [ ] [UEP_FULL-2] full route에서 nightly pending 항목이 미실행/PASS 아님으로 보고되는 문구를 `SKILL.md`, local test docs, runner 출력 계약 사이에서 일치시킨다.
- [ ] [UEP_FULL-3] `run_full_test.sh --dry-run`과 deterministic `rg --sort path`로 full route 계약을 검증하고 실제 stdout/stderr를 review stub에 남긴다.
- [ ] CODE_REVIEW-*-G??.md의 구현 에이전트 소유 섹션을 실제 구현 내용과 검증 출력으로 채운다. 이 항목이 완료되기 전에는 구현이 완료된 것이 아니다.
### [UEP_FULL-1] Full route entrypoint wording
`문제`: `SKILL.md`에 사용자 요청 4분류 문구가 추가되었지만, `전체 테스트 해봐`가 full route dry-run 보고 후 본 실행으로 이어진다는 사용자-facing 계약이 아직 얇다.
`해결 방법`: `SKILL.md`의 `route-mode`/`route-command` 설명과 실행 절차에서 `full` 요청의 실행 전 보고와 본 실행 조건을 명확히 쓴다. 기존 `전체 테스트`, `전체 검증`, `테스트 매트릭스` 요청과 `전체 테스트 해봐`의 우선순위가 혼동되지 않게 표현을 정리한다.
`수정 파일 및 체크리스트`:
- [ ] `agent-ops/skills/project/run-proto-socket-test-matrix/SKILL.md`
`테스트 작성`: 별도 test file은 만들지 않는다. 이 항목은 skill 문서의 라우팅 계약 정합화다.
`중간 검증`:
```bash
rg --sort path -n "전체 테스트 해봐|route-mode|route-command|run_full_test.sh --dry-run" agent-ops/skills/project/run-proto-socket-test-matrix/SKILL.md
```
### [UEP_FULL-2] Nightly pending wording
`문제`: full route에서 performance/stability full은 실행하지 않은 nightly 후보인데, 문서와 runner 출력이 같은 용어로 PASS 제외를 말하지 않으면 결과 보고가 헷갈릴 수 있다.
`해결 방법`: `SKILL.md`와 local test profile 문서가 `nightly-pending`, `20:00 이후`, `미실행`, `PASS 아님`을 같은 의미로 설명하게 맞춘다. `run_full_test.sh` 출력 문구가 이미 충분하면 코드 변경 없이 문서만 정리한다.
`수정 파일 및 체크리스트`:
- [ ] `agent-ops/skills/project/run-proto-socket-test-matrix/SKILL.md`
- [ ] `agent-test/local/proto-socket-full-matrix.md`
- [ ] `agent-test/local/proto-socket-performance-baseline.md`
- [ ] `agent-ops/skills/project/run-proto-socket-test-matrix/scripts/run_full_test.sh` (문구 불일치가 실제로 있을 때만)
`테스트 작성`: 별도 test file은 만들지 않는다. 문서/runner 계약은 deterministic search와 dry-run으로 검증한다.
`중간 검증`:
```bash
rg --sort path -n "nightly-pending|20:00|PASS 아님|미실행|performance-full|stability-full" agent-ops/skills/project/run-proto-socket-test-matrix agent-test/local
```
### [UEP_FULL-3] Full route dry-run evidence
`문제`: `full-test-route` 완료 근거는 실행 전 추천/미실행 항목 보고가 실제 출력에 남는지 확인해야 한다.
`해결 방법`: `run_full_test.sh --dry-run`을 실행해 classifier 출력, full functional 추천 여부, nightly pending 보고가 실제 stdout에 나타나는지 확인한다.
`수정 파일 및 체크리스트`:
- [ ] `CODE_REVIEW-local-G01.md`의 `검증 결과`에 실제 명령과 stdout/stderr를 기록한다.
`테스트 작성`: 신규 test file은 만들지 않는다.
`중간 검증`:
```bash
bash agent-ops/skills/project/run-proto-socket-test-matrix/scripts/run_full_test.sh --dry-run
```
## 수정 파일 요약
| 파일 | 항목 |
|---|---|
| `agent-ops/skills/project/run-proto-socket-test-matrix/SKILL.md` | UEP_FULL-1, UEP_FULL-2 |
| `agent-test/local/proto-socket-full-matrix.md` | UEP_FULL-2 |
| `agent-test/local/proto-socket-performance-baseline.md` | UEP_FULL-2 |
| `agent-ops/skills/project/run-proto-socket-test-matrix/scripts/run_full_test.sh` | UEP_FULL-2, 필요한 경우만 |
| `agent-task/m-change-aware-test-routing/04_user_entrypoints_full_route/CODE_REVIEW-local-G01.md` | UEP_FULL-3 |
## 최종 검증
```bash
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 --dry-run
rg --sort path -n "전체 테스트 해봐|route-mode|route-command|nightly-pending|performance-full|stability-full|20:00|PASS 아님|미실행" agent-ops/skills/project/run-proto-socket-test-matrix agent-test/local
```
모든 코드 변경 완료 후 반드시 `CODE_REVIEW-*-G??.md`의 구현 에이전트 소유 섹션을 채운다. 이 파일 작성이 구현의 마지막 단계다.