217 lines
31 KiB
Markdown
217 lines
31 KiB
Markdown
# 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}`에 원인별로 보존했다. 별도 하네스는 만들지 않았다.
|
||
|
||
## 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는 섞지 않는다.
|
||
|
||
| 영역 | 5점 항목 4개 | OpenCode→Gemini hybrid | OpenCode→GPT hybrid | Claude Code→Claude Sonnet 5 direct | Claude Code→Gemini 3.6 Flash high direct |
|
||
|---|---|---:|---:|---:|---:|
|
||
| 요구·계약 /20 | 요구 완전성, 금지 요소, terminal 계약, 콘텐츠 정확성 | 19 | 19 | 19 | 19 |
|
||
| 시맨틱·구현 /20 | landmark, heading, component 의미, 유지보수성 | 17 | 18 | 19 | 17 |
|
||
| 반응형·레이아웃 /20 | desktop, mobile, overflow, 적응형 기법 | 19 | 18 | 20 | 19 |
|
||
| 사용성·접근성 /20 | CTA, navigation, non-color status, keyboard focus | 17 | 17 | 18 | 17 |
|
||
| 시각 완성도 /20 | 정보 위계, palette, component 결속, 독자성 | 19 | 18 | 19 | 20 |
|
||
| **총점 /100** | | **91** | **90** | **95** | **92** |
|
||
|
||
### 시간 비교
|
||
|
||
| 경로 | 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 |
|
||
|
||
시간은 모든 경로에 대해 보존하되, exact 외부 elapsed가 없는 표본을 대체 지표로 추정해 순위화하지 않는다. caller/API duration과 event/artifact clock은 외부 elapsed와 구분한다.
|
||
|
||
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…`다.
|