docs(roadmap): 경로 스모크를 종료한다

9개 경로의 종료 감사를 통과했으므로 완료 상태와 SDD를 아카이브하고, 하네스 없는 초경량 비교를 바로 시작할 수 있게 고정 요청과 9행 결과표를 준비한다.
This commit is contained in:
toki 2026-08-14 05:50:13 +09:00
parent e1069db981
commit 16b7aba95a
6 changed files with 62 additions and 26 deletions

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/knowledge-tool-optimization-extension/PHASE.md)
## 목표
@ -12,7 +12,7 @@ IOP 전체 안정성을 처음부터 재검증하지 않고, 실패가 재현된
## 상태
[검토중]
[완료]
## 구현 잠금
@ -54,7 +54,7 @@ IOP 전체 안정성을 처음부터 재검증하지 않고, 실패가 재현된
## 완료 리뷰
- 상태: 검토중
- 상태: 통과
- 요청일: 2026-08-14
- 완료 근거: 동일한 최소 HTML 요청으로 9개 caller/model/route 경로가 모두 통과했다. 실패 경로는 제품·provider·환경 경계로 귀속해 원인 변경 뒤에만 재검증했고, IOP 결함은 provider normalization과 focused regression으로 한정해 수정했다.
- 검토 항목:
@ -62,7 +62,8 @@ IOP 전체 안정성을 처음부터 재검증하지 않고, 실패가 재현된
- [x] 성공 경로는 한 번만 실행했고 실패 경로만 변경된 원인 뒤 재검증했다. 단, 사용자 지시의 세션 한정 hybrid Work 모델 전환 확인은 경로 복구 검증과 분리해 기록했다.
- [x] 제품 수정은 재현된 결함과 focused regression으로 한정됐다.
- agent-ui 상태 반영: 해당 없음
- 리뷰 코멘트: 제품·호출 경로 차단은 남지 않았으며 `[bench-lite-01]`의 단일 시도 비교를 시작할 수 있다. 표준 release tag finish는 다른 active release와 충돌하므로 배포 성공 판정과 분리해 남겨 둔다.
- Spec sync: [OpenAI-Compatible 입력 표면](../../../../../agent-spec/input/openai-compatible-surface.md)에 operation-scoped normalization, nearest-lower effort, Gemini Chat signature 왕복과 관련 코드·테스트 evidence가 이미 반영되어 추가 갱신이 필요하지 않다.
- 리뷰 코멘트: 2026-08-14 종료 감사를 통과했다. 관련 config/OpenAI/service 회귀 테스트와 9/9 dev 실호출 evidence를 확인했으며 제품·호출 경로 차단은 남지 않았다. `[bench-lite-01]`의 단일 시도 비교를 시작할 수 있다. 표준 release tag finish는 다른 active release와 충돌하므로 배포 성공 판정과 분리해 남겨 둔다.
## 범위 제외
@ -83,4 +84,4 @@ IOP 전체 안정성을 처음부터 재검증하지 않고, 실패가 재현된
- 추가 분리 결과: agy는 text completion은 가능하지만 trusted workspace에서도 파일 도구를 호출하지 않아 구현 Agent 벤치 대상에서 제외했다. 대체한 OpenCode → Gemini direct는 첫 tool 호출 뒤 `extra_content.google.thought_signature`를 일반 Chat history로 보존하지 못해 두 번째 provider 호출이 HTTP 400으로 닫혔다. IOP가 선택된 `gemini_openai_chat` tool-call wire에서만 opaque id로 캡슐화·복원하도록 공통 provider normalization을 추가했고 focused HTTP 연속 호출 회귀와 live tool continuation이 통과했다. Codex → GPT direct의 최초 실패는 CA bundle 대신 Edge leaf 인증서를 전달한 측정 환경 결함이었다. Claude Code → Gemini/GPT preset의 이전 default-selector 및 profile operation normalization 결함도 국소 수정과 회귀 검증이 완료됐다.
- 배포 경계: source `de35e6d4`로 Edge와 네 Node를 다시 빌드·배포했고 빌드 전후 Go package 49개, Node/provider health, managed-capacity Chat·Responses 네 건을 통과했다. 배포 source는 `archive/release-dev-1019-de35e6d`에 보존했다. 이후 별도 framework sync와 다른 active release가 생겨 표준 release tag finish만 fail-closed로 남았으며 live dev 배포·9개 경로 판정과 분리한다.
- 세션 한정 override: tracked 설정은 변경하지 않고 live runtime config의 Gemini/GPT hybrid Work 바인딩 네 곳만 `ornith:35b`로 바꾸었다. 원본 백업, config check, refresh dry-run/apply 통과 근거를 확인했으며 세션 종료 시 원래 `ornith-fast`로 복구한다.
- 후속 측정: [초경량 Agent 모델 비교](thin-agent-model-comparison-benchmark.md)
- 후속 측정: [초경량 Agent 모델 비교](../../../../phase/knowledge-tool-optimization-extension/milestones/thin-agent-model-comparison-benchmark.md)

