# Milestone: [bench-lite-01] 초경량 Agent 모델 비교

## 위치

- Roadmap: [ROADMAP.md](../../../../ROADMAP.md)
- Phase: [PHASE.md](../../../../phase/knowledge-tool-optimization-extension/PHASE.md)

## 목표

`[bench-route-01]`에서 호출 가능성이 확인된 동일 9개 조합을 고정된 실제 비교 과제로 한 번씩 실행해 최소 비교 결과를 남긴다.
측정 지원 코드는 만들지 않고, caller 실행과 결과 기록, 고정 기준표에 따른 산출물별 1회 심층 평가만 측정 경계로 둔다.

## 상태

[완료]

## 구현 잠금

- 상태: 해제
- SDD: 불필요
- SDD 문서: 없음
- SDD 사유: 기존 caller와 제품 경로를 단일 시도로 관측하는 test-only 작업이며 제품 API, 상태 머신, retry 또는 schema를 변경하지 않는다.
- 결정 필요: 없음

## 범위

- `[bench-route-01]`과 동일한 9개 caller/model/route 조합
- 모든 조합에 [얇은 비교 결과 문서](../../../../../agent-test/dev/iop-thin-agent-model-comparison.md)의 같은 고정 비교 prompt와 같은 빈 임시 workspace 사용
- 조합별 정확히 1회 실행
- 성공 여부, 전체 경과 시간, caller가 직접 제공한 usage, 산출물 경로와 짧은 수동 관찰만 기록
- 실행 전에 잠근 공통 100점 기준표로 각 산출물의 source와 동일 viewport render를 한 번만 분석하고, 항목별 증거·감점 사유·총점을 기록
- 실패한 조합은 실패로 기록하고 같은 측정 안에서 retry, resume 또는 대체 run을 하지 않음

## 기능

### Epic: [thin-run] 단일 시도 비교

- [x] [single-attempt-matrix] 9개 조합을 같은 prompt와 초기 상태에서 정확히 한 번씩 실행한다. 검증: 조합별 producer attempt가 하나이며 retry/resume/recovery 기록이 없어야 한다.
- [x] [minimal-result-table] 성공 여부, 경과 시간, caller 제공 usage, 산출물 경로와 짧은 관찰을 단일 Markdown 표로 기록한다. 제공되지 않은 usage는 `미제공`으로 두고 추정하거나 0으로 바꾸지 않는다.
- [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
- 완료 근거: 이전 실행·평가 로그와 [무경합 재측정 완료 로그](../../../../../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: 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의 범위인 재측정·진단·보고는 충족했다.

## 범위 제외

- manifest runner, orchestration framework, lifecycle store
- retry, resume, recovery qualification, stale-run repair
- browser/CDP 자동 검증, screenshot pass/fail gate, accessibility/network 자동 gate
- 별도 judge 모델, 다중 평가자 합의, 자동 순위, 반복·분산·유의성 분석
- 이 측정을 IOP 제품 안정성 또는 다른 Milestone의 완료 조건으로 승격하는 것

## 작업 컨텍스트

- 선행 작업: [벤치 경로 최소 HTML 스모크](benchmark-route-minimal-html-smoke.md) 완료
- 실행 방식: 기존 공식 caller 명령을 한 번씩 직접 실행하며 공통 runner를 만들지 않는다.
- 결과 위치: [얇은 비교 결과](../../../../../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 설정은 변경하지 않는다.
