Merge branch 'feature/thin-agent-model-comparison-benchmark' into dev

This commit is contained in:
toki 2026-08-14 11:20:42 +09:00
commit ea1c30772e
6 changed files with 304 additions and 9 deletions

View file

@ -40,18 +40,25 @@
- [x] [single-pass-scorecard] 실행 전에 고정한 공통 100점 기준표로 각 scorable 산출물의 source와 desktop/mobile render를 한 번만 함께 분석해 항목별 점수, 직접 증거, 감점 사유와 산술 총점을 기록한다. 검증: 평가 pass에는 route·model·시간·usage를 제공하지 않고 opaque 평가 ID만 사용하며, 모든 점수는 고정 anchor와 evidence를 가지고 재채점은 산술·전사 오류 수정으로만 제한한다.
- [x] [bounded-conclusion] 성공한 결과만 비교하고 실패·미제공 데이터를 점수 0으로 취급하지 않는 짧은 결론을 남긴다. 자동 채점이나 통계적 일반화는 하지 않는다.
### Epic: [thin-rerun] 무경합 재측정과 preset 진단
- [x] [isolated-timing-rerun] 동일 9개 조합을 다른 benchmark·agent 작업이 없고 provider queue/in-flight가 비어 있는 상태에서 완전 순차로 한 번씩 다시 실행한다. 각 행은 외부 기준 `request_sent_at`, `terminal_received_at`, monotonic elapsed를 기록하고 caller 내부 duration·TTFT는 별도 보조 지표로 분리한다. 검증: 실행 직전 무경합 snapshot, 단일 producer attempt, 두 외부 시각과 monotonic elapsed가 모든 행에 있어야 하며 조건을 증명하지 못한 행은 속도 비교에서 제외한다.
- [x] [preset-stage-diagnosis] 네 preset 행마다 request ID와 Plan/Work/Review/Repair stage의 시작·종료, 실제 선택 model, terminal/error, 최종 workspace와 caller-visible 응답 상태를 기존 Edge/Node 운영 로그에서 추출한다. 검증: generic error나 `채점 불가`만 남기지 않고 실패 소유 stage와 직접 오류 evidence를 기록하며, evidence가 없으면 관측 결함으로 명시한다.
- [x] [corrected-rerun-report] 재측정 결과표에서 운영 성공, 외부 완료 시간, preset 단계 진단과 산출물 품질을 분리하고 새 산출물만 기존 공통 기준표로 opaque 단일 평가한다. 검증: 이전 시간 비교는 무효로 표시하고, 측정 불가·오염된 실행·미제공 값은 0이나 추정값으로 바꾸지 않는다.
## 완료 리뷰
- 상태: 통과
- 요청일: 2026-08-14
- 완료 근거: 9개 producer 단일 시도와 최소 결과표는 [실행 완료 로그](../../../../../agent-task/archive/2026/08/m-thin-agent-model-comparison-benchmark/complete.log), 사용자 승인 동일 viewport 재수집과 점수표·제한 결론은 [평가 완료 로그](../../../../../agent-task/archive/2026/08/m-thin-agent-model-comparison-benchmark_1/complete.log)로 확인했다.
- 완료 근거: 이전 실행·평가 로그와 [무경합 재측정 완료 로그](../../../../../agent-task/archive/2026/08/m-thin-agent-model-comparison-benchmark_2/complete.log)를 id별로 집계했다. 재측정은 9행·144 provider snapshot·비중첩 구간, 서로 다른 7개 source와 실제 390px viewport render 14개를 검증했으며 preset 미노출 stage 정보는 관찰성 공백으로 명시했다.
- 검토 항목:
- [x] `[bench-route-01]`이 통과 또는 사용자 승인된 외부 차단 상태다.
- [x] 새 benchmark script와 자동화 state가 없다.
- [x] 조합별 정확히 한 번의 실행, 최소 결과 표와 evidence-backed 단일 평가표만 남았다.
- [x] 무경합 외부 시간과 caller-visible 계약을 분리했고 오염된 setup attempt와 이전 mobile crop 점수를 유효 표본에서 제외했다.
- agent-ui 상태 반영: 해당 없음
- Spec sync: 해당 없음 — 제품 코드·계약·런타임 동작을 바꾸지 않은 test-only 비교 evidence이므로 활성 구현 spec 갱신 대상이 아니다.
- 리뷰 코멘트: producer 호출은 재시도하지 않았고, 최초 렌더러 실패 뒤 사용자 승인으로 동일 source·opaque ID·viewport를 유지한 캡처만 재수집했다. 7개 점수 산술과 E04/E06 채점 불가 처리가 공식 리뷰 PASS를 받았다.
- Spec sync: update not needed — 제품 코드·계약·런타임 동작을 바꾸지 않은 test-only 비교 evidence이며, 현재 [OpenAI-Compatible 입력 표면 spec](../../../../../agent-spec/input/openai-compatible-surface.md)의 구현 동작을 변경하지 않는다.
- 리뷰 코멘트: IOP provider 호출은 9/9 process exit 0이지만 제품·caller-visible 계약을 완전히 충족한 경로는 6/9다. Claude Code→GPT direct의 workspace 누락과 Claude Code preset 2건의 final source projection 실패는 남은 제품/호출 경계 이슈로 기록하되, 이 얇은 측정 Milestone의 범위인 재측정·진단·보고는 충족했다.
## 범위 제외