View file

@ -2,8 +2,8 @@
## 위치
- Milestone: [Milestone 문서](../../../phase/knowledge-tool-optimization-extension/milestones/benchmark-route-minimal-html-smoke.md)
- Phase: [PHASE.md](../../../phase/knowledge-tool-optimization-extension/PHASE.md)
- Milestone: [Milestone 문서](../../../../archive/phase/knowledge-tool-optimization-extension/milestones/benchmark-route-minimal-html-smoke.md)
- Phase: [PHASE.md](../../../../phase/knowledge-tool-optimization-extension/PHASE.md)
## 상태
@ -27,7 +27,7 @@
| 영역 | 기준 | 메모 |
|------|------|------|
| Roadmap | [Milestone 문서](../../../phase/knowledge-tool-optimization-extension/milestones/benchmark-route-minimal-html-smoke.md) | 9개 얇은 경로와 실패 경로만 재검증하는 범위 |
| Roadmap | [Milestone 문서](../../../../archive/phase/knowledge-tool-optimization-extension/milestones/benchmark-route-minimal-html-smoke.md) | 9개 얇은 경로와 실패 경로만 재검증하는 범위 |
| Code | `packages/go/config/protocol_profile.go`, `apps/edge/internal/openai/provider_model_rewrite.go` | operation-scoped tool-call wire와 요청·응답 왕복 정규화 |
| External Provider | Gemini OpenAI-compatible Chat | Tool call을 이어갈 때 opaque thought signature를 요구한다. |
| User Decision | 없음 | agy를 제외하고 같은 두 자리에 OpenCode를 넣는 범위가 확정됐다. |
@ -43,7 +43,7 @@
## Interface Contract
- 계약 원문: [OpenAI-Compatible API](../../../../agent-contract/outer/openai-compatible-api.md), [Edge Config And Runtime Refresh](../../../../agent-contract/inner/edge-config-runtime-refresh.md)
- 계약 원문: [OpenAI-Compatible API](../../../../../agent-contract/outer/openai-compatible-api.md), [Edge Config And Runtime Refresh](../../../../../agent-contract/inner/edge-config-runtime-refresh.md)
- 입력:
- `normalization.tool_calls[operation].wire`: provider tool-call metadata normalization 선택자
- `tool_calls[].id` / `tool_call_id`: caller가 왕복 보존하는 표준 id 표면

View file

