docs(bench): caller와 preset 측정 경계를 분리한다

This commit is contained in:
toki 2026-08-13 23:41:03 +09:00
parent 2df72b21f1
commit 6058f422ab
2 changed files with 14 additions and 14 deletions

View file

@ -34,8 +34,8 @@ IOP 전체 안정성을 처음부터 재검증하지 않고, 실패가 재현된
- agy → Gemini execution preset
- Claude Code → GPT execution preset
- Codex → GPT execution preset
- 모든 경로에 같은 요청을 사용한다: 외부 asset과 JavaScript 없이 exact marker가 있는 단일 `index.html`생성하고 종료한다.
- 각 경로는 최초 1회만 실행하고 120초 안에 terminal`index.html` 생성 여부를 확인한다.
- 모든 경로에 같은 구현 요구를 사용한다: 외부 asset과 JavaScript 없이 exact marker가 있는 단일 `index.html`구현하고 종료한다.
- 각 경로는 최초 1회만 실행하고 120초 안에 terminal을 확인한다. direct 경로는 caller workspace의 `index.html`, Edge-owned execution preset은 비공개 workspace 정리 계약 때문에 caller 로컬 파일이 아니라 caller-visible `decision.output`의 완료·marker를 판정한다.
- 실패하면 자동 retry나 전체 재실행을 하지 않는다. sanitized terminal/error와 IOP request stage만 확인해 소유 경계를 정하고, 변경된 원인이 있을 때 실패 경로만 1회 재검증한다.
- 제품 코드를 수정한 결함에는 해당 소유 package의 focused regression test를 추가하고 관련 Go test를 실행한다.
@ -43,7 +43,7 @@ IOP 전체 안정성을 처음부터 재검증하지 않고, 실패가 재현된
### Epic: [route-smoke] 벤치 경로 초경량 확인
- [ ] [minimal-html-calls] 9개 조합에 동일한 최소 HTML 요청을 한 번씩 직접 실행하고, 경로별 caller/model/route, terminal, 경과 시간, `index.html` marker 확인 결과를 한 개의 Markdown 표에 기록한다. 사설 dev CA가 필요한 호출은 `SSL_CERT_FILE``NODE_EXTRA_CA_CERTS`를 해당 caller process에만 command-scoped로 전달한다. 검증: 새 runner/manifest 없이 각 행에 실제 호출 결과가 하나만 있어야 하며, 호출 전후 ambient Codex/IDE/shell 환경에는 CA 변수가 없어야 한다.
- [ ] [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]` 실행 가능 여부를 남긴다. 검증: 비교 점수나 순위가 아니라 호출 가능 여부와 남은 소유자만 기록한다.
@ -71,9 +71,9 @@ IOP 전체 안정성을 처음부터 재검증하지 않고, 실패가 재현된
- 계획 범위: 짧은 단일 test plan으로 즉시 실행할 수 있게 유지한다. 별도 설계·SDD·다단계 복구 계획으로 확장하지 않는다.
- 실행 방식: 기존 공식 caller 명령을 한 번씩 직접 실행한다. 공통화가 필요해 보여도 이 Milestone에서는 script로 승격하지 않는다.
- TLS 환경 경계: 개발 Edge용 사설 CA는 해당 벤치 caller process에만 전달한다. `SSL_CERT_FILE``NODE_EXTRA_CA_CERTS` Codex/IDE 시작 환경이나 셸 전역에 `export`하지 않는다. 그렇지 않으면 공개 TLS 연결에도 같은 CA override가 적용될 수 있다.
- 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.228, agy 1.1.12, Codex 0.147.0을 확인했고, 원격 SOPS에 보관된 기존 IOP principal token으로 token 원문을 출력하지 않은 `/v1/models`가 HTTP 200임을 확인했다. 새 벤치 전용 token은 발급하거나 사용하지 않는다.
- 현재 사전 확인: 2026-08-13 실제 원격 실행기에서 Claude Code 2.1.177, agy 1.1.12, Codex 0.146.0을 확인했고, 원격 SOPS에 보관된 기존 IOP principal token으로 token 원문을 출력하지 않은 `/v1/models`가 HTTP 200임을 확인했다. 새 벤치 전용 token은 발급하거나 사용하지 않는다.
- 현재 경로 결과: Claude Code → Claude direct와 Claude Code → Gemini direct는 최소 HTML 1회 호출을 통과했다. Claude Code → GPT direct는 Chat Completions의 tools+reasoning 조합 미지원으로 실패했고, IOP provider operation normalization 결함으로 귀속했다. caller-neutral operation 선택, Messages↔Responses 변환, nearest-lower effort mapping의 focused regression은 통과했으며 개발 런타임 재검증이 남아 있다.
- 추가 분리 결과: agy → Gemini direct는 누락된 caller `modelProvider=gemini`를 보정한 뒤 공식 URL-encoded model label을 IOP Gemini path parser가 거부하는 제품 결함까지 좁혔다. Codex → GPT direct는 같은 principal의 직접 `/v1/responses`가 200인 반면 caller가 `turn.failed`로 끝나 caller TLS/transport 호환 경계로 분류했다. Claude Code → Gemini preset은 caller terminal success에도 184초와 caller workspace 산출물 부재로 preset workspace 반환 경계 실패로 분류했다.
- 추가 분리 결과: agy → Gemini direct는 누락된 caller `modelProvider=gemini`를 보정한 뒤 공식 URL-encoded model label을 IOP Gemini path parser가 거부하는 제품 결함까지 좁혔다. Codex → GPT direct의 최초 실패는 CA bundle 대신 Edge leaf 인증서를 전달한 측정 환경 결함이었고, 공식 Responses custom provider와 command-scoped managed CA bundle으로 바꾼 재검증은 10초 안에 `turn.completed``index.html` 생성을 통과했다. Claude Code → Gemini preset의 caller workspace 파일 부재는 Edge-owned 비공개 workspace 정리 계약상 정상이라 측정 판정을 바로잡았고, 184초로 120초 상한을 넘은 지연과 최초 terminal marker 미수집만 별도 실패로 남겼다.
- 후속 측정: [초경량 Agent 모델 비교](thin-agent-model-comparison-benchmark.md)

View file

@ -6,16 +6,16 @@
## 고정 요청
빈 임시 workspace에 외부 asset과 JavaScript 없이 단일 `index.html`만든다. 문서에는 `<!doctype html>`, `<title>IOP Route Smoke</title>`, `<h1>IOP_ROUTE_SMOKE_OK</h1>`이 정확히 한 번씩 있어야 하며 파일 생성 뒤 종료한다.
외부 asset과 JavaScript 없이 단일 `index.html`구현한다. 문서에는 `<!doctype html>`, `<title>IOP Route Smoke</title>`, `<h1>IOP_ROUTE_SMOKE_OK</h1>`이 정확히 한 번씩 있어야 한다. direct 경로는 빈 caller workspace의 파일을 확인한다. Edge-owned execution preset은 비공개 workspace가 완료 전에 정리되는 제품 계약을 따르므로 caller 로컬 파일이 아니라 terminal `decision.output`의 완료·marker를 확인한다.
## 사전 확인 — 2026-08-13
| 항목 | 결과 |
|---|---|
| Claude Code | 2.1.228 확인 |
| Claude Code | 실제 원격 실행기 2.1.177 확인 |
| agy | 1.1.12 확인 |
| Codex | 0.147.0 확인 |
| managed CA | live Edge certificate 확인 |
| Codex | 실제 원격 실행기 0.146.0 확인 |
| managed CA | live Edge CA bundle 확인 |
| principal token | 원격 SOPS의 기존 두 token 사용; 별도 benchmark token 미사용 |
| public `/v1/models` | 두 기존 token 모두 HTTP 200, route 9개 확인 |
| ambient CA override | 호출 전후 unset 확인 |
@ -28,13 +28,13 @@
| Claude Code → Gemini direct | 통과 | 없음 | 기존 성공 |
| agy → Gemini direct | 1초, caller login 요구 | `modelProvider=gemini` 보정 뒤 8초, HTTP 400 | IOP Gemini path가 공식 URL-encoded model label을 거부 |
| Claude Code → GPT direct | provider HTTP 400 | 새 normalization 배포 대기 | IOP가 tools+effort를 Chat으로 보낸 결함 |
| Codex → GPT direct | 30초, `turn.failed`, 파일 없음 | 없음 | 직접 `/v1/responses`는 200; Codex custom-provider/TLS transport 경계 |
| Claude Code → Gemini execution preset | 184초, caller terminal success, caller workspace 파일 없음 | 없음 | 120초 초과와 preset workspace 산출물 반환 경계 |
| 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 파일 없음 | 판정 정정: caller 파일 부재는 정상, 120초 초과는 실패 | 측정 판정 결함과 preset 지연을 분리; terminal marker는 최초 결과에서 미수집 |
| agy → Gemini execution preset | 미실행 | direct parser 수정 배포 대기 | 선행 결함 |
| Claude Code → GPT execution preset | 미실행 | normalization 배포 대기 | 선행 결함 |
| Codex → GPT execution preset | 미실행 | Codex transport 분리 대기 | 선행 결함 |
| Codex → GPT execution preset | 미실행 | direct 통과, 1회 실행 가능 | 선행 결함 해소 |
추가 API 분리에서는 동일 principal의 최소 `/v1/responses`가 HTTP 200이었다. Gemini-native 최소 요청은 canonical caller model id에서 HTTP 200, 공식 표시 label `Gemini 3.6 Flash`에서 HTTP 400으로 갈려 path parser 결함을 재현했다.
추가 API 분리에서는 동일 principal의 최소 `/v1/responses`가 HTTP 200이었다. Codex direct도 사용자 설정과 로그인 상태를 배제한 임시 `CODEX_HOME`, Responses 전용 custom provider, 원격 SOPS의 기존 token, command-scoped managed CA bundle으로 통과했다. Gemini-native 최소 요청은 canonical caller model id에서 HTTP 200, 공식 표시 label `Gemini 3.6 Flash`에서 HTTP 400으로 갈려 path parser 결함을 재현했다.
## 재개 조건