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

# Plan - DEV_RUNTIME_POLICY

## 이 파일을 읽는 구현 에이전트에게

이 task는 `02+01_long_capacity`의 `complete.log`가 생긴 뒤 시작한다. Dev runtime policy는 config/docs/inventory와 외부 runtime assumptions가 맞물리므로 검증 evidence를 review stub에 자세히 남긴다. 환경 접근 불가, remote host 미가동, secret 부족은 사용자 리뷰 요청이 아니라 검증 blocker다. selected Milestone lock decision이 없으면 직접 사용자에게 묻지 않는다.

## 배경

Milestone은 dev provider pool의 context/KV policy를 SDD 기준과 일치시켜야 한다. 특히 OneXPlayer는 `ctx_size=524288`, `long_context_capacity=2`, `-np 3`을 유지하고 `786432`로 키우지 않는 것이 잠금 해제된 결정이다. 이 작업은 config, dev inventory, smoke 문서의 runtime policy를 같은 언어로 맞춘다.

## 사용자 리뷰 요청 흐름

사용자 리뷰 요청은 Milestone `구현 잠금 > 결정 필요` 항목이 실구현을 막을 때만 active review stub에 기록한다. 외부 dev host 접속 실패나 runtime process 부재는 `검증 결과` 또는 follow-up plan 대상이다.

## 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

## 분석 결과

### 읽은 파일

- `agent-roadmap/phase/operational-observability-provider-management/milestones/model-group-long-context-admission.md`
- `agent-roadmap/sdd/operational-observability-provider-management/model-group-long-context-admission/SDD.md`
- `agent-test/local/rules.md`
- `agent-test/local/edge-smoke.md`
- `agent-test/dev/rules.md`
- `agent-test/dev/edge-smoke.md`
- `agent-test/dev/node-smoke.md`
- `agent-test/dev/platform-common-smoke.md`
- `agent-test/dev/inventory.yaml`
- `agent-ops/skills/common/plan/SKILL.md`
- `packages/go/config/config.go`
- `configs/edge.yaml`

### SDD 기준

- SDD: `agent-roadmap/sdd/operational-observability-provider-management/model-group-long-context-admission/SDD.md`, 상태 `[승인됨]`.
- 대상 Acceptance: S07 / Milestone Task `dev-runtime-policy`.
- Evidence Map: `agent-test/dev/inventory.yaml`, OneX runtime load/status evidence.
- 적용: local config check와 deterministic text evidence를 필수로 하고, 실제 runtime evidence는 가능할 때 review stub에 붙인다.

### 테스트 환경 규칙

- 기본 test_env는 local로 보며 `agent-test/local/rules.md`를 적용한다.
- dev runtime policy 확인을 위해 `agent-test/dev/*` profiles와 inventory를 추가 컨텍스트로 읽었다.
- 외부 verification preflight:
  - runner/workdir: 현재 checkout `/config/workspace/iop`.
  - branch/dirty state: 구현 시 `git status --short` 기록.
  - config path: `configs/edge.yaml`.
  - external hosts: `gx10-vllm`, `onexplayer-lemonade`, `mac-mlx-vllm`은 `agent-test/dev/inventory.yaml` 기준.
  - required setup: 외부 host 접속이 안 되면 blocker를 기록하고 local config/docs evidence는 계속 완료한다.

### 테스트 커버리지 공백

- config validation은 02에서 추가되는 schema tests가 담당한다.
- dev runtime policy는 static config/docs 일관성 검증과 optional live status evidence가 필요하다. 현재 자동 smoke는 normal capacity 중심이고 long capacity policy assertion이 없다.

### 심볼 참조

- renamed/removed symbol: none.
- 새 config keys는 02에서 도입된 `total_context_tokens`, `long_context_capacity`를 사용한다.

### 분할 판단

- shared task group: `agent-task/m-model-group-long-context-admission`.
- 현재 subtask `05+02_dev_runtime_policy`는 predecessor index `02`에 의존한다.
- 작성 시점에 `agent-task/m-model-group-long-context-admission/02+01_long_capacity/complete.log`는 없다. 구현 시작 전 active 또는 archived predecessor completion이 필요하다.
- 실제 mixed/all-long smoke는 06으로 분리했다.

### 범위 결정 근거

- source admission logic은 01-04 범위다. 이 plan은 config/inventory/docs policy alignment에 집중한다.
- `ctx_size=786432` 도입은 명시적 범위 제외다.
- GX10/mac long capacity는 runtime evidence가 불충분하면 conservative `long_context_capacity=1`로 문서화한다. OneXPlayer는 SDD 결정에 따라 `2` 고정이다.

### 빌드 등급

- `cloud-G07`: dev external runtime assumptions와 config/docs 일관성이 핵심이며, local checks만으로 실제 policy drift를 모두 잡기 어렵다.

