update roadmap: archive milestones and update phase files

This commit is contained in:
toki 2026-07-20 21:07:27 +09:00
parent c14640f305
commit 64883dde61
6 changed files with 12 additions and 93 deletions

0
0
View file

View file

@ -2,8 +2,8 @@
## 위치
- Roadmap: [ROADMAP.md](../../../ROADMAP.md)
- Phase: [PHASE.md](../PHASE.md)
- Roadmap: [ROADMAP.md](../../../../ROADMAP.md)
- Phase: [PHASE.md](../../../../phase/automation-runtime-bridge/PHASE.md)
## 목표
@ -81,7 +81,7 @@ Inventory에서 확인된 drift를 실제 기본값, 문서, smoke evidence로
### Compatibility checklist
- Smoke: `make test-control-plane-edge-wire`, `./scripts/e2e-smoke.sh`, `./scripts/e2e-openai-ollama.sh`가 새 host slot 또는 명시 override에서 통과해야 한다.
- Client config: `apps/client/lib/client_config.dart`, `apps/client/Dockerfile`, [README.md](../../../../apps/client/README.md), `scripts/dev/web.sh`, `Makefile client-build-web`, compose build args의 HTTP/WS URL 기본값을 같은 기준으로 맞춘다.
- Client config: `apps/client/lib/client_config.dart`, `apps/client/Dockerfile`, [README.md](../../../../../apps/client/README.md), `scripts/dev/web.sh`, `Makefile client-build-web`, compose build args의 HTTP/WS URL 기본값을 같은 기준으로 맞춘다.
- Remote runner: Docker compose 검증은 원격 runner/code-server에서 수행하고, 포트 `13000`, `18000`, `18080`, `18081`, `19080`, `19081`, `19090`, `19092`, `15400`, `16300` 충돌 여부를 확인한다.
- Field compatibility: 기존 field 슬롯 `18080`, `18081`, `19080`, `19090`은 smoke evidence가 확보될 때까지 유지하거나 명시 migration note를 남긴다.
- Secret hygiene: host, token, credential 원문은 tracked docs/roadmap/plan에 기록하지 않는다.
@ -104,8 +104,8 @@ Inventory에서 확인된 drift를 실제 기본값, 문서, smoke evidence로
- `04`에서 사용자 금지 조건을 지켜 `code-server` stop/start/restart/recreate 없이 remote compose config만 수정했고, `19090`, `19092`, `19190` publish 제거와 `192.168.0.97` 기준 closed 확인을 기록했다.
- 리뷰 필요:
- [x] 사용자가 완료 결과를 확인했다
- [ ] archive 이동을 승인했다
- 리뷰 코멘트: 사용자가 "완료 처리해" 요청으로 완료 승인 및 완료 결과 확인을 받음. 기능 Task는 모두 충족되어 `[완료]` 처리로 전환한다. archive 이동은 다음 단계에서 처리한다.
- [x] archive 이동을 승인했다
- 리뷰 코멘트: 사용자가 완료 결과를 확인한 뒤 2026-07-20 현재 완료 상태로 활성 경로에 남은 항목의 archive 이동을 요청했다.
## 범위 제외
@ -119,5 +119,5 @@ Inventory에서 확인된 drift를 실제 기본값, 문서, smoke evidence로
- 관련 경로: `docker-compose.yml`, `.env.example`, `agent-test/local/`, `apps/client/`, `apps/control-plane/`, `apps/edge/`, `apps/node/`, `proto/`
- 표준선(선택): container 내부 listen 포트는 runtime 기본값을 유지하고, 표준화 대상은 host publish, 문서화된 remote endpoint, smoke command다.
- 선행 작업: workspace 공통 포트 inventory 정리
- 후속 작업: 사용자 관리 `code-server` recreate 이후 standard-slot full runtime compose smoke 재실행, 사용자 완료 확인 후 Milestone archive 승인 처리
- 후속 작업: 사용자 관리 `code-server` recreate 이후 standard-slot full runtime compose smoke 재실행
- 확인 필요: 없음

