<!-- 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`의 구현 에이전트 소유 섹션을 채운다. 이 파일 작성이 구현의 마지막 단계다.
