<!-- task=m-vllm-provider-serving-validation/02+01_config_contract plan=1 tag=REVIEW_VLLM_CONFIG -->
# Plan Log - REVIEW_VLLM_CONFIG (G07)

## Plan Execution

date=2026-06-17
task=m-vllm-provider-serving-validation/02+01_config_contract, plan=1, tag=REVIEW_VLLM_CONFIG
previous_plan=agent-task/m-vllm-provider-serving-validation/02+01_config_contract/plan_local_G06_0.log
previous_review=agent-task/m-vllm-provider-serving-validation/02+01_config_contract/code_review_local_G06_0.log
previous_decision=FAIL

## Required Issues from Previous Review

1. `configs/edge.yaml`의 vLLM 예시가 `provider: "vllm"`을 `openai.model_routes[]` 아래에 두지만, 실제 `OpenAIRouteEntry`에는 `provider` 필드가 없음.
2. SDD `S02`가 요구한 vLLM endpoint, served model, alias, auth/header, timeout, option passthrough 계약이 config example/test fixture로 충분히 검증되지 않음.
3. 구현 기록은 plan의 고정 최종 검증 명령 출력을 남기지 않음.

## Implementation Summary

### REVIEW_VLLM_CONFIG-1: configs/edge.yaml contract 정정
- `model_routes` 주석 예시에서 `provider: "vllm"` 필드 제거
- vLLM 예제를 두 부분으로 분리:
  1. `model_routes`: alias `qwen3.6:35b`, adapter `openai_compat`, target `nvidia/Qwen3.6-35B-A3B-NVFP4` (provider 필드 없음)
  2. `nodes[].adapters.openai_compat_instances[]`: `provider: "vllm"`, endpoint placeholder, headers 없음, queue policy
- private 값(token 등) 모두 placeholder 사용

### REVIEW_VLLM_CONFIG-2: vLLM fixture 보강
- `packages/go/config/config_test.go`에 `TestLoadEdge_VLLMOpenAIRouteAndInstance` 추가
  - route의 `adapter/target/node/max_queue/queue_timeout_ms` 검증
  - instance의 `provider/endpoint/capacity/max_queue/queue_timeout_ms/request_timeout_ms` 검증
  - no-headers 검증
  - codex agent route with `workspace_required=true` 동시 검증
- `apps/edge/internal/node/mapper_test.go`에 `TestBuildConfigPayload_VLLMOpenAICompatInstance` 추가
  - `provider="vllm"` fixture가 proto `AdapterConfig` → `OpenAICompatAdapterConfig` oneof로 보존되는지 검증

### REVIEW_VLLM_CONFIG-3: 고정 검증 출력 기록
- `go test ./packages/go/config ./apps/edge/internal/node ./apps/node/internal/adapters ./apps/node/internal/adapters/openai_compat` → PASS
- `git diff --check` → whitespace error 없음
- `go build ./...` → compile error 없음

### Skip Rationale
- `apps/node/internal/adapters` factory_test.go 수정 스킵: 기존 `TestOpenAICompatConfFromProto`가 provider/endpoint/headers/queue를 이미 검증 중이며, `TestBuildConfigPayload_VLLMOpenAICompatInstance`가 factory conversion end-to-end 계약을 커버함.

## Verification Output

```bash
$ go test ./packages/go/config ./apps/edge/internal/node ./apps/node/internal/adapters ./apps/node/internal/adapters/openai_compat
ok  	iop/packages/go/config	0.031s
ok  	iop/apps/edge/internal/node	0.040s
ok  	iop/apps/node/internal/adapters	(cached)
ok  	iop/apps/node/internal/adapters/openai_compat	(cached)

$ git diff --check
(no output)

$ go build ./...
(no output)
```

## Changed Files

- `configs/edge.yaml` - vLLM config example contract 정정
- `packages/go/config/config_test.go` - `TestLoadEdge_VLLMOpenAIRouteAndInstance` 추가
- `apps/edge/internal/node/mapper_test.go` - `TestBuildConfigPayload_VLLMOpenAICompatInstance` 추가
- `agent-task/m-vllm-provider-serving-validation/02+01_config_contract/CODE_REVIEW-local-G07.md` - 구현 항목별 완료 여부, 구현 체크리스트, 계획 대비 변경 사항, 주요 설계 결정, 검증 결과 기록