# Milestone: Ollama 실테스트와 후속 안정화

## 위치

- Roadmap: `agent-roadmap/ROADMAP.md`
- Phase: `agent-roadmap/phase/serving-routing-optimization/PHASE.md`

## 목표

완료 처리된 Ollama E2E baseline을 사용자 실테스트로 다시 확인하고, 실제 사용 중 발견되는 Ollama 연동 후속 작업을 안정화 범위로 정리한다.
기존 archive 기록은 완료 스냅샷으로 보존하고, 이 Milestone은 실테스트 결과와 추가 작업을 현재 활성 좌표로 받는다.

## 상태

[완료]

## 승격 조건

- 없음

## 구현 잠금

- 상태: 해제
- 결정 필요: 없음

## 범위

- 실제 Ollama endpoint를 대상으로 Edge OpenAI-compatible API, Edge-Node relay, Node Ollama adapter의 사용자 재현 흐름을 다시 확인한다.
- code-server 컨테이너를 Edge로, 컨테이너 호스트를 Node/Ollama host로 두는 split-host field smoke 환경을 우선 구성한다.
- `/v1/models`, `/v1/chat/completions` non-streaming/streaming, reasoning/content 분리, Ollama option/API passthrough의 실제 사용 결과를 기록한다.
- 실테스트에서 나온 문제를 compatibility, config/docs, reasoning stream, option passthrough, routing/fallback 후보로 분류한다.
- archive된 `Ollama E2E 서빙 안정화` 완료 기록은 재포맷하지 않고, 새 후속 작업만 이 Milestone에서 관리한다.

## 기능

### Epic: [field-validation] Field Validation and Follow-up

사용자 실테스트 결과를 현재 활성 Ollama 연동 작업으로 받아 후속 안정화 범위를 정한다.

- [x] [split-host-env] code-server 컨테이너를 Edge로, 컨테이너 호스트를 Node/Ollama host로 두는 split-host field smoke 환경이 구성되어 있다. 검증: host Node가 컨테이너 Edge 주소로 등록되고 Edge에서 node registration을 확인할 수 있다.
- [x] [field-test] split-host 환경에서 실제 Ollama 연동 실테스트 결과와 재현 로그가 기록되어 있다. 검증: 실제 모델 조회와 non-streaming/streaming chat 결과 또는 실패 로그가 남아 있다.
- [x] [issue-triage] 실테스트에서 나온 후속 작업이 API compatibility, option passthrough, reasoning stream, config/docs, routing/fallback 후보로 분류되어 있다.
- [x] [follow-up-scope] 코드 수정이 필요한 항목은 이 Milestone의 추가 Task 또는 같은 Milestone task group의 후속 plan으로 정리되어 있다.

## 완료 리뷰

- 상태: 승인됨
- 요청일: 2026-05-26
- 완료 근거: Apple Silicon용 Node 바이너리를 Edge에서 다운로드 가능한 형태로 빌드하고, reverse SSH tunnel 기반 split-host field 환경에서 `node-silicon-ollama` registration을 확인했다.
- 완료 근거: Edge OpenAI-compatible API에서 `/v1/models`, non-streaming `/v1/chat/completions`, streaming SSE, reasoning/content 분리, `/api/tags` API passthrough, `think:false`와 Ollama options passthrough가 실제 Ollama endpoint 기준으로 통과했다.
- 완료 근거: 후속 후보는 OpenAI/Ollama compatibility 본선 문제가 아니라 field harness/runtime lifecycle 보완으로 분류했다.
- 리뷰 필요:
  - [x] 사용자가 완료 결과를 확인했다
  - [x] archive 이동을 승인했다
- 리뷰 코멘트: 사용자 승인으로 완료 처리하고 archive 이동한다. `edge serve`로 실행했을 때 node/openai listener가 내려가고 metrics만 남는 상태가 관찰되어, 필드 테스트는 `edge console`로 재기동해 통과했다. 이 항목은 후속 `Field Bootstrap UX와 테스트 포트 정비` Milestone에서 다룬다.

## 범위 제외

- archive된 `Ollama E2E 서빙 안정화` 문서 재포맷
- cloud fallback, 자동 부하 라우팅, 품질 평가 feedback의 본격 구현
- 후속 최적화 계층 구현
- Responses API 세부 호환 구현

## 작업 컨텍스트

- 관련 경로: `apps/edge`, `apps/node`, `packages/config`, `proto/iop`, `configs`, `bin/edge.sh`, `bin/node.sh`, `docs/deploy-dev.md`
- 표준선(선택): 내부 실행 계약은 `adapter + target`을 유지하고, OpenAI-compatible API는 외부 호환 입력 표면으로 둔다.
- 표준선(선택): Ollama 실테스트 후속 작업은 먼저 재현 로그와 사용자 기대 동작을 기준으로 분류한 뒤 구현 계획으로 내린다.
- 표준선(선택): 초기 필드 smoke는 code-server 컨테이너 내부 Edge와 컨테이너 호스트 Node/Ollama를 분리해 실제 네트워크 경계를 통과하도록 구성한다.
- 결정됨: split-host 실테스트 뒤 생긴 Ollama 경로 후속 안정화 작업은 이 Milestone에서 계속 처리한다.
- 선행 작업: Ollama E2E 서빙 안정화
- 실테스트 결과: Apple Silicon `darwin/arm64` Node가 reverse SSH tunnel을 통해 Edge에 등록되었고, Edge에서 `gemma4:26b` 모델 조회, non-streaming chat, streaming SSE, reasoning/content 분리, option/API passthrough를 확인했다.
- 분류 결과: API compatibility, reasoning stream, option passthrough, Ollama API passthrough는 통과했다. routing/fallback, cloud fallback, Responses API, 품질 평가는 이번 범위 밖 후속 Phase 후보로 유지한다.
- 후속 plan 후보: `edge serve` 실행 시 startup context/lifecycle 때문에 node/openai listener가 유지되지 않는 현상을 조사하고, field runbook에는 SSH tunnel 또는 reverse tunnel 기준 다운로드/연결 절차를 보강한다.
- 확인 필요: 사용자의 완료 확인과 archive 이동 승인
