test(agent-ops): local smoke 검증 규칙을 정리한다

모노레포 패키지 경계에 맞춰 local smoke 문서의 경로와 검증 명령을 정리하고 완료된 agent-task 로그를 아카이브한다.
This commit is contained in:
toki 2026-06-07 09:07:28 +09:00
parent e770d3594b
commit 69248c805d
17 changed files with 1005 additions and 206 deletions

View file

@ -0,0 +1,290 @@
<!-- task=m-ops-rule-monorepo-alignment/02+01_test_rules plan=0 tag=RULES -->
# Code Review Reference - RULES
> **[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`. Evidence gaps that a follow-up agent can close by rerunning commands or collecting artifacts are normal follow-up issues, not user-review blockers by themselves.
> Do not ask the user directly, present choices in chat, or call `request_user_input` during implementation; record the needed decision in `사용자 리뷰 요청` and stop for code-review.
> Finalization (`코드리뷰 결과`, log rename, `complete.log`, archive moves, `코드리뷰 전용 체크리스트`) is review-agent-only, even after compaction/resume.
> Follow the ownership table at the bottom of this file for which sections you own.
## 개요
date=2026-06-07
task=m-ops-rule-monorepo-alignment/02+01_test_rules, plan=0, tag=RULES
## Roadmap Targets
- Milestone: `agent-roadmap/phase/independent-control-plane/milestones/ops-rule-monorepo-alignment.md`
- Task ids:
- `test-rules`: local test rule과 smoke 문서가 모노레포 target 이름과 일치하는지 확인한다.
- Completion mode: check-on-pass
## 이 파일을 읽는 리뷰 에이전트에게
> **[REVIEW AGENT ONLY]** 아래 종결 절차는 코드리뷰 에이전트 전용이다. 구현 에이전트는 이 섹션을 실행하지 않는다.
각 항목의 구현을 실제 소스 파일과 대조하고, `검증 결과` 섹션의 출력이 코드와 일치하는지 확인하세요.
리뷰 완료는 아래 순서까지 끝난 상태를 의미합니다.
1. 판정을 append한다.
2. `CODE_REVIEW-local-G04.md` -> `code_review_local_G04_N.log`, `PLAN-local-G04.md` -> `plan_local_G04_M.log`로 아카이브한다.
3. PASS이면 `complete.log` 작성 후 active task 디렉터리를 `agent-task/archive/YYYY/MM/m-ops-rule-monorepo-alignment/02+01_test_rules/`로 이동한다. WARN/FAIL이면 user-review gate를 확인한 뒤 다음 active plan/review 파일 또는 `USER_REVIEW.md`를 작성한다. `USER_REVIEW.md`가 사용자 결정으로 완료/PASS 해소되면 code-review가 `USER_REVIEW.md`를 해소 상태로 갱신하고 `complete.log` 작성 후 archive 이동한다.
4. PASS이고 task group이 `m-<milestone-slug>`이면 완료 이벤트 메타데이터를 보고한다. roadmap 상태 체크와 `update-roadmap` 호출은 런타임 책임이다.
5. 적용 가능한 `코드리뷰 전용 체크리스트` 항목을 최종 `.log` 위치에서 체크한 뒤 보고한다.
---
## 구현 항목별 완료 여부
| 항목 | 완료 여부 |
|------|---------|
| [RULES-1] Local smoke read conditions and commands | [x] |
| [RULES-2] Local routing and monorepo target consistency | [x] |
## 구현 체크리스트
- [x] predecessor `01_domain_rules`의 `complete.log`가 active 또는 archive 경로에 있는지 확인하고 없으면 구현을 시작하지 않고 review stub의 사용자 리뷰 요청이 아니라 dependency 미충족으로 기록한다.
- [x] `agent-test/local/*-smoke.md`의 읽기 조건을 `apps/runner/...` 경로로 갱신하고, package-local 명령은 working directory 또는 `make` target 의미가 분명하게 보이도록 정리한다.
- [x] `agent-test/local/rules.md`의 라우팅 설명이 runner/client/core package target과 충돌하지 않는지 확인한다.
- [x] `rg --sort path -n 'lib/|bin/main|assets/' agent-test/local` 결과의 남은 항목이 모두 의도된 예외인지 확인한다.
- [x] `git diff --check`를 실행해 markdown whitespace 오류가 없는지 확인한다.
- [x] CODE_REVIEW-*-G??.md의 구현 에이전트 소유 섹션을 실제 구현 내용과 검증 출력으로 채운다. 이 항목이 완료되기 전에는 구현이 완료된 것이 아니다.
## 코드리뷰 전용 체크리스트
> **[REVIEW AGENT ONLY]** 이 체크리스트는 코드리뷰 에이전트만 사용한다.
> 구현 에이전트는 이 섹션을 수정하거나 체크하지 않는다.
- [x] `코드리뷰 결과`에 `PASS`, `WARN`, `FAIL` 중 하나의 판정을 append한다.
- [x] 판정과 `차원별 평가`, Required/Suggested/Nit 분류가 서로 일치한다.
- [x] active `CODE_REVIEW-*-G??.md`를 `code_review_local_G04_N.log`로 아카이브한다.
- [x] active `PLAN-*-G??.md`를 `plan_local_G04_M.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 디렉터리 `agent-task/m-ops-rule-monorepo-alignment/02+01_test_rules/`를 `agent-task/archive/YYYY/MM/m-ops-rule-monorepo-alignment/02+01_test_rules/`로 이동하고 최종 archive 경로에서 이 체크리스트를 갱신한다.
- [ ] PASS이고 task group이 `m-<milestone-slug>`이면 런타임이 읽을 완료 이벤트 메타데이터를 보고하고, roadmap 수정이나 `update-roadmap` 직접 호출을 하지 않는다.
- [ ] PASS split 작업이면 이동 후 빈 active parent `agent-task/m-ops-rule-monorepo-alignment/`를 제거하거나, 남은 sibling/file이 있어 유지했다고 확인한다.
- [x] WARN/FAIL이고 user-review gate가 트리거되지 않았으면 다음 active `PLAN-local-G05.md`와 `CODE_REVIEW-local-G05.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`를 남기지 않는다.
- [ ] USER_REVIEW가 사용자 결정으로 완료/PASS 해소되면 `USER_REVIEW.md`를 해소 상태로 갱신하고 `complete.log`를 작성한 뒤 task directory를 archive로 이동한다.
## 계획 대비 변경 사항
- 없음. 계획된 사항대로 모두 정상적으로 수행됨.
## 주요 설계 결정
- **Monorepo Target과의 일치**: 로컬 smoke 테스트 profile들에서 각 파일의 읽기 조건을 monorepo structure인 `apps/runner/` prefix를 사용하도록 일치시켰음.
- **명령 구체화**: Dart runner 관련 setup, lint, unit test, smoke test 명령어들을 `apps/runner/` 경로 또는 `make` target을 이용하여 명시하도록 개선했음.
## 사용자 리뷰 요청
_기본값은 `없음`이다. 구현 중 사용자 결정, 사용자 소유 외부 환경/secret/서비스 준비, 또는 계획 범위 변경 없이는 안전하게 진행할 수 없으면 아래 항목을 실제 내용으로 교체하고, 구현을 중단한 뒤 active 파일을 그대로 둔 채 리뷰를 요청한다. 구현 에이전트는 사용자에게 직접 질문하거나 선택지를 제시하거나 `request_user_input`을 호출하지 않는다. 후속 에이전트가 명령 재실행이나 산출물 수집으로 해소할 수 있는 검증 증거 공백만으로는 사용자 리뷰 요청을 작성하지 않는다._
- 상태: 없음
- 사유 유형: 없음
- 결정 필요: 없음
- 차단 근거: 없음
- 실행한 검증/명령: 없음
- 자동 후속 불가 이유: 없음
- 재개 조건: 없음
## 리뷰어를 위한 체크포인트
- predecessor `01_domain_rules` 완료 근거 없이 구현이 시작되지 않았는지 확인한다.
- local smoke read condition이 domain rule 경로와 같은 모노레포 prefix를 쓰는지 확인한다.
- `Makefile` target과 smoke 문서의 명령 의미가 충돌하지 않는지 확인한다.
## 검증 결과
### RULES-1 중간 검증
```bash
$ rg --sort path -n 'lib/|bin/main|assets/' agent-test/local
agent-test/local/agent-smoke.md
13:- `apps/runner/lib/oto/agent/**`, `apps/runner/lib/cli/commands/command_agent.dart`, 또는 `apps/runner/assets/script/shell/oto_agent_bootstrap.sh` 변경 검증이 필요한 경우
agent-test/local/cli-smoke.md
13:- `apps/runner/bin/main.dart`, `apps/runner/lib/cli/**`, `apps/runner/assets/script/**`, `apps/runner/assets/bin/**`, `apps/runner/assets/package/**`, 또는 resource importer 변경 검증이 필요한 경우
41:- smoke: `cd apps/runner && dart run bin/main.dart --help`
53:- CLI entrypoint 변경 시 `cd apps/runner && dart run bin/main.dart --help`를 실행한다.
agent-test/local/command-smoke.md
13:- `apps/runner/lib/oto/commands/**`, `apps/runner/lib/oto/data/**`, 또는 command template 변경 검증이 필요한 경우
agent-test/local/core-smoke.md
13:- `apps/runner/lib/oto/application.dart`, `apps/runner/lib/oto/core/**`, `apps/runner/lib/oto/utils/**`, 또는 core script helper 변경 검증이 필요한 경우
agent-test/local/pipeline-smoke.md
13:- `apps/runner/lib/oto/pipeline/**` 또는 `apps/runner/lib/oto/data/pipeline_data.dart` 변경 검증이 필요한 경우
agent-test/local/sample-smoke.md
13:- `apps/runner/assets/yaml/sample/**` 변경 또는 YAML sample 검증이 필요한 경우
agent-test/local/scheduler-smoke.md
13:- `apps/runner/lib/cli/commands/scheduler/**` 또는 `apps/runner/lib/cli/commands/command_scheduler.dart` 변경 검증이 필요한 경우
```
### RULES-2 중간 검증
```bash
$ rg --sort path -n 'runner-analyze|runner-test|client-analyze|client-test|core-test|apps/runner|apps/client|services/core|packages/flutter/oto_console' agent-test/local Makefile
agent-test/local/agent-smoke.md
38:- setup: `cd apps/runner && dart pub get` (또는 `make runner-get`)
39:- lint: `cd apps/runner && dart analyze` (또는 `make runner-analyze`)
40:- unit: `cd apps/runner && dart test test/oto_agent_migration_plan_test.dart test/oto_agent_bootstrap_script_test.dart test/oto_agent_cli_test.dart test/oto_agent_config_test.dart test/oto_agent_registration_test.dart test/oto_server_connection_smoke_test.dart` (또는 `make runner-test`)
54:- 전체 회귀가 필요한 경우 `cd apps/runner && dart test` 또는 `make runner-test`를 실행한다.
58:- `cd apps/runner && dart analyze`가 issue 없이 종료한다.
59:- 지정한 `cd apps/runner && dart test`가 모두 통과한다.
agent-test/local/cli-smoke.md
13:- `apps/runner/bin/main.dart`, `apps/runner/lib/cli/**`, `apps/runner/assets/script/**`, `apps/runner/assets/bin/**`, `apps/runner/assets/package/**`, 또는 resource importer 변경 검증이 필요한 경우
38:- setup: `cd apps/runner && dart pub get` (또는 `make runner-get`)
39:- lint: `cd apps/runner && dart analyze` (또는 `make runner-analyze`)
40:- unit: `cd apps/runner && dart test test/oto_cli_runtime_test.dart test/oto_catalog_cli_test.dart test/oto_validate_cli_test.dart` (또는 `make runner-test`)
41:- smoke: `cd apps/runner && dart run bin/main.dart --help`
48:- CLI 도메인 변경 후 `cd apps/runner && dart analyze`를 실행한다.
49:- CLI 도메인 변경 후 관련 `cd apps/runner && dart test ...` 명령을 실행한다.
53:- CLI entrypoint 변경 시 `cd apps/runner && dart run bin/main.dart --help`를 실행한다.
57:- `cd apps/runner && dart analyze`가 issue 없이 종료한다.
58:- 지정한 `cd apps/runner && dart test`가 모두 통과한다.
agent-test/local/command-smoke.md
13:- `apps/runner/lib/oto/commands/**`, `apps/runner/lib/oto/data/**`, 또는 command template 변경 검증이 필요한 경우
38:- setup: `cd apps/runner && dart pub get` (또는 `make runner-get`)
39:- lint: `cd apps/runner && dart analyze` (또는 `make runner-analyze`)
40:- unit: `cd apps/runner && dart test test/oto_command_catalog_test.dart test/oto_command_runtime_test.dart` (또는 `make runner-test`)
48:- command 도메인 변경 후 `cd apps/runner && dart analyze`를 실행한다.
49:- command 도메인 변경 후 관련 `cd apps/runner && dart test ...` 명령을 실행한다.
50:- `@JsonSerializable` 모델을 추가/변경한 경우 `cd apps/runner && dart run build_runner build`를 실행하거나 생성물 갱신 필요를 보고한다.
54:- 전체 command 회귀가 필요하면 `cd apps/runner && dart test` 또는 `make runner-test`를 실행한다.
58:- `cd apps/runner && dart analyze`가 issue 없이 종료한다.
59:- 지정한 `cd apps/runner && dart test`가 모두 통과한다.
agent-test/local/core-smoke.md
13:- `apps/runner/lib/oto/application.dart`, `apps/runner/lib/oto/core/**`, `apps/runner/lib/oto/utils/**`, 또는 core script helper 변경 검증이 필요한 경우
38:- setup: `cd apps/runner && dart pub get` (또는 `make runner-get`)
39:- lint: `cd apps/runner && dart analyze` (또는 `make runner-analyze`)
40:- unit: `cd apps/runner && dart test test/oto_application_test.dart test/oto_context_test.dart test/oto_core_test.dart test/oto_system_runtime_test.dart` (또는 `make runner-test`)
48:- core 도메인 변경 후 `cd apps/runner && dart analyze`를 실행한다.
49:- core 도메인 변경 후 관련 `cd apps/runner && dart test ...` 명령을 실행한다.
53:- runtime 전체 영향이 있으면 `cd apps/runner && dart test` 또는 `make runner-test`를 실행한다.
57:- `cd apps/runner && dart analyze`가 issue 없이 종료한다.
58:- 지정한 `cd apps/runner && dart test`가 모두 통과한다.
agent-test/local/framework-smoke.md
13:- `apps/runner/pubspec.yaml`, `apps/client/pubspec.yaml`, `packages/flutter/oto_console/pubspec.yaml`, `services/core/go.mod`, 또는 `proto/**` 변경 검증이 필요한 경우
39: - runner: `cd apps/runner && dart pub get` (또는 `make runner-get`)
40: - client: `cd apps/client && flutter pub get` (또는 `make client-get`)
41: - core: `cd services/core && go mod download`
43: - runner: `cd apps/runner && dart analyze` (또는 `make runner-analyze`)
44: - client: `cd apps/client && flutter analyze` (또는 `make client-analyze`)
46: - runner: `cd apps/runner && dart test` (또는 `make runner-test`)
47: - client: `cd apps/client && flutter test` (또는 `make client-test`)
48: - core: `cd services/core && go test ./...` (또는 `make core-test`)
57:- 각 패키지 도메인 변경 후 관련 `make runner-test`, `make client-test` 또는 `make core-test` 명령을 실행한다.
61:- JSON 생성 경계 변경 시 `cd apps/runner && dart run build_runner build`를 실행하거나 생성물 갱신 필요를 보고한다.
agent-test/local/pipeline-smoke.md
13:- `apps/runner/lib/oto/pipeline/**` 또는 `apps/runner/lib/oto/data/pipeline_data.dart` 변경 검증이 필요한 경우
38:- setup: `cd apps/runner && dart pub get` (또는 `make runner-get`)
39:- lint: `cd apps/runner && dart analyze` (또는 `make runner-analyze`)
40:- unit: `cd apps/runner && dart test` (또는 `make runner-test`)
48:- pipeline 도메인 변경 후 `cd apps/runner && dart analyze`를 실행한다.
49:- pipeline 전용 테스트가 확인되지 않았으므로 변경 영향이 있는 경우 `cd apps/runner && dart test` 또는 `make runner-test`를 실행한다.
57:- `cd apps/runner && dart analyze`가 issue 없이 종료한다.
58:- 지정한 `cd apps/runner && dart test`가 모두 통과한다.
agent-test/local/rules.md
42:- **apps/runner** (Dart CLI runner):
43: - Setup: `make runner-get` 또는 `cd apps/runner && dart pub get`
44: - Lint: `make runner-analyze` 또는 `cd apps/runner && dart analyze`
45: - Test: `make runner-test` 또는 `cd apps/runner && dart test`
46:- **apps/client** (Flutter OTO client app):
47: - Setup: `make client-get` 또는 `cd apps/client && flutter pub get`
48: - Lint: `make client-analyze` 또는 `cd apps/client && flutter analyze`
49: - Test: `make client-test` 또는 `cd apps/client && flutter test`
50:- **services/core** (Go OTO Server):
51: - Test: `make core-test` 또는 `cd services/core && go test ./...`
agent-test/local/sample-smoke.md
13:- `apps/runner/assets/yaml/sample/**` 변경 또는 YAML sample 검증이 필요한 경우
38:- setup: `cd apps/runner && dart pub get` (또는 `make runner-get`)
39:- lint: `cd apps/runner && dart analyze` (또는 `make runner-analyze`)
40:- unit: `cd apps/runner && dart test test/oto_validate_cli_test.dart` (또는 `make runner-test`)
48:- sample 도메인 변경 후 `cd apps/runner && dart analyze`를 실행한다.
49:- sample 검증 경로 변경 후 `cd apps/runner && dart test test/oto_validate_cli_test.dart`를 실행한다.
57:- `cd apps/runner && dart analyze`가 issue 없이 종료한다.
58:- 지정한 `cd apps/runner && dart test`가 모두 통과한다.
agent-test/local/scheduler-smoke.md
13:- `apps/runner/lib/cli/commands/scheduler/**` 또는 `apps/runner/lib/cli/commands/command_scheduler.dart` 변경 검증이 필요한 경우
38:- setup: `cd apps/runner && dart pub get` (또는 `make runner-get`)
39:- lint: `cd apps/runner && dart analyze` (또는 `make runner-analyze`)
40:- unit: `cd apps/runner && dart test test/oto_scheduler_runtime_test.dart` (또는 `make runner-test`)
48:- scheduler 도메인 변경 후 `cd apps/runner && dart analyze`를 실행한다.
49:- scheduler 도메인 변경 후 `cd apps/runner && dart test test/oto_scheduler_runtime_test.dart`를 실행한다.
57:- `cd apps/runner && dart analyze`가 issue 없이 종료한다.
58:- 지정한 `cd apps/runner && dart test`가 모두 통과한다.
Makefile
1:.PHONY: all setup test runner-get runner-analyze runner-test client-get client-analyze client-test core-test proto proto-go proto-dart
10: cd apps/runner && dart pub get
12:runner-analyze:
13: cd apps/runner && dart analyze
15:runner-test:
16: cd apps/runner && dart test
19: cd apps/client && flutter pub get
21:client-analyze:
22: cd apps/client && flutter analyze
24:client-test:
25: cd apps/client && flutter test
27:core-test:
28: cd services/core && go test ./...
33: mkdir -p services/core/oto
34: protoc -I proto --go_out=services/core --go_opt=paths=source_relative proto/oto/runner.proto
40: mkdir -p apps/runner/lib/oto/agent
41: protoc -I proto --dart_out=apps/runner/lib/oto/agent proto/oto/runner.proto
43:test: runner-test client-test core-test
```
### 최종 검증
```bash
$ test -f agent-task/m-ops-rule-monorepo-alignment/01_domain_rules/complete.log || find agent-task/archive -path '*/m-ops-rule-monorepo-alignment/01_domain_rules/complete.log' -print -quit | grep -q .
# Exited with 0 (success). Found predecessor complete.log at:
# agent-task/archive/2026/06/m-ops-rule-monorepo-alignment/01_domain_rules/complete.log
$ rg --sort path -n 'lib/|bin/main|assets/' agent-test/local
agent-test/local/agent-smoke.md
13:- `apps/runner/lib/oto/agent/**`, `apps/runner/lib/cli/commands/command_agent.dart`, 또는 `apps/runner/assets/script/shell/oto_agent_bootstrap.sh` 변경 검증이 필요한 경우
agent-test/local/cli-smoke.md
13:- `apps/runner/bin/main.dart`, `apps/runner/lib/cli/**`, `apps/runner/assets/script/**`, `apps/runner/assets/bin/**`, `apps/runner/assets/package/**`, 또는 resource importer 변경 검증이 필요한 경우
41:- smoke: `cd apps/runner && dart run bin/main.dart --help`
53:- CLI entrypoint 변경 시 `cd apps/runner && dart run bin/main.dart --help`를 실행한다.
agent-test/local/command-smoke.md
13:- `apps/runner/lib/oto/commands/**`, `apps/runner/lib/oto/data/**`, 또는 command template 변경 검증이 필요한 경우
agent-test/local/core-smoke.md
13:- `apps/runner/lib/oto/application.dart`, `apps/runner/lib/oto/core/**`, `apps/runner/lib/oto/utils/**`, 또는 core script helper 변경 검증이 필요한 경우
agent-test/local/pipeline-smoke.md
13:- `apps/runner/lib/oto/pipeline/**` 또는 `apps/runner/lib/oto/data/pipeline_data.dart` 변경 검증이 필요한 경우
agent-test/local/sample-smoke.md
13:- `apps/runner/assets/yaml/sample/**` 변경 또는 YAML sample 검증이 필요한 경우
agent-test/local/scheduler-smoke.md
13:- `apps/runner/lib/cli/commands/scheduler/**` 또는 `apps/runner/lib/cli/commands/command_scheduler.dart` 변경 검증이 필요한 경우
$ rg --sort path -n 'runner-analyze|runner-test|client-analyze|client-test|core-test|apps/runner|apps/client|services/core|packages/flutter/oto_console' agent-test/local Makefile
[Output matches the RULES-2 intermediate verification output above]
$ git diff --check
# Exited with 0 (no issues found).
```
---
> **[IMPLEMENTING AGENT — BEFORE SAVING] Have you filled in every implementation-owned section: completion table, implementation checklist, changes from plan, design decisions, and verification output?**
> If anything is blank, go back and fill it in before saving this file.
> Leave review-agent-only sections unchanged.
## 코드리뷰 결과
- 종합 판정: FAIL
- 차원별 평가:
- correctness: Fail
- completeness: Fail
- test coverage: Pass
- API contract: Fail
- code quality: Pass
- plan deviation: Fail
- verification trust: Pass
- 발견된 문제:
- Required: `agent-test/local/framework-smoke.md:13`의 읽기 조건이 `apps/runner/analysis_options.yaml`, `apps/client/analysis_options.yaml`을 빠뜨린다. `agent-test/local/rules.md:35`는 framework smoke가 analyzer options를 다룬다고 라우팅하고, `agent-ops/rules/project/rules.md:156` 및 `agent-ops/rules/project/rules.md:158`도 두 파일을 framework domain으로 매핑한다. 후속에서 framework smoke 읽기 조건에 두 analyzer option 경로를 추가한다.
- Required: `agent-test/local/framework-smoke.md:36` 이후 명령/필수 검증이 `proto/**` 변경을 읽기 조건에 넣어 두고도 `make proto`, `make proto-go`, `make proto-dart` 생성 검증 계약을 제공하지 않는다. `agent-test/local/rules.md:52`는 protobuf generate target을 local monorepo target으로 추가했고 `Makefile`에도 해당 target이 있으므로, 후속에서 framework smoke 명령/검증/판정 기준에 proto generation 경계를 명시한다.
- Suggested: `agent-test/local/cli-smoke.md:13`의 `resource importer` 표현은 정확한 모노레포 경로가 아니다. 후속에서 `apps/runner/lib/resources.resource_importer.dart`로 좁히면 project domain mapping과 더 잘 맞는다.
- 다음 단계: FAIL 후속 `PLAN-local-G05.md`와 `CODE_REVIEW-local-G05.md`를 작성한다.

View file

@ -0,0 +1,196 @@
<!-- task=m-ops-rule-monorepo-alignment/02+01_test_rules plan=1 tag=REVIEW_RULES -->
# Code Review Reference - REVIEW_RULES
> **[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`. Evidence gaps that a follow-up agent can close by rerunning commands or collecting artifacts are normal follow-up issues, not user-review blockers by themselves.
> Do not ask the user directly, present choices in chat, or call `request_user_input` during implementation; record the needed decision in `사용자 리뷰 요청` and stop for code-review.
> Finalization (`코드리뷰 결과`, log rename, `complete.log`, archive moves, `코드리뷰 전용 체크리스트`) is review-agent-only, even after compaction/resume.
> Follow the ownership table at the bottom of this file for which sections you own.
## 개요
date=2026-06-07
task=m-ops-rule-monorepo-alignment/02+01_test_rules, plan=1, tag=REVIEW_RULES
## Roadmap Targets
- Milestone: `agent-roadmap/phase/independent-control-plane/milestones/ops-rule-monorepo-alignment.md`
- Task ids:
- `test-rules`: local test rule과 smoke 문서가 모노레포 target 이름과 일치하는지 확인한다.
- Completion mode: check-on-pass
## 이 파일을 읽는 리뷰 에이전트에게
> **[REVIEW AGENT ONLY]** 아래 종결 절차는 코드리뷰 에이전트 전용이다. 구현 에이전트는 이 섹션을 실행하지 않는다.
각 항목의 구현을 실제 소스 파일과 대조하고, `검증 결과` 섹션의 출력이 코드와 일치하는지 확인하세요.
리뷰 완료는 아래 순서까지 끝난 상태를 의미합니다.
1. 판정을 append한다.
2. `CODE_REVIEW-local-G05.md` -> `code_review_local_G05_N.log`, `PLAN-local-G05.md` -> `plan_local_G05_M.log`로 아카이브한다.
3. PASS이면 `complete.log` 작성 후 active task 디렉터리를 `agent-task/archive/YYYY/MM/m-ops-rule-monorepo-alignment/02+01_test_rules/`로 이동한다. WARN/FAIL이면 user-review gate를 확인한 뒤 다음 active plan/review 파일 또는 `USER_REVIEW.md`를 작성한다. `USER_REVIEW.md`가 사용자 결정으로 완료/PASS 해소되면 code-review가 `USER_REVIEW.md`를 해소 상태로 갱신하고 `complete.log` 작성 후 archive 이동한다.
4. PASS이고 task group이 `m-<milestone-slug>`이면 완료 이벤트 메타데이터를 보고한다. roadmap 상태 체크와 `update-roadmap` 호출은 런타임 책임이다.
5. 적용 가능한 `코드리뷰 전용 체크리스트` 항목을 최종 `.log` 위치에서 체크한 뒤 보고한다.
---
## 구현 항목별 완료 여부
| 항목 | 완료 여부 |
|------|---------|
| [REVIEW_RULES-1] Framework smoke routing and generation contract | [x] |
## 구현 체크리스트
- [x] `agent-test/local/framework-smoke.md` 읽기 조건에 `apps/runner/analysis_options.yaml`, `apps/client/analysis_options.yaml`을 추가하고, 적용 범위가 analyzer options와 protobuf contract를 함께 설명하도록 정리한다.
- [x] `agent-test/local/framework-smoke.md` 명령/검증/판정 기준에 `make proto`, `make proto-go`, `make proto-dart` 생성 검증 경계를 명시한다.
- [x] `agent-test/local/cli-smoke.md`의 `resource importer` 표현을 `apps/runner/lib/resources.resource_importer.dart`로 구체화한다.
- [x] `rg --sort path -n 'analysis_options|make proto|proto-go|proto-dart|apps/runner/lib/resources.resource_importer.dart' agent-test/local Makefile agent-ops/rules/project/rules.md agent-ops/rules/project/domain/framework/rules.md agent-ops/rules/project/domain/cli/rules.md` 결과로 라우팅/target 경계를 확인한다.
- [x] `git diff --check`를 실행해 markdown whitespace 오류가 없는지 확인한다.
- [x] CODE_REVIEW-*-G??.md의 구현 에이전트 소유 섹션을 실제 구현 내용과 검증 출력으로 채운다. 이 항목이 완료되기 전에는 구현이 완료된 것이 아니다.
## 코드리뷰 전용 체크리스트
> **[REVIEW AGENT ONLY]** 이 체크리스트는 코드리뷰 에이전트만 사용한다.
> 구현 에이전트는 이 섹션을 수정하거나 체크하지 않는다.
- [x] `코드리뷰 결과`에 `PASS`, `WARN`, `FAIL` 중 하나의 판정을 append한다.
- [x] 판정과 `차원별 평가`, Required/Suggested/Nit 분류가 서로 일치한다.
- [x] active `CODE_REVIEW-*-G??.md`를 `code_review_local_G05_N.log`로 아카이브한다.
- [x] active `PLAN-*-G??.md`를 `plan_local_G05_M.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 디렉터리 `agent-task/m-ops-rule-monorepo-alignment/02+01_test_rules/`를 `agent-task/archive/YYYY/MM/m-ops-rule-monorepo-alignment/02+01_test_rules/`로 이동하고 최종 archive 경로에서 이 체크리스트를 갱신한다.
- [ ] PASS이고 task group이 `m-<milestone-slug>`이면 런타임이 읽을 완료 이벤트 메타데이터를 보고하고, roadmap 수정이나 `update-roadmap` 직접 호출을 하지 않는다.
- [ ] PASS split 작업이면 이동 후 빈 active parent `agent-task/m-ops-rule-monorepo-alignment/`를 제거하거나, 남은 sibling/file이 있어 유지했다고 확인한다.
- [x] WARN/FAIL이고 user-review gate가 트리거되지 않았으면 다음 active `PLAN-local-G06.md`와 `CODE_REVIEW-local-G06.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`를 남기지 않는다.
- [ ] USER_REVIEW가 사용자 결정으로 완료/PASS 해소되면 `USER_REVIEW.md`를 해소 상태로 갱신하고 `complete.log`를 작성한 뒤 task directory를 archive로 이동한다.
## 계획 대비 변경 사항
- 없음. 계획된 사항대로 모두 정상적으로 수행됨.
## 주요 설계 결정
- **analyzer_options.yaml 읽기 조건 반영**: 프레임워크 도메인 정의(analysis_options.yaml)와 정합하도록 `framework-smoke.md` 읽기 조건에 `apps/runner/analysis_options.yaml`, `apps/client/analysis_options.yaml`을 추가하고, 적용 범위에도 `analyzer configuration (analyzer options)`를 명기함.
- **Protobuf 생성 타겟 계약 추가**: `proto/**` 읽기 조건에 대응하여 `Makefile` 내의 protobuf generation 타겟(`make proto`, `make proto-go`, `make proto-dart`)을 명령, 필수 검증, 판정 기준에 추가함.
- **Resource Importer 경로 절대화**: `cli-smoke.md` 파일의 resource importer 일반 명칭을 project domain mapping과 일치하는 `apps/runner/lib/resources.resource_importer.dart`로 세밀화함.
## 사용자 리뷰 요청
_기본값은 `없음`이다. 구현 중 사용자 결정, 사용자 소유 외부 환경/secret/서비스 준비, 또는 계획 범위 변경 없이는 안전하게 진행할 수 없으면 아래 항목을 실제 내용으로 교체하고, 구현을 중단한 뒤 active 파일을 그대로 둔 채 리뷰를 요청한다. 구현 에이전트는 사용자에게 직접 질문하거나 선택지를 제시하거나 `request_user_input`을 호출하지 않는다. 후속 에이전트가 명령 재실행이나 산출물 수집으로 해소할 수 있는 검증 증거 공백만으로는 사용자 리뷰 요청을 작성하지 않는다._
- 상태: 없음
- 사유 유형: 없음
- 결정 필요: 없음
- 차단 근거: 없음
- 실행한 검증/명령: 없음
- 자동 후속 불가 이유: 없음
- 재개 조건: 없음
## 리뷰어를 위한 체크포인트
- `framework-smoke.md` 읽기 조건이 local routing과 framework domain rule의 analyzer option 경로를 포함하는지 확인한다.
- `framework-smoke.md`가 `proto/**` 변경을 읽는 만큼 `make proto` 계열 생성 검증을 명령/검증/판정 기준 중 적절한 위치에 명시하는지 확인한다.
- `cli-smoke.md`의 resource importer 경로가 project domain mapping의 `apps/runner/lib/resources.resource_importer.dart`와 일치하는지 확인한다.
## 검증 결과
### REVIEW_RULES-1 중간 검증
```bash
$ rg --sort path -n 'analysis_options|make proto|proto-go|proto-dart|apps/runner/lib/resources.resource_importer.dart' agent-test/local Makefile agent-ops/rules/project/rules.md agent-ops/rules/project/domain/framework/rules.md agent-ops/rules/project/domain/cli/rules.md
agent-test/local/cli-smoke.md
13:- `apps/runner/bin/main.dart`, `apps/runner/lib/cli/**`, `apps/runner/assets/script/**`, `apps/runner/assets/bin/**`, `apps/runner/assets/package/**`, 또는 `apps/runner/lib/resources.resource_importer.dart` 변경 검증이 필요한 경우
agent-test/local/framework-smoke.md
13:- `apps/runner/pubspec.yaml`, `apps/client/pubspec.yaml`, `packages/flutter/oto_console/pubspec.yaml`, `services/core/go.mod`, `apps/runner/analysis_options.yaml`, `apps/client/analysis_options.yaml`, 또는 `proto/**` 변경 검증이 필요한 경우
50: - all: `make proto`
51: - go: `make proto-go`
52: - dart: `make proto-dart`
62:- `proto/**` 변경 시 `make proto` (또는 `make proto-go`, `make proto-dart`)를 실행하고 생성된 파일(Go/Dart protobuf)이 올바르게 갱신되는지 확인한다.
72:- protobuf generation을 수행한 경우 생성 타겟(`make proto`, `make proto-go`, `make proto-dart`)이 오류 없이 정상 종료하며 파일 생성이 완료된다.
agent-test/local/rules.md
53: - Generate: `make proto` (또는 `make proto-go`, `make proto-dart`)
Makefile
1:.PHONY: all setup test runner-get runner-analyze runner-test client-get client-analyze client-test core-test proto proto-go proto-dart
30:proto: proto-go proto-dart
32:proto-go:
36:proto-dart:
agent-ops/rules/project/rules.md
74:- protobuf 생성: `make proto-go`, `make proto-dart`
135:| `apps/runner/lib/resources.resource_importer.dart` | cli | `agent-ops/rules/project/domain/cli/rules.md` |
156:| `apps/runner/analysis_options.yaml` | framework | `agent-ops/rules/project/domain/framework/rules.md` |
158:| `apps/client/analysis_options.yaml` | framework | `agent-ops/rules/project/domain/framework/rules.md` |
agent-ops/rules/project/domain/framework/rules.md
18:- `apps/runner/analysis_options.yaml` — runner Dart analyzer/lint 기준
20:- `apps/client/analysis_options.yaml` — Flutter client analyzer/lint 기준
40:- `resource_importer` — `apps/runner/lib/resources.resource_importer.dart` 생성 파일과 asset 임베딩 설정
48:- generated protobuf lint 예외는 `analysis_options.yaml`의 analyzer exclude 또는 파일 생성 주석으로 관리한다
agent-ops/rules/project/domain/cli/rules.md
30:- `apps/runner/lib/resources.resource_importer.dart` — 설치/패키징 asset용 `resource_importer` 생성 파일
```
### 최종 검증
```bash
$ rg --sort path -n 'analysis_options|make proto|proto-go|proto-dart|apps/runner/lib/resources.resource_importer.dart' agent-test/local Makefile agent-ops/rules/project/rules.md agent-ops/rules/project/domain/framework/rules.md agent-ops/rules/project/domain/cli/rules.md
agent-test/local/cli-smoke.md
13:- `apps/runner/bin/main.dart`, `apps/runner/lib/cli/**`, `apps/runner/assets/script/**`, `apps/runner/assets/bin/**`, `apps/runner/assets/package/**`, 또는 `apps/runner/lib/resources.resource_importer.dart` 변경 검증이 필요한 경우
agent-test/local/framework-smoke.md
13:- `apps/runner/pubspec.yaml`, `apps/client/pubspec.yaml`, `packages/flutter/oto_console/pubspec.yaml`, `services/core/go.mod`, `apps/runner/analysis_options.yaml`, `apps/client/analysis_options.yaml`, 또는 `proto/**` 변경 검증이 필요한 경우
50: - all: `make proto`
51: - go: `make proto-go`
52: - dart: `make proto-dart`
62:- `proto/**` 변경 시 `make proto` (또는 `make proto-go`, `make proto-dart`)를 실행하고 생성된 파일(Go/Dart protobuf)이 올바르게 갱신되는지 확인한다.
72:- protobuf generation을 수행한 경우 생성 타겟(`make proto`, `make proto-go`, `make proto-dart`)이 오류 없이 정상 종료하며 파일 생성이 완료된다.
agent-test/local/rules.md
53: - Generate: `make proto` (또는 `make proto-go`, `make proto-dart`)
Makefile
1:.PHONY: all setup test runner-get runner-analyze runner-test client-get client-analyze client-test core-test proto proto-go proto-dart
30:proto: proto-go proto-dart
32:proto-go:
36:proto-dart:
agent-ops/rules/project/rules.md
74:- protobuf 생성: `make proto-go`, `make proto-dart`
135:| `apps/runner/lib/resources.resource_importer.dart` | cli | `agent-ops/rules/project/domain/cli/rules.md` |
156:| `apps/runner/analysis_options.yaml` | framework | `agent-ops/rules/project/domain/framework/rules.md` |
158:| `apps/client/analysis_options.yaml` | framework | `agent-ops/rules/project/domain/framework/rules.md` |
agent-ops/rules/project/domain/framework/rules.md
18:- `apps/runner/analysis_options.yaml` — runner Dart analyzer/lint 기준
20:- `apps/client/analysis_options.yaml` — Flutter client analyzer/lint 기준
40:- `resource_importer` — `apps/runner/lib/resources.resource_importer.dart` 생성 파일과 asset 임베딩 설정
48:- generated protobuf lint 예외는 `analysis_options.yaml`의 analyzer exclude 또는 파일 생성 주석으로 관리한다
agent-ops/rules/project/domain/cli/rules.md
30:- `apps/runner/lib/resources.resource_importer.dart` — 설치/패키징 asset용 `resource_importer` 생성 파일
$ git diff --check
# Exited with 0 (no issues found).
```
---
> **[IMPLEMENTING AGENT — BEFORE SAVING] Have you filled in every implementation-owned section: completion table, implementation checklist, changes from plan, design decisions, and verification output?**
> If anything is blank, go back and fill it in before saving this file.
> Leave review-agent-only sections unchanged.
## 코드리뷰 결과
- 종합 판정: FAIL
- 차원별 평가:
- correctness: Fail
- completeness: Fail
- test coverage: Pass
- API contract: Fail
- code quality: Pass
- plan deviation: Pass
- verification trust: Pass
- 발견된 문제:
- Required: `agent-test/local/framework-smoke.md:13`은 `packages/flutter/oto_console/pubspec.yaml` 변경을 framework smoke 대상으로 라우팅하지만, `agent-test/local/framework-smoke.md:38`부터의 setup/lint/unit 명령과 `agent-test/local/framework-smoke.md:60`의 필수 검증에는 `packages/flutter/oto_console` package-local `flutter pub get`, `flutter analyze`, `flutter test`가 없다. 실제 workspace에는 `packages/flutter/oto_console/pubspec.yaml`, `packages/flutter/oto_console/analysis_options.yaml`, `packages/flutter/oto_console/test/oto_console_test.dart`가 있으므로 console package manifest 변경을 읽어도 검증할 명령 계약이 비어 있다. 후속에서 `framework-smoke.md`와 `agent-test/local/rules.md`의 monorepo target 설명에 console package-local 검증 경계를 추가한다.
- 다음 단계: FAIL 후속 `PLAN-local-G06.md`와 `CODE_REVIEW-local-G06.md`를 작성한다.

View file

@ -0,0 +1,161 @@
<!-- task=m-ops-rule-monorepo-alignment/02+01_test_rules plan=2 tag=REVIEW_REVIEW_RULES -->
# Code Review Reference - REVIEW_REVIEW_RULES
> **[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`. Evidence gaps that a follow-up agent can close by rerunning commands or collecting artifacts are normal follow-up issues, not user-review blockers by themselves.
> Do not ask the user directly, present choices in chat, or call `request_user_input` during implementation; record the needed decision in `사용자 리뷰 요청` and stop for code-review.
> Finalization (`코드리뷰 결과`, log rename, `complete.log`, archive moves, `코드리뷰 전용 체크리스트`) is review-agent-only, even after compaction/resume.
> Follow the ownership table at the bottom of this file for which sections you own.
## 개요
date=2026-06-07
task=m-ops-rule-monorepo-alignment/02+01_test_rules, plan=2, tag=REVIEW_REVIEW_RULES
## Roadmap Targets
- Milestone: `agent-roadmap/phase/independent-control-plane/milestones/ops-rule-monorepo-alignment.md`
- Task ids:
- `test-rules`: local test rule과 smoke 문서가 모노레포 target 이름과 일치하는지 확인한다.
- Completion mode: check-on-pass
## 이 파일을 읽는 리뷰 에이전트에게
> **[REVIEW AGENT ONLY]** 아래 종결 절차는 코드리뷰 에이전트 전용이다. 구현 에이전트는 이 섹션을 실행하지 않는다.
각 항목의 구현을 실제 소스 파일과 대조하고, `검증 결과` 섹션의 출력이 코드와 일치하는지 확인하세요.
리뷰 완료는 아래 순서까지 끝난 상태를 의미합니다.
1. 판정을 append한다.
2. `CODE_REVIEW-local-G06.md` -> `code_review_local_G06_N.log`, `PLAN-local-G06.md` -> `plan_local_G06_M.log`로 아카이브한다.
3. PASS이면 `complete.log` 작성 후 active task 디렉터리를 `agent-task/archive/YYYY/MM/m-ops-rule-monorepo-alignment/02+01_test_rules/`로 이동한다. WARN/FAIL이면 user-review gate를 확인한 뒤 다음 active plan/review 파일 또는 `USER_REVIEW.md`를 작성한다. `USER_REVIEW.md`가 사용자 결정으로 완료/PASS 해소되면 code-review가 `USER_REVIEW.md`를 해소 상태로 갱신하고 `complete.log` 작성 후 archive 이동한다.
4. PASS이고 task group이 `m-<milestone-slug>`이면 완료 이벤트 메타데이터를 보고한다. roadmap 상태 체크와 `update-roadmap` 호출은 런타임 책임이다.
5. 적용 가능한 `코드리뷰 전용 체크리스트` 항목을 최종 `.log` 위치에서 체크한 뒤 보고한다.
---
## 구현 항목별 완료 여부
| 항목 | 완료 여부 |
|------|---------|
| [REVIEW_REVIEW_RULES-1] Console package local verification contract | [x] |
## 구현 체크리스트
- [x] `agent-test/local/rules.md`의 Monorepo Targets에 `packages/flutter/oto_console` package-local setup/lint/test 명령을 추가한다.
- [x] `agent-test/local/framework-smoke.md` 읽기 조건과 명령/필수 검증/판정 기준에 `packages/flutter/oto_console` package-local setup/lint/test 경계를 추가한다.
- [x] `rg --sort path -n 'packages/flutter/oto_console|flutter pub get|flutter analyze|flutter test' agent-test/local packages/flutter/oto_console` 결과로 console package 경계와 테스트 파일을 확인한다.
- [x] `git diff --check`를 실행해 markdown whitespace 오류가 없는지 확인한다.
- [x] CODE_REVIEW-*-G??.md의 구현 에이전트 소유 섹션을 실제 구현 내용과 검증 출력으로 채운다. 이 항목이 완료되기 전에는 구현이 완료된 것이 아니다.
## 코드리뷰 전용 체크리스트
> **[REVIEW AGENT ONLY]** 이 체크리스트는 코드리뷰 에이전트만 사용한다.
> 구현 에이전트는 이 섹션을 수정하거나 체크하지 않는다.
- [x] `코드리뷰 결과`에 `PASS`, `WARN`, `FAIL` 중 하나의 판정을 append한다.
- [x] 판정과 `차원별 평가`, Required/Suggested/Nit 분류가 서로 일치한다.
- [x] active `CODE_REVIEW-*-G??.md`를 `code_review_local_G06_N.log`로 아카이브한다.
- [x] active `PLAN-*-G??.md`를 `plan_local_G06_M.log`로 아카이브한다.
- [x] `.gitignore`의 Agent-Ops 관리 block이 `agent-task/**/*.md`와 `agent-task/**/*.log`를 unignore하고 `agent-roadmap/current.md`를 ignore하는지 확인한다.
- [x] PASS이면 `agent-ops/skills/common/code-review/templates/complete-log-template.md` 기준으로 `complete.log`를 작성하고 active `.md` 파일을 남기지 않는다.
- [x] PASS이면 active task 디렉터리 `agent-task/m-ops-rule-monorepo-alignment/02+01_test_rules/`를 `agent-task/archive/YYYY/MM/m-ops-rule-monorepo-alignment/02+01_test_rules/`로 이동하고 최종 archive 경로에서 이 체크리스트를 갱신한다.
- [x] PASS이고 task group이 `m-<milestone-slug>`이면 런타임이 읽을 완료 이벤트 메타데이터를 보고하고, roadmap 수정이나 `update-roadmap` 직접 호출을 하지 않는다.
- [x] PASS split 작업이면 이동 후 빈 active parent `agent-task/m-ops-rule-monorepo-alignment/`를 제거하거나, 남은 sibling/file이 있어 유지했다고 확인한다.
- [ ] WARN/FAIL이고 user-review gate가 트리거되지 않았으면 다음 active `PLAN-local-G06.md`와 `CODE_REVIEW-local-G06.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`를 남기지 않는다.
- [ ] USER_REVIEW가 사용자 결정으로 완료/PASS 해소되면 `USER_REVIEW.md`를 해소 상태로 갱신하고 `complete.log`를 작성한 뒤 task directory를 archive로 이동한다.
## 계획 대비 변경 사항
- 없음. 계획된 사항대로 모두 정상적으로 수행됨.
## 주요 설계 결정
- **Console 패키지 타겟 추가**: `packages/flutter/oto_console` 변경 시 setup/lint/test가 가능하도록 `rules.md` 및 `framework-smoke.md`에 `flutter pub get`, `flutter analyze`, `flutter test` 명령 계약을 명문화하였습니다.
- **읽기 조건 추가**: framework domain rules에 매핑되는 `packages/flutter/oto_console/analysis_options.yaml` 또한 `framework-smoke.md` 읽기 조건에 포함시켰습니다.
## 사용자 리뷰 요청
_기본값은 `없음`이다. 구현 중 사용자 결정, 사용자 소유 외부 환경/secret/서비스 준비, 또는 계획 범위 변경 없이는 안전하게 진행할 수 없으면 아래 항목을 실제 내용으로 교체하고, 구현을 중단한 뒤 active 파일을 그대로 둔 채 리뷰를 요청한다. 구현 에이전트는 사용자에게 직접 질문하거나 선택지를 제시하거나 `request_user_input`을 호출하지 않는다. 후속 에이전트가 명령 재실행이나 산출물 수집으로 해소할 수 있는 검증 증거 공백만으로는 사용자 리뷰 요청을 작성하지 않는다._
- 상태: 없음
- 사유 유형: 없음
- 결정 필요: 없음
- 차단 근거: 없음
- 실행한 검증/명령: 없음
- 자동 후속 불가 이유: 없음
- 재개 조건: 없음
## 리뷰어를 위한 체크포인트
- `agent-test/local/rules.md`가 `packages/flutter/oto_console` package-local setup/lint/test 경계를 설명하는지 확인한다.
- `framework-smoke.md`가 console package manifest/analyzer option 변경을 읽고 `flutter pub get`, `flutter analyze`, `flutter test` package-local 명령을 제공하는지 확인한다.
- 새 Makefile target을 만들지 않고 기존 Makefile과 package-local 명령 관계가 명확한지 확인한다.
## 검증 결과
### REVIEW_REVIEW_RULES-1 중간 검증
```bash
$ rg --sort path -n 'packages/flutter/oto_console|flutter pub get|flutter analyze|flutter test' agent-test/local packages/flutter/oto_console
agent-test/local/framework-smoke.md
13:- `apps/runner/pubspec.yaml`, `apps/client/pubspec.yaml`, `packages/flutter/oto_console/pubspec.yaml`, `services/core/go.mod`, `apps/runner/analysis_options.yaml`, `apps/client/analysis_options.yaml`, `packages/flutter/oto_console/analysis_options.yaml`, 또는 `proto/**` 변경 검증이 필요한 경우
41: - console: `cd packages/flutter/oto_console && flutter pub get`
46: - console: `cd packages/flutter/oto_console && flutter analyze`
50: - console: `cd packages/flutter/oto_console && flutter test`
64:- 각 패키지 도메인 변경 후 관련 `make runner-test`, `make client-test`, `cd packages/flutter/oto_console && flutter test` 또는 `make core-test` 명령을 실행한다.
agent-test/local/rules.md
47: - Setup: `make client-get` 또는 `cd apps/client && flutter pub get`
48: - Lint: `make client-analyze` 또는 `cd apps/client && flutter analyze`
49: - Test: `make client-test` 또는 `cd apps/client && flutter test`
52:- **packages/flutter/oto_console** (Flutter OTO console package):
53: - Setup: `cd packages/flutter/oto_console && flutter pub get`
54: - Lint: `cd packages/flutter/oto_console && flutter analyze`
55: - Test: `cd packages/flutter/oto_console && flutter test`
```
### 최종 검증
```bash
$ rg --sort path -n 'packages/flutter/oto_console|flutter pub get|flutter analyze|flutter test' agent-test/local packages/flutter/oto_console
agent-test/local/framework-smoke.md
13:- `apps/runner/pubspec.yaml`, `apps/client/pubspec.yaml`, `packages/flutter/oto_console/pubspec.yaml`, `services/core/go.mod`, `apps/runner/analysis_options.yaml`, `apps/client/analysis_options.yaml`, `packages/flutter/oto_console/analysis_options.yaml`, 또는 `proto/**` 변경 검증이 필요한 경우
41: - console: `cd packages/flutter/oto_console && flutter pub get`
46: - console: `cd packages/flutter/oto_console && flutter analyze`
50: - console: `cd packages/flutter/oto_console && flutter test`
64:- 각 패키지 도메인 변경 후 관련 `make runner-test`, `make client-test`, `cd packages/flutter/oto_console && flutter test` 또는 `make core-test` 명령을 실행한다.
agent-test/local/rules.md
47: - Setup: `make client-get` 또는 `cd apps/client && flutter pub get`
48: - Lint: `make client-analyze` 또는 `cd apps/client && flutter analyze`
49: - Test: `make client-test` 또는 `cd apps/client && flutter test`
52:- **packages/flutter/oto_console** (Flutter OTO console package):
53: - Setup: `cd packages/flutter/oto_console && flutter pub get`
54: - Lint: `cd packages/flutter/oto_console && flutter analyze`
55: - Test: `cd packages/flutter/oto_console && flutter test`
$ git diff --check
# Exited with 0 (no issues found).
```
---
> **[IMPLEMENTING AGENT — BEFORE SAVING] Have you filled in every implementation-owned section: completion table, implementation checklist, changes from plan, design decisions, and verification output?**
> If anything is blank, go back and fill it in before saving this file.
> Leave review-agent-only sections unchanged.
## 코드리뷰 결과
- 종합 판정: PASS
- 차원별 평가:
- correctness: Pass
- completeness: Pass
- test coverage: Pass
- API contract: Pass
- code quality: Pass
- plan deviation: Pass
- verification trust: Pass
- 발견된 문제: 없음
- 다음 단계: PASS 종결. `complete.log`를 작성하고 task directory를 archive로 이동한다.

View file

@ -0,0 +1,45 @@
# Complete - m-ops-rule-monorepo-alignment/02+01_test_rules
## 완료 일시
2026-06-07T08:54:12+09:00
## 요약
local test rule과 smoke 문서의 모노레포 target 정합화를 3회차 리뷰에서 PASS로 종결했다.
## 루프 이력
| Plan | Review | Verdict | 메모 |
|------|--------|---------|------|
| `plan_local_G04_0.log` | `code_review_local_G04_0.log` | FAIL | framework smoke의 analyzer option/protobuf generation 계약 누락과 cli resource importer 경로 구체화 필요를 발견했다. |
| `plan_local_G05_1.log` | `code_review_local_G05_1.log` | FAIL | G04 Required/Suggested는 해소됐으나 console package-local 검증 계약 누락을 발견했다. |
| `plan_local_G06_2.log` | `code_review_local_G06_2.log` | PASS | console package-local setup/lint/test 검증 계약까지 반영되어 test rule 정합화가 완료됐다. |
## 구현/정리 내용
- `agent-test/local/*-smoke.md`의 runner 관련 root 경로와 package-local 명령을 `apps/runner` 및 Makefile target 기준으로 정리했다.
- `agent-test/local/rules.md`에 runner, client, core, console package, protobuf의 local 검증 target 기준을 추가했다.
- `agent-test/local/framework-smoke.md`에 analyzer option, protobuf generation, `packages/flutter/oto_console` package-local setup/lint/test 검증 계약을 반영했다.
- `agent-test/local/cli-smoke.md`의 resource importer 읽기 조건을 `apps/runner/lib/resources.resource_importer.dart`로 구체화했다.
## 최종 검증
- `rg --sort path -n 'packages/flutter/oto_console|flutter pub get|flutter analyze|flutter test' agent-test/local packages/flutter/oto_console` - PASS; local rules와 framework smoke가 console package-local setup/lint/test 경계를 드러냈고, 보조 확인으로 `packages/flutter/oto_console/test/oto_console_test.dart` 존재를 확인했다.
- `test -f packages/flutter/oto_console/test/oto_console_test.dart && test -f packages/flutter/oto_console/pubspec.yaml && test -f packages/flutter/oto_console/analysis_options.yaml` - PASS; 출력 없음.
- `git diff --check` - PASS; 출력 없음.
## Roadmap Completion
- Milestone: `agent-roadmap/phase/independent-control-plane/milestones/ops-rule-monorepo-alignment.md`
- Completed task ids:
- `test-rules`: PASS; evidence=`agent-task/archive/2026/06/m-ops-rule-monorepo-alignment/02+01_test_rules/plan_local_G06_2.log`, `agent-task/archive/2026/06/m-ops-rule-monorepo-alignment/02+01_test_rules/code_review_local_G06_2.log`; verification=`rg --sort path -n 'packages/flutter/oto_console|flutter pub get|flutter analyze|flutter test' agent-test/local packages/flutter/oto_console`, `git diff --check`
- Not completed task ids: 없음
## 잔여 Nit
- 없음
## 후속 작업
- 없음

View file

@ -0,0 +1,105 @@
<!-- task=m-ops-rule-monorepo-alignment/02+01_test_rules plan=1 tag=REVIEW_RULES -->
# Plan - REVIEW_RULES Local Test Rule Follow-up
## 이 파일을 읽는 구현 에이전트에게
`CODE_REVIEW-local-G05.md`의 구현 에이전트 소유 섹션을 실제 구현 내용과 검증 출력으로 채우는 것이 필수다. 구현 후 검증을 실행하고 active 파일을 그대로 둔 채 리뷰 준비를 보고한다. 최종 판정, log rename, `complete.log`, archive 이동은 code-review skill 책임이다. 사용자만 결정할 수 있는 차단, 사용자 소유 외부 환경, 범위 충돌이 생기면 review stub의 `사용자 리뷰 요청` 섹션에 정확한 근거를 채우고 멈춘다. 구현 중 사용자에게 직접 질문하거나 선택지를 제시하거나 `request_user_input`을 호출하지 않는다. 후속 에이전트가 명령 재실행이나 산출물 수집으로 해결할 수 있는 증거 공백은 사용자 리뷰 요청이 아니다.
## 배경
1회차 리뷰는 local smoke 문서의 대부분이 모노레포 경로와 Makefile target으로 갱신되었음을 확인했지만, framework smoke의 라우팅/검증 계약에 두 가지 누락을 발견했다. `framework-smoke.md`는 `proto/**`를 읽기 조건에 포함하면서도 `make proto` 계열 생성 검증을 명령/검증 기준에 싣지 않았고, local routing과 domain rule이 framework로 매핑하는 analyzer option 파일을 읽기 조건에서 빠뜨렸다. 또한 `cli-smoke.md`의 resource importer 표현은 모노레포 절대 경로로 좁히면 project domain mapping과 더 일치한다.
## 사용자 리뷰 요청 흐름
구현 중 차단은 active `CODE_REVIEW-local-G05.md`의 `사용자 리뷰 요청` 섹션에 기록한다. 직접 사용자 프롬프트는 금지하며, code-review가 요청 타당성을 검증하고 실제 `USER_REVIEW.md` 작성 여부를 결정한다.
## Roadmap Targets
- Milestone: `agent-roadmap/phase/independent-control-plane/milestones/ops-rule-monorepo-alignment.md`
- Task ids:
- `test-rules`: local test rule과 smoke 문서가 모노레포 target 이름과 일치하는지 확인한다.
- Completion mode: check-on-pass
## 리뷰 근거
- Archived plan: `agent-task/m-ops-rule-monorepo-alignment/02+01_test_rules/plan_local_G04_0.log`
- Archived review: `agent-task/m-ops-rule-monorepo-alignment/02+01_test_rules/code_review_local_G04_0.log`
- Verdict: FAIL
- Required:
- `agent-test/local/framework-smoke.md:13` 읽기 조건에 analyzer option 경로가 없다.
- `agent-test/local/framework-smoke.md:36` 이후 명령/필수 검증에 `proto/**` 변경용 protobuf generation target이 없다.
- Suggested:
- `agent-test/local/cli-smoke.md:13`의 `resource importer` 표현을 정확한 경로로 좁힌다.
## 범위 결정 근거
- production code, unit test, `docs/`, archive 문서는 수정하지 않는다.
- `framework-smoke.md`, `cli-smoke.md`의 local 테스트 규칙 문서만 보정한다.
- 현재 결함은 user-owned 결정이나 환경 문제가 아니며, 후속 에이전트가 repo 문서와 Makefile을 근거로 결정적으로 수정할 수 있다.
## 빌드 등급
- `local-G05`: 1회차 리뷰 FAIL 후속이지만 결함은 좁고 deterministic한 문서 계약 누락이다. local에서 충분히 검토 가능하되, 누락된 routing/verification 계약을 더 엄밀히 확인한다.
## 구현 체크리스트
- [ ] `agent-test/local/framework-smoke.md` 읽기 조건에 `apps/runner/analysis_options.yaml`, `apps/client/analysis_options.yaml`을 추가하고, 적용 범위가 analyzer options와 protobuf contract를 함께 설명하도록 정리한다.
- [ ] `agent-test/local/framework-smoke.md` 명령/검증/판정 기준에 `make proto`, `make proto-go`, `make proto-dart` 생성 검증 경계를 명시한다.
- [ ] `agent-test/local/cli-smoke.md`의 `resource importer` 표현을 `apps/runner/lib/resources.resource_importer.dart`로 구체화한다.
- [ ] `rg --sort path -n 'analysis_options|make proto|proto-go|proto-dart|apps/runner/lib/resources.resource_importer.dart' agent-test/local Makefile agent-ops/rules/project/rules.md agent-ops/rules/project/domain/framework/rules.md agent-ops/rules/project/domain/cli/rules.md` 결과로 라우팅/target 경계를 확인한다.
- [ ] `git diff --check`를 실행해 markdown whitespace 오류가 없는지 확인한다.
- [ ] CODE_REVIEW-*-G??.md의 구현 에이전트 소유 섹션을 실제 구현 내용과 검증 출력으로 채운다. 이 항목이 완료되기 전에는 구현이 완료된 것이 아니다.
### [REVIEW_RULES-1] Framework smoke routing and generation contract
#### 문제
`agent-test/local/framework-smoke.md:13`은 framework smoke 읽기 조건에 `apps/runner/pubspec.yaml`, `apps/client/pubspec.yaml`, `packages/flutter/oto_console/pubspec.yaml`, `services/core/go.mod`, `proto/**`만 포함한다. 하지만 `agent-test/local/rules.md`는 framework smoke가 analyzer options를 다룬다고 말하고, project/domain rule은 `apps/runner/analysis_options.yaml`, `apps/client/analysis_options.yaml`도 framework domain에 포함한다.
같은 파일은 `proto/**`를 읽기 조건에 포함하지만 `Makefile`의 `proto`, `proto-go`, `proto-dart` target을 검증 명령이나 판정 기준에 연결하지 않는다.
#### 해결 방법
`framework-smoke.md`를 다음 의미로 보정한다.
- 읽기 조건: runner/client manifest, runner/client analyzer options, console manifest, core `go.mod`, `proto/**`
- 명령/검증: package setup/analyze/test와 함께 protobuf generation target을 명시
- 판정 기준: proto 변경 검증을 수행한 경우 생성 target이 성공해야 함을 명시
`cli-smoke.md`의 resource importer는 project domain mapping과 같은 `apps/runner/lib/resources.resource_importer.dart`로 표기한다.
#### 수정 파일
| 파일 | 처리 |
|------|------|
| `agent-test/local/framework-smoke.md` | analyzer option 읽기 조건과 protobuf generation 검증 계약 보정 |
| `agent-test/local/cli-smoke.md` | resource importer 경로 구체화 |
#### 테스트 작성
문서 라우팅 정리이므로 unit test는 작성하지 않는다.
#### 중간 검증
```bash
rg --sort path -n 'analysis_options|make proto|proto-go|proto-dart|apps/runner/lib/resources.resource_importer.dart' agent-test/local Makefile agent-ops/rules/project/rules.md agent-ops/rules/project/domain/framework/rules.md agent-ops/rules/project/domain/cli/rules.md
```
예상: framework smoke가 analyzer option 경로와 protobuf generation target을 모두 드러내고, cli smoke가 resource importer의 실제 경로를 드러낸다.
## 수정 파일 요약
| 파일 | 항목 |
|------|------|
| `agent-test/local/framework-smoke.md` | REVIEW_RULES-1 |
| `agent-test/local/cli-smoke.md` | REVIEW_RULES-1 |
## 최종 검증
```bash
rg --sort path -n 'analysis_options|make proto|proto-go|proto-dart|apps/runner/lib/resources.resource_importer.dart' agent-test/local Makefile agent-ops/rules/project/rules.md agent-ops/rules/project/domain/framework/rules.md agent-ops/rules/project/domain/cli/rules.md
git diff --check
```
모든 코드 변경 완료 후 반드시 `CODE_REVIEW-*-G??.md`의 구현 에이전트 소유 섹션을 채운다. 이 파일 작성이 구현의 마지막 단계다.

View file

@ -0,0 +1,101 @@
<!-- task=m-ops-rule-monorepo-alignment/02+01_test_rules plan=2 tag=REVIEW_REVIEW_RULES -->
# Plan - REVIEW_REVIEW_RULES Console Package Test Rule Follow-up
## 이 파일을 읽는 구현 에이전트에게
`CODE_REVIEW-local-G06.md`의 구현 에이전트 소유 섹션을 실제 구현 내용과 검증 출력으로 채우는 것이 필수다. 구현 후 검증을 실행하고 active 파일을 그대로 둔 채 리뷰 준비를 보고한다. 최종 판정, log rename, `complete.log`, archive 이동은 code-review skill 책임이다. 사용자만 결정할 수 있는 차단, 사용자 소유 외부 환경, 범위 충돌이 생기면 review stub의 `사용자 리뷰 요청` 섹션에 정확한 근거를 채우고 멈춘다. 구현 중 사용자에게 직접 질문하거나 선택지를 제시하거나 `request_user_input`을 호출하지 않는다. 후속 에이전트가 명령 재실행이나 산출물 수집으로 해결할 수 있는 증거 공백은 사용자 리뷰 요청이 아니다.
## 배경
2회차 리뷰는 G04에서 발견된 analyzer option/protobuf/resource importer 계약 누락이 해소되었음을 확인했다. 다만 `framework-smoke.md`는 `packages/flutter/oto_console/pubspec.yaml` 변경을 framework smoke 대상으로 라우팅하면서도 console package-local setup/lint/test 명령을 제공하지 않는다. 실제 workspace에는 `packages/flutter/oto_console/pubspec.yaml`, `packages/flutter/oto_console/analysis_options.yaml`, `packages/flutter/oto_console/test/oto_console_test.dart`가 있으므로 console package manifest 또는 analyzer option 변경 시 실행할 local 검증 계약이 필요하다.
## 사용자 리뷰 요청 흐름
구현 중 차단은 active `CODE_REVIEW-local-G06.md`의 `사용자 리뷰 요청` 섹션에 기록한다. 직접 사용자 프롬프트는 금지하며, code-review가 요청 타당성을 검증하고 실제 `USER_REVIEW.md` 작성 여부를 결정한다.
## Roadmap Targets
- Milestone: `agent-roadmap/phase/independent-control-plane/milestones/ops-rule-monorepo-alignment.md`
- Task ids:
- `test-rules`: local test rule과 smoke 문서가 모노레포 target 이름과 일치하는지 확인한다.
- Completion mode: check-on-pass
## 리뷰 근거
- Archived plan: `agent-task/m-ops-rule-monorepo-alignment/02+01_test_rules/plan_local_G05_1.log`
- Archived review: `agent-task/m-ops-rule-monorepo-alignment/02+01_test_rules/code_review_local_G05_1.log`
- Verdict: FAIL
- Required:
- `framework-smoke.md`와 local monorepo target 설명이 `packages/flutter/oto_console` package-local setup/lint/test 검증 계약을 제공하지 않는다.
## 범위 결정 근거
- production code, unit test, `docs/`, archive 문서는 수정하지 않는다.
- `agent-test/local/rules.md`와 `agent-test/local/framework-smoke.md`의 local 테스트 규칙만 보정한다.
- Makefile에 console target이 없는 상태이므로 새 Makefile target을 만들지 않고 package-local 명령을 명시한다.
- project/domain rule 갱신은 이 task의 범위를 넘기므로 수행하지 않는다. 다만 local smoke 읽기 조건은 실제 console package 검증을 위해 `packages/flutter/oto_console/analysis_options.yaml`도 함께 드러낼 수 있다.
## 빌드 등급
- `local-G06`: 반복 후속이지만 변경 범위는 local test rule 문서 두 파일이고, 검증은 deterministic한 검색과 whitespace 검사로 충분하다.
## 구현 체크리스트
- [ ] `agent-test/local/rules.md`의 Monorepo Targets에 `packages/flutter/oto_console` package-local setup/lint/test 명령을 추가한다.
- [ ] `agent-test/local/framework-smoke.md` 읽기 조건과 명령/필수 검증/판정 기준에 `packages/flutter/oto_console` package-local setup/lint/test 경계를 추가한다.
- [ ] `rg --sort path -n 'packages/flutter/oto_console|flutter pub get|flutter analyze|flutter test' agent-test/local packages/flutter/oto_console` 결과로 console package 경계와 테스트 파일을 확인한다.
- [ ] `git diff --check`를 실행해 markdown whitespace 오류가 없는지 확인한다.
- [ ] CODE_REVIEW-*-G??.md의 구현 에이전트 소유 섹션을 실제 구현 내용과 검증 출력으로 채운다. 이 항목이 완료되기 전에는 구현이 완료된 것이 아니다.
### [REVIEW_REVIEW_RULES-1] Console package local verification contract
#### 문제
`agent-test/local/framework-smoke.md`는 `packages/flutter/oto_console/pubspec.yaml` 변경을 읽기 조건으로 라우팅하지만, `packages/flutter/oto_console` package-local `flutter pub get`, `flutter analyze`, `flutter test` 명령을 제공하지 않는다. `agent-test/local/rules.md`의 Monorepo Targets에도 runner/client/core/protobuf만 있고 console package가 없다.
#### 해결 방법
`agent-test/local/rules.md`에 console package-local target 설명을 추가한다.
`agent-test/local/framework-smoke.md`는 console package manifest/analyzer option 변경을 읽고 다음 의미를 드러내도록 보정한다.
- setup: `cd packages/flutter/oto_console && flutter pub get`
- lint: `cd packages/flutter/oto_console && flutter analyze`
- unit: `cd packages/flutter/oto_console && flutter test`
- 필수 검증과 판정 기준이 console package-local 명령에도 적용됨을 명시
#### 수정 파일
| 파일 | 처리 |
|------|------|
| `agent-test/local/rules.md` | console package-local target 설명 추가 |
| `agent-test/local/framework-smoke.md` | console package read condition 및 검증 명령 추가 |
#### 테스트 작성
문서 라우팅 정리이므로 unit test는 작성하지 않는다.
#### 중간 검증
```bash
rg --sort path -n 'packages/flutter/oto_console|flutter pub get|flutter analyze|flutter test' agent-test/local packages/flutter/oto_console
```
예상: local rules와 framework smoke가 console package-local setup/lint/test 경계를 드러내고, `packages/flutter/oto_console/test/oto_console_test.dart`가 실제 테스트 파일로 확인된다.
## 수정 파일 요약
| 파일 | 항목 |
|------|------|
| `agent-test/local/rules.md` | REVIEW_REVIEW_RULES-1 |
| `agent-test/local/framework-smoke.md` | REVIEW_REVIEW_RULES-1 |
## 최종 검증
```bash
rg --sort path -n 'packages/flutter/oto_console|flutter pub get|flutter analyze|flutter test' agent-test/local packages/flutter/oto_console
git diff --check
```
모든 코드 변경 완료 후 반드시 `CODE_REVIEW-*-G??.md`의 구현 에이전트 소유 섹션을 채운다. 이 파일 작성이 구현의 마지막 단계다.

View file

@ -1,140 +0,0 @@
<!-- task=m-ops-rule-monorepo-alignment/02+01_test_rules plan=0 tag=RULES -->
# Code Review Reference - RULES
> **[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`. Evidence gaps that a follow-up agent can close by rerunning commands or collecting artifacts are normal follow-up issues, not user-review blockers by themselves.
> Do not ask the user directly, present choices in chat, or call `request_user_input` during implementation; record the needed decision in `사용자 리뷰 요청` and stop for code-review.
> Finalization (`코드리뷰 결과`, log rename, `complete.log`, archive moves, `코드리뷰 전용 체크리스트`) is review-agent-only, even after compaction/resume.
> Follow the ownership table at the bottom of this file for which sections you own.
## 개요
date=2026-06-07
task=m-ops-rule-monorepo-alignment/02+01_test_rules, plan=0, tag=RULES
## Roadmap Targets
- Milestone: `agent-roadmap/phase/independent-control-plane/milestones/ops-rule-monorepo-alignment.md`
- Task ids:
- `test-rules`: local test rule과 smoke 문서가 모노레포 target 이름과 일치하는지 확인한다.
- Completion mode: check-on-pass
## 이 파일을 읽는 리뷰 에이전트에게
> **[REVIEW AGENT ONLY]** 아래 종결 절차는 코드리뷰 에이전트 전용이다. 구현 에이전트는 이 섹션을 실행하지 않는다.
각 항목의 구현을 실제 소스 파일과 대조하고, `검증 결과` 섹션의 출력이 코드와 일치하는지 확인하세요.
리뷰 완료는 아래 순서까지 끝난 상태를 의미합니다.
1. 판정을 append한다.
2. `CODE_REVIEW-local-G04.md` -> `code_review_local_G04_N.log`, `PLAN-local-G04.md` -> `plan_local_G04_M.log`로 아카이브한다.
3. PASS이면 `complete.log` 작성 후 active task 디렉터리를 `agent-task/archive/YYYY/MM/m-ops-rule-monorepo-alignment/02+01_test_rules/`로 이동한다. WARN/FAIL이면 user-review gate를 확인한 뒤 다음 active plan/review 파일 또는 `USER_REVIEW.md`를 작성한다. `USER_REVIEW.md`가 사용자 결정으로 완료/PASS 해소되면 code-review가 `USER_REVIEW.md`를 해소 상태로 갱신하고 `complete.log` 작성 후 archive 이동한다.
4. PASS이고 task group이 `m-<milestone-slug>`이면 완료 이벤트 메타데이터를 보고한다. roadmap 상태 체크와 `update-roadmap` 호출은 런타임 책임이다.
5. 적용 가능한 `코드리뷰 전용 체크리스트` 항목을 최종 `.log` 위치에서 체크한 뒤 보고한다.
---
## 구현 항목별 완료 여부
| 항목 | 완료 여부 |
|------|---------|
| [RULES-1] Local smoke read conditions and commands | [ ] |
| [RULES-2] Local routing and monorepo target consistency | [ ] |
## 구현 체크리스트
- [ ] predecessor `01_domain_rules``complete.log`가 active 또는 archive 경로에 있는지 확인하고 없으면 구현을 시작하지 않고 review stub의 사용자 리뷰 요청이 아니라 dependency 미충족으로 기록한다.
- [ ] `agent-test/local/*-smoke.md`의 읽기 조건을 `apps/runner/...` 경로로 갱신하고, package-local 명령은 working directory 또는 `make` target 의미가 분명하게 보이도록 정리한다.
- [ ] `agent-test/local/rules.md`의 라우팅 설명이 runner/client/core package target과 충돌하지 않는지 확인한다.
- [ ] `rg --sort path -n 'lib/|bin/main|assets/' agent-test/local` 결과의 남은 항목이 모두 의도된 예외인지 확인한다.
- [ ] `git diff --check`를 실행해 markdown whitespace 오류가 없는지 확인한다.
- [ ] CODE_REVIEW-*-G??.md의 구현 에이전트 소유 섹션을 실제 구현 내용과 검증 출력으로 채운다. 이 항목이 완료되기 전에는 구현이 완료된 것이 아니다.
## 코드리뷰 전용 체크리스트
> **[REVIEW AGENT ONLY]** 이 체크리스트는 코드리뷰 에이전트만 사용한다.
> 구현 에이전트는 이 섹션을 수정하거나 체크하지 않는다.
- [ ] `코드리뷰 결과``PASS`, `WARN`, `FAIL` 중 하나의 판정을 append한다.
- [ ] 판정과 `차원별 평가`, Required/Suggested/Nit 분류가 서로 일치한다.
- [ ] active `CODE_REVIEW-*-G??.md``code_review_local_G04_N.log`로 아카이브한다.
- [ ] active `PLAN-*-G??.md``plan_local_G04_M.log`로 아카이브한다.
- [ ] `.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 디렉터리 `agent-task/m-ops-rule-monorepo-alignment/02+01_test_rules/``agent-task/archive/YYYY/MM/m-ops-rule-monorepo-alignment/02+01_test_rules/`로 이동하고 최종 archive 경로에서 이 체크리스트를 갱신한다.
- [ ] PASS이고 task group이 `m-<milestone-slug>`이면 런타임이 읽을 완료 이벤트 메타데이터를 보고하고, roadmap 수정이나 `update-roadmap` 직접 호출을 하지 않는다.
- [ ] PASS split 작업이면 이동 후 빈 active parent `agent-task/m-ops-rule-monorepo-alignment/`를 제거하거나, 남은 sibling/file이 있어 유지했다고 확인한다.
- [ ] WARN/FAIL이고 user-review gate가 트리거되지 않았으면 다음 active `PLAN-local-G04.md``CODE_REVIEW-local-G04.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`를 남기지 않는다.
- [ ] USER_REVIEW가 사용자 결정으로 완료/PASS 해소되면 `USER_REVIEW.md`를 해소 상태로 갱신하고 `complete.log`를 작성한 뒤 task directory를 archive로 이동한다.
## 계획 대비 변경 사항
_구현 에이전트가 계획과 다르게 구현한 부분을 이유와 함께 기록한다._
## 주요 설계 결정
_구현 에이전트가 주요 설계 결정 사항을 기록한다._
## 사용자 리뷰 요청
_기본값은 `없음`이다. 구현 중 사용자 결정, 사용자 소유 외부 환경/secret/서비스 준비, 또는 계획 범위 변경 없이는 안전하게 진행할 수 없으면 아래 항목을 실제 내용으로 교체하고, 구현을 중단한 뒤 active 파일을 그대로 둔 채 리뷰를 요청한다. 구현 에이전트는 사용자에게 직접 질문하거나 선택지를 제시하거나 `request_user_input`을 호출하지 않는다. 후속 에이전트가 명령 재실행이나 산출물 수집으로 해소할 수 있는 검증 증거 공백만으로는 사용자 리뷰 요청을 작성하지 않는다._
- 상태: 없음
- 사유 유형: 없음
- 결정 필요: 없음
- 차단 근거: 없음
- 실행한 검증/명령: 없음
- 자동 후속 불가 이유: 없음
- 재개 조건: 없음
## 리뷰어를 위한 체크포인트
- predecessor `01_domain_rules` 완료 근거 없이 구현이 시작되지 않았는지 확인한다.
- local smoke read condition이 domain rule 경로와 같은 모노레포 prefix를 쓰는지 확인한다.
- `Makefile` target과 smoke 문서의 명령 의미가 충돌하지 않는지 확인한다.
## 검증 결과
_구현 에이전트가 각 중간 검증 및 최종 검증 명령 실행 후 출력을 여기에 붙여 넣는다._
필수 규칙:
- 검증 명령은 고정된 계약이다. 임의로 대체하지 않는다.
- 대체가 필요하면 `계획 대비 변경 사항`에 이유와 대체 명령을 기록한다.
- `검증 결과`에는 실제 stdout/stderr를 붙여 넣는다.
- 사용자 리뷰 요청으로 명령을 끝까지 실행하지 못했다면 `사용자 리뷰 요청`에 실행한 명령, 실제 출력, 미실행 명령의 사유를 기록한다.
- mobile/UI hang, timeout, 또는 2분 무진행은 blind retry를 중단하고 focused rerun 명령과 screenshot/window/UI-tree evidence path를 남기며, 불가능하면 정확한 사유를 남긴다.
### RULES-1 중간 검증
```bash
$ rg --sort path -n 'lib/|bin/main|assets/' agent-test/local
(output)
```
### RULES-2 중간 검증
```bash
$ rg --sort path -n 'runner-analyze|runner-test|client-analyze|client-test|core-test|apps/runner|apps/client|services/core|packages/flutter/oto_console' agent-test/local Makefile
(output)
```
### 최종 검증
```bash
$ test -f agent-task/m-ops-rule-monorepo-alignment/01_domain_rules/complete.log || find agent-task/archive -path '*/m-ops-rule-monorepo-alignment/01_domain_rules/complete.log' -print -quit | grep -q .
(output)
$ rg --sort path -n 'lib/|bin/main|assets/' agent-test/local
(output)
$ rg --sort path -n 'runner-analyze|runner-test|client-analyze|client-test|core-test|apps/runner|apps/client|services/core|packages/flutter/oto_console' agent-test/local Makefile
(output)
$ git diff --check
(output)
```
---
> **[IMPLEMENTING AGENT — BEFORE SAVING] Have you filled in every implementation-owned section: completion table, implementation checklist, changes from plan, design decisions, and verification output?**
> If anything is blank, go back and fill it in before saving this file.
> Leave review-agent-only sections unchanged.

View file

@ -10,7 +10,7 @@ last_rule_updated_at: 2026-06-05
## 읽기 조건
- `lib/oto/agent/**`, `lib/cli/commands/command_agent.dart`, 또는 `assets/script/shell/oto_agent_bootstrap.sh` 변경 검증이 필요한 경우
- `apps/runner/lib/oto/agent/**`, `apps/runner/lib/cli/commands/command_agent.dart`, 또는 `apps/runner/assets/script/shell/oto_agent_bootstrap.sh` 변경 검증이 필요한 경우
## 적용 범위
@ -36,9 +36,9 @@ last_rule_updated_at: 2026-06-05
## 명령
- setup: `dart pub get`
- lint: `dart analyze`
- unit: `dart test test/oto_agent_migration_plan_test.dart test/oto_agent_bootstrap_script_test.dart test/oto_agent_cli_test.dart test/oto_agent_config_test.dart test/oto_agent_registration_test.dart test/oto_server_connection_smoke_test.dart`
- setup: `cd apps/runner && dart pub get` (또는 `make runner-get`)
- lint: `cd apps/runner && dart analyze` (또는 `make runner-analyze`)
- unit: `cd apps/runner && dart test test/oto_agent_migration_plan_test.dart test/oto_agent_bootstrap_script_test.dart test/oto_agent_cli_test.dart test/oto_agent_config_test.dart test/oto_agent_registration_test.dart test/oto_server_connection_smoke_test.dart` (또는 `make runner-test`)
- smoke:
- e2e:
- model:
@ -46,17 +46,17 @@ last_rule_updated_at: 2026-06-05
## 필수 검증
- agent 도메인 변경 후 `dart analyze`를 실행한다.
- agent 도메인 변경 후 agent 관련 `dart test` 명령을 실행한다.
- agent 도메인 변경 후 `cd apps/runner && dart analyze`를 실행한다.
- agent 도메인 변경 후 agent 관련 `cd apps/runner && dart test ...` 명령을 실행한다.
## 보조 검증
- 전체 회귀가 필요한 경우 `dart test`를 실행한다.
- 전체 회귀가 필요한 경우 `cd apps/runner && dart test` 또는 `make runner-test`를 실행한다.
## 판정 기준
- `dart analyze`가 issue 없이 종료한다.
- 지정한 `dart test`가 모두 통과한다.
- `cd apps/runner && dart analyze`가 issue 없이 종료한다.
- 지정한 `cd apps/runner && dart test`가 모두 통과한다.
## 기준 출력 예시

View file

@ -10,7 +10,7 @@ last_rule_updated_at: 2026-06-05
## 읽기 조건
- `bin/main.dart`, `lib/cli/**`, `assets/script/**`, `assets/bin/**`, `assets/package/**`, 또는 resource importer 변경 검증이 필요한 경우
- `apps/runner/bin/main.dart`, `apps/runner/lib/cli/**`, `apps/runner/assets/script/**`, `apps/runner/assets/bin/**`, `apps/runner/assets/package/**`, 또는 `apps/runner/lib/resources.resource_importer.dart` 변경 검증이 필요한 경우
## 적용 범위
@ -35,26 +35,27 @@ last_rule_updated_at: 2026-06-05
## 명령
- setup: `dart pub get`
- lint: `dart analyze`
- unit: `dart test test/oto_cli_runtime_test.dart test/oto_catalog_cli_test.dart test/oto_validate_cli_test.dart`
- smoke: `dart run bin/main.dart --help`
- setup: `cd apps/runner && dart pub get` (또는 `make runner-get`)
- lint: `cd apps/runner && dart analyze` (또는 `make runner-analyze`)
- unit: `cd apps/runner && dart test test/oto_cli_runtime_test.dart test/oto_catalog_cli_test.dart test/oto_validate_cli_test.dart` (또는 `make runner-test`)
- smoke: `cd apps/runner && dart run bin/main.dart --help`
- e2e:
- model:
- full-cycle:
## 필수 검증
- CLI 도메인 변경 후 `dart analyze`를 실행한다.
- CLI 도메인 변경 후 관련 `dart test` 명령을 실행한다.
- CLI 도메인 변경 후 `cd apps/runner && dart analyze`를 실행한다.
- CLI 도메인 변경 후 관련 `cd apps/runner && dart test ...` 명령을 실행한다.
## 보조 검증
- CLI entrypoint 변경 시 `dart run bin/main.dart --help`를 실행한다.
- CLI entrypoint 변경 시 `cd apps/runner && dart run bin/main.dart --help`를 실행한다.
## 판정 기준
- analyzer issue가 없고 지정 테스트가 통과한다.
- `cd apps/runner && dart analyze`가 issue 없이 종료한다.
- 지정한 `cd apps/runner && dart test`가 모두 통과한다.
- help smoke는 정상 종료하거나 현재 CLI가 정의한 도움말/사용법 출력을 낸다.
## 기준 출력 예시

View file

@ -10,7 +10,7 @@ last_rule_updated_at: 2026-06-05
## 읽기 조건
- `lib/oto/commands/**`, `lib/oto/data/**`, 또는 command template 변경 검증이 필요한 경우
- `apps/runner/lib/oto/commands/**`, `apps/runner/lib/oto/data/**`, 또는 command template 변경 검증이 필요한 경우
## 적용 범위
@ -35,9 +35,9 @@ last_rule_updated_at: 2026-06-05
## 명령
- setup: `dart pub get`
- lint: `dart analyze`
- unit: `dart test test/oto_command_catalog_test.dart test/oto_command_runtime_test.dart`
- setup: `cd apps/runner && dart pub get` (또는 `make runner-get`)
- lint: `cd apps/runner && dart analyze` (또는 `make runner-analyze`)
- unit: `cd apps/runner && dart test test/oto_command_catalog_test.dart test/oto_command_runtime_test.dart` (또는 `make runner-test`)
- smoke:
- e2e:
- model:
@ -45,17 +45,18 @@ last_rule_updated_at: 2026-06-05
## 필수 검증
- command 도메인 변경 후 `dart analyze`를 실행한다.
- command 도메인 변경 후 관련 `dart test` 명령을 실행한다.
- `@JsonSerializable` 모델을 추가/변경한 경우 `dart run build_runner build`를 실행하거나 생성물 갱신 필요를 보고한다.
- command 도메인 변경 후 `cd apps/runner && dart analyze`를 실행한다.
- command 도메인 변경 후 관련 `cd apps/runner && dart test ...` 명령을 실행한다.
- `@JsonSerializable` 모델을 추가/변경한 경우 `cd apps/runner && dart run build_runner build`를 실행하거나 생성물 갱신 필요를 보고한다.
## 보조 검증
- 전체 command 회귀가 필요하면 `dart test`를 실행한다.
- 전체 command 회귀가 필요하면 `cd apps/runner && dart test` 또는 `make runner-test`를 실행한다.
## 판정 기준
- analyzer issue가 없고 지정 테스트가 통과한다.
- `cd apps/runner && dart analyze`가 issue 없이 종료한다.
- 지정한 `cd apps/runner && dart test`가 모두 통과한다.
- 생성 코드가 필요한 변경은 generated file과 source가 일치한다.
## 기준 출력 예시

View file

@ -10,7 +10,7 @@ last_rule_updated_at: 2026-06-05
## 읽기 조건
- `lib/oto/application.dart`, `lib/oto/core/**`, `lib/oto/utils/**`, 또는 core script helper 변경 검증이 필요한 경우
- `apps/runner/lib/oto/application.dart`, `apps/runner/lib/oto/core/**`, `apps/runner/lib/oto/utils/**`, 또는 core script helper 변경 검증이 필요한 경우
## 적용 범위
@ -35,9 +35,9 @@ last_rule_updated_at: 2026-06-05
## 명령
- setup: `dart pub get`
- lint: `dart analyze`
- unit: `dart test test/oto_application_test.dart test/oto_context_test.dart test/oto_core_test.dart test/oto_system_runtime_test.dart`
- setup: `cd apps/runner && dart pub get` (또는 `make runner-get`)
- lint: `cd apps/runner && dart analyze` (또는 `make runner-analyze`)
- unit: `cd apps/runner && dart test test/oto_application_test.dart test/oto_context_test.dart test/oto_core_test.dart test/oto_system_runtime_test.dart` (또는 `make runner-test`)
- smoke:
- e2e:
- model:
@ -45,16 +45,17 @@ last_rule_updated_at: 2026-06-05
## 필수 검증
- core 도메인 변경 후 `dart analyze`를 실행한다.
- core 도메인 변경 후 관련 `dart test` 명령을 실행한다.
- core 도메인 변경 후 `cd apps/runner && dart analyze`를 실행한다.
- core 도메인 변경 후 관련 `cd apps/runner && dart test ...` 명령을 실행한다.
## 보조 검증
- runtime 전체 영향이 있으면 `dart test`를 실행한다.
- runtime 전체 영향이 있으면 `cd apps/runner && dart test` 또는 `make runner-test`를 실행한다.
## 판정 기준
- analyzer issue가 없고 지정 테스트가 통과한다.
- `cd apps/runner && dart analyze`가 issue 없이 종료한다.
- 지정한 `cd apps/runner && dart test`가 모두 통과한다.
## 기준 출력 예시

View file

@ -10,11 +10,11 @@ last_rule_updated_at: 2026-06-05
## 읽기 조건
- `pubspec.yaml`, `analysis_options.yaml`, dependency, analyzer, build_runner 경계 변경 검증이 필요한 경우
- `apps/runner/pubspec.yaml`, `apps/client/pubspec.yaml`, `packages/flutter/oto_console/pubspec.yaml`, `services/core/go.mod`, `apps/runner/analysis_options.yaml`, `apps/client/analysis_options.yaml`, `packages/flutter/oto_console/analysis_options.yaml`, 또는 `proto/**` 변경 검증이 필요한 경우
## 적용 범위
- Dart package manifest, analyzer configuration, dependency resolution
- Dart package manifest, analyzer configuration (analyzer options), dependency resolution, and protobuf contract generation
## 분류
@ -35,9 +35,24 @@ last_rule_updated_at: 2026-06-05
## 명령
- setup: `dart pub get`
- lint: `dart analyze`
- unit: `dart test`
- setup:
- runner: `cd apps/runner && dart pub get` (또는 `make runner-get`)
- client: `cd apps/client && flutter pub get` (또는 `make client-get`)
- console: `cd packages/flutter/oto_console && flutter pub get`
- core: `cd services/core && go mod download`
- lint:
- runner: `cd apps/runner && dart analyze` (또는 `make runner-analyze`)
- client: `cd apps/client && flutter analyze` (또는 `make client-analyze`)
- console: `cd packages/flutter/oto_console && flutter analyze`
- unit:
- runner: `cd apps/runner && dart test` (또는 `make runner-test`)
- client: `cd apps/client && flutter test` (또는 `make client-test`)
- console: `cd packages/flutter/oto_console && flutter test`
- core: `cd services/core && go test ./...` (또는 `make core-test`)
- proto-gen:
- all: `make proto`
- go: `make proto-go`
- dart: `make proto-dart`
- smoke:
- e2e:
- model:
@ -45,18 +60,19 @@ last_rule_updated_at: 2026-06-05
## 필수 검증
- framework 도메인 변경 후 `dart pub get`가 필요한지 판단하고 실행 또는 생략 사유를 보고한다.
- framework 도메인 변경 후 `dart analyze` 실행한다.
- test/runtime 영향이 있으면 `dart test`를 실행한다.
- framework 도메인 변경 후 패키지별 setup/analyze를 실행하고 결과를 확인한다.
- 각 패키지 도메인 변경 후 관련 `make runner-test`, `make client-test`, `cd packages/flutter/oto_console && flutter test` 또는 `make core-test` 명령을 실행한다.
- `proto/**` 변경 시 `make proto` (또는 `make proto-go`, `make proto-dart`)를 실행하고 생성된 파일(Go/Dart protobuf)이 올바르게 갱신되는지 확인한다.
## 보조 검증
- JSON 생성 경계 변경 시 `dart run build_runner build`를 실행하거나 생성물 갱신 필요를 보고한다.
- JSON 생성 경계 변경 시 `cd apps/runner && dart run build_runner build`를 실행하거나 생성물 갱신 필요를 보고한다.
## 판정 기준
- dependency resolution이 성공하고 analyzer issue가 없다.
- 각 패키지의 dependency resolution이 성공하고 analyzer issue가 없다.
- 실행한 테스트가 모두 통과한다.
- protobuf generation을 수행한 경우 생성 타겟(`make proto`, `make proto-go`, `make proto-dart`)이 오류 없이 정상 종료하며 파일 생성이 완료된다.
## 기준 출력 예시

View file

@ -10,7 +10,7 @@ last_rule_updated_at: 2026-06-05
## 읽기 조건
- `lib/oto/pipeline/**` 또는 `lib/oto/data/pipeline_data.dart` 변경 검증이 필요한 경우
- `apps/runner/lib/oto/pipeline/**` 또는 `apps/runner/lib/oto/data/pipeline_data.dart` 변경 검증이 필요한 경우
## 적용 범위
@ -35,9 +35,9 @@ last_rule_updated_at: 2026-06-05
## 명령
- setup: `dart pub get`
- lint: `dart analyze`
- unit: `dart test`
- setup: `cd apps/runner && dart pub get` (또는 `make runner-get`)
- lint: `cd apps/runner && dart analyze` (또는 `make runner-analyze`)
- unit: `cd apps/runner && dart test` (또는 `make runner-test`)
- smoke:
- e2e:
- model:
@ -45,8 +45,8 @@ last_rule_updated_at: 2026-06-05
## 필수 검증
- pipeline 도메인 변경 후 `dart analyze`를 실행한다.
- pipeline 전용 테스트가 확인되지 않았으므로 변경 영향이 있는 경우 `dart test` 전체 회귀를 실행한다.
- pipeline 도메인 변경 후 `cd apps/runner && dart analyze`를 실행한다.
- pipeline 전용 테스트가 확인되지 않았으므로 변경 영향이 있는 경우 `cd apps/runner && dart test` 또는 `make runner-test`를 실행한다.
## 보조 검증
@ -54,7 +54,8 @@ last_rule_updated_at: 2026-06-05
## 판정 기준
- analyzer issue가 없고 전체 테스트가 통과한다.
- `cd apps/runner && dart analyze`가 issue 없이 종료한다.
- 지정한 `cd apps/runner && dart test`가 모두 통과한다.
## 기준 출력 예시

View file

@ -37,6 +37,25 @@ last_rule_updated_at: 2026-06-05
- sample / smoke / sample YAML and template-facing examples: `agent-test/local/sample-smoke.md`
- scheduler / smoke / scheduler CLI and runtime: `agent-test/local/scheduler-smoke.md`
## 패키지 및 Makefile 대상 (Monorepo Targets)
- **apps/runner** (Dart CLI runner):
- Setup: `make runner-get` 또는 `cd apps/runner && dart pub get`
- Lint: `make runner-analyze` 또는 `cd apps/runner && dart analyze`
- Test: `make runner-test` 또는 `cd apps/runner && dart test`
- **apps/client** (Flutter OTO client app):
- Setup: `make client-get` 또는 `cd apps/client && flutter pub get`
- Lint: `make client-analyze` 또는 `cd apps/client && flutter analyze`
- Test: `make client-test` 또는 `cd apps/client && flutter test`
- **services/core** (Go OTO Server):
- Test: `make core-test` 또는 `cd services/core && go test ./...`
- **packages/flutter/oto_console** (Flutter OTO console package):
- Setup: `cd packages/flutter/oto_console && flutter pub get`
- Lint: `cd packages/flutter/oto_console && flutter analyze`
- Test: `cd packages/flutter/oto_console && flutter test`
- **protobuf** (proto contract):
- Generate: `make proto` (또는 `make proto-go`, `make proto-dart`)
## 라우팅 규칙
- 여러 항목이 맞으면 모두 읽는다.

View file

@ -10,7 +10,7 @@ last_rule_updated_at: 2026-06-05
## 읽기 조건
- `assets/yaml/sample/**` 변경 또는 YAML sample 검증이 필요한 경우
- `apps/runner/assets/yaml/sample/**` 변경 또는 YAML sample 검증이 필요한 경우
## 적용 범위
@ -35,9 +35,9 @@ last_rule_updated_at: 2026-06-05
## 명령
- setup: `dart pub get`
- lint: `dart analyze`
- unit: `dart test test/oto_validate_cli_test.dart`
- setup: `cd apps/runner && dart pub get` (또는 `make runner-get`)
- lint: `cd apps/runner && dart analyze` (또는 `make runner-analyze`)
- unit: `cd apps/runner && dart test test/oto_validate_cli_test.dart` (또는 `make runner-test`)
- smoke:
- e2e:
- model:
@ -45,8 +45,8 @@ last_rule_updated_at: 2026-06-05
## 필수 검증
- sample 도메인 변경 후 `dart analyze`를 실행한다.
- sample 검증 경로 변경 후 `dart test test/oto_validate_cli_test.dart`를 실행한다.
- sample 도메인 변경 후 `cd apps/runner && dart analyze`를 실행한다.
- sample 검증 경로 변경 후 `cd apps/runner && dart test test/oto_validate_cli_test.dart`를 실행한다.
## 보조 검증
@ -54,7 +54,8 @@ last_rule_updated_at: 2026-06-05
## 판정 기준
- analyzer issue가 없고 validate CLI 테스트가 통과한다.
- `cd apps/runner && dart analyze`가 issue 없이 종료한다.
- 지정한 `cd apps/runner && dart test`가 모두 통과한다.
## 기준 출력 예시

View file

@ -10,7 +10,7 @@ last_rule_updated_at: 2026-06-05
## 읽기 조건
- `lib/cli/commands/scheduler/**` 또는 `lib/cli/commands/command_scheduler.dart` 변경 검증이 필요한 경우
- `apps/runner/lib/cli/commands/scheduler/**` 또는 `apps/runner/lib/cli/commands/command_scheduler.dart` 변경 검증이 필요한 경우
## 적용 범위
@ -35,9 +35,9 @@ last_rule_updated_at: 2026-06-05
## 명령
- setup: `dart pub get`
- lint: `dart analyze`
- unit: `dart test test/oto_scheduler_runtime_test.dart`
- setup: `cd apps/runner && dart pub get` (또는 `make runner-get`)
- lint: `cd apps/runner && dart analyze` (또는 `make runner-analyze`)
- unit: `cd apps/runner && dart test test/oto_scheduler_runtime_test.dart` (또는 `make runner-test`)
- smoke:
- e2e:
- model:
@ -45,8 +45,8 @@ last_rule_updated_at: 2026-06-05
## 필수 검증
- scheduler 도메인 변경 후 `dart analyze`를 실행한다.
- scheduler 도메인 변경 후 `dart test test/oto_scheduler_runtime_test.dart`를 실행한다.
- scheduler 도메인 변경 후 `cd apps/runner && dart analyze`를 실행한다.
- scheduler 도메인 변경 후 `cd apps/runner && dart test test/oto_scheduler_runtime_test.dart`를 실행한다.
## 보조 검증
@ -54,7 +54,8 @@ last_rule_updated_at: 2026-06-05
## 판정 기준
- analyzer issue가 없고 scheduler 테스트가 통과한다.
- `cd apps/runner && dart analyze`가 issue 없이 종료한다.
- 지정한 `cd apps/runner && dart test`가 모두 통과한다.
## 기준 출력 예시