From fe687f3c0e9113d5d90ab87576f895d1bc6da8e9 Mon Sep 17 00:00:00 2001 From: toki Date: Fri, 14 Aug 2026 11:20:20 +0900 Subject: [PATCH] =?UTF-8?q?test(benchmark):=20=EB=AC=B4=EA=B2=BD=ED=95=A9?= =?UTF-8?q?=20=EC=9E=AC=EC=B8=A1=EC=A0=95=EC=9D=84=20=ED=99=95=EC=A0=95?= =?UTF-8?q?=ED=95=9C=EB=8B=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../thin-agent-model-comparison-benchmark.md | 27 +++-- .../PHASE.md | 6 +- agent-roadmap/priority-queue.md | 5 - .../code_review_cloud_G04_0.log | 111 ++++++++++++++++++ .../complete.log | 37 ++++++ .../plan_local_G06_0.log | 75 ++++++++++++ .../dev/iop-thin-agent-model-comparison.md | 70 ++++++++--- 7 files changed, 294 insertions(+), 37 deletions(-) rename agent-roadmap/{ => archive}/phase/knowledge-tool-optimization-extension/milestones/thin-agent-model-comparison-benchmark.md (71%) create mode 100644 agent-task/archive/2026/08/m-thin-agent-model-comparison-benchmark_2/code_review_cloud_G04_0.log create mode 100644 agent-task/archive/2026/08/m-thin-agent-model-comparison-benchmark_2/complete.log create mode 100644 agent-task/archive/2026/08/m-thin-agent-model-comparison-benchmark_2/plan_local_G06_0.log diff --git a/agent-roadmap/phase/knowledge-tool-optimization-extension/milestones/thin-agent-model-comparison-benchmark.md b/agent-roadmap/archive/phase/knowledge-tool-optimization-extension/milestones/thin-agent-model-comparison-benchmark.md similarity index 71% rename from agent-roadmap/phase/knowledge-tool-optimization-extension/milestones/thin-agent-model-comparison-benchmark.md rename to agent-roadmap/archive/phase/knowledge-tool-optimization-extension/milestones/thin-agent-model-comparison-benchmark.md index 5ed3e195..54febd29 100644 --- a/agent-roadmap/phase/knowledge-tool-optimization-extension/milestones/thin-agent-model-comparison-benchmark.md +++ b/agent-roadmap/archive/phase/knowledge-tool-optimization-extension/milestones/thin-agent-model-comparison-benchmark.md @@ -2,8 +2,8 @@ ## 위치 -- Roadmap: [ROADMAP.md](../../../ROADMAP.md) -- Phase: [PHASE.md](../PHASE.md) +- Roadmap: [ROADMAP.md](../../../../ROADMAP.md) +- Phase: [PHASE.md](../../../../phase/knowledge-tool-optimization-extension/PHASE.md) ## 목표 @@ -12,7 +12,7 @@ ## 상태 -[진행중] +[완료] ## 구현 잠금 @@ -25,7 +25,7 @@ ## 범위 - `[bench-route-01]`과 동일한 9개 caller/model/route 조합 -- 모든 조합에 [얇은 비교 결과 문서](../../../../agent-test/dev/iop-thin-agent-model-comparison.md)의 같은 고정 비교 prompt와 같은 빈 임시 workspace 사용 +- 모든 조합에 [얇은 비교 결과 문서](../../../../../agent-test/dev/iop-thin-agent-model-comparison.md)의 같은 고정 비교 prompt와 같은 빈 임시 workspace 사용 - 조합별 정확히 1회 실행 - 성공 여부, 전체 경과 시간, caller가 직접 제공한 usage, 산출물 경로와 짧은 수동 관찰만 기록 - 실행 전에 잠근 공통 100점 기준표로 각 산출물의 source와 동일 viewport render를 한 번만 분석하고, 항목별 증거·감점 사유·총점을 기록 @@ -42,22 +42,23 @@ ### Epic: [thin-rerun] 무경합 재측정과 preset 진단 -- [ ] [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가 모든 행에 있어야 하며 조건을 증명하지 못한 행은 속도 비교에서 제외한다. -- [ ] [preset-stage-diagnosis] 네 preset 행마다 request ID와 Plan/Work/Review/Repair stage의 시작·종료, 실제 선택 model, terminal/error, 최종 workspace와 caller-visible 응답 상태를 기존 Edge/Node 운영 로그에서 추출한다. 검증: generic error나 `채점 불가`만 남기지 않고 실패 소유 stage와 직접 오류 evidence를 기록하며, evidence가 없으면 관측 결함으로 명시한다. -- [ ] [corrected-rerun-report] 재측정 결과표에서 운영 성공, 외부 완료 시간, preset 단계 진단과 산출물 품질을 분리하고 새 산출물만 기존 공통 기준표로 opaque 단일 평가한다. 검증: 이전 시간 비교는 무효로 표시하고, 측정 불가·오염된 실행·미제공 값은 0이나 추정값으로 바꾸지 않는다. +- [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)와 [평가 완료 로그](../../../../agent-task/archive/2026/08/m-thin-agent-model-comparison-benchmark_1/complete.log)에 보존한다. 다만 무경합 상태를 증명하지 않았고 외부 요청·완료 시각이 누락됐으며 preset 실패의 내부 stage evidence가 없어 시간 비교와 완료 판정을 철회한다. +- 완료 근거: 이전 실행·평가 로그와 [무경합 재측정 완료 로그](../../../../../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 갱신 대상이 아니다. -- 리뷰 코멘트: 이전 품질 점수는 참고 evidence로만 보존한다. OpenCode preset의 `0초` 표기는 잘못된 내부 이벤트 간격이므로 폐기하며, Sonnet/Gemini 시간 비교를 포함한 기존 속도 해석은 무효다. preset의 generic failure와 caller-visible source 누락은 단계별 운영 evidence로 다시 진단한다. +- 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의 범위인 재측정·진단·보고는 충족했다. ## 범위 제외 @@ -69,8 +70,8 @@ ## 작업 컨텍스트 -- 선행 작업: [벤치 경로 최소 HTML 스모크](../../../archive/phase/knowledge-tool-optimization-extension/milestones/benchmark-route-minimal-html-smoke.md) 완료 +- 선행 작업: [벤치 경로 최소 HTML 스모크](benchmark-route-minimal-html-smoke.md) 완료 - 실행 방식: 기존 공식 caller 명령을 한 번씩 직접 실행하며 공통 runner를 만들지 않는다. -- 결과 위치: [얇은 비교 결과](../../../../agent-test/dev/iop-thin-agent-model-comparison.md) +- 결과 위치: [얇은 비교 결과](../../../../../agent-test/dev/iop-thin-agent-model-comparison.md) - 준비 상태: 교체 가능한 고정 prompt, 9행 결과표, 공통 100점 기준표, 단일 평가 scorecard를 준비했다. 별도 script, judge, manifest, state store는 없다. - 세션 라우팅: execution preset의 Work 바인딩은 사용자 지시에 따라 live `ornith-fast`를 사용하며 tracked 설정은 변경하지 않는다. diff --git a/agent-roadmap/phase/knowledge-tool-optimization-extension/PHASE.md b/agent-roadmap/phase/knowledge-tool-optimization-extension/PHASE.md index c64d68e3..07c8c3cf 100644 --- a/agent-roadmap/phase/knowledge-tool-optimization-extension/PHASE.md +++ b/agent-roadmap/phase/knowledge-tool-optimization-extension/PHASE.md @@ -65,9 +65,9 @@ Phase를 가로지르는 실제 다음 작업 선택은 [전역 마일스톤 실 - 경로: [[bench-02] IOP 원샷 Agent 모델 비교 벤치마크](../../archive/phase/knowledge-tool-optimization-extension/milestones/iop-one-shot-agent-model-comparison.md) - 요약: 전용 harness의 정합성과 복구가 제품 안정성보다 우선되는 목적 역전으로 2026-08-13 폐기했다. 기존 결과와 계획은 재개하지 않는다. -- [진행중] [bench-lite-01] 초경량 Agent 모델 비교 - - 경로: [[bench-lite-01] 초경량 Agent 모델 비교](milestones/thin-agent-model-comparison-benchmark.md) - - 요약: 이전 품질 evidence는 보존하되 무경합과 외부 시작·완료 시각이 없는 속도 비교는 무효화한다. 동일 9개 경로를 완전 순차로 다시 측정하고 preset 단계별 실패 근거를 함께 기록한다. +- [완료] [bench-lite-01] 초경량 Agent 모델 비교 + - 경로: [[bench-lite-01] 초경량 Agent 모델 비교](../../archive/phase/knowledge-tool-optimization-extension/milestones/thin-agent-model-comparison-benchmark.md) + - 요약: 무경합 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) diff --git a/agent-roadmap/priority-queue.md b/agent-roadmap/priority-queue.md index ce17eb8d..65617631 100644 --- a/agent-roadmap/priority-queue.md +++ b/agent-roadmap/priority-queue.md @@ -4,11 +4,6 @@ ## 실행 순서 -### bench-lite - -1. [[bench-lite-01] 초경량 Agent 모델 비교](phase/knowledge-tool-optimization-extension/milestones/thin-agent-model-comparison-benchmark.md) - 무경합 상태에서 동일 9개 경로의 외부 요청·완료 시각을 다시 측정하고, preset 내부 stage와 실패 원인을 운영 evidence로 분리해 기록한다. - ### route 3. [[route-03] Heavy Plan/Review 실행과 검증 MVP](phase/knowledge-tool-optimization-extension/milestones/knowledge-tool-validation-optimization.md) diff --git a/agent-task/archive/2026/08/m-thin-agent-model-comparison-benchmark_2/code_review_cloud_G04_0.log b/agent-task/archive/2026/08/m-thin-agent-model-comparison-benchmark_2/code_review_cloud_G04_0.log new file mode 100644 index 00000000..c57c9cb4 --- /dev/null +++ b/agent-task/archive/2026/08/m-thin-agent-model-comparison-benchmark_2/code_review_cloud_G04_0.log @@ -0,0 +1,111 @@ + + +# 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 1–5 use directly observed terminal timestamps; preset rows 6–9 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 B01–B07 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. diff --git a/agent-task/archive/2026/08/m-thin-agent-model-comparison-benchmark_2/complete.log b/agent-task/archive/2026/08/m-thin-agent-model-comparison-benchmark_2/complete.log new file mode 100644 index 00000000..524b40fb --- /dev/null +++ b/agent-task/archive/2026/08/m-thin-agent-model-comparison-benchmark_2/complete.log @@ -0,0 +1,37 @@ + + +# 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 ` - 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 + +- 없음 + +## 후속 작업 + +- 없음 diff --git a/agent-task/archive/2026/08/m-thin-agent-model-comparison-benchmark_2/plan_local_G06_0.log b/agent-task/archive/2026/08/m-thin-agent-model-comparison-benchmark_2/plan_local_G06_0.log new file mode 100644 index 00000000..6a6fc1e0 --- /dev/null +++ b/agent-task/archive/2026/08/m-thin-agent-model-comparison-benchmark_2/plan_local_G06_0.log @@ -0,0 +1,75 @@ + + +# 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`. diff --git a/agent-test/dev/iop-thin-agent-model-comparison.md b/agent-test/dev/iop-thin-agent-model-comparison.md index bb631889..7311ca0c 100644 --- a/agent-test/dev/iop-thin-agent-model-comparison.md +++ b/agent-test/dev/iop-thin-agent-model-comparison.md @@ -47,24 +47,28 @@ | 경로 | 상태 | 무경합 snapshot | request sent UTC | terminal received UTC | 외부 elapsed | caller duration / API / TTFT | usage | source / terminal evidence | |---|---|---|---|---|---:|---|---|---| -| Claude Code → Claude direct | 미실행 | 미확인 | — | — | — | 미제공 | 미제공 | 미확인 | -| Claude Code → Gemini direct | 미실행 | 미확인 | — | — | — | 미제공 | 미제공 | 미확인 | -| OpenCode → Gemini direct | 미실행 | 미확인 | — | — | — | 미제공 | 미제공 | 미확인 | -| Claude Code → GPT direct | 미실행 | 미확인 | — | — | — | 미제공 | 미제공 | 미확인 | -| Codex → GPT direct | 미실행 | 미확인 | — | — | — | 미제공 | 미제공 | 미확인 | -| Claude Code → Gemini execution preset | 미실행 | 미확인 | — | — | — | 미제공 | 미제공 | 미확인 | -| OpenCode → Gemini execution preset | 미실행 | 미확인 | — | — | — | 미제공 | 미제공 | 미확인 | -| Claude Code → GPT execution preset | 미실행 | 미확인 | — | — | — | 미제공 | 미제공 | 미확인 | -| Codex → GPT execution preset | 미실행 | 미확인 | — | — | — | 미제공 | 미제공 | 미확인 | +| 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 | 미실행 | — | — | — | — | 미확인 | 미확인 | 미확인 | -| OpenCode → Gemini execution preset | 미실행 | — | — | — | — | 미확인 | 미확인 | 미확인 | -| Claude Code → GPT execution preset | 미실행 | — | — | — | — | 미확인 | 미확인 | 미확인 | -| Codex → GPT execution preset | 미실행 | — | — | — | — | 미확인 | 미확인 | 미확인 | +| 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점 @@ -80,7 +84,9 @@ 총점은 `A+B+C+D`의 단순 합이며 별도 가중·정규화·상대 순위 보정은 없다. 요구 위반은 해당 `A` 점수에서만 반영하고 같은 결함을 다른 축에서 중복 감점하지 않는다. 단, 그 위반이 실제 레이아웃·사용성·시각 결함을 별도로 만든 경우에는 해당 render 증거를 적고 감점할 수 있다. -## 단일 평가 기록 +## 이전 단일 평가 기록 — 모바일 렌더 무효 + +아래 점수는 이전 Chrome 실행이 390px 이미지에 더 넓은 내부 CSS viewport를 잘라 넣은 사실을 뒤늦게 확인했으므로 품질 비교에도 사용하지 않는다. 당시 공통으로 관찰한 horizontal clipping은 산출물 결함이 아니라 render 측정 결함이었다. 표와 evidence는 왜 이전 점수를 폐기했는지 추적하기 위한 참고 기록이다. 각 scorable 산출물마다 아래 한 행과 짧은 evidence block 하나만 작성한다. 모든 산출물 평가가 끝날 때까지 rubric을 바꾸지 않는다. @@ -116,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개, exact terminal source가 없는 응답 불완전 1개를 남겼다. 그러나 단독·무경합 상태와 동일한 외부 시작·완료 clock을 증명하지 못했으므로 기존 시간 비교와 속도 해석은 무효다. usage는 caller가 제공한 필드만 참고 evidence로 보존한다. +재측정에서 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 채점이 불가능했다. -이전 산출물의 단일 평가는 품질 참고 자료로만 보존한다. 재측정에서는 새 산출물만 동일 rubric으로 새 opaque ID를 부여해 한 번 평가하며, 운영 성공·외부 완료 시간·preset 단계 진단과 품질 점수를 서로 결합해 단일 순위로 만들지 않는다. +따라서 현재 증거는 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}`에 원인별로 보존했다. 별도 하네스는 만들지 않았다.