View file

@ -63,7 +63,7 @@ Phase를 가로지르는 실제 다음 작업 선택은 [전역 마일스톤 실
- 요약: 독립형 실행 전환으로 Edge 직접 domain payload boundary 정리가 현재 범위에서 필요 없어져 폐기한다.
- [완료] 워크스페이스 포트/환경 표준화
- 경로: [workspace-port-env-standardization](milestones/workspace-port-env-standardization.md)
- 경로: [workspace-port-env-standardization](../../archive/phase/automation-runtime-bridge/milestones/workspace-port-env-standardization.md)
- 요약: Control Plane, Edge, Node, Client, OpenAI-compatible, A2A, wire, metrics, DB/cache 포트를 workspace 공통 대역으로 정렬한다.
- [완료] 브리지 선행 경계 안정화

View file

@ -1,81 +0,0 @@
# Milestone: OpenAI-compatible Think 제어 MVP
## 위치
- Roadmap: [ROADMAP.md](../../../ROADMAP.md)
- Phase: [PHASE.md](../PHASE.md)
## 목표
OpenAI-compatible Chat Completions 요청에서 thinking/reasoning 생성을 요청별로 켜고 끌 수 있게 한다.
provider runtime은 reasoning-capable 상태로 유지하되, Edge가 공개 요청 필드를 검증하고 Node provider adapter가 vLLM, vLLM-MLX, Lemonade의 지원 필드로 매핑한다.
호출자가 reasoning 생성을 끄거나 reasoning 응답 노출만 숨길 수 있어야 하며, 지원하지 않는 조합은 조용히 무시하지 않고 명확한 compatibility error 또는 정의된 fallback으로 처리한다.
## 상태
[완료]
## 승격 조건
- 없음
## 구현 잠금
- 상태: 해제
- SDD: 필요
- SDD 문서: 없음 (작성 전)
- SDD 사유: OpenAI-compatible request schema, provider option 매핑, streaming response 노출 정책이 바뀌는 API 계약 Milestone이다.
- 잠금 해제 조건:
- [x] SDD 잠금이 해제되어 있다.
- [x] SDD 사용자 리뷰가 없거나 승인/해결되었다.
- [x] Acceptance Scenario가 Milestone 기능 Task와 연결되어 있다.
- [x] Evidence Map이 완료 시 `Roadmap Completion`과 최종 검증 evidence로 검증 가능하게 연결되어 있다.
- 결정 필요: 없음
## 범위
- `/v1/chat/completions` 요청의 thinking/reasoning 제어 field 수신, 검증, 내부 run input 전달
- `think`, `reasoning_effort`, `thinking_token_budget`, `include_reasoning`의 의미와 충돌 정책
- raw `chat_template_kwargs`는 공개 request field로 직접 열지 않고, Edge/Node가 provider별 내부 option으로 생성하는 매핑 정책
- vLLM Qwen3, vLLM-MLX Qwen3, Lemonade provider의 reasoning-capable runtime에 대한 요청별 option 매핑
- streaming/non-streaming 응답의 `reasoning_content` 노출/억제 정책
- OpenAI-compatible 계약 문서, edge/node 단위 테스트, dev-runtime smoke
## 기능
### Epic: [think-control] Request-Level Think Control
OpenAI-compatible 호출자가 요청 단위로 thinking/reasoning 생성과 노출을 제어하는 capability를 묶는다.
- [x] [request-contract] `/v1/chat/completions``think`, `reasoning_effort`, `thinking_token_budget`, `include_reasoning`을 허용하고 타입, 범위, 충돌 조합을 검증한다. 검증: 알 수 없는 provider 전용 wrapper는 계속 400으로 거부되고, 허용 필드는 Edge request decoder와 계약 테스트를 통과한다.
- [x] [provider-mapping] Edge run input과 Node `openai_compat` adapter가 요청별 think 설정을 provider별 top-level field 또는 내부 `chat_template_kwargs.enable_thinking`으로 매핑한다. 검증: vLLM Qwen3, vLLM-MLX, Lemonade mock이 같은 요청 플래그에 대해 기대 request body를 받는다.
- [x] [reasoning-visibility] `include_reasoning=false`가 provider reasoning 생성 여부와 별개로 OpenAI-compatible 응답의 `reasoning_content` 노출을 억제한다. 검증: stream과 non-stream 응답 모두 reasoning delta/message field가 빠지고 content/tool output은 유지된다.
- [x] [default-compat] think 관련 필드가 생략된 기존 요청은 현재 provider 기본 thinking 동작을 유지한다. 검증: 기존 chat completion, tool calling, provider pool 테스트가 회귀 없이 통과한다.
- [x] [dev-smoke] dev-runtime 세 provider(mac vLLM-MLX, GX10 vLLM, OneXPlayer Lemonade)에서 `think=false`, 기본값, `include_reasoning=false` smoke가 통과한다. 검증: provider raw trace와 Edge OpenAI-compatible SSE를 비교해 reasoning 생성/노출 상태가 기대와 일치한다.
- [x] [contract-docs] OpenAI-compatible 계약 문서와 dev 운영 문서가 요청별 thinking/reasoning 제어 field, provider별 unsupported 정책, 기본값을 설명한다.
## 완료 리뷰
- 상태: 통과
- 요청일: 2026-07-04
- 완료 근거: `agent-task/archive/2026/07/m-openai-compatible-think-control/**/complete.log` 5개가 모든 기능 Task의 `Roadmap Completion` PASS를 기록했고, 종료 전 코드레벨 감사에서 provider-first OpenAI-compatible provider label 기본값과 README 계약 문구 드리프트를 보정했다.
- 검토 항목: `go test -count=1 ./apps/edge/internal/node ./apps/edge/internal/openai ./apps/node/internal/adapters/openai_compat`, `go test -count=1 ./apps/edge/internal/bootstrap ./apps/edge/internal/configrefresh ./packages/go/config`, `go test ./...` 통과. 남은 기능 Task와 구현 잠금 차단 항목 없음.
- agent-ui 상태 반영: 해당 없음
- 리뷰 코멘트: 코드레벨 종료 감사 통과. 큰 이슈나 별도 plan 필요 없음.
## 범위 제외
- `/v1/responses`의 streaming 지원 또는 reasoning output item 확장
- provider runtime 기동 옵션 자동 조정과 lifecycle 관리
- hidden reasoning token의 정확한 usage 산출
- 단계 호출 planner/generator/verifier 모드 전반의 제품 UX
- raw provider payload 장기 저장과 운영 ledger schema 구현
## 작업 컨텍스트
- 관련 경로: `apps/edge/internal/openai`, `apps/node/internal/adapters/openai_compat`, [openai-compatible-api.md](../../../../agent-contract/outer/openai-compatible-api.md), [openai-compatible-api-contract.md](../../../../docs/openai-compatible-api-contract.md), `agent-test/dev`
- 표준선(선택): provider runtime은 reasoning-capable 상태로 띄우고, 요청별 제어는 OpenAI-compatible Edge request 계약에서 검증한 뒤 provider별 지원 option으로 매핑한다.
- 표준선(선택): 공개 request 표면은 provider raw wrapper를 그대로 열지 않고, IOP가 검증 가능한 OpenAI-compatible field와 내부 provider option 매핑으로 둔다.
- 선행 작업: OpenAI-compatible reasoning raw trace와 dev-runtime provider reasoning 활성화
- 후속 작업: 단계 호출과 검증 최적화 MVP, 요청 실행 로그와 Usage Ledger 기반
- 확인 필요: 없음

View file

@ -66,9 +66,9 @@ model group queue와 독립된 provider resource lease를 admission의 단일 so
provider config에 선언된 정책과 실제 Edge/Node 적용 위치의 불일치를 제거한다.
- [ ] [queue-ownership] Edge의 `provider_pool.max_queue``provider_pool.queue_timeout_ms`가 여러 model group에 공통인 provider-pool queue policy를 소유하고 schema, compatibility, admission과 refresh 경로에서 일관되게 적용된다. provider는 capacity, long-context capacity, priority처럼 provider별 실행 속성만 소유한다. 검증: 여러 provider가 있는 model group과 하나의 provider를 공유하는 여러 model group에서 Edge 전체 pending 상한과 공통 timeout이 적용되고 first-candidate 값이 전체 정책으로 암묵 승격되지 않는다.
- [ ] [snapshot-source] provider snapshot의 일반·long `in_flight`가 provider lease state와 일치하고, `queued`/`long_queued`가 Edge queue에서 해당 provider를 후보로 포함하는 candidate pressure임을 명확히 한다. 검증: cross-model 실행·대기·반환 전 과정에서 lease count가 snapshot과 일치하고 multi-candidate queued 수가 실제 Edge queue 총합과 구분되는 문서화된 규칙대로 계산된다.
- [ ] [refresh-consistency] capacity, long-context capacity, priority, queue policy와 enabled live refresh가 기존 lease를 보존하고 새 admission과 모든 관련 대기 요청에 즉시 반영된다. 검증: capacity를 in-flight 아래로 낮추면 기존 요청은 유지하되 새 값 아래로 회복할 때까지 추가 admission을 차단하고, capacity 증가·disable·재활성화 시 대기 후보가 고립되지 않는다.
- [x] [queue-ownership] Edge의 `provider_pool.max_queue``provider_pool.queue_timeout_ms`가 여러 model group에 공통인 provider-pool queue policy를 소유하고 schema, compatibility, admission과 refresh 경로에서 일관되게 적용된다. provider는 capacity, long-context capacity, priority처럼 provider별 실행 속성만 소유한다. 검증: 여러 provider가 있는 model group과 하나의 provider를 공유하는 여러 model group에서 Edge 전체 pending 상한과 공통 timeout이 적용되고 first-candidate 값이 전체 정책으로 암묵 승격되지 않는다.
- [x] [snapshot-source] provider snapshot의 일반·long `in_flight`가 provider lease state와 일치하고, `queued`/`long_queued`가 Edge queue에서 해당 provider를 후보로 포함하는 candidate pressure임을 명확히 한다. 검증: cross-model 실행·대기·반환 전 과정에서 lease count가 snapshot과 일치하고 multi-candidate queued 수가 실제 Edge queue 총합과 구분되는 문서화된 규칙대로 계산된다.
- [x] [refresh-consistency] capacity, long-context capacity, priority, queue policy와 enabled live refresh가 기존 lease를 보존하고 새 admission과 모든 관련 대기 요청에 즉시 반영된다. 검증: capacity를 in-flight 아래로 낮추면 기존 요청은 유지하되 새 값 아래로 회복할 때까지 추가 admission을 차단하고, capacity 증가·disable·재활성화 시 대기 후보가 고립되지 않는다.
### Epic: [connectivity-availability] Node 연결 기반 Provider Availability
@ -92,8 +92,8 @@ Node transport lifecycle을 provider resource eligibility와 운영 관측의
- 상태: 없음
- 요청일: 없음
- 완료 근거: SDD와 선행 리팩터링 gate는 충족되었고 기능 구현과 검증은 아직 시작되지 않았다.
- 검토 항목: 모든 기능 Task와 Acceptance Scenario evidence, 구현 잠금 해제, provider capacity 1 cross-model smoke 결과를 확인한다.
- 완료 근거: SDD와 선행 리팩터링 gate가 충족되었고, provider 전역 resource lease와 provider policy 의미 정렬의 기능 Task 8개가 archive `complete.log`, 현재 코드·테스트, git 이력으로 확인되었다.
- 검토 항목: Node 연결 기반 provider availability 5개 Task, 계약·회귀·capacity smoke 3개 Task와 연결된 Acceptance Scenario evidence를 확인한다.
- agent-ui 상태 반영: 해당 없음
- 리뷰 코멘트: 없음

Binary file not shown.