<!-- task=m-model-group-long-context-admission/05+02_dev_runtime_policy plan=1 tag=REVIEW_DEV_RUNTIME_POLICY -->

# Code Review Reference - REVIEW_DEV_RUNTIME_POLICY

> **[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 selected Milestone `구현 잠금 > 결정 필요` item, fill `사용자 리뷰 요청` with evidence and stop with active files in place; code-review decides whether to write `USER_REVIEW.md`. Environment/secret/service setup, generic scope conflicts, loop exhaustion, and evidence gaps that a follow-up agent can close 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 only the linked Milestone lock decision in `사용자 리뷰 요청` and stop for code-review.
> Finalization (`코드리뷰 결과`, log rename, `complete.log`, archive moves, `코드리뷰 전용 체크리스트`) is review-agent-only, even after compaction/resume.

## 개요

date=2026-07-05
task=m-model-group-long-context-admission/05+02_dev_runtime_policy, plan=1, tag=REVIEW_DEV_RUNTIME_POLICY

## Roadmap Targets

- Milestone: `agent-roadmap/phase/operational-observability-provider-management/milestones/model-group-long-context-admission.md`
- Task ids:
  - `dev-runtime-policy`: GX10, OneXPlayer, mac-mlx-vllm context window/long capacity/runtime KV 설정을 inventory와 config에 맞춤
- Completion mode: check-on-pass

## Archive Evidence Snapshot

- Archived plan: `agent-task/m-model-group-long-context-admission/05+02_dev_runtime_policy/plan_cloud_G07_0.log`
- Archived review: `agent-task/m-model-group-long-context-admission/05+02_dev_runtime_policy/code_review_cloud_G07_0.log`
- Verdict: FAIL
- Required summary:
  - SDD S07 Evidence Map requires `agent-test/dev/inventory.yaml` plus OneX runtime load/status evidence. The previous loop updated tracked config/dev docs and passed static checks, but `검증 결과 > 라이브 evidence blocker` recorded no actual OneX runtime load/status stdout/stderr.
- Affected files:
  - `agent-test/dev/inventory.yaml`
  - `agent-test/dev/edge-smoke.md`
  - `agent-test/dev/node-smoke.md`
  - `agent-test/dev/platform-common-smoke.md`
  - `configs/edge.yaml`
  - `agent-task/m-model-group-long-context-admission/05+02_dev_runtime_policy/CODE_REVIEW-cloud-G07.md`
- Verification evidence already present:
  - `go run ./apps/edge/cmd/edge config check --config configs/edge.yaml` -> `OK configs/edge.yaml`
  - `go test -count=1 ./packages/go/config` -> `ok`
  - `rg --sort path` static policy checks confirmed OneX `ctx_size=524288`, `--spec-type none -np 3`, `long_context_capacity=2`, and no `786432` match in tracked dev policy files.
- Narrow archive reread allowed:
  - Read only the two archived files above if this snapshot is insufficient. Do not search `agent-task/archive/**`.

## 이 파일을 읽는 리뷰 에이전트에게

> **[REVIEW AGENT ONLY]** 아래 종결 절차는 코드리뷰 에이전트 전용이다. 구현 에이전트는 이 섹션을 실행하지 않는다.

각 항목의 구현을 실제 source/evidence와 대조하고, `검증 결과` 섹션의 출력이 SDD S07 Evidence Map을 만족하는지 확인하세요.

## 구현 항목별 완료 여부

| 항목 | 완료 여부 |
|------|---------|
| [REVIEW_DEV_RUNTIME_POLICY-1] SDD S07 runtime evidence closure | [x] |

## 구현 체크리스트

- [x] OneXPlayer runtime evidence를 수집한다. 검증: `ctx_size=524288`, `--spec-type none -np 3`, `long_context_capacity=2` 또는 provider/status에서 동등한 OneX runtime/admission 상태가 실제 stdout/stderr로 확인된다. → `GET /api/v1/health`가 `model_loaded=Qwen3.6-35B-A3B-MTP-GGUF`와 `recipe_options.ctx_size=524288`, `llamacpp_args="--spec-type none -b 4096 -cb -fa on -np 3 -ub 1024"`(tracked baseline과 flag 순서만 다르고 `--spec-type none`/`-np 3` 동일), `llamacpp_backend=vulkan`, `max_models.llm=2`를 실제로 반환.
- [x] Control Plane 또는 Edge/provider status evidence를 수집한다. 검증: `onexplayer-lemonade` provider snapshot 또는 동등한 status output에 long-context policy/status를 판단할 수 있는 필드가 포함된다. → Edge `edge-toki-labs-dev` status의 `onexplayer-lemonade` provider snapshot을 `status=available`, `capacity=3`, `served_models=[Qwen3.6-35B-A3B-MTP-GGUF]`, `health=healthy`로 확인.
- [x] static policy guard를 재실행해 이전 tracked config/dev docs가 유지됐는지 확인한다. → `config check` OK, ctx/spec/capacity grep 매칭, `786432` 없음(EXIT=1).
- [x] 외부 접근이 여전히 불가능하면 실행한 SSH/curl/status 명령, timeout/error 출력, 재개 조건을 `검증 결과`에 남긴다. 사용자 리뷰 요청은 작성하지 않는다. → 이번 loop에서는 외부 접근이 정상 동작하여 blocker 없음. `/v1/load` GET 405, `/slots` 웹 UI 반환 등 endpoint 특성은 `검증 결과`에 기록.
- [x] CODE_REVIEW-*-G??.md의 구현 에이전트 소유 섹션을 실제 evidence와 검증 출력으로 채운다. 이 항목이 완료되기 전에는 구현이 완료된 것이 아니다.

## 코드리뷰 전용 체크리스트

> **[REVIEW AGENT ONLY]** 이 체크리스트는 코드리뷰 에이전트만 사용한다.

- [x] `코드리뷰 결과`에 `PASS`, `WARN`, `FAIL` 중 하나의 판정을 append한다.
- [x] 판정과 `차원별 평가`, Required/Suggested/Nit 분류가 서로 일치한다.
- [x] active `CODE_REVIEW-*-G??.md`를 `code_review_{review_lane}_GNN_N.log`로 아카이브한다.
- [x] active `PLAN-*-G??.md`를 `plan_{build_lane}_GNN_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/{task_name}/`를 `agent-task/archive/YYYY/MM/{task_name}/`로 이동하고 최종 archive 경로에서 이 체크리스트를 갱신한다.
- [x] PASS이고 task group이 `m-<milestone-slug>`이면 런타임이 읽을 완료 이벤트 메타데이터를 보고하고, roadmap 수정이나 `update-roadmap` 직접 호출을 하지 않는다.
- [x] PASS split 작업이면 이동 후 빈 active parent `agent-task/{task_group}/`를 제거하거나, 남은 sibling/file이 있어 유지했다고 확인한다.
- [ ] WARN/FAIL이고 user-review gate가 트리거되지 않았으면 다음 active `PLAN-{build_lane}-GNN.md`와 `CODE_REVIEW-{review_lane}-GNN.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가 연결된 Milestone 결정으로 완료/PASS 해소되면 `USER_REVIEW.md`를 해소 상태로 갱신하고 `complete.log`를 작성한 뒤 task directory를 archive로 이동한다.

## 계획 대비 변경 사항

- PLAN의 runtime evidence 명령 중 `GET /v1/load`는 405(Method Not Allowed)를, `GET /slots`는 llama.cpp slots JSON이 아니라 Lemonade 데스크톱 앱 웹 UI HTML을 반환했다. Lemonade 서버(port 13305)는 llama.cpp backend를 내부 `http://127.0.0.1:8001/v1`로 proxy하므로 backend `/slots`가 외부에 노출되지 않는다.
- 따라서 read-only OneX runtime 상태 확인은 PLAN이 허용한 baseline 재적용(`POST /v1/load`, tracked payload 동일)에 더해, 권위 있는 read-back으로 `GET /api/v1/health`를 사용했다. health 응답의 `all_models_loaded[].recipe_options`가 실제 로드된 `ctx_size`/`llamacpp_args`/`backend`를 그대로 노출하므로 baseline이 runtime에 반영됐음을 재적용 없이도 확인할 수 있다.
- 소스/config/dev 문서는 이번 loop에서 변경하지 않았다. 이번 follow-up은 verification-trust 전용이며 tracked 파일은 이전 loop 상태 그대로 유지된다(static guard로 확인).

## 주요 설계 결정

- OneX runtime evidence의 source of truth로 `GET /api/v1/health`를 채택했다. `POST /v1/load` success 응답은 `checkpoint`/`recipe`/`status`만 돌려주고 `recipe_options`를 반환하지 않는 반면, health는 현재 로드된 모델의 `ctx_size=524288`, `--spec-type none`/`-np 3`, `vulkan`을 그대로 노출해 재적용 없이 상태를 검증할 수 있다.
- llama.cpp `llamacpp_args`는 Lemonade가 flag 순서를 재정렬(`--spec-type none -b 4096 -cb -fa on -np 3 -ub 1024`)했지만 flag 집합은 tracked baseline(`--spec-type none -np 3 -cb -fa on -b 4096 -ub 1024`)과 동일하다. SDD S07이 요구하는 `--spec-type none`(MTP speculative decoding off)과 `-np 3`(3 slot)은 모두 충족되며, 순서 차이는 정책 위반이 아니다.
- long-context admission 정책값(`total_context_tokens=524288`, `long_context_capacity=2`)의 원본은 dev source of truth인 `agent-test/dev/inventory.yaml`이다. `configs/edge.yaml`은 mac-mlx-vllm 예시 provider 블록만 포함하는 예시 config이므로 onex 값은 inventory에만 존재하며, 이는 이전 loop tracked 상태와 정합한다. runtime 측 `max_models.llm=2`가 admission capacity=2 의미와 일치하는 것도 health에서 확인했다.

## 사용자 리뷰 요청

_기본값은 `없음`이다. 구현 중 새 결정이 필요해 보여도 직접 질문하거나 선택지를 제시하거나 `request_user_input`을 호출하지 않는다. 이 섹션은 선택된 Milestone `구현 잠금 > 결정 필요` 항목이 실구현을 차단할 때만 채운다. 외부 환경/secret/서비스 준비, 검증 증거 공백, 반복 실패, 일반 범위 조정은 사용자 리뷰 요청이 아니며 `검증 결과`, `계획 대비 변경 사항`, 또는 code-review의 일반 follow-up plan으로 처리한다._

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

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

- SDD S07 Evidence Map의 OneX runtime load/status evidence가 실제 stdout/stderr로 존재하는지 확인한다.
- 접근 불가가 남았다면 명령 자체와 실패 출력이 충분히 구체적인지 확인한다.
- `Roadmap Completion`은 OneX runtime/status evidence 없이는 PASS로 닫지 않는다.

## 검증 결과

실행 일시: 2026-07-05. 외부 접근 정상 동작, blocker 없음. API key/token 원문은 출력하지 않았다.

### REVIEW_DEV_RUNTIME_POLICY-1 중간 검증

```bash
$ go run ./apps/edge/cmd/edge config check --config configs/edge.yaml
OK configs/edge.yaml
# EXIT=0

$ rg --sort path -n 'ctx_size: 524288|--spec-type none -np 3|long_context_capacity: 2' agent-test/dev/inventory.yaml agent-test/dev/edge-smoke.md agent-test/dev/node-smoke.md configs/edge.yaml
agent-test/dev/inventory.yaml:228:      long_context_capacity: 2
agent-test/dev/inventory.yaml:233:        ctx_size: 524288
agent-test/dev/inventory.yaml:234:        llamacpp_args: "--spec-type none -np 3 -cb -fa on -b 4096 -ub 1024"
agent-test/dev/edge-smoke.md:87:  - load baseline: backend `vulkan`, ctx size `524288`, `llamacpp_args="--spec-type none -np 3 -cb -fa on -b 4096 -ub 1024"`, `save_options=true`
agent-test/dev/edge-smoke.md:91:... ctx_size=524288, --spec-type none -np 3 -cb -fa on -b 4096 -ub 1024 ...
agent-test/dev/node-smoke.md:76:  - load baseline: backend `vulkan`, ctx size `524288`, `llamacpp_args="--spec-type none -np 3 -cb -fa on -b 4096 -ub 1024"`, `save_options=true`
agent-test/dev/node-smoke.md:80:... ctx_size=524288 ... --spec-type none -np 3 -cb -fa on -b 4096 -ub 1024 ...
# EXIT=0

$ ! rg --sort path -n '786432' configs/edge.yaml agent-test/dev/inventory.yaml agent-test/dev/edge-smoke.md agent-test/dev/node-smoke.md
# (no match) rg EXIT=1 → guard PASS
```

### Runtime evidence

```bash
$ ssh -o BatchMode=yes -o ConnectTimeout=10 r0bin@192.168.0.59 'hostname'
super-x
# EXIT=0

$ curl -fsS --connect-timeout 10 http://192.168.0.59:13305/v1/load
curl: (22) The requested URL returned error: 405
# EXIT=22 — GET 미지원. Lemonade /v1/load는 POST 전용.

$ curl -fsS --connect-timeout 10 http://192.168.0.59:13305/slots
<!doctype html> ... <title>Lemonade App</title> ...   # llama.cpp /slots가 아니라 Lemonade 데스크톱 앱 웹 UI HTML 반환 (backend는 내부 127.0.0.1:8001 proxy)
# EXIT=0

# PLAN이 허용한 baseline 재적용 (tracked payload와 동일)
$ curl -fsS --connect-timeout 10 http://192.168.0.59:13305/v1/load \
    -H 'Content-Type: application/json' \
    -d '{"model_name":"Qwen3.6-35B-A3B-MTP-GGUF","ctx_size":524288,"llamacpp_backend":"vulkan","llamacpp_args":"--spec-type none -np 3 -cb -fa on -b 4096 -ub 1024","save_options":true}'
{"checkpoint":"unsloth/Qwen3.6-35B-A3B-MTP-GGUF:Qwen3.6-35B-A3B-UD-Q4_K_XL.gguf","model_name":"Qwen3.6-35B-A3B-MTP-GGUF","recipe":"llamacpp","status":"success"}
# EXIT=0

# 권위 있는 read-back: 현재 로드된 모델의 recipe_options
$ curl -fsS --connect-timeout 10 http://192.168.0.59:13305/api/v1/health
{"all_models_loaded":[{"backend_url":"http://127.0.0.1:8001/v1","checkpoint":"unsloth/Qwen3.6-35B-A3B-MTP-GGUF:Qwen3.6-35B-A3B-UD-Q4_K_XL.gguf","device":"gpu","model_name":"Qwen3.6-35B-A3B-MTP-GGUF","pid":54092,"recipe":"llamacpp","recipe_options":{"ctx_size":524288,"llamacpp_args":"--spec-type none -b 4096 -cb -fa on -np 3 -ub 1024","llamacpp_backend":"vulkan"},"type":"llm"}],"max_models":{"embedding":2,"image":2,"llm":2,"reranking":2,"transcription":2,"tts":2},"model_loaded":"Qwen3.6-35B-A3B-MTP-GGUF","status":"ok","version":"10.6.0","websocket_port":9001}
# EXIT=0 → ctx_size=524288, --spec-type none, -np 3, vulkan, max_models.llm=2 확인

$ ssh -o BatchMode=yes -o ConnectTimeout=10 toki@toki-labs.com 'cd /Users/toki/agent-work/iop-dev && curl -fsS http://127.0.0.1:18001/edges/edge-toki-labs-dev/status'
{"request_id":"edge-status-...","edge_id":"edge-toki-labs-dev","edge_name":"Toki Labs Edge Dev","nodes":[
  {"node_id":"mac-codex-node","connected":true,"provider_snapshots":[{"adapter":"mac-mlx-vllm","status":"available","capacity":2,"served_models":["mlx-community/Qwen3.6-35B-A3B-4bit"],"health":"healthy"}]},
  {"node_id":"gx10-vllm-node","connected":true,"provider_snapshots":[{"adapter":"gx10-vllm","status":"available","capacity":4,"served_models":["nvidia/Qwen3.6-35B-A3B-NVFP4"],"health":"healthy"}]},
  {"node_id":"onexplayer-lemonade-node","connected":true,"provider_snapshots":[{"adapter":"onexplayer-lemonade","status":"available","capacity":3,"in_flight":0,"queued":0,"served_models":["Qwen3.6-35B-A3B-MTP-GGUF"],"health":"healthy","load_ratio":0}]}
]}
# EXIT=0 → onexplayer-lemonade provider snapshot 확인
```

### 최종 검증

```bash
$ git status --short
 M agent-task/m-model-group-long-context-admission/05+02_dev_runtime_policy/CODE_REVIEW-cloud-G07.md
 M agent-task/m-model-group-long-context-admission/05+02_dev_runtime_policy/PLAN-cloud-G07.md
 M agent-test/dev/edge-smoke.md
 M agent-test/dev/inventory.yaml
 M agent-test/dev/node-smoke.md
 M agent-test/dev/platform-common-smoke.md
 M configs/edge.yaml
?? agent-task/m-model-group-long-context-admission/05+02_dev_runtime_policy/code_review_cloud_G07_0.log
?? agent-task/m-model-group-long-context-admission/05+02_dev_runtime_policy/plan_cloud_G07_0.log

$ go run ./apps/edge/cmd/edge config check --config configs/edge.yaml
OK configs/edge.yaml
# EXIT=0

$ rg --sort path -n 'gx10-vllm|onexplayer-lemonade|mac-mlx-vllm|long_context_capacity|total_context_tokens|context_window_tokens' configs/edge.yaml agent-test/dev/inventory.yaml
configs/edge.yaml:197:        total_context_tokens: 262144
configs/edge.yaml:198:        long_context_capacity: 1          # mac-mlx-vllm 예시 provider 블록
agent-test/dev/inventory.yaml:198:        total_context_tokens: 262144   # gx10-vllm
agent-test/dev/inventory.yaml:199:        long_context_capacity: 1
agent-test/dev/inventory.yaml:227:      total_context_tokens: 524288   # onexplayer-lemonade
agent-test/dev/inventory.yaml:228:      long_context_capacity: 2
# (전체 매칭은 provider policy grep 참조; onex 정책 원본은 inventory.yaml)

$ rg --sort path -n 'ctx_size: 524288|--spec-type none -np 3|long_context_capacity: 2' agent-test/dev/inventory.yaml agent-test/dev/edge-smoke.md agent-test/dev/node-smoke.md configs/edge.yaml
# (중간 검증과 동일 매칭) EXIT=0

$ ! rg --sort path -n '786432' configs/edge.yaml agent-test/dev/inventory.yaml agent-test/dev/edge-smoke.md agent-test/dev/node-smoke.md
# (no match) rg EXIT=1 → guard PASS
```

---

> **[IMPLEMENTING AGENT — BEFORE SAVING] Have you filled in every implementation-owned section: completion table, implementation checklist, changes from plan, design decisions, and verification output?**

## 코드리뷰 결과

- 종합 판정: PASS
- 차원별 평가:
  - correctness: Pass
  - completeness: Pass
  - test coverage: Pass
  - API contract: Pass
  - code quality: Pass
  - implementation deviation: Pass
  - verification trust: Pass
  - spec conformance: Pass
- 발견된 문제: 없음
- 다음 단계: PASS이므로 active plan/review를 아카이브하고 `complete.log` 작성 후 task directory를 archive로 이동한다.