@ -57,15 +57,15 @@ Phase를 가로지르는 실제 다음 작업 선택은 [전역 마일스톤 실
- 경로: [[bench-01] Agent 비교 벤치마크 파이프라인 준비](../../archive/phase/knowledge-tool-optimization-extension/milestones/agent-comparison-benchmark-pipeline.md)
- 요약: 모델·caller·prompt·반복 횟수를 manifest로 바꾸고 Claude Code, agy, Codex의 IOP 연결부터 finish/idle, 시간·token·웹 검증·익명 채점·Markdown 보고까지 같은 pipeline으로 재현한다.
- [완료] [bench-route-01] 벤치 경로 최소 HTML 스모크
- 경로: [[bench-route-01] 벤치 경로 최소 HTML 스모크](../../archive/phase/knowledge-tool-optimization-extension/milestones/benchmark-route-minimal-html-smoke.md)
- 요약: 벤치에 사용할 9개 caller/model/route 조합이 고정된 최소 `index.html` 생성 요청으로 모두 통과했고, 실패 경로만 귀속·국소 수정·재검증했다.
- [폐기] [bench-02] IOP 원샷 Agent 모델 비교 벤치마크
- 경로: [[bench-02] IOP 원샷 Agent 모델 비교 벤치마크](../../archive/phase/knowledge-tool-optimization-extension/milestones/iop-one-shot-agent-model-comparison.md)
- 요약: 전용 harness의 정합성과 복구가 제품 안정성보다 우선되는 목적 역전으로 2026-08-13 폐기했다. 기존 결과와 계획은 재개하지 않는다.
- [검토중] [bench-route-01] 벤치 경로 최소 HTML 스모크
- 경로: [[bench-route-01] 벤치 경로 최소 HTML 스모크](milestones/benchmark-route-minimal-html-smoke.md)
- 요약: 벤치에 사용할 9개 caller/model/route 조합이 고정된 최소 `index.html` 생성 요청으로 모두 통과했고, 실패 경로만 귀속·국소 수정·재검증했다.
- [계획] [bench-lite-01] 초경량 Agent 모델 비교
- [진행중] [bench-lite-01] 초경량 Agent 모델 비교
- 경로: [[bench-lite-01] 초경량 Agent 모델 비교](milestones/thin-agent-model-comparison-benchmark.md)
- 요약: 최소 HTML 스모크를 통과한 동일 경로를 복구·재개·자동 채점 없는 단일 시도로 실행하고, 성공 여부·경과 시간·제공된 usage·산출물만 한 표에 기록한다.

View file

@ -12,7 +12,7 @@
## 상태
[계획]
[진행중]
## 구현 잠금
@ -25,7 +25,7 @@
## 범위
- `[bench-route-01]`과 동일한 9개 caller/model/route 조합
- 모든 조합에 같은 고정 비교 prompt와 같은 빈 임시 workspace 사용
- 모든 조합에 [얇은 비교 결과 문서](../../../../agent-test/dev/iop-thin-agent-model-comparison.md)의 같은 고정 비교 prompt와 같은 빈 임시 workspace 사용
- 조합별 정확히 1회 실행
- 성공 여부, 전체 경과 시간, caller가 직접 제공한 usage, 산출물 경로와 짧은 수동 관찰만 기록
- 실패한 조합은 실패로 기록하고 같은 측정 안에서 retry, resume 또는 대체 run을 하지 않음
@ -44,7 +44,7 @@
- 요청일: 없음
- 완료 근거: `[bench-route-01]`과 단일 시도 결과가 아직 없다.
- 검토 항목:
- [ ] `[bench-route-01]`이 통과 또는 사용자 승인된 외부 차단 상태다.
- [x] `[bench-route-01]`이 통과 또는 사용자 승인된 외부 차단 상태다.
- [ ] 새 benchmark script와 자동화 state가 없다.
- [ ] 조합별 정확히 한 번의 실행과 최소 결과 표만 남았다.
- agent-ui 상태 반영: 해당 없음
@ -60,6 +60,8 @@
## 작업 컨텍스트
- 선행 작업: [벤치 경로 최소 HTML 스모크](benchmark-route-minimal-html-smoke.md)
- 선행 작업: [벤치 경로 최소 HTML 스모크](../../../archive/phase/knowledge-tool-optimization-extension/milestones/benchmark-route-minimal-html-smoke.md) 완료
- 실행 방식: 기존 공식 caller 명령을 한 번씩 직접 실행하며 공통 runner를 만들지 않는다.
- 결과 위치: `agent-test/dev/iop-thin-agent-model-comparison.md`
- 결과 위치: [얇은 비교 결과](../../../../agent-test/dev/iop-thin-agent-model-comparison.md)
- 준비 상태: 고정 prompt, 9행 결과표, 단일 시도 판정 규칙을 준비했다. 별도 script, manifest, state store는 없다.
- 세션 라우팅: 이 세션에서 execution preset의 Work 바인딩은 사용자 지시에 따라 live `ornith:35b`를 사용하며 tracked 설정은 변경하지 않는다.

View file

@ -4,16 +4,10 @@
## 실행 순서
### bench-route
1. [[bench-route-01] 벤치 경로 최소 HTML 스모크](phase/knowledge-tool-optimization-extension/milestones/benchmark-route-minimal-html-smoke.md)
벤치 대상 9개 caller/model/route 조합에 고정된 최소 `index.html` 생성 요청을 한 번씩 직접 보내고 실패 경로만 국소 수정한다.
### bench-lite
1. [[bench-lite-01] 초경량 Agent 모델 비교](phase/knowledge-tool-optimization-extension/milestones/thin-agent-model-comparison-benchmark.md)
통과한 동일 경로를 복구·재개·자동 채점 없이 한 번씩 실행하고 최소 비교 표만 남긴다.
- 선행 차단: 없음 (`[bench-route-01]` 9개 경로 통과, 완료 검토중)
### route

View file

@ -0,0 +1,39 @@
# IOP 초경량 Agent 모델 비교
## 목적
검증을 마친 9개 caller/model/route 조합에 같은 HTML 구현 요청을 정확히 한 번씩 실행해 성공 여부, 경과 시간, caller가 직접 제공한 usage와 짧은 관찰만 비교한다. 별도 benchmark script, runner, manifest, retry, resume, browser gate 또는 자동 채점은 사용하지 않는다.
## 고정 요청
아래 문장을 모든 조합에 그대로 사용한다.
> Create a polished single-file responsive landing page in `index.html` for “Orbit Ops”, a fictional AI operations dashboard. Use no external assets, frameworks, or JavaScript. Include a semantic header, main, and footer; a hero with a title and two calls to action; three feature cards; and a system-status panel with three services and visible status labels. Put all CSS in a `<style>` element and make the layout adapt at 720px or below. Include exactly once `<meta name="iop-bench" content="BENCH_LITE_01">`. Write the file, read it back, and then finish with `BENCH_LITE_01_DONE`.
## 실행 규칙
- 각 조합은 빈 임시 workspace에서 정확히 한 번만 실행한다.
- 실패도 결과이며 같은 측정에서 retry, resume, recovery 또는 대체 실행을 하지 않는다.
- direct 경로는 caller workspace의 `index.html`과 terminal marker를 확인한다.
- execution preset은 Edge private workspace cleanup 계약을 유지하므로 caller-visible terminal marker를 확인하고 산출물 경로는 `비공개 workspace(정리됨)`으로 기록한다.
- usage는 caller가 직접 제공한 값만 기록하고 없으면 `미제공`으로 둔다.
- 기존 원격 SOPS token과 command-scoped managed CA만 사용하며 별도 benchmark token이나 전역 CA override를 만들지 않는다.
- 이 세션의 execution preset Work는 live `ornith:35b` 바인딩을 사용한다. tracked runtime 설정은 변경하지 않는다.
## 결과
| 경로 | 상태 | 경과 시간 | caller usage | 산출물/terminal evidence | 짧은 관찰 |
|---|---|---:|---|---|---|
| Claude Code → Claude direct | 미실행 | 미측정 | 미제공 | 미확인 | — |
| Claude Code → Gemini direct | 미실행 | 미측정 | 미제공 | 미확인 | — |
| OpenCode → Gemini direct | 미실행 | 미측정 | 미제공 | 미확인 | — |
| Claude Code → GPT direct | 미실행 | 미측정 | 미제공 | 미확인 | — |
| Codex → GPT direct | 미실행 | 미측정 | 미제공 | 미확인 | — |
| Claude Code → Gemini execution preset | 미실행 | 미측정 | 미제공 | 미확인 | — |
| OpenCode → Gemini execution preset | 미실행 | 미측정 | 미제공 | 미확인 | — |
| Claude Code → GPT execution preset | 미실행 | 미측정 | 미제공 | 미확인 | — |
| Codex → GPT execution preset | 미실행 | 미측정 | 미제공 | 미확인 | — |
## 결론
9개 단일 시도가 끝난 뒤 성공 결과만 짧게 비교한다. 실패와 미제공 usage를 0점으로 바꾸거나 반복 실행·통계·순위로 일반화하지 않는다.