docs: complete thin benchmark route smoke
This commit is contained in:
parent
5d4c15c029
commit
e1069db981
4 changed files with 25 additions and 21 deletions
|
|
@ -61,9 +61,9 @@ Phase를 가로지르는 실제 다음 작업 선택은 [전역 마일스톤 실
|
|||
- 경로: [[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 스모크
|
||||
- 경로: [[bench-route-01] 벤치 경로 최소 HTML 스모크](milestones/benchmark-route-minimal-html-smoke.md)
|
||||
- 요약: 벤치에 사용할 9개 caller/model/route 조합을 고정된 최소 `index.html` 생성 요청으로 한 번씩 직접 호출하고, 실패한 경로만 귀속·국소 수정·재검증한다.
|
||||
- 요약: 벤치에 사용할 9개 caller/model/route 조합이 고정된 최소 `index.html` 생성 요청으로 모두 통과했고, 실패 경로만 귀속·국소 수정·재검증했다.
|
||||
|
||||
- [계획] [bench-lite-01] 초경량 Agent 모델 비교
|
||||
- 경로: [[bench-lite-01] 초경량 Agent 모델 비교](milestones/thin-agent-model-comparison-benchmark.md)
|
||||
|
|
|
|||
|
|
@ -12,7 +12,7 @@ IOP 전체 안정성을 처음부터 재검증하지 않고, 실패가 재현된
|
|||
|
||||
## 상태
|
||||
|
||||
[진행중]
|
||||
[검토중]
|
||||
|
||||
## 구현 잠금
|
||||
|
||||
|
|
@ -48,21 +48,21 @@ IOP 전체 안정성을 처음부터 재검증하지 않고, 실패가 재현된
|
|||
|
||||
### Epic: [route-smoke] 벤치 경로 초경량 확인
|
||||
|
||||
- [ ] [minimal-html-calls] 9개 조합에 동일한 최소 HTML 구현 요청을 한 번씩 직접 실행하고, 경로별 caller/model/route, terminal, 경과 시간, marker 확인 결과를 한 개의 Markdown 표에 기록한다. direct는 caller workspace 파일, Edge-owned execution preset은 caller-visible terminal output을 확인한다. 사설 dev CA가 필요한 호출은 caller가 공식 지원하는 command-scoped CA 변수에 managed CA bundle을 전달한다. Codex는 `CODEX_CA_CERTIFICATE`, Node 기반 caller는 필요한 경우 `NODE_EXTRA_CA_CERTS`를 사용한다. 검증: 새 runner/manifest 없이 각 행에 실제 호출 결과가 하나만 있어야 하며, 호출 전후 ambient Codex/IDE/shell 환경에는 CA 변수가 없어야 한다.
|
||||
- [ ] [failed-path-fixes] 실패한 조합마다 제품·caller·provider·환경 중 소유 경계를 기록하고, IOP 제품 결함이 재현된 경우에만 국소 수정과 focused regression을 수행한 뒤 해당 조합만 다시 호출한다. 검증: 성공한 조합의 반복 실행이 없고, 재실행 행에는 변경된 원인과 연결된 수정·테스트 근거가 있어야 한다.
|
||||
- [ ] [thin-bench-handoff] 9개 조합의 통과 또는 구체적 외부 차단 상태를 짧게 정리해 `[bench-lite-01]` 실행 가능 여부를 남긴다. 검증: 비교 점수나 순위가 아니라 호출 가능 여부와 남은 소유자만 기록한다.
|
||||
- [x] [minimal-html-calls] 9개 조합에 동일한 최소 HTML 구현 요청을 한 번씩 직접 실행하고, 경로별 caller/model/route, terminal, 경과 시간, marker 확인 결과를 한 개의 Markdown 표에 기록한다. direct는 caller workspace 파일, Edge-owned execution preset은 caller-visible terminal output을 확인한다. 사설 dev CA가 필요한 호출은 caller가 공식 지원하는 command-scoped CA 변수에 managed CA bundle을 전달한다. Codex는 `CODEX_CA_CERTIFICATE`, Node 기반 caller는 필요한 경우 `NODE_EXTRA_CA_CERTS`를 사용한다. 검증: 새 runner/manifest 없이 각 행에 실제 호출 결과가 하나만 있어야 하며, 호출 전후 ambient Codex/IDE/shell 환경에는 CA 변수가 없어야 한다.
|
||||
- [x] [failed-path-fixes] 실패한 조합마다 제품·caller·provider·환경 중 소유 경계를 기록하고, IOP 제품 결함이 재현된 경우에만 국소 수정과 focused regression을 수행한 뒤 해당 조합만 다시 호출한다. 검증: 성공한 조합의 반복 실행이 없고, 재실행 행에는 변경된 원인과 연결된 수정·테스트 근거가 있어야 한다.
|
||||
- [x] [thin-bench-handoff] 9개 조합의 통과 또는 구체적 외부 차단 상태를 짧게 정리해 `[bench-lite-01]` 실행 가능 여부를 남긴다. 검증: 비교 점수나 순위가 아니라 호출 가능 여부와 남은 소유자만 기록한다.
|
||||
|
||||
## 완료 리뷰
|
||||
|
||||
- 상태: 없음
|
||||
- 요청일: 없음
|
||||
- 완료 근거: 최소 HTML 호출 evidence가 아직 없다.
|
||||
- 상태: 검토중
|
||||
- 요청일: 2026-08-14
|
||||
- 완료 근거: 동일한 최소 HTML 요청으로 9개 caller/model/route 경로가 모두 통과했다. 실패 경로는 제품·provider·환경 경계로 귀속해 원인 변경 뒤에만 재검증했고, IOP 결함은 provider normalization과 focused regression으로 한정해 수정했다.
|
||||
- 검토 항목:
|
||||
- [ ] 새 benchmark script, runner, manifest, state store가 생성되지 않았다.
|
||||
- [ ] 성공 경로는 한 번만 실행했고 실패 경로만 변경된 원인 뒤 재검증했다.
|
||||
- [ ] 제품 수정은 재현된 결함과 focused regression으로 한정됐다.
|
||||
- [x] 새 benchmark script, runner, manifest, state store가 생성되지 않았다.
|
||||
- [x] 성공 경로는 한 번만 실행했고 실패 경로만 변경된 원인 뒤 재검증했다. 단, 사용자 지시의 세션 한정 hybrid Work 모델 전환 확인은 경로 복구 검증과 분리해 기록했다.
|
||||
- [x] 제품 수정은 재현된 결함과 focused regression으로 한정됐다.
|
||||
- agent-ui 상태 반영: 해당 없음
|
||||
- 리뷰 코멘트: 없음
|
||||
- 리뷰 코멘트: 제품·호출 경로 차단은 남지 않았으며 `[bench-lite-01]`의 단일 시도 비교를 시작할 수 있다. 표준 release tag finish는 다른 active release와 충돌하므로 배포 성공 판정과 분리해 남겨 둔다.
|
||||
|
||||
## 범위 제외
|
||||
|
||||
|
|
@ -79,8 +79,8 @@ IOP 전체 안정성을 처음부터 재검증하지 않고, 실패가 재현된
|
|||
- TLS 환경 경계: 개발 Edge용 사설 CA는 Edge leaf 인증서가 아니라 managed CA bundle을 해당 벤치 caller process에만 전달한다. Codex에는 공식 변수 `CODEX_CA_CERTIFICATE`, Node 기반 caller에는 필요한 경우 `NODE_EXTRA_CA_CERTS`를 사용하며 Codex/IDE 시작 환경이나 셸 전역에 `export`하지 않는다. 그렇지 않으면 공개 TLS 연결에도 같은 CA override가 적용될 수 있다.
|
||||
- evidence 위치: `agent-test/dev/iop-benchmark-route-minimal-html-smoke.md`
|
||||
- 현재 사전 확인: 2026-08-13 실제 원격 실행기에서 Claude Code 2.1.177과 Codex 0.146.0을 확인했고, 현재 workspace의 OpenCode 1.18.3을 별도 사용자 설정 변경 없이 command-scoped provider config로 준비했다. 원격 SOPS에 보관된 기존 IOP principal token으로 token 원문을 출력하지 않은 `/v1/models`가 HTTP 200임을 확인했다. 새 벤치 전용 token은 발급하거나 사용하지 않는다.
|
||||
- 현재 경로 결과: 9개 중 8개가 통과했고 OpenCode → Gemini direct만 정규화 코드의 live 배포 후 재검증을 남겼다. Claude Code → GPT direct는 caller-neutral operation normalization 반영 뒤 9초에 통과했고, Codex → GPT direct와 Codex → GPT execution preset도 각각 10초/16초에 통과했다. OpenCode → Gemini execution preset은 `ornith-fast` Node 복구 후 19초에 통과했다. 이후 사용자 지시로 이 세션의 hybrid Work 바인딩만 `ornith:35b`로 임시 전환했고, Claude Code → GPT execution preset은 71초, OpenCode → Gemini execution preset은 51초에 terminal success·caller marker·오류 0으로 통과했다.
|
||||
- 추가 분리 결과: 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 연속 호출 회귀가 통과했다. 코드는 `dev`에 반영됐지만 live 재검증은 표준 배포 전이다. Codex → GPT direct의 최초 실패는 CA bundle 대신 Edge leaf 인증서를 전달한 측정 환경 결함이었다. Claude Code → Gemini/GPT preset의 이전 default-selector 및 profile operation normalization 결함도 국소 수정과 회귀 검증이 완료됐다.
|
||||
- 배포 경계: live dev는 이전 release를 실행 중이고, 원격에 이전부터 미종료 release branch 두 건이 남아 있다. `dev-runtime-deploy` fail-closed 규칙에 따라 새 release 생성·배포·tag 반영은 시작하지 않았다. 이 Git release 상태는 벤치 성공 판정이 아니라 제품 배포 경계에서 별도로 정리해야 한다.
|
||||
- 현재 경로 결과: 9개가 모두 통과했다. Claude Code → GPT direct는 caller-neutral operation normalization 반영 뒤 9초, Codex → GPT direct와 Codex → GPT execution preset은 각각 10초/16초에 통과했다. OpenCode → Gemini execution preset은 `ornith-fast` Node 복구 뒤 19초에 통과했다. 이후 사용자 지시로 이 세션의 hybrid Work 바인딩만 `ornith:35b`로 임시 전환했고, Claude Code → GPT execution preset은 71초, OpenCode → Gemini execution preset은 51초에 terminal success·caller marker·오류 0으로 통과했다. 마지막 OpenCode → Gemini direct는 normalization 포함 dev 배포 뒤 11초에 `glob`/`write`/`read`, terminal marker, exact `index.html`을 확인했다.
|
||||
- 추가 분리 결과: 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)
|
||||
|
|
|
|||
|
|
@ -13,7 +13,7 @@
|
|||
|
||||
1. [[bench-lite-01] 초경량 Agent 모델 비교](phase/knowledge-tool-optimization-extension/milestones/thin-agent-model-comparison-benchmark.md)
|
||||
통과한 동일 경로를 복구·재개·자동 채점 없이 한 번씩 실행하고 최소 비교 표만 남긴다.
|
||||
- 선행 차단: `[bench-route-01]`
|
||||
- 선행 차단: 없음 (`[bench-route-01]` 9개 경로 통과, 완료 검토중)
|
||||
|
||||
### route
|
||||
|
||||
|
|
|
|||
|
|
@ -26,7 +26,7 @@
|
|||
|---|---|---|---|
|
||||
| Claude Code → Claude direct | 통과 | 없음 | 기존 성공 |
|
||||
| Claude Code → Gemini direct | 통과 | 없음 | 기존 성공 |
|
||||
| OpenCode → Gemini direct | 6초, 첫 `glob` tool 성공 뒤 두 번째 provider 호출 HTTP 400 | provider normalization 구현·`dev` 반영 완료; live 배포 뒤 재검증 대기 | 선택된 Gemini Chat profile의 `thought_signature`를 표준 caller history로 왕복하지 못한 IOP 결함; agy는 구현 Agent 부적합으로 대상 제외 |
|
||||
| OpenCode → Gemini direct | 6초, 첫 `glob` tool 성공 뒤 두 번째 provider 호출 HTTP 400 | normalization 포함 dev 배포 뒤 11초 통과; `glob`/`write`/`read`, terminal marker와 exact `index.html` 확인 | 선택된 Gemini Chat profile의 `thought_signature`를 표준 caller history로 왕복하지 못한 IOP 결함 수정; agy는 구현 Agent 부적합으로 대상 제외 |
|
||||
| Claude Code → GPT direct | provider HTTP 400 | operation normalization 반영 뒤 9초, caller success, `index.html` marker 1회 | IOP가 tools+effort를 Chat으로 보낸 결함 수정 확인 |
|
||||
| Codex → GPT direct | 30초, `turn.failed`, 파일 없음 | 공식 설정대로 임시 `CODEX_HOME`, Responses 전용 provider, `CODEX_CA_CERTIFICATE`에 CA bundle을 사용해 10초 통과 | 측정 환경 결함: 첫 호출은 CA bundle 대신 Edge leaf 인증서를 사용 |
|
||||
| Claude Code → Gemini execution preset | 184초, caller terminal success, caller workspace 파일 없음 | 새 배포에서 33초 caller 정상 종료; Plan/Work/Review, workspace write/read/list, artifact 3개 cleanup 성공 | default-selector dispatch 결함 해소; terminal 문구에 marker가 없는 것은 caller-visible 결과 판정과 분리 |
|
||||
|
|
@ -34,7 +34,7 @@
|
|||
| Claude Code → GPT execution preset | provider 전 `messages[1].role` 검증 거절, 입력 normalize 후 Work `validation` | `timings` normalize가 포함된 live release에서 통과; 세션 한정 Work `ornith:35b`에서 71초·caller terminal success·marker 확인·오류 0 | mid-conversation system 입력과 provider `timings` 정규화 누락이었으며 국소 수정 후 해소 |
|
||||
| Codex → GPT execution preset | 16초, `turn.completed`, terminal marker 1회 | 없음 | 통과 |
|
||||
|
||||
추가 API 분리에서는 동일 principal의 최소 `/v1/responses`가 HTTP 200이었다. Codex direct도 사용자 설정과 로그인 상태를 배제한 임시 `CODEX_HOME`, Responses 전용 custom provider, 원격 SOPS의 기존 token, command-scoped managed CA bundle으로 통과했다. OpenCode direct는 command-scoped `OPENCODE_CONFIG_CONTENT`와 원격 SOPS의 기존 token을 사용해 user config를 변경하지 않았다. 첫 `glob` tool까지 성공했으나 caller가 Gemini provider extension을 표준 Chat history에 보존하지 않아 다음 요청이 `thought_signature` 누락 HTTP 400으로 실패했다. 이는 OpenCode 전용 문제가 아니라 selected Gemini Chat provider normalization 누락으로 분류했다.
|
||||
추가 API 분리에서는 동일 principal의 최소 `/v1/responses`가 HTTP 200이었다. Codex direct도 사용자 설정과 로그인 상태를 배제한 임시 `CODEX_HOME`, Responses 전용 custom provider, 원격 SOPS의 기존 token, command-scoped managed CA bundle으로 통과했다. OpenCode direct는 command-scoped `OPENCODE_CONFIG_CONTENT`와 원격 SOPS의 기존 token을 사용해 user config를 변경하지 않았다. 최초 실행은 첫 `glob` tool 뒤 caller가 Gemini provider extension을 표준 Chat history에 보존하지 않아 다음 요청이 `thought_signature` 누락 HTTP 400으로 실패했다. 이는 OpenCode 전용 문제가 아니라 selected Gemini Chat provider normalization 누락으로 분류했다. IOP가 opaque signature를 선택된 Gemini Chat wire에서만 tool-call id에 캡슐화·복원하도록 수정한 dev 배포 뒤에는 `glob`/`write`/`read` 연속 호출, terminal marker, exact `index.html`이 11초 안에 모두 통과했다.
|
||||
|
||||
두 preset 최초 실패는 provider 자체 실패가 아니었다. 코드 대조에서 `default` resource selector가 의도적으로 빈 provider ID를 동결하는 반면 사후 검증은 pool이 정상 선택한 실제 provider ID와 무조건 같아야 한다고 요구한 결함을 확인했다. explicit selector의 provider ID와 profile/model/credential/path fence는 유지하고, default selector만 pool 선택을 인정했다. 재배포 뒤 Gemini preset은 전체 stage와 workspace lifecycle이 통과했다. GPT preset은 다음 경계까지 진행해 실제 OpenAI Chat 응답의 `service_tier`, `system_fingerprint`, `annotations`, null `refusal`을 private strict decoder가 거부하는 별도 normalize 누락을 드러냈다. 공통 provider-normalization 계층에서 Chat/Responses 결과를 같은 canonical stage envelope로 수렴시키는 국소 회귀가 통과했다.
|
||||
|
||||
|
|
@ -46,8 +46,12 @@ OpenCode → Gemini execution preset의 최초 실행은 Plan을 정상 통과
|
|||
|
||||
사용자 지시에 따라 이 세션의 live execution preset만 Work 바인딩 네 곳을 `ornith-fast`에서 `ornith:35b`로 임시 전환했다. Plan/Review 모델과 tracked 설정은 변경하지 않았고, runtime config의 원본 백업을 남겼다. config check, refresh dry-run, apply가 재시작 없이 통과했다. 임시 경로에서 Claude Code → GPT execution preset은 71초, OpenCode → Gemini execution preset은 51초에 각각 terminal success와 caller-visible marker를 남겼고 오류는 없었다. 두 경로의 caller 로컬에 `index.html`이 남지 않은 것은 preset workspace 정리 계약과 일치한다.
|
||||
|
||||
## 재개 조건
|
||||
## 완료 및 인계
|
||||
|
||||
Gemini Chat tool-call normalization 코드는 `dev` commit `d99305d1`과 merge `dc2d9968`로 반영됐다. 9개 경로 중 8개는 통과했고, 남은 경로는 이 코드의 live 배포가 필요한 OpenCode → Gemini direct 하나다. 현재 live dev는 이전 release를 실행 중이며, 원격에 이전부터 미종료 release branch 두 건이 남아 표준 `dev-runtime-deploy`가 새 release를 시작하지 않고 fail-closed했다. 해당 Git release 상태를 별도로 정리한 뒤 표준 배포를 수행하고 남은 direct 경로만 1회 재검증한다. 제품 전체 capacity gate나 unrelated 운영 라우트는 이 얇은 경로 검증의 판정 기준으로 섞지 않는다.
|
||||
Gemini Chat tool-call normalization 코드는 `dev` commit `d99305d1`과 merge `dc2d9968`로 반영됐고, 이를 포함한 source `de35e6d4`로 Edge와 macOS/Linux/Windows Node 네 대를 다시 빌드·배포했다. 빌드 전후 전체 Go package 49개가 각각 통과했고, 네 Node의 연결·provider health 및 OneX `ornith:35b`/RTX `ornith-fast`의 Chat·Responses capacity smoke 네 건도 별도 배포 검증으로 통과했다. 이 capacity smoke는 9개 얇은 경로의 성공 판정에는 섞지 않았다.
|
||||
|
||||
OpenCode → Gemini direct 재검증까지 끝나 9개 경로가 모두 통과했다. 새 benchmark script, runner, manifest 또는 retry state는 만들지 않았다. `[bench-lite-01]`은 이 9개 경로를 그대로 사용해 조합별 단일 시도 비교를 시작할 수 있다.
|
||||
|
||||
배포된 source는 원격 `archive/release-dev-1019-de35e6d`에 보존했다. 배포 직후 `origin/dev`에 별도 framework 동기화가 추가되고 다른 active release가 생겨 표준 release tag finish는 fail-closed 상태로 분리했다. 이는 live dev 배포와 9개 호출 성공에는 영향을 주지 않으며, 해당 release가 정리된 뒤 별도 Git bookkeeping으로 마쳐야 한다.
|
||||
|
||||
성공한 경로는 반복하지 않는다. 실패한 경로는 원인이 변경된 경우에만 해당 경로를 1회 재검증한다.
|
||||
|
|
|
|||
Loading…
Reference in a new issue