## 의존 관계 및 구현 순서

- `02+01_long_capacity` complete 필요: `agent-task/m-model-group-long-context-admission/02+01_long_capacity/complete.log`.

## 구현 체크리스트

- [ ] `configs/edge.yaml` dev provider entries에 `context_window_tokens=262144`, provider `total_context_tokens`, `long_context_capacity`를 SDD 기준으로 맞춘다.
- [ ] `agent-test/dev/inventory.yaml`에 GX10, OneXPlayer, mac-mlx-vllm의 runtime context/KV policy와 long capacity를 기록한다. 검증: OneXPlayer는 `ctx_size=524288`, `long_context_capacity=2`, `-np 3`이고 `786432`이 없다.
- [ ] `agent-test/dev/edge-smoke.md`와 `agent-test/dev/node-smoke.md`의 runtime baseline이 config/inventory와 같은 값을 말하도록 갱신한다.
- [ ] local config check와 deterministic `rg --sort path` evidence를 실행한다.
- [ ] 가능하면 dev live status/load evidence를 review stub에 붙이고, 불가능하면 blocker와 재개 조건을 검증 결과에 기록한다.
- [ ] CODE_REVIEW-*-G??.md의 구현 에이전트 소유 섹션을 실제 구현 내용과 검증 출력으로 채운다. 이 항목이 완료되기 전에는 구현이 완료된 것이 아니다.

## [DEV_RUNTIME_POLICY-1] Dev provider policy alignment

### 문제

- [agent-test/dev/inventory.yaml](/config/workspace/iop/agent-test/dev/inventory.yaml:37)는 model group context window를 기록하지만 provider별 long capacity policy는 아직 Milestone schema와 연결되어 있지 않다.
- [agent-test/dev/node-smoke.md](/config/workspace/iop/agent-test/dev/node-smoke.md:74)는 OneXPlayer `ctx_size=524288`, `-np 3` baseline을 기록하지만 `long_context_capacity=2`와 config validation 기준을 함께 말하지 않는다.
- [configs/edge.yaml](/config/workspace/iop/configs/edge.yaml:121)는 `context_window_tokens=262144`를 갖지만 provider long capacity fields는 02 완료 전까지 없다.

### 해결 방법

- OneXPlayer provider: `total_context_tokens=524288`, `long_context_capacity=2`, runtime docs에 `ctx_size=524288`, `-np 3`, `786432 금지`를 명시한다.
- mac-mlx-vllm provider: `max_kv_size=262144`, `max_request_tokens=262144` 기준으로 conservative `long_context_capacity=1`, `total_context_tokens=262144`.
- GX10 provider: `max_model_len=262144` baseline 기준으로 conservative `long_context_capacity=1`, `total_context_tokens=262144` unless runtime evidence proves more.
- docs/inventory/config의 provider ids와 served models가 일치하는지 확인한다.

### 수정 파일 및 체크리스트

- [ ] `configs/edge.yaml`
- [ ] `agent-test/dev/inventory.yaml`
- [ ] `agent-test/dev/edge-smoke.md`
- [ ] `agent-test/dev/node-smoke.md`
- [ ] 필요 시 `agent-test/dev/platform-common-smoke.md`에 공통 long policy reference만 추가한다.

### 테스트 작성

- 별도 Go test는 작성하지 않는다. config schema validation은 02 tests가 담당한다.
- 이 task는 static policy evidence commands를 review stub에 붙인다.

### 중간 검증

```bash
go run ./apps/edge/cmd/edge config check --config configs/edge.yaml
rg --sort path -n "long_context_capacity|total_context_tokens|context_window_tokens|ctx_size: 524288|--spec-type none -np 3" configs/edge.yaml agent-test/dev/inventory.yaml agent-test/dev/edge-smoke.md agent-test/dev/node-smoke.md
! 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
```

## 수정 파일 요약

| 파일 | 항목 |
|------|------|
| `configs/edge.yaml` | DEV_RUNTIME_POLICY-1 |
| `agent-test/dev/inventory.yaml` | DEV_RUNTIME_POLICY-1 |
| `agent-test/dev/edge-smoke.md` | DEV_RUNTIME_POLICY-1 |
| `agent-test/dev/node-smoke.md` | DEV_RUNTIME_POLICY-1 |
| `agent-test/dev/platform-common-smoke.md` | DEV_RUNTIME_POLICY-1 |

## 최종 검증

```bash
git status --short
go run ./apps/edge/cmd/edge config check --config configs/edge.yaml
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
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
! 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
```

기대 결과: config check PASS, required policy values are present, `786432` search exits non-zero.

모든 코드 변경 완료 후 반드시 `CODE_REVIEW-*-G??.md`의 구현 에이전트 소유 섹션을 채운다. 이 파일 작성이 구현의 마지막 단계다.
