iop/agent-test/dev/iop-thin-agent-model-comparison.md

161 lines
23 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# IOP 초경량 Agent 모델 비교
## 목적
검증을 마친 9개 caller/model/route 조합에 같은 HTML 구현 요청을 정확히 한 번씩 실행한다. 운영 결과와 산출물 품질을 분리하고, 품질은 실행 전에 잠근 공통 100점 기준표로 산출물별 정확히 한 번 깊게 분석한다. 별도 benchmark script, runner, judge, manifest, retry, resume 또는 자동 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` on its own line followed by the exact full `index.html` in one `html` fenced code block.
입력을 교체할 때는 이 블록과 아래 `A. 요청 충족` 체크리스트만 실행 전에 함께 바꾸고 고정한다. 나머지 평가 축과 실행 방식은 유지한다.
## 실행 규칙
- 재측정은 다른 benchmark·agent producer가 없고 provider queue/in-flight가 비어 있음을 직전에 확인한 뒤 완전 순차로 수행한다. 이 무경합 상태를 증명하지 못한 행은 실행 결과는 보존하되 속도 비교에서 제외한다.
- 각 조합은 빈 임시 workspace에서 정확히 한 번만 실행한다.
- 실패도 결과이며 같은 측정에서 retry, resume, recovery 또는 대체 실행을 하지 않는다.
- 모든 행은 caller 명령 바깥에서 같은 clock으로 `request_sent_at`, `terminal_received_at`과 monotonic elapsed를 기록한다. caller 내부 duration, API duration과 TTFT는 별도 보조 지표이며 외부 완료 시간 대신 사용하지 않는다.
- direct 경로는 caller workspace의 `index.html`과 terminal marker를 확인한다.
- execution preset은 request ID와 Plan/Work/Review/Repair stage별 시작·종료, 실제 선택 model, terminal/error, 최종 workspace 및 caller-visible 응답 상태를 기록한다. Edge private workspace cleanup 계약을 유지하므로 caller-visible terminal marker와 최종 응답의 exact HTML code block도 확인한다.
- usage는 caller가 직접 제공한 값만 기록하고 없으면 `미제공`으로 둔다.
- 기존 원격 SOPS token과 command-scoped managed CA만 사용하며 별도 benchmark token이나 전역 CA override를 만들지 않는다.
- 이 세션의 execution preset Work는 live `ornith-fast` 바인딩을 사용한다. tracked runtime 설정은 변경하지 않는다.
- 각 exact HTML source와 SHA-256, `1440×900` desktop 및 `390×844` mobile render만 ignored run evidence에 보존한다. render는 품질 분석 입력이지 제품 경로의 pass/fail gate가 아니다.
- full source를 얻지 못한 실행은 `실행 실패`와 별개로 `채점 불가`로 기록하며 0점으로 바꾸지 않는다.
- scorable source에는 실행 후 opaque 평가 ID를 부여한다. 단일 평가 pass에는 ID, source와 두 render만 제공하고 route·model·시간·usage 매핑은 점수와 evidence가 고정된 뒤 결합한다.
## 이전 실행 결과 — 시간 비교 무효
아래 결과는 무경합 상태를 증명하지 않았고 외부 요청·완료 시각을 일관되게 기록하지 못했다. 산출물과 caller raw evidence는 참고용으로 보존하지만 경과 시간, 속도 순위와 모델 간 시간 차이는 비교 근거로 사용하지 않는다. 특히 OpenCode → Gemini execution preset의 `0초`는 요청 전체 시간이 아니라 마지막 내부 이벤트 간격을 잘못 사용한 값이다.
| 경로 | 평가 ID | 상태 | 경과 시간 | caller usage | source SHA-256 / terminal evidence | 짧은 관찰 |
|---|---|---|---:|---|---|---|
| Claude Code → Claude direct | E08 | 성공 | 83.745초 | input 5, cache create 15,062, cache read 10,396, output 11,622 | `e15fc6f3295438a0a384d41b15e38fe793d842760d505003345cfede56612bf1` / marker 확인 | exact workspace source 및 사용자 승인 동일 viewport render 확보 |
| Claude Code → Gemini direct | E05 | 성공 | 80.363초 | input 41,736, output 10,858 | `7dc4d4d520c28504135ad81c7594599a0aef15f3be4f1e486db0bafd2908fbcd` / marker 확인 | exact workspace source 및 사용자 승인 동일 viewport render 확보 |
| OpenCode → Gemini direct | E01 | 성공 | 77초 | input 12,285, cache read 24,478, output 4,482, total 41,245 | `c83a046c9ebe6aa2bdeb4954ecad37312abd362caa30c20041862ca65edd6aeb` / marker 확인 | exact workspace source 및 사용자 승인 동일 viewport render 확보 |
| Claude Code → GPT direct | E09 | 성공 | 63.757초 | input 31,056, output 12,377 | `b256b53042b4e4d1bfe49c1a36175c0e1055fe30f6d813995f59dfd98457e6a8` / marker 확인 | exact workspace source 및 사용자 승인 동일 viewport render 확보 |
| Codex → GPT direct | E03 | 성공 | 미제공 | input 58,576, cached input 38,245, cache write input 20,106, output 9,007, reasoning output 369 | `2cf8cd8782e5b10b70c09674b7c2b768ccc96c41e57107df63abfec66b434b01` / terminal marker 확인 | exact workspace source 및 사용자 승인 동일 viewport render 확보 |
| Claude Code → Gemini execution preset | E04 | 실행 실패 | 37.532초 | input 0, output 0 | source 없음 / `API Error: single-request execution failed` | sole invocation exit 1; 재시도하지 않음 |
| OpenCode → Gemini execution preset | E07 | 성공 | 0초 | input 0, output 0 | `a9966cac565854c69c56d5c288ae92519e45f9c1686f80df0008559f46cab958` / terminal marker 확인 | terminal exact fence 추출 및 사용자 승인 동일 viewport render 확보 |
| Claude Code → GPT execution preset | E06 | 응답 불완전 | 89.870초 | input 0, output 0 | source 없음 / terminal marker·exact fence 없음 | 완료 문구만 반환해 채점 불가; 재시도하지 않음 |
| Codex → GPT execution preset | E02 | 성공 | 미제공 | input 123,280, cached input 39,124, cache write input 83,814, output 7,557, reasoning output 372 | `c7760fcffe964ffe7189a600d47534bab9731fe158f49b169c6461d83324838c` / terminal marker 확인 | terminal exact fence 추출 및 사용자 승인 동일 viewport render 확보 |
## 무경합 재측정 결과
| 경로 | 상태 | 무경합 snapshot | request sent UTC | terminal received UTC | 외부 elapsed | caller duration / API / TTFT | usage | source / terminal evidence |
|---|---|---|---|---|---:|---|---|---|
| Claude Code → Claude direct | 성공 | 전·후 전체 provider 0/0 | 01:52:43.409486Z | 01:53:59.498224Z | 75.90초 | 74.903 / 74.749 / 3.095초 | input 1,611, cache create 57,891, cache read 143,478, output 10,194 | `9799165…` / workspace·marker·exact fence 확인 |
| Claude Code → Gemini direct | 성공 | 전·후 전체 provider 0/0 | 01:53:59.616028Z | 01:55:08.426345Z | 68.70초 | 68.376 / 68.238 / 2.762초 | input 173,200, cache read 105,925, output 9,794 | `af47386e…` / workspace·marker·exact fence 확인 |
| OpenCode → Gemini direct | 성공 | 전·후 전체 provider 0/0 | 01:55:40.157414Z | 01:56:37.319047Z | 57.12초 | 미제공 | input 27,715, cache read 40,730, output 8,572 | `d01d95a9…` / workspace·marker·exact fence 확인 |
| Claude Code → GPT direct | 응답 성공·workspace 계약 실패 | 전·후 전체 provider 0/0 | 01:46:31.303629Z | 01:47:48.560195Z | 77.21초 | 76.369 / 76.066 / 8.436초 | input 228,616, output 10,447 | `48ebe9d6…` / terminal marker·exact fence 확인, caller workspace 파일 없음 |
| Codex → GPT direct | 성공 | 전·후 전체 provider 0/0 | 01:49:58.485953Z | 01:50:50.862758Z | 52.33초 | 미제공 | input 59,604, cached 41,277, cache write 18,312, output 9,306, reasoning 335 | `d1b84b60…` / workspace·marker·exact fence 확인 |
| Claude Code → Gemini execution preset | 실행 성공·응답 계약 실패·채점 불가 | 전·후 전체 provider 0/0 | 01:19:09.286756Z | 01:20:06.283012Z† | 56.92초 | 55.606 / 55.551 / 0.056초 | input 0, output 0 | source·marker·exact fence 없음; 완료 요약만 반환 |
| OpenCode → Gemini execution preset | 성공 | 전·후 전체 provider 0/0 | 01:21:25.551427Z | 01:22:33.691427Z† | 68.14초 | 미제공 | input 0, output 0 | `08171098…` / marker·exact fence 확인 |
| Claude Code → GPT execution preset | 실행 성공·응답 계약 실패·채점 불가 | 전·후 전체 provider 0/0 | 01:25:53.618193Z | 01:26:48.838192Z† | 55.22초 | 54.066 / 102.730 / 0.097초 | input 0, output 0 | source·marker·exact fence 없음; 승인 요약만 반환 |
| Codex → GPT execution preset | 성공 | 전·후 전체 provider 0/0 | 01:30:03.418438Z | 01:30:57.998437Z† | 54.58초 | 미제공 | input 123,197, cached 39,023, cache write 83,832, output 7,772, reasoning 311 | `bcf6aa0b…` / workspace·marker·exact fence 확인 |
† preset 네 행은 controller 후처리 단절 때문에 `request_sent_at + /usr/bin/time real`로 종료 시각을 산출했다. OpenCode 행의 terminal event `01:22:33.614Z`가 이 산출값과 0.077초 이내로 일치한다. direct 다섯 행은 caller 종료 직후 같은 외부 clock으로 직접 관찰했다. 모든 유효 행은 직전 pre-status와 직후 post-status에서 전체 provider의 `in_flight=0`, `queued=0`을 확인했으며 서로 시간 구간이 겹치지 않는다.
## Preset 단계 진단
| 경로 | request ID | Plan | Work | Review | Repair | 실패 소유 stage / 직접 오류 | 최종 workspace | caller-visible terminal |
|---|---|---|---|---|---|---|---|---|
| Claude Code → Gemini execution preset | caller 미노출 | `Planning` 확인, ID/model/time 미노출 | `Executing` 확인, ID/model/time 미노출 | `Reviewing` 확인, ID/model/time 미노출 | 실행 증거 없음 | stage 오류 없음. 최종 caller projection이 완료 요약만 남겨 exact source 계약 실패 | private workspace 미노출·cleanup 계약 | marker·fence 없음 |
| OpenCode → Gemini execution preset | caller 미노출 | stage event 미노출 | stage event 미노출 | stage event 미노출 | stage event 미노출 | terminal exact source 반환 성공; 내부 stage별 관찰성은 없음 | private workspace 미노출·cleanup 계약 | marker·fence 확인 |
| Claude Code → GPT execution preset | caller 미노출 | `Planning` 확인, ID/model/time 미노출 | `Executing` 확인, ID/model/time 미노출 | `Reviewing` 확인, ID/model/time 미노출 | 실행 증거 없음 | stage 오류 없음. 최종 caller projection이 승인 요약만 남겨 exact source 계약 실패 | private workspace 미노출·cleanup 계약 | marker·fence 없음 |
| Codex → GPT execution preset | caller 미노출 | stage event 미노출 | stage event 미노출 | stage event 미노출 | stage event 미노출 | terminal exact source 반환 성공; 내부 stage별 관찰성은 없음 | caller workspace source 확인 | marker·fence 확인 |
동일 preset이 OpenCode·Codex에서는 exact source를 반환하고 Claude Code에서만 요약으로 축약됐다. 따라서 두 preset 실패의 현재 소유 후보는 Plan/Work/Review provider가 아니라 Claude-compatible caller 응답 정규화 또는 최종 terminal projection 계층이다. 다만 request ID와 stage별 실제 model/time이 caller evidence에 노출되지 않아 정확한 내부 함수 단위까지는 단정하지 않는다. 이는 별도의 관찰성 공백이다.
## 공통 평가 기준표 — 100점
평가자는 route, model, 경과 시간과 usage를 보지 않고 opaque 평가 ID, exact source와 두 고정 viewport render만 사용한다. `A`는 명시된 세부 점수를 합산한다. `B`~`D`의 각 5점 항목은 `5=명확히 충족`, `3=대체로 충족하나 눈에 띄는 결함 1개`, `1=일부 흔적만 있거나 결함이 여러 개`, `0=없거나 깨짐`의 네 anchor만 사용한다. 중간 점수는 쓰지 않는다.
| 축 | 세부 기준 | 배점 | 허용 점수 |
|---|---|---:|---|
| A. 요청 충족 | 완전한 HTML 문서 4, 내부 `<style>` 4, 외부 asset/framework 없음 4, JavaScript 없음 4, exact meta 1회 4 | 20 | 세부 항목별 0 또는 4 |
| A. 요청 충족 | `header/main/footer` 3, hero title+CTA 2개 4, feature card 3개 4, service 3개+visible label 4, 720px 이하 실제 breakpoint 5 | 20 | 명시 세부 점수만 합산 |
| B. 반응형·레이아웃 | desktop hierarchy, mobile reflow, overflow/clipping 방지, component/readability consistency | 20 | 각 0/1/3/5 |
| C. 사용성·접근성 | heading/landmark 구조, CTA 의미·focus, status의 non-color cue, viewport·대비·가독성 | 20 | 각 0/1/3/5 |
| D. 시각 완성도 | 정보 위계, palette/type/spacing, component/status cohesion, polish/distinctiveness | 20 | 각 0/1/3/5 |
총점은 `A+B+C+D`의 단순 합이며 별도 가중·정규화·상대 순위 보정은 없다. 요구 위반은 해당 `A` 점수에서만 반영하고 같은 결함을 다른 축에서 중복 감점하지 않는다. 단, 그 위반이 실제 레이아웃·사용성·시각 결함을 별도로 만든 경우에는 해당 render 증거를 적고 감점할 수 있다.
## 이전 단일 평가 기록 — 모바일 렌더 무효
아래 점수는 이전 Chrome 실행이 390px 이미지에 더 넓은 내부 CSS viewport를 잘라 넣은 사실을 뒤늦게 확인했으므로 품질 비교에도 사용하지 않는다. 당시 공통으로 관찰한 horizontal clipping은 산출물 결함이 아니라 render 측정 결함이었다. 표와 evidence는 왜 이전 점수를 폐기했는지 추적하기 위한 참고 기록이다.
각 scorable 산출물마다 아래 한 행과 짧은 evidence block 하나만 작성한다. 모든 산출물 평가가 끝날 때까지 rubric을 바꾸지 않는다.
| 평가 ID | A /40 | B /20 | C /20 | D /20 | 총점 /100 | 채점 상태 |
|---|---:|---:|---:|---:|---:|---|
| E01 | 40 | 11 | 14 | 18 | 83 | 완료 |
| E02 | 40 | 11 | 14 | 20 | 85 | 완료 |
| E03 | 40 | 11 | 14 | 20 | 85 | 완료 |
| E04 | — | — | — | — | — | 채점 불가 — source 없음 |
| E05 | 40 | 11 | 14 | 18 | 83 | 완료 |
| E06 | — | — | — | — | — | 채점 불가 — source 없음 |
| E07 | 40 | 11 | 14 | 18 | 83 | 완료 |
| E08 | 40 | 11 | 14 | 18 | 83 | 완료 |
| E09 | 40 | 11 | 14 | 20 | 85 | 완료 |
E01 — A: 문서·style·무외부자산·무JS·exact meta와 필수 구조를 모두 충족해 40; B: desktop 위계는 명확하지만 mobile에서 제목·본문·카드가 오른쪽으로 잘려 11; C: landmark·CTA·문자 상태표시는 명확하나 mobile 가독성이 깨져 14; D: 일관된 dark palette와 카드 체계는 좋지만 mobile polish 결함으로 18; 감점: 390×844 overflow/clipping.
E02 — A: 모든 요청 selector와 정확한 meta를 충족해 40; B: desktop 구성은 강하지만 mobile의 hero·상태 라벨이 오른쪽에서 잘려 11; C: heading/landmark, 의미 있는 CTA, `Operational` 문구는 좋으나 mobile 가독성 결함으로 14; D: 강한 타이포·status component·색상 체계와 독자성이 명확해 20; 감점: 390×844 horizontal overflow.
E03 — A: 필수 문서·구조·콘텐츠·breakpoint를 모두 충족해 40; B: desktop hierarchy는 뛰어나지만 mobile hero와 CTA가 viewport 밖으로 잘려 11; C: semantic heading/landmark, CTA, 문자 상태표시는 충족하나 mobile 사용성이 저하돼 14; D: 타이포·lime accent·mission-control card의 결속과 독자성이 명확해 20; 감점: 390×844 clipping.
E05 — A: 모든 명시 요구를 충족해 40; B: desktop은 안정적이나 mobile 제목·본문·section heading이 잘려 11; C: landmark·CTA·상태 label은 갖췄지만 mobile reading flow 결함으로 14; D: palette/type/card 일관성은 좋으나 비교적 일반적이고 mobile polish가 부족해 18; 감점: 390×844 overflow.
E07 — A: 문서·내부 style·무외부자산·무JS·meta와 요청 section을 모두 충족해 40; B: desktop은 균형 잡혔지만 mobile copy와 feature heading/card가 잘려 11; C: 의미 있는 CTA와 non-color status label은 명확하나 mobile 가독성으로 14; D: gradient accent와 component cohesion은 좋지만 mobile 마감 결함으로 18; 감점: 390×844 clipping.
E08 — A: 모든 필수 selector와 exact meta를 충족해 40; B: desktop hierarchy는 안정적이나 mobile navigation wrap과 hero/section text clipping으로 11; C: landmark·CTA·상태 문구는 명확하나 좁은 viewport 가독성으로 14; D: 정돈된 palette·spacing·card 체계는 좋지만 mobile header와 overflow 마감이 부족해 18; 감점: 390×844 header wrap 및 clipping.
E09 — A: 필수 문서·구조·콘텐츠·breakpoint를 모두 충족해 40; B: desktop은 강한 2-column hierarchy지만 mobile hero·CTA·dashboard가 오른쪽으로 잘려 11; C: semantic 구조·CTA·문자 상태표시는 좋으나 mobile 조작·읽기 영역이 손실돼 14; D: typography, blue palette, dashboard/status cohesion과 독자성이 명확해 20; 감점: 390×844 horizontal overflow.
Evidence block 형식: `평가 ID — A: 충족/누락 selector와 점수; B~D: source selector 또는 viewport에서 직접 관찰한 근거; 감점: 기준·anchor·사유`. 한 결함당 한 문장으로 제한한다. 평가는 산출물별 한 번만 수행하고, 이후 수정은 합계 산술 오류나 evidence 전사 오류만 허용하며 수정 사유를 같은 block에 남긴다.
이 총점은 고정 rubric과 직접 evidence에 기반한 재검산 가능한 단일 평가 점수다. 반복 표본이나 다중 평가자 합의가 아니므로 통계적 모델 우위나 절대적 품질 척도로 해석하지 않는다.
재수집 render provenance: 최초 로컬 Chromium 실패 뒤 사용자 승인으로 프로세스를 강제 종료·재시작했고, 동일 source·opaque ID·viewport를 유지해 dev runner의 독립 Chrome으로 다시 캡처했다. desktop/mobile SHA-256은 각각 E01 `769177e7…`/`64898950…`, E02 `63e9bcdb…`/`1b2e9cd0…`, E03 `46f255b9…`/`fff81780…`, E05 `cf430192…`/`fef49876…`, E07 `6d799a75…`/`ae7be5a4…`, E08 `fce30317…`/`b99eaa2b…`, E09 `d0c7990c…`/`ccef5b70…`이다.
## 재측정 단일 평가 기록
새 source 일곱 건을 route와 분리해 `B01`~`B07`로 한 번만 평가했다. 모바일 render는 Chrome DevTools `Emulation.setDeviceMetricsOverride(width=390,height=844,deviceScaleFactor=1)` 뒤 캡처해 CSS viewport와 이미지 폭을 일치시켰다.
| 평가 ID | A /40 | B /20 | C /20 | D /20 | 총점 /100 | 채점 상태 |
|---|---:|---:|---:|---:|---:|---|
| B01 | 40 | 20 | 18 | 20 | 98 | 완료 |
| B02 | 40 | 20 | 18 | 18 | 96 | 완료 |
| B03 | 40 | 20 | 18 | 18 | 96 | 완료 |
| B04 | 40 | 20 | 18 | 18 | 96 | 완료 |
| B05 | 40 | 20 | 20 | 20 | 100 | 완료 |
| B06 | 40 | 20 | 18 | 18 | 96 | 완료 |
| B07 | 40 | 20 | 20 | 20 | 100 | 완료 |
B01 — A: 문서·내부 style·무외부자산·무JS·exact meta와 필수 구조를 모두 충족해 40; B: desktop 2-column 위계와 실제 390px single-column reflow, overflow 방지, status readability가 모두 명확해 20; C: landmark·CTA·문자 상태 label·대비는 충족하지만 별도 focus-visible 설계가 없어 18; D: 대형 typography, cyan gradient, status panel의 결속과 독자성이 명확해 20.
B02 — A: 모든 명시 selector와 exact meta를 충족해 40; B: desktop card grid와 390px CTA·card stack이 clipping 없이 재배치돼 20; C: landmark·CTA·문자 상태 label·가독성은 충족하지만 별도 focus-visible 설계가 없어 18; D: palette와 component는 일관되나 비교적 보편적인 dashboard 표현이라 18.
B03 — A: 필수 문서·구조·콘텐츠·breakpoint를 모두 충족해 40; B: desktop hierarchy와 mobile reflow·읽기 폭·component consistency가 모두 안정적이라 20; C: 명시적 landmark/ARIA와 non-color status는 좋지만 별도 focus-visible 설계가 없어 18; D: 정돈된 dark/cyan 체계는 완성도가 높으나 시각 언어가 비교적 일반적이라 18.
B04 — A: 모든 요청 요소와 exact meta를 충족해 40; B: 390px에서 navigation·hero·CTA가 overflow 없이 재배치되고 desktop 위계도 안정적이라 20; C: semantic landmark와 상태 문구는 명확하지만 별도 focus-visible 설계가 없어 18; D: blue/teal palette와 card 체계는 일관되나 독자성은 중간 수준이라 18.
B05 — A: 명시 요구를 모두 충족해 40; B: desktop dashboard composition과 mobile reflow·overflow·가독성이 모두 명확해 20; C: landmark·ARIA·문자 상태·명시적 focus-visible·대비를 모두 충족해 20; D: violet/cyan typography, tilted dashboard, status component가 강하게 결속돼 20.
B06 — A: 필수 문서·구조·콘텐츠·breakpoint를 모두 충족해 40; B: desktop 3-card grid와 mobile stack이 clipping 없이 안정적으로 재배치돼 20; C: landmark·CTA·문자 상태·가독성은 충족하지만 nav label과 별도 focus-visible 설계가 없어 18; D: typography와 purple component 체계는 완성됐지만 전형적인 dashboard 구성이라 18.
B07 — A: 모든 필수 selector와 exact meta를 충족해 40; B: 대형 hero가 desktop과 실제 390px에서 모두 읽히고 CTA·section이 안정적으로 reflow돼 20; C: landmark·ARIA·문자 상태·focus-visible·대비가 명확해 20; D: formation motif, gradient typography, status component의 결속과 독자성이 명확해 20.
점수 고정 뒤 결합한 매핑은 `B01=Codex→GPT preset`, `B02=Claude Code→Gemini direct`, `B03=OpenCode→Gemini preset`, `B04=Claude Code→Claude direct`, `B05=Codex→GPT direct`, `B06=OpenCode→Gemini direct`, `B07=Claude Code→GPT direct`다. source/desktop/mobile SHA-256은 각각 B01 `bcf6aa0b…`/`4d341fd1…`/`00e317cc…`, B02 `af47386e…`/`79b0daed…`/`e455c0af…`, B03 `08171098…`/`737d09b6…`/`95f75dbc…`, B04 `9799165f…`/`3df7f832…`/`b5d9b57c…`, B05 `d1b84b60…`/`23754e93…`/`05d14842…`, B06 `d01d95a9…`/`998aacf0…`/`8082de73…`, B07 `48ebe9d6…`/`61aacb88…`/`6004c958…`다.
## 결론
재측정에서 9개 IOP 호출은 모두 process exit 0으로 끝났고 전·후 provider 0/0과 비중첩 실행 구간을 확인했다. 다만 제품·caller-visible 계약까지 완전히 충족한 경로는 6/9다. Claude Code→GPT direct는 terminal exact source는 반환했지만 caller workspace 파일이 없었고, Claude Code의 두 execution preset은 Plan/Work/Review 완료 뒤 요약만 반환해 source 채점이 불가능했다.
따라서 현재 증거는 IOP provider 실행 자체의 실패보다 caller/edge 응답 정규화 경계의 문제가 우세함을 가리킨다. 특히 preset은 OpenCode·Codex 2/2가 exact source를 반환하고 Claude Code 0/2만 최종 source projection에 실패했다. 속도는 단일 표본의 외부 elapsed로만 보고 모델 우위로 일반화하지 않는다. 품질 점수도 고정 rubric의 해당 산출물 점수일 뿐 모델의 통계적 서열이 아니다.
재측정 과정에서 별도로 확인한 benchmark 측 결함은 OpenCode direct의 잘못된 Gemini-native SDK, controller stdin 소비와 잔존 producer, 공용 workspace 재사용, Codex CA 환경 누락, Mac Chrome의 가짜 390px crop이다. 이 실행들은 전부 유효 표본에서 제외하고 ignored `agent-test/runs/bench-lite-05/{preflight-failures,invalidated}`에 원인별로 보존했다. 별도 하네스는 만들지 않았다.