View file

@ -67,7 +67,7 @@ Phase를 가로지르는 실제 다음 작업 선택은 [전역 마일스톤 실
- [완료] [bench-lite-01] 초경량 Agent 모델 비교
- 경로: [[bench-lite-01] 초경량 Agent 모델 비교](../../archive/phase/knowledge-tool-optimization-extension/milestones/thin-agent-model-comparison-benchmark.md)
- 요약: 동일 9개 경로를 producer 재시도 없이 한 번씩 실행해 7개 산출물을 공통 100점 기준표로 한 번 평가했고, 실행 실패 1건과 미완료 1건은 점수 0으로 왜곡하지 않고 채점 불가로 분리했다.
- 요약: 무경합 9개 경로의 외부 시간과 caller-visible 계약을 분리해 재측정했다. provider 실행은 9/9 종료됐고 완전 계약은 6/9이며, Claude caller의 workspace/source projection 3건을 남은 경계 이슈로 분리했다.
- [계획] [surface-01] Inference API Surface와 실행 Lifecycle 책임 경계 리팩터링
- 경로: [[surface-01] Inference API Surface와 실행 Lifecycle 책임 경계 리팩터링](milestones/inference-api-surface-execution-lifecycle-refactor.md)

View file

@ -0,0 +1,111 @@
<!-- task=m-thin-agent-model-comparison-benchmark plan=0 tag=THIN_BENCH_RERUN milestone-task=isolated-timing-rerun,preset-stage-diagnosis,corrected-rerun-report -->
# Code Review Reference - THIN_BENCH_RERUN
> **[IMPLEMENTING AGENT — READ FIRST]** Implementation evidence is filled below. Leave final verdict, archive operations, `complete.log`, and roadmap synchronization to the official review flow.
## Overview
date=2026-08-14
task=m-thin-agent-model-comparison-benchmark, plan=0, tag=THIN_BENCH_RERUN
## For the Review Agent
Re-run applicable verification from current source and ignored evidence. Repair reviewer-reconstructable evidence gaps before verdict. If PASS, archive this pair and emit completion metadata for the three milestone task IDs; do not edit roadmap state directly from review.
## Implementation Item Completion
| Item | Status |
|---|---|
| Sequential isolated rerun | complete |
| Preset caller/stage diagnosis | complete with explicit observability gaps |
| Corrected timing and contract report | complete |
| One-pass source/render scorecard | complete |
| Final verification evidence | complete |
## Implementation Checklist
- [x] Re-run the nine fixed routes sequentially from provider 0/0 state and record external start/completion/elapsed evidence without accepting contaminated setup attempts.
- [x] Diagnose each preset at the caller-visible Plan/Work/Review/Repair and terminal boundary, recording unexposed request/stage data as an observability gap.
- [x] Separate runtime success, workspace/terminal contract, timing, usage, and quality; invalidate contaminated prior timing and mobile-render claims.
- [x] Evaluate only the seven scorable new sources once with the unchanged rubric and a true 390×844 CSS viewport, then restore the opaque-ID route mapping.
- [x] Run final verification and keep product/runtime files unchanged.
- [x] Fill implementation-owned sections in CODE_REVIEW-cloud-G04.md with actual implementation notes and verification output.
## Review-Only Checklist
- [x] Append one verdict and verified routing signals to `Code Review Result`.
- [x] Verify verdict, dimension assessment, and finding classifications agree.
- [x] Run fresh verification and record the output below.
- [x] Archive active plan/review files using the skill-owned canonical names.
- [x] On PASS, write `complete.log`, preserve milestone-task metadata, and move the task directory to the monthly archive.
- [x] Confirm roadmap synchronization remains runtime-owned.
## Deviations from Plan
- No product implementation was added. Several caller setup attempts were rejected before the official row because they exposed the exact benchmark defects under investigation: wrong OpenCode provider SDK, controller stdin consumption, residual producer contention, shared workspace reuse, missing Codex CA environment, and false mobile viewport capture.
- Preset stage request IDs, exact model IDs, and stage timestamps were not available in caller evidence; the report records this as an observability gap instead of estimating them.
## Key Design Decisions
- Runtime process exit, caller-visible workspace/terminal contract, external timing, preset stage evidence, and quality score remain separate fields.
- The two Claude preset rows are runtime successes but response-contract failures because Plan/Work/Review completed and only a summary reached the caller.
- Previous quality scores were invalidated after proving that the 390px image cropped a larger CSS viewport. New mobile evidence uses CDP device metrics override.
## Reviewer Checkpoints
- Confirm all nine official rows have pre/post all-provider 0/0 and non-overlapping time intervals.
- Confirm excluded attempts are not used in timing or score calculations.
- Confirm Claude preset summaries are classified as caller-visible contract failures rather than provider execution failures.
- Confirm previous crop-derived mobile scores are explicitly invalidated and the new scorecard uses CDP device metrics.
- Confirm no product code, runtime config, benchmark harness, token, or global CA change is tracked.
## Verification Results
### Isolated matrix evidence
- Nine accepted rows have `exit_status=0`.
- Each accepted pre/post status contains eight provider snapshots and every `in_flight`/`queued` value is `0`.
- Accepted intervals do not overlap. Direct rows 15 use directly observed terminal timestamps; preset rows 69 explicitly identify the derived completion-time basis.
### Contract and source evidence
- Full contract success: rows 01, 02, 03, 05, 07, 09.
- Partial caller-visible contract: row 04 returns marker/exact HTML but has no caller workspace file; rows 06 and 08 finish Plan/Work/Review but return summary text without marker/exact HTML.
- Seven scorable sources have distinct SHA-256 values and one exact benchmark meta marker each.
### Render and score evidence
- Seven desktop renders are 1440×900.
- Seven mobile renders use CDP `width=390`, `height=844`, `deviceScaleFactor=1`; visual inspection shows genuine reflow rather than right-edge crop.
- Opaque B01B07 scoring was completed once with the unchanged rubric before route mapping was restored.
### Scope evidence
- Tracked implementation changes are limited to the benchmark result, milestone workstate after review, and task-control artifacts.
- No product code, runtime config, harness, token, or global CA override is added.
### Fresh reviewer verification
- Evidence parser: `PASS rows=9 snapshots=144 non_overlap=true sources=7 distinct=7 renders=14 dimensions=exact`.
- `git diff --check`: exit 0 with no output.
- Active PLAN/CODE_REVIEW artifacts are not ignored.
- All three first-line `milestone-task` ids exist in the active Milestone.
- Tracked branch scope is limited to the benchmark document and its roadmap/task-control state; no product or runtime source path is present.
## Section Ownership
| Section | Owner | Note |
|---|---|---|
| Header, overview, reviewer instructions | fixed | do not rewrite during implementation |
| Implementation completion/checklist | implementing agent | completed with actual evidence |
| Deviations, decisions, verification | implementing agent then reviewer | reviewer appends fresh checks |
| Review-only checklist and verdict | review agent | not modified by implementer |
## Code Review Result
- **Overall Verdict:** PASS
- **Dimension Assessment:** correctness=Pass; completeness=Pass; test coverage=Pass; API contract=Pass; code quality=Pass; implementation deviation=Pass; verification trust=Pass.
- **Findings:** None.
- **Routing Signals:** `review_rework_count=0`, `evidence_integrity_failure=false`.
- **Next Step:** Archive the PASS pair, write `complete.log`, move the task directory, and emit Milestone completion metadata for runtime synchronization.

View file

@ -0,0 +1,37 @@
<!-- task=m-thin-agent-model-comparison-benchmark plan=0 tag=THIN_BENCH_RERUN milestone-task=isolated-timing-rerun,preset-stage-diagnosis,corrected-rerun-report -->
# Complete - m-thin-agent-model-comparison-benchmark
## 완료 일시
2026-08-14
## 요약
무경합 9경로 재측정, preset 응답 경계 진단, 실제 390px viewport 기반 단일 품질 평가를 한 번의 plan/review 루프로 완료했으며 최종 verdict는 PASS다.
## 루프 이력
| Plan | Review | Verdict | 메모 |
|------|--------|---------|------|
| `plan_local_G06_0.log` | `code_review_cloud_G04_0.log` | PASS | 9행·144 snapshot·비중첩 시간·7개 distinct source·14개 exact render를 fresh verification으로 확인했다. |
## 구현/정리 내용
- 이전 경합·공용 workspace·잘못된 caller 설정·가짜 mobile crop 증거를 무효화하고 원인별 evidence로 분리했다.
- IOP runtime 종료, caller-visible workspace/terminal 계약, 외부 시간, preset stage 관찰성, 품질 점수를 서로 분리했다.
- Claude preset 두 경로의 stage 실행 성공과 final source projection 실패를 구분하고 미노출 request/stage 정보는 관찰성 공백으로 기록했다.
## 최종 검증
- `python3 <bench-lite-05 evidence verifier>` - PASS; `rows=9 snapshots=144 non_overlap=true sources=7 distinct=7 renders=14 dimensions=exact`.
- `git diff --check` - PASS; 출력 없음.
- `git check-ignore` - PASS; plan/review/complete task artifacts가 추적 대상임을 확인했다.
## 잔여 Nit
- 없음
## 후속 작업
- 없음

View file

@ -0,0 +1,75 @@
<!-- task=m-thin-agent-model-comparison-benchmark plan=0 tag=THIN_BENCH_RERUN milestone-task=isolated-timing-rerun,preset-stage-diagnosis,corrected-rerun-report -->
# Plan - THIN_BENCH_RERUN
## Overview
date=2026-08-14
task=m-thin-agent-model-comparison-benchmark, plan=0, tag=THIN_BENCH_RERUN
## For the Implementing Agent
Keep the benchmark test-only and thin. Run the existing nine caller/model/route combinations sequentially with one fixed prompt and isolated workspaces; do not add a harness, retry state, judge model, or product completion gate. Record actual implementation and verification evidence in `CODE_REVIEW-cloud-G04.md`, leave both active files in place, and report ready for official review. Finalization, verdict, archive files, `complete.log`, and roadmap synchronization are review/runtime-owned.
## Background
The previous benchmark could not support timing claims because producer contention, missing external timestamps, shared workspace reuse, caller configuration errors, and a false 390px Chrome crop contaminated evidence. The rerun must separate IOP runtime execution from caller-visible file/terminal contracts and from benchmark setup failures.
## Analysis
### Scope and Correctness
- The fixed prompt and nine-route matrix are already defined in `agent-test/dev/iop-thin-agent-model-comparison.md`.
- A valid timing row requires pre/post provider `in_flight=0` and `queued=0`, non-overlapping execution intervals, external request/completion timestamps, monotonic elapsed, and one accepted producer attempt.
- Setup/controller failures remain evidence but are excluded from the official matrix. A path may have process exit 0 while still failing workspace or exact terminal source delivery.
- Preset request IDs and stage details that callers do not expose must remain `미노출`; they must not be inferred.
### Verification Context
- Dev runner evidence is captured under ignored `agent-test/runs/bench-lite-05/`; tracked documentation is the reviewable summary.
- Exact source, SHA-256, desktop render, and a CDP device-metrics-overridden 390×844 mobile render are the quality inputs.
- The fixed 100-point rubric is unchanged. New source is evaluated once under opaque IDs before route mapping is restored.
### Ownership and Boundaries
- Product runtime/config is read-only for this task. No runtime deployment or tracked model binding changes are allowed.
- Existing remote secret and managed CA are command-scoped. No benchmark token or global trust override is created.
- The benchmark owns observation and reporting only; caller/edge response-normalization defects are findings, not silently repaired inside the measurement task.
### Routing
- `finalize-task-routing`: build `local/G06` via `local-fit`; review `cloud/G04` via `official-review`.
- Scores: build `(1,1,0,2,2)`, review `(1,0,0,2,1)`; `large_indivisible_context=false`, loop-risk count `0`, rework count `0`, evidence-integrity failure `false`.
## Modified Files Summary
- `agent-test/dev/iop-thin-agent-model-comparison.md`: corrected timing matrix, preset diagnosis, invalidated evidence, one-pass scorecard, and bounded conclusion.
- `agent-roadmap/phase/knowledge-tool-optimization-extension/milestones/thin-agent-model-comparison-benchmark.md`: milestone task/workstate synchronization after PASS evidence.
- `agent-task/m-thin-agent-model-comparison-benchmark/CODE_REVIEW-cloud-G04.md`: implementation and verification evidence.
## Implementation Checklist
- [x] Re-run the nine fixed routes sequentially from provider 0/0 state and record external start/completion/elapsed evidence without accepting contaminated setup attempts.
- [x] Diagnose each preset at the caller-visible Plan/Work/Review/Repair and terminal boundary, recording unexposed request/stage data as an observability gap.
- [x] Separate runtime success, workspace/terminal contract, timing, usage, and quality; invalidate contaminated prior timing and mobile-render claims.
- [x] Evaluate only the seven scorable new sources once with the unchanged rubric and a true 390×844 CSS viewport, then restore the opaque-ID route mapping.
- [x] Run final verification and keep product/runtime files unchanged.
- [x] Fill implementation-owned sections in CODE_REVIEW-cloud-G04.md with actual implementation notes and verification output.
## Reviewer Checkpoints
- Confirm all nine official rows have pre/post all-provider 0/0 and non-overlapping time intervals.
- Confirm excluded attempts are not used in timing or score calculations.
- Confirm Claude preset summaries are classified as caller-visible contract failures rather than provider execution failures.
- Confirm previous crop-derived mobile scores are explicitly invalidated and the new scorecard uses CDP device metrics.
- Confirm no product code, runtime config, benchmark harness, token, or global CA change is tracked.
## Final Verification
1. `git diff --check` — no whitespace errors.
2. Parse each `agent-test/runs/bench-lite-05/row-0[1-9].attempt.txt` and pre/post status file — nine complete rows and all provider snapshots 0/0.
3. Compare all official intervals — no overlap.
4. Verify source hashes, one exact benchmark meta marker, and desktop/mobile render hashes for the seven scorable rows.
5. `git diff --name-only origin/dev...HEAD` plus working-tree diff — only benchmark/roadmap/task-control artifacts are tracked.
After completing all code changes, fill implementation-owned sections in `CODE_REVIEW-cloud-G04.md`.

View file

@ -14,10 +14,12 @@
## 실행 규칙
- 재측정은 다른 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은 Edge private workspace cleanup 계약을 유지하므로 caller-visible terminal marker와 최종 응답의 exact HTML code block 확인한다.
- 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 설정은 변경하지 않는다.
@ -25,7 +27,9 @@
- 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 | 짧은 관찰 |
|---|---|---|---:|---|---|---|
@ -39,6 +43,33 @@
| 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만 사용한다. 중간 점수는 쓰지 않는다.
@ -53,7 +84,9 @@
총점은 `A+B+C+D`의 단순 합이며 별도 가중·정규화·상대 순위 보정은 없다. 요구 위반은 해당 `A` 점수에서만 반영하고 같은 결함을 다른 축에서 중복 감점하지 않는다. 단, 그 위반이 실제 레이아웃·사용성·시각 결함을 별도로 만든 경우에는 해당 render 증거를 적고 감점할 수 있다.
## 단일 평가 기록
## 이전 단일 평가 기록 — 모바일 렌더 무효
아래 점수는 이전 Chrome 실행이 390px 이미지에 더 넓은 내부 CSS viewport를 잘라 넣은 사실을 뒤늦게 확인했으므로 품질 비교에도 사용하지 않는다. 당시 공통으로 관찰한 horizontal clipping은 산출물 결함이 아니라 render 측정 결함이었다. 표와 evidence는 왜 이전 점수를 폐기했는지 추적하기 위한 참고 기록이다.
각 scorable 산출물마다 아래 한 행과 짧은 evidence block 하나만 작성한다. 모든 산출물 평가가 끝날 때까지 rubric을 바꾸지 않는다.
@ -89,8 +122,40 @@ Evidence block 형식: `평가 ID — A: 충족/누락 selector와 점수; B~D:
재수집 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개 조합은 각각 한 번씩 실행되었고, 7개는 exact HTML source를 확보했으며 1개는 실행 실패, 1개는 exact terminal source가 없어 응답 불완전으로 남았다. caller가 제공한 경과 시간 중에는 Claude Code → GPT direct가 63.757초로 가장 짧았지만 Codex 두 행의 경과 시간은 제공되지 않아 전체 속도 순위를 만들 수 없다. usage는 caller가 제공한 필드만 위 표에 보존했다.
재측정에서 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 채점이 불가능했다.
최초 로컬 Chromium 14개 render는 모두 hang 또는 timeout이었고, 이후 사용자가 프로세스 강제 재시작과 동일 기준 재시도를 명시적으로 승인했다. 동일 opaque ID와 1440×900/390×844 viewport를 유지한 독립 Chrome 재수집으로 scorable 7개를 한 번 채점했다. E02·E03·E09가 85점, E01·E05·E07·E08이 83점이었으며, 7개 모두 desktop 완성도는 높았지만 390×844에서 horizontal overflow와 clipping이 공통으로 관찰됐다. 이는 단일 과제·단일 평가 결과이므로 모델 우위로 일반화하지 않는다. 실행 실패 E04, 응답 불완전 E06, 미제공 경과 시간은 0으로 치환하지 않았고 producer 호출은 재시도하지 않았다.
따라서 현재 증거는 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}`에 원인별로 보존했다. 별도 하네스는 만들지 않았다.