<!-- task=m-ops-rule-monorepo-alignment/01_domain_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/01_domain_rules, plan=0, tag=RULES

## Roadmap Targets

- Milestone: `agent-roadmap/phase/independent-control-plane/milestones/ops-rule-monorepo-alignment.md`
- Task ids:
  - `domain-paths`: domain rule의 파일 경로 예시와 책임 경계 설명이 현재 코드 위치와 맞는지 검토해 갱신한다.
- 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/01_domain_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] Runner domain path prefixes | [x] |
| [RULES-2] Framework and non-runner boundary wording | [x] |

## 구현 체크리스트

- [x] `agent-ops/rules/project/domain/**/rules.md`의 root `lib/`, `bin/main.dart`, root `assets/` 경로를 현재 `apps/runner/...` 경로로 갱신하고, legacy/external exception은 명시한다.
- [x] `framework` rule이 runner/client/console/core service의 package/toolchain/proto 경계만 담당하도록 설명을 정리하고, dedicated domain rule이 없는 구현 경로를 기존 domain으로 단정하지 않는다.
- [x] `rg --sort path -n 'lib/|bin/main|assets/' agent-ops/rules/project/domain` 결과의 남은 항목이 모두 의도된 legacy/external exception인지 확인한다.
- [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하는지 확인한다.
- [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/01_domain_rules/`를 `agent-task/archive/YYYY/MM/m-ops-rule-monorepo-alignment/01_domain_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-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로 이동한다.

## 계획 대비 변경 사항

- 없음. 계획된 모든 8개 domain rule 파일을 정확히 수정 완료하였습니다.

## 주요 설계 결정

- framework 도메인 규칙을 모노레포에 알맞게 runner, client, console, core service 의 패키지 선언(pubspec.yaml, go.mod), 린터 설정(analysis_options.yaml), proto 정의 경로로 확장 및 정리하고 비-runner 구현 경로(dedicated domain rule이 정의되지 않은 client, console, core internal 소스)에 대한 규칙을 억지로 기존 러너 도메인에 단정 짓지 않도록 명시했습니다.

## 사용자 리뷰 요청

- 상태: 없음
- 사유 유형: 없음
- 결정 필요: 없음
- 차단 근거: 없음
- 실행한 검증/명령: 없음
- 자동 후속 불가 이유: 없음
- 재개 조건: 없음

## 리뷰어를 위한 체크포인트

- domain rule의 stale root path가 현재 모노레포 경로로 바뀌었는지 확인한다.
- `framework` rule이 비-runner 구현 경로의 behavior rule처럼 과장되지 않았는지 확인한다.
- 남은 root path가 legacy/external exception으로 명시되어 있는지 확인한다.

## 검증 결과

### RULES-1 중간 검증
```bash
$ rg --sort path -n 'lib/|bin/main|assets/' agent-ops/rules/project/domain
agent-ops/rules/project/domain/agent/rules.md:16:- `apps/runner/lib/cli/commands/command_agent.dart` — `agent run --config <path>` CLI 표면과 오류 출력
agent-ops/rules/project/domain/agent/rules.md:17:- `apps/runner/lib/oto/agent/` — agent config, runner, Edge 등록 client, generated protobuf 런타임 코드
agent-ops/rules/project/domain/agent/rules.md:18:- `apps/runner/assets/script/shell/oto_agent_bootstrap.sh` — Linux agent 다운로드, config 생성, background 실행 bootstrap
agent-ops/rules/project/domain/agent/rules.md:22:- `apps/runner/lib/cli/cli.dart` — 일반 CLI 출력/초기화 (`cli` 도메인)
agent-ops/rules/project/domain/agent/rules.md:23:- `apps/runner/lib/cli/commands/command_catalog.dart` — command catalog 출력 (`cli` 도메인)
agent-ops/rules/project/domain/agent/rules.md:24:- `apps/runner/lib/cli/commands/command_validate.dart` — pipeline YAML 검증 (`cli`/`core` 도메인)
agent-ops/rules/project/domain/agent/rules.md:25:- `apps/runner/lib/cli/commands/command_scheduler.dart` — scheduler 명령 진입 (`scheduler` 도메인)
agent-ops/rules/project/domain/agent/rules.md:26:- `apps/runner/lib/oto/application.dart` — pipeline build 오케스트레션 (`core` 도메인)
agent-ops/rules/project/domain/agent/rules.md:27:- `apps/runner/lib/oto/pipeline/` — pipeline workflow 실행 (`pipeline` 도메인)
agent-ops/rules/project/domain/agent/rules.md:28:- `apps/runner/lib/oto/commands/` — pipeline에서 호출되는 커맨드 구현체 (`command` 도메인)
agent-ops/rules/project/domain/agent/rules.md:29:- `apps/runner/assets/script/`의 기타 build/package helper — CLI/배포 보조 asset (`cli` 도메인)
agent-ops/rules/project/domain/agent/rules.md:42:- `apps/runner/lib/oto/agent/iop/*.pb*.dart` — `iop/runtime.proto` generated protobuf 코드
agent-ops/rules/project/domain/agent/rules.md:43:- `apps/runner/lib/oto/agent/google/protobuf/*.pb*.dart` — `google/protobuf/struct.proto` generated protobuf 코드
agent-ops/rules/project/domain/agent/rules.md:61:- **cli**: `apps/runner/bin/main.dart` 등록과 일반 출력/스타일은 cli 도메인이다. `CommandAgent` 내부의 agent subcommand 정책부터는 agent 도메인이다.
agent-ops/rules/project/domain/agent/rules.md:65:- **sample**: agent config YAML은 pipeline sample YAML이 아니다. `apps/runner/assets/yaml/sample/**`에 agent bootstrap config를 섞지 않는다.
agent-ops/rules/project/domain/cli/rules.md:16:- `apps/runner/bin/main.dart` — 외부 `dart_framework` 앱 래퍼를 통해 CLI를 초기화하는 실행 진입점
agent-ops/rules/project/domain/cli/rules.md:17:- `apps/runner/lib/cli/cli.dart` — CLI 루트 객체, 출력/스타일 처리
agent-ops/rules/project/domain/cli/rules.md:18:- `apps/runner/lib/cli/printer.dart` — OS별 콘솔 출력과 ANSI 스타일 처리
agent-ops/rules/project/domain/cli/rules.md:19:- `apps/runner/lib/cli/cli_style.dart` — 콘솔 색상/스타일 enum
agent-ops/rules/project/domain/cli/rules.md:20:- `apps/runner/lib/cli/commands/command_base.dart` — CLI 커맨드 공통 베이스
agent-ops/rules/project/domain/cli/rules.md:21:- `apps/runner/lib/cli/commands/command_manager.dart` — CLI 커맨드 라우팅
agent-ops/rules/project/domain/cli/rules.md:22:- `apps/runner/lib/cli/commands/command_const.dart` — OS별 설치 경로 상수
agent-ops/rules/project/domain/cli/rules.md:23:- `apps/runner/lib/cli/commands/command_exe.dart` — `exe` 명령과 `Application.build()` 진입
agent-ops/rules/project/domain/cli/rules.md:24:- `apps/runner/lib/cli/commands/command_catalog.dart` — 등록된 OTO 커맨드 catalog 출력 명령
agent-ops/rules/project/domain/cli/rules.md:25:- `apps/runner/lib/cli/commands/command_validate.dart` — YAML 구조/의미 검증 명령
agent-ops/rules/project/domain/cli/rules.md:26:- `apps/runner/lib/cli/commands/command_template.dart` — 템플릿 출력
agent-ops/rules/project/domain/cli/rules.md:27:- `apps/runner/lib/cli/commands/command_start.dart` — 시작/중지 커맨드
agent-ops/rules/project/domain/cli/rules.md:28:- `apps/runner/lib/cli/commands/command_install.dart` — 설치/제거 명령
agent-ops/rules/project/domain/cli/rules.md:29:- `apps/runner/lib/cli/commands/install/` — PATH 등록 등 설치 보조 로직
agent-ops/rules/project/domain/cli/rules.md:30:- `apps/runner/lib/resources.resource_importer.dart` — 설치/패키징 asset용 `resource_importer` 생성 파일
agent-ops/rules/project/domain/cli/rules.md:31:- `apps/runner/assets/package/` — 배포/패키징 보조 파일
agent-ops/rules/project/domain/cli/rules.md:32:- `apps/runner/assets/bin/` — 설치 또는 패키징에 포함되는 보조 바이너리
agent-ops/rules/project/domain/cli/rules.md:33:- `apps/runner/assets/script/` — 빌드/패키징/실행 보조 스크립트. Jenkins env helper는 core 경계도 함께 확인
agent-ops/rules/project/domain/cli/rules.md:37:- `apps/runner/lib/oto/` — 비즈니스 로직·파이프라인 엔진 (cli는 진입만 담당)
agent-ops/rules/project/domain/cli/rules.md:38:- `apps/runner/lib/cli/commands/command_agent.dart` — OTO Edge agent 실행 명령 (`agent` 도메인)
agent-ops/rules/project/domain/cli/rules.md:39:- `apps/runner/lib/cli/commands/command_scheduler.dart` — scheduler 명령 파싱과 등록/실행 진입점 (`scheduler` 도메인)
agent-ops/rules/project/domain/cli/rules.md:40:- `apps/runner/lib/cli/commands/scheduler/` — 스케줄러 실행/등록/OS별 백그라운드 처리 (`scheduler` 도메인)
agent-ops/rules/project/domain/cli/rules.md:41:- `apps/runner/lib/oto/agent/` — agent 설정/등록/Edge 통신 (`agent` 도메인)
agent-ops/rules/project/domain/cli/rules.md:42:- `apps/runner/assets/script/shell/oto_agent_bootstrap.sh` — agent 설치/실행 bootstrap (`agent` 도메인)
agent-ops/rules/project/domain/cli/rules.md:43:- `apps/runner/assets/template/` — 커맨드 실행 중 사용하는 템플릿 (`command` 도메인)
agent-ops/rules/project/domain/cli/rules.md:60:- `apps/runner/bin/main.dart` — CLI 초기화 시 등록할 top-level 명령 목록을 정의
agent-ops/rules/project/domain/cli/rules.md:65:- top-level 명령 등록은 `apps/runner/bin/main.dart`의 `CLI.initialize(..., [Command...])` 목록에서 관리
agent-ops/rules/project/domain/cli/rules.md:70:- CLI 변경 후 `dart analyze`를 실행하고, CLI 진입 변경이면 최소 `dart run apps/runner/bin/main.dart` 수준의 스모크 실행 가능 여부를 확인
agent-ops/rules/project/domain/cli/rules.md:78:- **scheduler**: `CommandScheduler`, `apps/runner/lib/cli/commands/command_scheduler.dart`, `apps/runner/lib/cli/commands/scheduler/**`는 scheduler 도메인이다. 일반 CLI 변경에서 scheduler 내부 동작을 함께 수정하지 않는다
agent-ops/rules/project/domain/cli/rules.md:79:- **framework**: `apps/runner/bin/main.dart`는 외부 framework Application을 소비하지만 framework 의존성 자체는 framework 도메인에서 다룬다
agent-ops/rules/project/domain/command/rules.md:16:- `apps/runner/lib/oto/commands/` — 커맨드 구현체 (카테고리별 하위 폴더)
agent-ops/rules/project/domain/command/rules.md:17:- `apps/runner/lib/oto/data/` — 커맨드 파라미터 데이터 모델 (`*_data.dart`, `*.g.dart`). `pipeline_data.dart`는 pipeline 도메인
agent-ops/rules/project/domain/command/rules.md:18:- `apps/runner/assets/template/` — 커맨드 실행 중 사용하는 템플릿 파일
agent-ops/rules/project/domain/command/rules.md:22:- `apps/runner/lib/oto/pipeline/` — 실행 흐름 제어 (커맨드 dispatch 이전)
agent-ops/rules/project/domain/command/rules.md:23:- `apps/runner/lib/oto/core/` — 태그 치환, 데이터 합성 (커맨드 실행 이전)
agent-ops/rules/project/domain/command/rules.md:24:- `apps/runner/lib/oto/data/pipeline_data.dart` — workflow/조건/반복 데이터 모델 (`pipeline` 도메인)
agent-ops/rules/project/domain/command/rules.md:25:- `apps/runner/assets/yaml/sample/` — YAML 사용 예시 (`sample` 도메인)
agent-ops/rules/project/domain/command/rules.md:44:| build | `apps/runner/lib/oto/commands/build/` | `apps/runner/lib/oto/data/build_data.dart` |
agent-ops/rules/project/domain/command/rules.md:45:| file | `apps/runner/lib/oto/commands/file/` | `apps/runner/lib/oto/data/file_data.dart` |
agent-ops/rules/project/domain/command/rules.md:46:| git / GitHub | `apps/runner/lib/oto/commands/git/` | `apps/runner/lib/oto/data/git_data.dart` |
agent-ops/rules/project/domain/command/rules.md:47:| ftp / web | `apps/runner/lib/oto/commands/ftp/`, `apps/runner/lib/oto/commands/web/` | `apps/runner/lib/oto/data/network_data.dart` |
agent-ops/rules/project/domain/command/rules.md:48:| notification | `apps/runner/lib/oto/commands/notification/`, `apps/runner/lib/oto/utils/mattermost/` | `apps/runner/lib/oto/data/notification_data.dart` |
agent-ops/rules/project/domain/command/rules.md:49:| jira / jenkins | `apps/runner/lib/oto/commands/jira/`, `apps/runner/lib/oto/commands/jenkins/` | `apps/runner/lib/oto/data/integration_data.dart`, `apps/runner/lib/oto/data/jira_data.dart` |
agent-ops/rules/project/domain/command/rules.md:50:| infra / external tool | `apps/runner/lib/oto/commands/aws/`, `docker/`, `gradle/`, `infra/`, `proto/` | `apps/runner/lib/oto/data/infra_data.dart`, `apps/runner/lib/oto/data/util_data.dart` |
agent-ops/rules/project/domain/command/rules.md:51:| shell / process / util | `apps/runner/lib/oto/commands/shell/`, `process/`, `util/` | `apps/runner/lib/oto/data/util_data.dart` |
agent-ops/rules/project/domain/command/rules.md:57:| `apps/runner/assets/template/index.html` | iOS publish HTML 템플릿 |
agent-ops/rules/project/domain/command/rules.md:58:| `apps/runner/assets/template/manifest.plist` | iOS publish manifest 템플릿 |
agent-ops/rules/project/domain/command/rules.md:71:- 커맨드 추가/파라미터 변경 시 관련 `apps/runner/assets/yaml/sample/**`와 README 커맨드 목록 갱신 필요 여부를 확인한다
agent-ops/rules/project/domain/command/rules.md:72:- 커맨드가 `apps/runner/assets/template/**`를 읽거나 출력 형식에 의존하면 템플릿 경로와 placeholder 계약을 함께 확인한다
agent-ops/rules/project/domain/core/rules.md:16:- `apps/runner/lib/oto/application.dart` — 싱글턴 오케스트레이터 (BuildType enum, 빌드 진입점)
agent-ops/rules/project/domain/core/rules.md:17:- `apps/runner/lib/oto/core/` — 태그 시스템, 데이터 합성, 정의 데이터
agent-ops/rules/project/domain/core/rules.md:18:- `apps/runner/lib/oto/utils/` — 공통 유틸리티 (Mattermost 등 재사용 헬퍼)
agent-ops/rules/project/domain/core/rules.md:19:- `apps/runner/assets/script/batch/jenkins_env_params.bat` — Jenkins 환경 변수 합성에 쓰이는 Windows helper script
agent-ops/rules/project/domain/core/rules.md:20:- `apps/runner/assets/script/shell/jenkins_env_params.sh` — Jenkins 환경 변수 합성 helper script
agent-ops/rules/project/domain/core/rules.md:24:- `apps/runner/lib/oto/pipeline/` — 실행 흐름 (core 처리 이후)
agent-ops/rules/project/domain/core/rules.md:25:- `apps/runner/lib/oto/commands/` — 커맨드 구현체 (core 결과물을 소비)
agent-ops/rules/project/domain/core/rules.md:26:- `apps/runner/lib/oto/agent/` — OTO Edge agent 설정/등록/통신 (`agent` 도메인)
agent-ops/rules/project/domain/core/rules.md:27:- `apps/runner/assets/script/`의 빌드/패키징 보조 스크립트 — CLI/배포 보조 asset이며 core가 직접 해석하지 않는다
agent-ops/rules/project/domain/framework/rules.md:11:현재 프로젝트에는 `lib/framework/` 모듈이 없다.
agent-ops/rules/project/domain/framework/rules.md:13:단, 전용 도메인 규칙(dedicated domain rule)이 아직 존재하지 않는 `apps/client/lib/**`, `packages/flutter/oto_console/lib/**`, `services/core/internal/**` 등의 구현 코드가 가진 구체적인 비즈니스 동작 규칙은 이 framework 도메인이나 기존 runner 도메인 규칙으로 무리하게 확장하여 단정하지 않고, 추후 별도 도메인 규칙 생성 또는 후속 milestone 작업을 통해 정리한다.
agent-ops/rules/project/domain/framework/rules.md:27:- `lib/framework/` — 제거된 로컬 모듈. 새로 만들지 않는다
agent-ops/rules/project/domain/framework/rules.md:28:- `apps/runner/lib/oto/` — OTO 비즈니스 로직 (framework 위에서 동작)
agent-ops/rules/project/domain/framework/rules.md:29:- `apps/runner/lib/cli/` — CLI 레이어 (framework를 소비)
agent-ops/rules/project/domain/framework/rules.md:33:- `dart_framework/core/application.dart` — `apps/runner/bin/main.dart`에서 앱 진입 래퍼로 사용
agent-ops/rules/project/domain/framework/rules.md:40:- `resource_importer` — `apps/runner/lib/resources.resource_importer.dart` 생성 파일과 asset 임베딩 설정
agent-ops/rules/project/domain/framework/rules.md:49:- 로컬에 `lib/framework/`를 되살리는 대신 필요한 OTO 로직은 `apps/runner/lib/oto/` 또는 `apps/runner/lib/cli/`의 해당 도메인에 둔다
agent-ops/rules/project/domain/framework/rules.md:53:- **core**: `apps/runner/lib/oto/application.dart`는 OTO 오케스트레이터이며 외부 framework의 Application과 별개다
agent-ops/rules/project/domain/framework/rules.md:60:- `lib/framework/` 디렉터리를 새로 만들지 않는다
agent-ops/rules/project/domain/pipeline/rules.md:16:- `apps/runner/lib/oto/pipeline/` — 파이프라인 실행 엔진 전체
agent-ops/rules/project/domain/pipeline/rules.md:17:- `apps/runner/lib/oto/data/pipeline_data.dart` — workflow, 조건, 반복, switch 등 pipeline 데이터 모델
agent-ops/rules/project/domain/pipeline/rules.md:21:- `apps/runner/lib/oto/commands/` — 실제 커맨드 구현체 (pipeline은 dispatch만 한다)
agent-ops/rules/project/domain/pipeline/rules.md:22:- `apps/runner/lib/oto/core/` — 태그 치환·데이터 합성 (pipeline 이전 단계)
agent-ops/rules/project/domain/pipeline/rules.md:43:- 새 흐름 제어 유형은 `Pipeline.exeMap`에 등록하고, 필요한 데이터 모델은 `apps/runner/lib/oto/data/pipeline_data.dart`에 둔다
agent-ops/rules/project/domain/pipeline/rules.md:53:- **sample**: workflow 문법 변경 시 `apps/runner/assets/yaml/sample/02_*`~`05_*`와 README 흐름 제어 예시를 함께 점검
agent-ops/rules/project/domain/sample/rules.md:17:- `apps/runner/assets/yaml/sample/` — 카테고리별 샘플 YAML 파일
agent-ops/rules/project/domain/sample/rules.md:21:- `apps/runner/assets/yaml/example/` — 현재 tracked 샘플 파일은 없으며 샘플 작성 기준으로 사용하지 않는다
agent-ops/rules/project/domain/sample/rules.md:22:- `apps/runner/assets/templates/` — 현재 tracked 템플릿 파일은 없으며 샘플 작성 기준으로 사용하지 않는다
agent-ops/rules/project/domain/sample/rules.md:23:- 루트/`apps/runner/assets/` 하위의 구형 테스트 YAML/XML (`build_*.yaml`, `slack_test.yaml`, `pipeline-test*.yaml`, `scheduler*.yaml`, `assets/config.xml`, `assets/example.yaml`)은 현재 형상과 맞지 않아 제거됨
agent-ops/rules/project/domain/sample/rules.md:27:- `apps/runner/lib/oto/data/` — 실제 파라미터 모델은 command 도메인
agent-ops/rules/project/domain/scheduler/rules.md:16:- `apps/runner/lib/cli/commands/command_scheduler.dart` — `scheduler` CLI 명령 파싱과 진입점
agent-ops/rules/project/domain/scheduler/rules.md:17:- `apps/runner/lib/cli/commands/scheduler/` — 스케줄러 등록/해제/실행/OS별 구현
agent-ops/rules/project/domain/scheduler/rules.md:18:- `apps/runner/lib/cli/commands/scheduler/data/` — 스케줄러 설정 JSON 직렬화 모델
agent-ops/rules/project/domain/scheduler/rules.md:22:- `apps/runner/lib/cli/cli.dart` — 일반 CLI 출력/명령 라우팅 (`cli` 도메인)
agent-ops/rules/project/domain/scheduler/rules.md:23:- `apps/runner/lib/cli/commands/command_exe.dart` — 파이프라인 실행 isolate 진입 (`cli` 도메인). 단, scheduler가 실행을 위임한다
agent-ops/rules/project/domain/scheduler/rules.md:24:- `apps/runner/lib/oto/pipeline/` — 실제 파이프라인 실행 흐름 (`pipeline` 도메인)
agent-ops/rules/project/domain/scheduler/rules.md:25:- `apps/runner/lib/oto/commands/` — 실제 커맨드 실행 (`command` 도메인)
agent-ops/rules/project/domain/scheduler/rules.md:50:- **sample**: scheduler YAML 예시는 `apps/runner/assets/yaml/sample/12_scheduler.yaml`에서 관리한다
```

### RULES-2 중간 검증
```bash
$ rg --sort path -n 'pubspec.yaml|analysis_options.yaml|go.mod|proto/' agent-ops/rules/project/domain/framework/rules.md agent-ops/rules/project/rules.md
agent-ops/rules/project/domain/framework/rules.md:17:- `apps/runner/pubspec.yaml` — runner Dart dependency와 `dart_framework` Git 의존성 선언
agent-ops/rules/project/domain/framework/rules.md:18:- `apps/runner/analysis_options.yaml` — runner Dart analyzer/lint 기준
agent-ops/rules/project/domain/framework/rules.md:19:- `apps/client/pubspec.yaml` — Flutter client dependency 선언
agent-ops/rules/project/domain/framework/rules.md:20:- `apps/client/analysis_options.yaml` — Flutter client analyzer/lint 기준
agent-ops/rules/project/domain/framework/rules.md:21:- `packages/flutter/oto_console/pubspec.yaml` — embeddable console package dependency 선언
agent-ops/rules/project/domain/framework/rules.md:22:- `services/core/go.mod` — Go core service dependency 선언
agent-ops/rules/project/domain/framework/rules.md:23:- `proto/` — runner/server protobuf 계약 정의
agent-ops/rules/project/domain/framework/rules.md:46:- 외부 의존성 ref 변경은 각 `pubspec.yaml` 또는 `go.mod`에서 수행하고, 변경 후 패키지 갱신 및 `dart analyze` 또는 빌드 확인을 한다
agent-ops/rules/project/domain/framework/rules.md:48:- generated protobuf lint 예외는 `analysis_options.yaml`의 analyzer exclude 또는 파일 생성 주석으로 관리한다
agent-ops/rules/project/rules.md:61:proto/                           # OTO runner/server protobuf contract
agent-ops/rules/project/rules.md:64:> 참고: root `lib/` 기반 구조와 `lib/framework/` 모듈은 현재 구조가 아니다. runner 코드는 `apps/runner/lib/` 아래에 있고, `dart_framework`는 `apps/runner/pubspec.yaml`의 외부 Git 의존성으로만 사용한다.
agent-ops/rules/project/rules.md:68:- runner: Dart SDK `>=3.8.0 <4.0.0`, `apps/runner/pubspec.yaml`
agent-ops/rules/project/rules.md:69:- client: Flutter/Dart SDK `^3.11.3`, `apps/client/pubspec.yaml`
agent-ops/rules/project/rules.md:70:- console package: Flutter/Dart SDK `^3.11.3`, `packages/flutter/oto_console/pubspec.yaml`
agent-ops/rules/project/rules.md:71:- core service: Go `1.26`, `services/core/go.mod`
agent-ops/rules/project/rules.md:155:| `apps/runner/pubspec.yaml` | framework | `agent-ops/rules/project/domain/framework/rules.md` |
agent-ops/rules/project/rules.md:156:| `apps/runner/analysis_options.yaml` | framework | `agent-ops/rules/project/domain/framework/rules.md` |
agent-ops/rules/project/rules.md:157:| `apps/client/pubspec.yaml` | framework | `agent-ops/rules/project/domain/framework/rules.md` |
agent-ops/rules/project/rules.md:158:| `apps/client/analysis_options.yaml` | framework | `agent-ops/rules/project/domain/framework/rules.md` |
agent-ops/rules/project/rules.md:159:| `packages/flutter/oto_console/pubspec.yaml` | framework | `agent-ops/rules/project/domain/framework/rules.md` |
agent-ops/rules/project/rules.md:160:| `services/core/go.mod` | framework | `agent-ops/rules/project/domain/framework/rules.md` |
agent-ops/rules/project/rules.md:161:| `proto/**` | framework | `agent-ops/rules/project/domain/framework/rules.md` |
```

### 최종 검증
```bash
$ rg --sort path -n 'lib/|bin/main|assets/' agent-ops/rules/project/domain
agent-ops/rules/project/domain/agent/rules.md:16:- `apps/runner/lib/cli/commands/command_agent.dart` — `agent run --config <path>` CLI 표면과 오류 출력
agent-ops/rules/project/domain/agent/rules.md:17:- `apps/runner/lib/oto/agent/` — agent config, runner, Edge 등록 client, generated protobuf 런타임 코드
agent-ops/rules/project/domain/agent/rules.md:18:- `apps/runner/assets/script/shell/oto_agent_bootstrap.sh` — Linux agent 다운로드, config 생성, background 실행 bootstrap
agent-ops/rules/project/domain/agent/rules.md:22:- `apps/runner/lib/cli/cli.dart` — 일반 CLI 출력/초기화 (`cli` 도메인)
agent-ops/rules/project/domain/agent/rules.md:23:- `apps/runner/lib/cli/commands/command_catalog.dart` — command catalog 출력 (`cli` 도메인)
agent-ops/rules/project/domain/agent/rules.md:24:- `apps/runner/lib/cli/commands/command_validate.dart` — pipeline YAML 검증 (`cli`/`core` 도메인)
agent-ops/rules/project/domain/agent/rules.md:25:- `apps/runner/lib/cli/commands/command_scheduler.dart` — scheduler 명령 진입 (`scheduler` 도메인)
agent-ops/rules/project/domain/agent/rules.md:26:- `apps/runner/lib/oto/application.dart` — pipeline build 오케스트레션 (`core` 도메인)
agent-ops/rules/project/domain/agent/rules.md:27:- `apps/runner/lib/oto/pipeline/` — pipeline workflow 실행 (`pipeline` 도메인)
agent-ops/rules/project/domain/agent/rules.md:28:- `apps/runner/lib/oto/commands/` — pipeline에서 호출되는 커맨드 구현체 (`command` 도메인)
agent-ops/rules/project/domain/agent/rules.md:29:- `apps/runner/assets/script/`의 기타 build/package helper — CLI/배포 보조 asset (`cli` 도메인)
agent-ops/rules/project/domain/agent/rules.md:42:- `apps/runner/lib/oto/agent/iop/*.pb*.dart` — `iop/runtime.proto` generated protobuf 코드
agent-ops/rules/project/domain/agent/rules.md:43:- `apps/runner/lib/oto/agent/google/protobuf/*.pb*.dart` — `google/protobuf/struct.proto` generated protobuf 코드
agent-ops/rules/project/domain/agent/rules.md:61:- **cli**: `apps/runner/bin/main.dart` 등록과 일반 출력/스타일은 cli 도메인이다. `CommandAgent` 내부의 agent subcommand 정책부터는 agent 도메인이다.
agent-ops/rules/project/domain/agent/rules.md:65:- **sample**: agent config YAML은 pipeline sample YAML이 아니다. `apps/runner/assets/yaml/sample/**`에 agent bootstrap config를 섞지 않는다.
agent-ops/rules/project/domain/cli/rules.md:16:- `apps/runner/bin/main.dart` — 외부 `dart_framework` 앱 래퍼를 통해 CLI를 초기화하는 실행 진입점
agent-ops/rules/project/domain/cli/rules.md:17:- `apps/runner/lib/cli/cli.dart` — CLI 루트 객체, 출력/스타일 처리
agent-ops/rules/project/domain/cli/rules.md:18:- `apps/runner/lib/cli/printer.dart` — OS별 콘솔 출력과 ANSI 스타일 처리
agent-ops/rules/project/domain/cli/rules.md:19:- `apps/runner/lib/cli/cli_style.dart` — 콘솔 색상/스타일 enum
agent-ops/rules/project/domain/cli/rules.md:20:- `apps/runner/lib/cli/commands/command_base.dart` — CLI 커맨드 공통 베이스
agent-ops/rules/project/domain/cli/rules.md:21:- `apps/runner/lib/cli/commands/command_manager.dart` — CLI 커맨드 라우팅
agent-ops/rules/project/domain/cli/rules.md:22:- `apps/runner/lib/cli/commands/command_const.dart` — OS별 설치 경로 상수
agent-ops/rules/project/domain/cli/rules.md:23:- `apps/runner/lib/cli/commands/command_exe.dart` — `exe` 명령과 `Application.build()` 진입
agent-ops/rules/project/domain/cli/rules.md:24:- `apps/runner/lib/cli/commands/command_catalog.dart` — 등록된 OTO 커맨드 catalog 출력 명령
agent-ops/rules/project/domain/cli/rules.md:25:- `apps/runner/lib/cli/commands/command_validate.dart` — YAML 구조/의미 검증 명령
agent-ops/rules/project/domain/cli/rules.md:26:- `apps/runner/lib/cli/commands/command_template.dart` — 템플릿 출력
agent-ops/rules/project/domain/cli/rules.md:27:- `apps/runner/lib/cli/commands/command_start.dart` — 시작/중지 커맨드
agent-ops/rules/project/domain/cli/rules.md:28:- `apps/runner/lib/cli/commands/command_install.dart` — 설치/제거 명령
agent-ops/rules/project/domain/cli/rules.md:29:- `apps/runner/lib/cli/commands/install/` — PATH 등록 등 설치 보조 로직
agent-ops/rules/project/domain/cli/rules.md:30:- `apps/runner/lib/resources.resource_importer.dart` — 설치/패키징 asset용 `resource_importer` 생성 파일
agent-ops/rules/project/domain/cli/rules.md:31:- `apps/runner/assets/package/` — 배포/패키징 보조 파일
agent-ops/rules/project/domain/cli/rules.md:32:- `apps/runner/assets/bin/` — 설치 또는 패키징에 포함되는 보조 바이너리
agent-ops/rules/project/domain/cli/rules.md:33:- `apps/runner/assets/script/` — 빌드/패키징/실행 보조 스크립트. Jenkins env helper는 core 경계도 함께 확인
agent-ops/rules/project/domain/cli/rules.md:37:- `apps/runner/lib/oto/` — 비즈니스 로직·파이프라인 엔진 (cli는 진입만 담당)
agent-ops/rules/project/domain/cli/rules.md:38:- `apps/runner/lib/cli/commands/command_agent.dart` — OTO Edge agent 실행 명령 (`agent` 도메인)
agent-ops/rules/project/domain/cli/rules.md:39:- `apps/runner/lib/cli/commands/command_scheduler.dart` — scheduler 명령 파싱과 등록/실행 진입점 (`scheduler` 도메인)
agent-ops/rules/project/domain/cli/rules.md:40:- `apps/runner/lib/cli/commands/scheduler/` — 스케줄러 실행/등록/OS별 백그라운드 처리 (`scheduler` 도메인)
agent-ops/rules/project/domain/cli/rules.md:41:- `apps/runner/lib/oto/agent/` — agent 설정/등록/Edge 통신 (`agent` 도메인)
agent-ops/rules/project/domain/cli/rules.md:42:- `apps/runner/assets/script/shell/oto_agent_bootstrap.sh` — agent 설치/실행 bootstrap (`agent` 도메인)
agent-ops/rules/project/domain/cli/rules.md:43:- `apps/runner/assets/template/` — 커맨드 실행 중 사용하는 템플릿 (`command` 도메인)
agent-ops/rules/project/domain/cli/rules.md:60:- `apps/runner/bin/main.dart` — CLI 초기화 시 등록할 top-level 명령 목록을 정의
agent-ops/rules/project/domain/cli/rules.md:65:- top-level 명령 등록은 `apps/runner/bin/main.dart`의 `CLI.initialize(..., [Command...])` 목록에서 관리
agent-ops/rules/project/domain/cli/rules.md:70:- CLI 변경 후 `dart analyze`를 실행하고, CLI 진입 변경이면 최소 `dart run apps/runner/bin/main.dart` 수준의 스모크 실행 가능 여부를 확인
agent-ops/rules/project/domain/cli/rules.md:78:- **scheduler**: `CommandScheduler`, `apps/runner/lib/cli/commands/command_scheduler.dart`, `apps/runner/lib/cli/commands/scheduler/**`는 scheduler 도메인이다. 일반 CLI 변경에서 scheduler 내부 동작을 함께 수정하지 않는다
agent-ops/rules/project/domain/cli/rules.md:79:- **framework**: `apps/runner/bin/main.dart`는 외부 framework Application을 소비하지만 framework 의존성 자체는 framework 도메인에서 다룬다
agent-ops/rules/project/domain/command/rules.md:16:- `apps/runner/lib/oto/commands/` — 커맨드 구현체 (카테고리별 하위 폴더)
agent-ops/rules/project/domain/command/rules.md:17:- `apps/runner/lib/oto/data/` — 커맨드 파라미터 데이터 모델 (`*_data.dart`, `*.g.dart`). `pipeline_data.dart`는 pipeline 도메인
agent-ops/rules/project/domain/command/rules.md:18:- `apps/runner/assets/template/` — 커맨드 실행 중 사용하는 템플릿 파일
agent-ops/rules/project/domain/command/rules.md:22:- `apps/runner/lib/oto/pipeline/` — 실행 흐름 제어 (커맨드 dispatch 이전)
agent-ops/rules/project/domain/command/rules.md:23:- `apps/runner/lib/oto/core/` — 태그 치환, 데이터 합성 (커맨드 실행 이전)
agent-ops/rules/project/domain/command/rules.md:24:- `apps/runner/lib/oto/data/pipeline_data.dart` — workflow/조건/반복 데이터 모델 (`pipeline` 도메인)
agent-ops/rules/project/domain/command/rules.md:25:- `apps/runner/assets/yaml/sample/` — YAML 사용 예시 (`sample` 도메인)
agent-ops/rules/project/domain/command/rules.md:44:| build | `apps/runner/lib/oto/commands/build/` | `apps/runner/lib/oto/data/build_data.dart` |
agent-ops/rules/project/domain/command/rules.md:45:| file | `apps/runner/lib/oto/commands/file/` | `apps/runner/lib/oto/data/file_data.dart` |
agent-ops/rules/project/domain/command/rules.md:46:| git / GitHub | `apps/runner/lib/oto/commands/git/` | `apps/runner/lib/oto/data/git_data.dart` |
agent-ops/rules/project/domain/command/rules.md:47:| ftp / web | `apps/runner/lib/oto/commands/ftp/`, `apps/runner/lib/oto/commands/web/` | `apps/runner/lib/oto/data/network_data.dart` |
agent-ops/rules/project/domain/command/rules.md:48:| notification | `apps/runner/lib/oto/commands/notification/`, `apps/runner/lib/oto/utils/mattermost/` | `apps/runner/lib/oto/data/notification_data.dart` |
agent-ops/rules/project/domain/command/rules.md:49:| jira / jenkins | `apps/runner/lib/oto/commands/jira/`, `apps/runner/lib/oto/commands/jenkins/` | `apps/runner/lib/oto/data/integration_data.dart`, `apps/runner/lib/oto/data/jira_data.dart` |
agent-ops/rules/project/domain/command/rules.md:50:| infra / external tool | `apps/runner/lib/oto/commands/aws/`, `docker/`, `gradle/`, `infra/`, `proto/` | `apps/runner/lib/oto/data/infra_data.dart`, `apps/runner/lib/oto/data/util_data.dart` |
agent-ops/rules/project/domain/command/rules.md:51:| shell / process / util | `apps/runner/lib/oto/commands/shell/`, `process/`, `util/` | `apps/runner/lib/oto/data/util_data.dart` |
agent-ops/rules/project/domain/command/rules.md:57:| `apps/runner/assets/template/index.html` | iOS publish HTML 템플릿 |
agent-ops/rules/project/domain/command/rules.md:58:| `apps/runner/assets/template/manifest.plist` | iOS publish manifest 템플릿 |
agent-ops/rules/project/domain/command/rules.md:71:- 커맨드 추가/파라미터 변경 시 관련 `apps/runner/assets/yaml/sample/**`와 README 커맨드 목록 갱신 필요 여부를 확인한다
agent-ops/rules/project/domain/command/rules.md:72:- 커맨드가 `apps/runner/assets/template/**`를 읽거나 출력 형식에 의존하면 템플릿 경로와 placeholder 계약을 함께 확인한다
agent-ops/rules/project/domain/core/rules.md:16:- `apps/runner/lib/oto/application.dart` — 싱글턴 오케스트레이터 (BuildType enum, 빌드 진입점)
agent-ops/rules/project/domain/core/rules.md:17:- `apps/runner/lib/oto/core/` — 태그 시스템, 데이터 합성, 정의 데이터
agent-ops/rules/project/domain/core/rules.md:18:- `apps/runner/lib/oto/utils/` — 공통 유틸리티 (Mattermost 등 재사용 헬퍼)
agent-ops/rules/project/domain/core/rules.md:19:- `apps/runner/assets/script/batch/jenkins_env_params.bat` — Jenkins 환경 변수 합성에 쓰이는 Windows helper script
agent-ops/rules/project/domain/core/rules.md:20:- `apps/runner/assets/script/shell/jenkins_env_params.sh` — Jenkins 환경 변수 합성 helper script
agent-ops/rules/project/domain/core/rules.md:24:- `apps/runner/lib/oto/pipeline/` — 실행 흐름 (core 처리 이후)
agent-ops/rules/project/domain/core/rules.md:25:- `apps/runner/lib/oto/commands/` — 커맨드 구현체 (core 결과물을 소비)
agent-ops/rules/project/domain/core/rules.md:26:- `apps/runner/lib/oto/agent/` — OTO Edge agent 설정/등록/통신 (`agent` 도메인)
agent-ops/rules/project/domain/core/rules.md:27:- `apps/runner/assets/script/`의 빌드/패키징 보조 스크립트 — CLI/배포 보조 asset이며 core가 직접 해석하지 않는다
agent-ops/rules/project/domain/framework/rules.md:11:현재 프로젝트에는 `lib/framework/` 모듈이 없다.
agent-ops/rules/project/domain/framework/rules.md:13:단, 전용 도메인 규칙(dedicated domain rule)이 아직 존재하지 않는 `apps/client/lib/**`, `packages/flutter/oto_console/lib/**`, `services/core/internal/**` 등의 구현 코드가 가진 구체적인 비즈니스 동작 규칙은 이 framework 도메인이나 기존 runner 도메인 규칙으로 무리하게 확장하여 단정하지 않고, 추후 별도 도메인 규칙 생성 또는 후속 milestone 작업을 통해 정리한다.
agent-ops/rules/project/domain/framework/rules.md:27:- `lib/framework/` — 제거된 로컬 모듈. 새로 만들지 않는다
agent-ops/rules/project/domain/framework/rules.md:28:- `apps/runner/lib/oto/` — OTO 비즈니스 로직 (framework 위에서 동작)
agent-ops/rules/project/domain/framework/rules.md:29:- `apps/runner/lib/cli/` — CLI 레이어 (framework를 소비)
agent-ops/rules/project/domain/framework/rules.md:33:- `dart_framework/core/application.dart` — `apps/runner/bin/main.dart`에서 앱 진입 래퍼로 사용
agent-ops/rules/project/domain/framework/rules.md:40:- `resource_importer` — `apps/runner/lib/resources.resource_importer.dart` 생성 파일과 asset 임베딩 설정
agent-ops/rules/project/domain/framework/rules.md:49:- 로컬에 `lib/framework/`를 되살리는 대신 필요한 OTO 로직은 `apps/runner/lib/oto/` 또는 `apps/runner/lib/cli/`의 해당 도메인에 둔다
agent-ops/rules/project/domain/framework/rules.md:53:- **core**: `apps/runner/lib/oto/application.dart`는 OTO 오케스트레이터이며 외부 framework의 Application과 별개다
agent-ops/rules/project/domain/framework/rules.md:60:- `lib/framework/` 디렉터리를 새로 만들지 않는다
agent-ops/rules/project/domain/pipeline/rules.md:16:- `apps/runner/lib/oto/pipeline/` — 파이프라인 실행 엔진 전체
agent-ops/rules/project/domain/pipeline/rules.md:17:- `apps/runner/lib/oto/data/pipeline_data.dart` — workflow, 조건, 반복, switch 등 pipeline 데이터 모델
agent-ops/rules/project/domain/pipeline/rules.md:21:- `apps/runner/lib/oto/commands/` — 실제 커맨드 구현체 (pipeline은 dispatch만 한다)
agent-ops/rules/project/domain/pipeline/rules.md:22:- `apps/runner/lib/oto/core/` — 태그 치환·데이터 합성 (pipeline 이전 단계)
agent-ops/rules/project/domain/pipeline/rules.md:43:- 새 흐름 제어 유형은 `Pipeline.exeMap`에 등록하고, 필요한 데이터 모델은 `apps/runner/lib/oto/data/pipeline_data.dart`에 둔다
agent-ops/rules/project/domain/pipeline/rules.md:53:- **sample**: workflow 문법 변경 시 `apps/runner/assets/yaml/sample/02_*`~`05_*`와 README 흐름 제어 예시를 함께 점검
agent-ops/rules/project/domain/sample/rules.md:17:- `apps/runner/assets/yaml/sample/` — 카테고리별 샘플 YAML 파일
agent-ops/rules/project/domain/sample/rules.md:21:- `apps/runner/assets/yaml/example/` — 현재 tracked 샘플 파일은 없으며 샘플 작성 기준으로 사용하지 않는다
agent-ops/rules/project/domain/sample/rules.md:22:- `apps/runner/assets/templates/` — 현재 tracked 템플릿 파일은 없으며 샘플 작성 기준으로 사용하지 않는다
agent-ops/rules/project/domain/sample/rules.md:23:- 루트/`apps/runner/assets/` 하위의 구형 테스트 YAML/XML (`build_*.yaml`, `slack_test.yaml`, `pipeline-test*.yaml`, `scheduler*.yaml`, `assets/config.xml`, `assets/example.yaml`)은 현재 형상과 맞지 않아 제거됨
agent-ops/rules/project/domain/sample/rules.md:27:- `apps/runner/lib/oto/data/` — 실제 파라미터 모델은 command 도메인
agent-ops/rules/project/domain/scheduler/rules.md:16:- `apps/runner/lib/cli/commands/command_scheduler.dart` — `scheduler` CLI 명령 파싱과 진입점
agent-ops/rules/project/domain/scheduler/rules.md:17:- `apps/runner/lib/cli/commands/scheduler/` — 스케줄러 등록/해제/실행/OS별 구현
agent-ops/rules/project/domain/scheduler/rules.md:18:- `apps/runner/lib/cli/commands/scheduler/data/` — 스케줄러 설정 JSON 직렬화 모델
agent-ops/rules/project/domain/scheduler/rules.md:22:- `apps/runner/lib/cli/cli.dart` — 일반 CLI 출력/명령 라우팅 (`cli` 도메인)
agent-ops/rules/project/domain/scheduler/rules.md:23:- `apps/runner/lib/cli/commands/command_exe.dart` — 파이프라인 실행 isolate 진입 (`cli` 도메인). 단, scheduler가 실행을 위임한다
agent-ops/rules/project/domain/scheduler/rules.md:24:- `apps/runner/lib/oto/pipeline/` — 실제 파이프라인 실행 흐름 (`pipeline` 도메인)
agent-ops/rules/project/domain/scheduler/rules.md:25:- `apps/runner/lib/oto/commands/` — 실제 커맨드 실행 (`command` 도메인)
agent-ops/rules/project/domain/scheduler/rules.md:50:- **sample**: scheduler YAML 예시는 `apps/runner/assets/yaml/sample/12_scheduler.yaml`에서 관리한다

$ git diff --check
(exit code: 0, no 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.

## 코드리뷰 결과

- 종합 판정: PASS
- 차원별 평가
  - correctness: Pass
  - completeness: Pass
  - test coverage: Pass
  - API contract: Pass
  - code quality: Pass
  - plan deviation: Pass
  - verification trust: Pass
- 발견된 문제
  - Nit: `agent-ops/rules/project/domain/command/rules.md:50`의 command 하위 경로 일부가 `docker/`, `gradle/`처럼 축약되어 있어 리뷰 중 전체 `apps/runner/lib/oto/commands/...` 경로로 직접 보정했다. 기능/API 영향 없음.
- 리뷰 검증
  - `rg --sort path -n 'lib/|bin/main|assets/' agent-ops/rules/project/domain`: 남은 항목은 `apps/runner/...` 또는 명시된 legacy/external exception으로 확인.
  - `rg --sort path -n '\`(lib|bin|assets|test|pubspec\.yaml|analysis_options\.yaml|go\.mod|proto)/|\`(pubspec\.yaml|analysis_options\.yaml)\`' agent-ops/rules/project/domain agent-ops/rules/project/rules.md`: stale root path 후보가 의도된 `lib/framework/`, root `proto/`, 일반 manifest 이름, `test/**` 설명, legacy sample 설명뿐임을 확인.
  - 대표 domain mapping 경로 존재 여부 확인: `apps/runner/bin/main.dart`, runner lib/assets, package manifests, `services/core/go.mod`, `proto/` 모두 존재.
  - `git diff --check`: 성공, 출력 없음.
- 다음 단계: PASS이므로 active plan/review를 `.log`로 아카이브하고 `complete.log` 작성 후 task directory를 archive로 이동한다.
