35 KiB
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.htmlfor “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 withBENCH_LITE_01_DONEon its own line followed by the exact fullindex.htmlin onehtmlfenced 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×900desktop 및390×844mobile 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}에 원인별로 보존했다. 별도 하네스는 만들지 않았다.
Runtime 의미 검증 축소 후 단일 재측정
Worker 바인딩을 ornith-fast로 복원하고 중복 Plan/Review 의미 검증을 제거한 Edge source 40c1ae49에서 OpenCode → Gemini execution preset을 무경합으로 정확히 한 번 실행했다. Selector/Reviewer는 gemini-3.6-flash high, Worker는 ornith-fast였다.
| 상태 | request sent UTC | terminal received UTC | 외부 elapsed | caller usage | 산출물 | 품질 |
|---|---|---|---|---|---|---|
| 실행 성공, terminal source는 workspace source보다 마지막 LF 1바이트 짧음 | 03:30:25.929946Z | 03:32:02.271216Z | 96.24초 | input 877, output 446 | workspace SHA-256 d70ca399…; marker/fence 각 1회; request artifact directory cleanup 0개 잔존 |
96/100 |
실행 전후 4개 Node와 8개 provider가 모두 in_flight=0, queued=0이었고 ornith-fast provider는 healthy/capacity 1로 회복했다. OpenCode는 write 1회와 read 4회를 포함한 모든 tool event를 completed로 종료했으며 error event와 stderr는 0건이었다. terminal fence의 HTML은 workspace source와 내용이 같고 마지막 newline만 누락되어 byte-exact 응답 계약 차이로 별도 기록했다.
고정 rubric의 단일 평가 결과는 A 40 / B 20 / C 18 / D 18 = 96이다. 완전한 단일 HTML, 내부 CSS, 무외부자산·무JavaScript, exact meta, semantic landmark, CTA 2개, feature 3개, service/status 3개와 실제 390px reflow를 충족했다. 의미 있는 CTA와 문자 상태 label은 명확하지만 별도 focus-visible 설계가 없어 C에서 2점, 완성도는 높지만 비교적 전형적인 dark dashboard 시각 언어라 D에서 2점을 감점했다. desktop 1440×900 SHA-256은 bc6cd6f2…, CDP device-metrics mobile 390×844 SHA-256은 d778537f…다. Mac Chrome의 최초 window-size mobile crop은 측정 결함으로 제외했고 모델은 재호출하지 않았다.
GPT 모델만 교체한 단일 측정
위 Gemini 측정과 같은 OpenCode caller, 고정 요청, 빈 workspace, 단독 실행 조건을 유지하고 execution preset의 Selector/Reviewer만 gpt-5.6-luna xhigh로 교체했다. Worker는 같은 ornith-fast였다. 실행 직전의 gpt-5.6-terra high preset은 이 비교의 사용자 지정값이 아니어서 config refresh로 교정했고, 모델은 한 번만 호출했다.
| 상태 | request sent UTC | terminal event UTC | 시간 근거 | caller usage | 산출물 | 품질 |
|---|---|---|---|---|---|---|
| 산출물·terminal source 성공, terminal source는 workspace source보다 마지막 LF 1바이트 짧음 | 미수집 | 03:45:44.717Z | 첫 OpenCode event→terminal event 106.698초; run artifact 생성→terminal은 약 129초이며 외부 elapsed로 사용하지 않음 | input 4,782, output 2,648 | workspace SHA-256 2c7b96bf…; marker/fence 각 1회; request artifact directory cleanup 0개 잔존 |
96/100 |
실행 전후 4개 Node와 전체 provider가 모두 in_flight=0, queued=0이었다. OpenCode event는 step_start 21건, step_finish 21건, tool_use 27건, text 5건이었고 모든 tool event가 completed로 끝났으며 error event와 stderr는 0건이었다. 외부 래퍼가 terminal event 후 timing.txt를 남기지 못해 exact request 시각과 monotonic elapsed는 추정하지 않고 미수집으로 두었다.
고정 rubric의 단일 평가 결과는 A 40 / B 20 / C 18 / D 18 = 96이다. 모든 명시 요구와 desktop/mobile reflow를 충족했고 390×844에서 clipping은 없었다. 별도 focus-visible 설계가 없어 C에서 2점, 완성도는 높지만 전형적인 dark dashboard 시각 언어라 D에서 2점을 감점했다. desktop 1440×900 SHA-256은 187ccecb…, CDP device-metrics mobile 390×844 SHA-256은 c2e193b9…다.
세분화 품질 비교
기존 4개 대분류의 동점이 너무 자주 발생해, 요구·계약, 시맨틱·구현, 반응형·레이아웃, 사용성·접근성, 시각 완성도의 5개 영역을 각각 4개 5점 항목으로 나눈다. 각 항목은 0~5 정수를 사용하며 품질 점수에 시간·usage·route는 섞지 않는다.
| 경로 | 요구·계약 /20 | 시맨틱·구현 /20 | 반응형·레이아웃 /20 | 사용성·접근성 /20 | 시각 완성도 /20 | 총점 /100 |
|---|---|---|---|---|---|---|
| OpenCode→Gemini hybrid | 19 | 17 | 19 | 17 | 19 | 91 |
| OpenCode→GPT hybrid | 19 | 18 | 18 | 17 | 18 | 90 |
| Claude Code→Claude Sonnet 5 direct | 19 | 19 | 20 | 18 | 19 | 95 |
| Claude Code→Gemini 3.6 Flash high direct | 19 | 17 | 19 | 17 | 20 | 92 |
| Claude Code→GPT 5.6 Luna xhigh direct | 19 | 19 | 20 | 20 | 20 | 98 |
| Claude Code→Gemini hybrid | — | — | — | — | — | 채점 불가 |
| Claude Code→GPT hybrid | — | — | — | — | — | 채점 불가 |
세부 항목은 영역별로 요구 완전성·금지 요소·terminal 계약·콘텐츠 정확성, landmark·heading·component 의미·유지보수성, desktop·mobile·overflow·적응형 기법, CTA·navigation·non-color status·keyboard focus, 정보 위계·palette·component 결속·독자성의 각 4개다.
시간 비교
| 경로 | request sent UTC | terminal/receive UTC | 외부 elapsed | caller / API duration | 비교 상태 |
|---|---|---|---|---|---|
| OpenCode→Gemini hybrid | 03:30:25.929946Z | 03:32:02.271216Z | 96.242초 | 미제공 | exact 외부 clock |
| OpenCode→GPT hybrid | 미수집 | terminal event 03:45:44.717Z | 확정 불가 | 첫 event→terminal 106.698초 | 속도 순위 제외; run artifact→terminal은 약 129초 |
| Claude Code→Claude Sonnet 5 direct | 04:00:26.922993Z | terminal artifact 04:01:47.445726Z | 정확 후처리 미수집 | 79.498 / 79.363초 | artifact clock 차이 80.52초는 보조 근거 |
| Claude Code→Gemini 3.6 Flash high direct | 04:06:43.386744Z | 04:08:43.271996Z | 119.784초 | 118.488 / 118.308초 | exact 외부 monotonic clock |
| Claude Code→GPT 5.6 Luna xhigh direct | 04:14:33.265205Z | 04:15:27.630717Z | 54.266초 | 53.271 / 53.141초 | exact 외부 monotonic clock |
| Claude Code→Gemini hybrid | 04:21:43.260956Z | 04:21:44.651522Z | 1.278초 | 0.070 / 0초 | Plan 전 admission 실패 시간; 성능 비교 제외 |
| Claude Code→GPT hybrid | 04:22:36.177682Z | 04:22:37.323175Z | 1.111초 | 0.078 / 0초 | Plan 전 admission 실패 시간; 성능 비교 제외 |
시간은 모든 경로에 대해 보존하되, exact 외부 elapsed가 없는 표본을 대체 지표로 추정해 순위화하지 않는다. caller/API duration과 event/artifact clock은 외부 elapsed와 구분한다.
이 표는 경로별 단일 사이클의 생존·산출물·실행 시간을 확인하는 얇은 벤치다. 반복 표본과 분포가 없으므로 모델 latency의 신뢰구간이나 일반적 성능 순위로 확대해석하지 않는다. exact 시간이 빠진 표본은 산출물 품질 비교에는 남아도 속도 비교에서는 제외한다.
Claude Code hybrid 사이클 결과
| 경로 | 결과 | 진입 stage | 직접 오류 | 산출물 |
|---|---|---|---|---|
| Claude Code→Gemini hybrid | 실패 | Plan 전 admission | alternative "opencode-bash" operation "prepare": tool "bash" is not present in the request tools |
없음 |
| Claude Code→GPT hybrid | 실패 | Plan 전 admission | 동일 | 없음 |
두 경로는 provider/model 호출 전에 같은 preset workspace admission으로 거절됐다. 현재 caller-workspace hybrid preset에 opencode-bash alternative만 있고 Claude Code 요청 tool set에는 해당 bash tool이 없다. 따라서 이 두 결과는 Gemini/GPT 모델 품질 문제가 아니라 Claude Code edge 지원이 빠진 공통 preset 구성 결함이다.
이후 두 preset에 Claude Code의 exact Bash schema를 사용하는 claude-code-bash alternative를 추가하고 config check, refresh dry-run/apply를 수행했다. 변경은 restart 없이 네 Node에 적용됐으며 기존 opencode-bash alternative는 유지됐다. 적용 후 두 경로 모두 기존 workspace admission 오류는 재현되지 않았다. 다음 단일 진입에서 Gemini hybrid는 selector가 PLAN/REVIEW pair call을 내지 않아 light-only preset의 mode_disabled로 종료됐고, GPT hybrid는 selector dispatch 이전 502 provider dispatch failed로 종료됐다. 따라서 Claude caller binding 누락은 해소됐지만 전체 hybrid cycle은 아직 통과하지 않았다.
Claude Code→Claude Sonnet 5 direct는 단독·무경합으로 정확히 한 번 실행했다. caller가 보고한 duration은 79.498초, API duration은 79.363초, 3 turns였고 usage는 input 5, cache create 14,780, cache read 10,388, output 11,281이었다. 외부 래퍼의 receive 시각 후처리가 남지 않아 exact 외부 elapsed는 확정하지 않았다. terminal artifact mtime은 04:01:47.445726Z이고 요청 전송 기록 04:00:26.922993Z와의 차이는 80.52초지만 보조 근거로만 둔다.
산출물은 필수 HTML, meta, landmark, CTA, feature 3개, 문자 상태 label 3개와 720px breakpoint를 모두 충족했다. workspace SHA-256은 521aa519…이며 terminal fence는 마지막 LF 1바이트만 짧었다. aria-label, decorative icon의 aria-hidden, nav/footer list, clamp() 타이포그래피와 desktop/mobile component reflow는 다섯 산출물 중에서도 높은 수준이었다. 다만 명시적 focus-visible이 없고 시각 언어는 비교적 전형적인 dark SaaS dashboard여서 만점은 아니다. desktop/mobile SHA-256은 819bf442…/b4e7bc6a…다.
Claude Code→Gemini 3.6 Flash high direct도 같은 caller·고정 요청·빈 workspace에서 무경합으로 한 번만 실행했다. 외부 monotonic elapsed는 119.784초, caller duration/API duration은 118.488/118.308초, 4 turns였다. usage는 input 55,334, output 11,430이고 caller 보고 비용은 $0.56242였다. 전후 4개 Node와 전체 provider는 in_flight=0, queued=0이었고 error event·stderr는 0건이었다.
산출물은 필수 요구와 720px desktop/mobile reflow를 모두 충족했다. workspace SHA-256은 cc103b13…이고 terminal fence는 마지막 LF 1바이트만 짧었다. 히어로, 지표 strip, enterprise feature 카드의 시각 위계와 cyan/blue palette 결속은 높은 완성도를 보였다. 반면 nav·feature·status의 list/article 의미 구조, aria-label/aria-hidden, 명시적 focus-visible이 없어 시맨틱과 접근성은 Sonnet 5 direct보다 낮았다. desktop/mobile SHA-256은 22a35f8a…/17895fa5…다.
Claude Code→GPT 5.6 Luna xhigh direct도 같은 caller·고정 요청·빈 workspace에서 무경합으로 한 번만 실행했다. 외부 monotonic elapsed는 54.266초, caller duration/API duration은 53.271/53.141초, 5 turns였다. usage는 input 29,145, output 11,343이고 caller 보고 비용은 $0.4293이었다. 전후 4개 Node와 전체 provider는 in_flight=0, queued=0이었고 error event·stderr는 0건이었다.
산출물은 필수 요구와 720px desktop/mobile reflow를 모두 충족했다. workspace SHA-256은 eda34997…이고 terminal fence는 마지막 LF 1바이트만 짧었다. landmark·section의 ARIA 연결, decorative element의 aria-hidden, feature article, 명시적 focus-visible, clamp() 타이포그래피, orbit telemetry 시각화와 mobile reflow가 모두 명확했다. nav/service를 list 요소로 표현하지 않은 점과 terminal LF 차이만 감점했다. desktop/mobile SHA-256은 373e61df…/04788e87…다.