diff --git a/agent-contract/inner/edge-config-runtime-refresh.md b/agent-contract/inner/edge-config-runtime-refresh.md index 67532b6..7b2f48a 100644 --- a/agent-contract/inner/edge-config-runtime-refresh.md +++ b/agent-contract/inner/edge-config-runtime-refresh.md @@ -35,6 +35,7 @@ tracked config에는 public 예시와 기본 구조만 두고, 실제 endpoint/c - `nodes[].providers[].id`는 전체 Edge config 안에서 중복되면 안 된다. - `nodes[].providers[].adapter`는 같은 Node 안의 enabled adapter instance key를 참조해야 한다. Exact instance key를 우선하고, legacy type-name route는 같은 type의 enabled instance가 정확히 하나일 때만 허용한다. `category: cli` resource는 enabled CLI adapter가 필요하다. - `nodes[].providers[].enabled`: 생략 또는 `true` → provider pool dispatch 후보에 포함. `false` → dispatch pool에서 제외. 비활성화된 provider는 status snapshot에 `status=disabled`, `health=disabled`, `capacity=0`으로 표시된다. adapter process lifecycle 변경 없음. config refresh 시 `enabled` 토글은 live-apply(restart 불필요)로 분류된다. disabled provider의 adapter reference check는 skip되지만 structural validation(type, category, models, numeric bounds)은 수행된다. +- `nodes[].providers[].priority`: provider-pool dispatch tie-breaker다. 기본값은 `0`이고 음수는 validation error다. dispatch는 `in_flight < capacity` 후보 중 가장 낮은 `in_flight`를 먼저 선택하며, `in_flight`가 같은 후보에서만 낮은 숫자의 `priority`를 우선한다. `in_flight`와 `priority`가 모두 같으면 기존 순환을 유지한다. priority 변경은 live-apply(restart 불필요)로 분류된다. - legacy single-instance adapter 설정은 load 시 named instance slice로 normalize된다. - `NodeConfigPayload`는 Edge가 Node에 내려주는 실행 adapter/runtime payload다. - refresh 결과는 `applied`, `restart_required`, `rejected`를 구분하고, changed node/provider/model/report slice는 안정적으로 non-nil이어야 한다. diff --git a/agent-roadmap/phase/operational-observability-provider-management/milestones/node-provider-first-config-surface.md b/agent-roadmap/archive/phase/operational-observability-provider-management/milestones/node-provider-first-config-surface.md similarity index 87% rename from agent-roadmap/phase/operational-observability-provider-management/milestones/node-provider-first-config-surface.md rename to agent-roadmap/archive/phase/operational-observability-provider-management/milestones/node-provider-first-config-surface.md index e6917e9..ca97837 100644 --- a/agent-roadmap/phase/operational-observability-provider-management/milestones/node-provider-first-config-surface.md +++ b/agent-roadmap/archive/phase/operational-observability-provider-management/milestones/node-provider-first-config-surface.md @@ -13,7 +13,7 @@ Node 설정 표면을 `providers[]` resource list 중심으로 재정렬한다. ## 상태 -[진행중] +[완료] ## 구현 잠금 @@ -47,18 +47,17 @@ Node 설정 표면을 `providers[]` resource list 중심으로 재정렬한다. - [x] [normalize-compile] provider-first config가 내부 adapter registry와 `NodeConfigPayload`로 컴파일되어 기존 Node runtime의 `adapter + target` 실행 계약을 재사용한다. 검증: mapper/config_set/router tests가 provider id를 adapter instance key로 사용할 수 있음을 확인한다. - [x] [legacy-compat] 기존 `nodes[].adapters` 기반 설정은 legacy/compat로 유지하되, provider-first와 충돌하면 명확한 validation error 또는 우선순위 규칙을 제공한다. 검증: legacy config와 mixed config 회귀 tests가 통과한다. - [x] [routing-status-refresh] Edge dispatch, status snapshot, config refresh가 provider-first source of truth를 기준으로 provider capacity, queue, health, model alias, served target을 처리한다. 검증: service/openai/status/configrefresh tests가 provider-first route와 zero/disabled provider edge case를 검증한다. -- [ ] [priority-routing] Provider-pool dispatch가 dispatch 가능한 후보 중 가장 낮은 `in_flight` provider를 우선하고, `in_flight`가 같은 후보에서만 낮은 숫자의 `priority`를 선택 기준으로 사용한다. `priority` 기본값은 0이고 음수는 validation error이며, `in_flight`와 `priority`가 모두 같으면 기존 순환을 유지한다. 검증: config contract 갱신, config validation, service/model queue tests, config refresh classification tests가 priority 기본값/음수 거부/선택 순서를 검증한다. +- [x] [priority-routing] Provider-pool dispatch가 dispatch 가능한 후보 중 가장 낮은 `in_flight` provider를 우선하고, `in_flight`가 같은 후보에서만 낮은 숫자의 `priority`를 선택 기준으로 사용한다. `priority` 기본값은 0이고 음수는 validation error이며, `in_flight`와 `priority`가 모두 같으면 기존 순환을 유지한다. 검증: config contract 갱신, config validation, service/model queue tests, config refresh classification tests가 priority 기본값/음수 거부/선택 순서를 검증한다. - [x] [dev-runtime-docs] dev-runtime inventory, local/dev test rules, `configs/edge.yaml`, 운영 guide가 provider-first 예시로 정리되어 `adapters`와 `providers` 중복 작성을 기본 경로로 안내하지 않는다. 검증: `rg` stale-reference check와 config check evidence가 남아 있다. - [x] [full-cycle-smoke] dev-runtime provider pool에서 provider-first config로 3 connected nodes, 3 provider candidates, total capacity 10 smoke가 유지된다. 검증: config check, refresh dry-run/apply 또는 restart-required 판정, `/v1/models`, `/v1/responses`, `/v1/chat/completions` capacity smoke evidence가 남아 있다. ## 완료 리뷰 -- 상태: 보완 필요 -- 요청일: 2026-06-30 -- 기존 완료 근거: `agent-task/archive/2026/06/m-node-provider-first-config-surface/**/complete.log` 기준으로 `schema-source`, `normalize-compile`, `legacy-compat`, `routing-status-refresh`, `dev-runtime-docs`, `full-cycle-smoke`가 PASS 처리되었다. -- 기존 완료 근거: SDD Evidence Map S01-S07이 각 `Roadmap Completion`과 최종 검증 evidence로 충족되었고, dev-runtime provider pool capacity smoke는 3 connected nodes, 3 provider candidates, total capacity 10 기준으로 PASS했다. -- 남은 보완 항목: `priority-routing` 신규 Task 미완료 -- 리뷰 코멘트: 2026-06-30 사용자 결정으로 provider priority routing이 추가되어 완료 후보에서 진행중으로 되돌렸다. +- 상태: 통과 +- 완료 근거: `agent-task/archive/2026/06/m-node-provider-first-config-surface/**/complete.log`와 `agent-task/archive/2026/07/m-node-provider-first-config-surface/07_priority_routing/complete.log` 기준으로 `schema-source`, `normalize-compile`, `legacy-compat`, `routing-status-refresh`, `priority-routing`, `dev-runtime-docs`, `full-cycle-smoke`가 PASS 처리되었다. +- SDD Evidence Map S01-S08이 각 `Roadmap Completion`과 최종 검증 evidence로 충족되었고, dev-runtime provider pool capacity smoke는 3 connected nodes, 3 provider candidates, total capacity 10 기준으로 PASS했다. +- 종료 전 코드레벨 검토에서 provider priority config/validation, provider-pool dispatch, config refresh classification, OpenAI catalog refresh 경로를 재확인했고, priority 의미를 `agent-contract/inner/edge-config-runtime-refresh.md`에 보강했다. +- 남은 차단 항목: 없음 ## 범위 제외 diff --git a/agent-roadmap/sdd/operational-observability-provider-management/node-provider-first-config-surface/SDD.md b/agent-roadmap/archive/sdd/operational-observability-provider-management/node-provider-first-config-surface/SDD.md similarity index 100% rename from agent-roadmap/sdd/operational-observability-provider-management/node-provider-first-config-surface/SDD.md rename to agent-roadmap/archive/sdd/operational-observability-provider-management/node-provider-first-config-surface/SDD.md diff --git a/agent-roadmap/phase/operational-observability-provider-management/PHASE.md b/agent-roadmap/phase/operational-observability-provider-management/PHASE.md index 9cec786..8643207 100644 --- a/agent-roadmap/phase/operational-observability-provider-management/PHASE.md +++ b/agent-roadmap/phase/operational-observability-provider-management/PHASE.md @@ -24,9 +24,9 @@ provider 확장 Phase에서 검증한 Ollama, vLLM, SGLang, Lemonade 같은 추 - 경로: `agent-roadmap/archive/phase/operational-observability-provider-management/milestones/node-resource-model-unification.md` - 요약: Node를 Edge 연결 identity로 두고 CLI, OpenAI-compatible provider, 기타 resource를 같은 Node 아래 나열하며 provider/resource capacity만 concurrency를 소유하도록 runtime 계약과 dev-runtime 구성을 정렬했다. -- [진행중] Node Provider-First Config Surface - - 경로: `agent-roadmap/phase/operational-observability-provider-management/milestones/node-provider-first-config-surface.md` - - 요약: Node 설정 표면을 `providers[]` resource list 중심으로 재정렬하고, adapter 설정은 내부 실행 IR 또는 legacy compat로 낮춰 운영자가 한 Node의 CLI/provider 자원을 한 곳에서 이해하고 관리하게 만든다. +- [완료] Node Provider-First Config Surface + - 경로: `agent-roadmap/archive/phase/operational-observability-provider-management/milestones/node-provider-first-config-surface.md` + - 요약: Node 설정 표면을 `providers[]` resource list 중심으로 재정렬하고, adapter 설정은 내부 실행 IR 또는 legacy compat로 낮춰 운영자가 한 Node의 CLI/provider 자원을 한 곳에서 이해하고 관리하게 만들었다. - [스케치] 사용량, 토큰, 로그 운영 추적 MVP - 경로: `agent-roadmap/phase/operational-observability-provider-management/milestones/usage-token-log-ops-mvp.md`