docs(bench): 단일 평가 기준을 추가한다

별도 채점 하네스를 만들지 않고도 산출물을 재검산 가능하게 비교할 수 있도록 고정 100점 rubric, opaque 평가, 직접 evidence와 단순 총점 규칙을 마지막 작업으로 추가한다.
This commit is contained in:
toki 2026-08-14 06:07:30 +09:00
parent 16b7aba95a
commit 3d10de0652
4 changed files with 63 additions and 22 deletions

View file

@ -67,7 +67,7 @@ Phase를 가로지르는 실제 다음 작업 선택은 [전역 마일스톤 실
- [진행중] [bench-lite-01] 초경량 Agent 모델 비교
- 경로: [[bench-lite-01] 초경량 Agent 모델 비교](milestones/thin-agent-model-comparison-benchmark.md)
- 요약: 최소 HTML 스모크를 통과한 동일 경로를 복구·재개·자동 채점 없는 단일 시도로 실행하고, 성공 여부·경과 시간·제공된 usage·산출물만 한 표에 기록한다.
- 요약: 최소 HTML 스모크를 통과한 동일 경로를 복구·재개 없는 단일 시도로 실행하고, 성공 여부·경과 시간·제공된 usage와 고정 100점 기준표의 1회 산출물 평가를 기록한다.
- [계획] [surface-01] Inference API Surface와 실행 Lifecycle 책임 경계 리팩터링
- 경로: [[surface-01] Inference API Surface와 실행 Lifecycle 책임 경계 리팩터링](milestones/inference-api-surface-execution-lifecycle-refactor.md)

View file

@ -8,7 +8,7 @@
## 목표
`[bench-route-01]`에서 호출 가능성이 확인된 동일 9개 조합을 고정된 실제 비교 과제로 한 번씩 실행해 최소 비교 결과를 남긴다.
측정 지원 코드는 만들지 않고, caller 실행과 결과 기록만 측정 경계로 둔다.
측정 지원 코드는 만들지 않고, caller 실행과 결과 기록, 고정 기준표에 따른 산출물별 1회 심층 평가만 측정 경계로 둔다.
## 상태
@ -28,6 +28,7 @@
- 모든 조합에 [얇은 비교 결과 문서](../../../../agent-test/dev/iop-thin-agent-model-comparison.md)의 같은 고정 비교 prompt와 같은 빈 임시 workspace 사용
- 조합별 정확히 1회 실행
- 성공 여부, 전체 경과 시간, caller가 직접 제공한 usage, 산출물 경로와 짧은 수동 관찰만 기록
- 실행 전에 잠근 공통 100점 기준표로 각 산출물의 source와 동일 viewport render를 한 번만 분석하고, 항목별 증거·감점 사유·총점을 기록
- 실패한 조합은 실패로 기록하고 같은 측정 안에서 retry, resume 또는 대체 run을 하지 않음
## 기능
@ -36,6 +37,7 @@
- [ ] [single-attempt-matrix] 9개 조합을 같은 prompt와 초기 상태에서 정확히 한 번씩 실행한다. 검증: 조합별 producer attempt가 하나이며 retry/resume/recovery 기록이 없어야 한다.
- [ ] [minimal-result-table] 성공 여부, 경과 시간, caller 제공 usage, 산출물 경로와 짧은 관찰을 단일 Markdown 표로 기록한다. 제공되지 않은 usage는 `미제공`으로 두고 추정하거나 0으로 바꾸지 않는다.
- [ ] [single-pass-scorecard] 실행 전에 고정한 공통 100점 기준표로 각 scorable 산출물의 source와 desktop/mobile render를 한 번만 함께 분석해 항목별 점수, 직접 증거, 감점 사유와 산술 총점을 기록한다. 검증: 평가 pass에는 route·model·시간·usage를 제공하지 않고 opaque 평가 ID만 사용하며, 모든 점수는 고정 anchor와 evidence를 가지고 재채점은 산술·전사 오류 수정으로만 제한한다.
- [ ] [bounded-conclusion] 성공한 결과만 비교하고 실패·미제공 데이터를 점수 0으로 취급하지 않는 짧은 결론을 남긴다. 자동 채점이나 통계적 일반화는 하지 않는다.
## 완료 리뷰
@ -46,7 +48,7 @@
- 검토 항목:
- [x] `[bench-route-01]`이 통과 또는 사용자 승인된 외부 차단 상태다.
- [ ] 새 benchmark script와 자동화 state가 없다.
- [ ] 조합별 정확히 한 번의 실행과 최소 결과 표만 남았다.
- [ ] 조합별 정확히 한 번의 실행, 최소 결과 표와 evidence-backed 단일 평가표만 남았다.
- agent-ui 상태 반영: 해당 없음
- 리뷰 코멘트: 없음
@ -54,8 +56,8 @@
- manifest runner, orchestration framework, lifecycle store
- retry, resume, recovery qualification, stale-run repair
- browser/CDP 자동 검증, screenshot gate, accessibility/network gate
- 익명 LLM 채점, 자동 순위, 반복·분산·유의성 분석
- browser/CDP 자동 검증, screenshot pass/fail gate, accessibility/network 자동 gate
- 별도 judge 모델, 다중 평가자 합의, 자동 순위, 반복·분산·유의성 분석
- 이 측정을 IOP 제품 안정성 또는 다른 Milestone의 완료 조건으로 승격하는 것
## 작업 컨텍스트
@ -63,5 +65,5 @@
- 선행 작업: [벤치 경로 최소 HTML 스모크](../../../archive/phase/knowledge-tool-optimization-extension/milestones/benchmark-route-minimal-html-smoke.md) 완료
- 실행 방식: 기존 공식 caller 명령을 한 번씩 직접 실행하며 공통 runner를 만들지 않는다.
- 결과 위치: [얇은 비교 결과](../../../../agent-test/dev/iop-thin-agent-model-comparison.md)
- 준비 상태: 고정 prompt, 9행 결과표, 단일 시도 판정 규칙을 준비했다. 별도 script, manifest, state store는 없다.
- 준비 상태: 교체 가능한 고정 prompt, 9행 결과표, 공통 100점 기준표, 단일 평가 scorecard를 준비했다. 별도 script, judge, manifest, state store는 없다.
- 세션 라우팅: 이 세션에서 execution preset의 Work 바인딩은 사용자 지시에 따라 live `ornith:35b`를 사용하며 tracked 설정은 변경하지 않는다.

View file

@ -7,7 +7,7 @@
### bench-lite
1. [[bench-lite-01] 초경량 Agent 모델 비교](phase/knowledge-tool-optimization-extension/milestones/thin-agent-model-comparison-benchmark.md)
통과한 동일 경로를 복구·재개·자동 채점 없이 한 번씩 실행하고 최소 비교 표만 남긴다.
통과한 동일 경로를 복구·재개 없이 한 번씩 실행하고, 고정 기준표로 산출물을 한 번만 깊게 평가해 근거와 총점을 남긴다.
### route

View file

@ -2,38 +2,77 @@
## 목적
검증을 마친 9개 caller/model/route 조합에 같은 HTML 구현 요청을 정확히 한 번씩 실행해 성공 여부, 경과 시간, caller가 직접 제공한 usage와 짧은 관찰만 비교한다. 별도 benchmark script, runner, manifest, retry, resume, browser gate 또는 자동 채점은 사용하지 않는다.
검증을 마친 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`.
> 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. 요청 충족` 체크리스트만 실행 전에 함께 바꾸고 고정한다. 나머지 평가 축과 실행 방식은 유지한다.
## 실행 규칙
- 각 조합은 빈 임시 workspace에서 정확히 한 번만 실행한다.
- 실패도 결과이며 같은 측정에서 retry, resume, recovery 또는 대체 실행을 하지 않는다.
- direct 경로는 caller workspace의 `index.html`과 terminal marker를 확인한다.
- execution preset은 Edge private workspace cleanup 계약을 유지하므로 caller-visible terminal marker를 확인하고 산출물 경로는 `비공개 workspace(정리됨)`으로 기록한다.
- execution preset은 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:35b` 바인딩을 사용한다. 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 usage | 산출물/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 | 미실행 | 미측정 | 미제공 | 미확인 | — |
| 경로 | 평가 ID | 상태 | 경과 시간 | caller usage | source SHA-256 / 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 | 미부여 | 미실행 | 미측정 | 미제공 | 미확인 | — |
## 공통 평가 기준표 — 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 증거를 적고 감점할 수 있다.
## 단일 평가 기록
각 scorable 산출물마다 아래 한 행과 짧은 evidence block 하나만 작성한다. 모든 산출물 평가가 끝날 때까지 rubric을 바꾸지 않는다.
| 평가 ID | A /40 | B /20 | C /20 | D /20 | 총점 /100 | 채점 상태 |
|---|---:|---:|---:|---:|---:|---|
| 미부여-01 | — | — | — | — | — | 미채점 |
| 미부여-02 | — | — | — | — | — | 미채점 |
| 미부여-03 | — | — | — | — | — | 미채점 |
| 미부여-04 | — | — | — | — | — | 미채점 |
| 미부여-05 | — | — | — | — | — | 미채점 |
| 미부여-06 | — | — | — | — | — | 미채점 |
| 미부여-07 | — | — | — | — | — | 미채점 |
| 미부여-08 | — | — | — | — | — | 미채점 |
| 미부여-09 | — | — | — | — | — | 미채점 |
Evidence block 형식: `평가 ID — A: 충족/누락 selector와 점수; B~D: source selector 또는 viewport에서 직접 관찰한 근거; 감점: 기준·anchor·사유`. 한 결함당 한 문장으로 제한한다. 평가는 산출물별 한 번만 수행하고, 이후 수정은 합계 산술 오류나 evidence 전사 오류만 허용하며 수정 사유를 같은 block에 남긴다.
이 총점은 고정 rubric과 직접 evidence에 기반한 재검산 가능한 단일 평가 점수다. 반복 표본이나 다중 평가자 합의가 아니므로 통계적 모델 우위나 절대적 품질 척도로 해석하지 않는다.
## 결론
9개 단일 시도가 끝난 뒤 성공 결과만 짧게 비교한다. 실패와 미제공 usage를 0점으로 바꾸거나 반복 실행·통계·순위로 일반화하지 않는다.
9개 단일 시도와 단일 평가가 끝난 뒤 scorable 결과의 총점과 축별 강점·약점만 짧게 비교한다. 실행 성공률·속도·usage는 품질 총점과 별도로 제시한다. 실패, 채점 불가와 미제공 usage를 0점으로 바꾸거나 반복 실행·통계적 우위로 일반화하지 않는다.