# 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}`에 원인별로 보존했다. 별도 하네스는 만들지 않았다.
