Every run received the identical real-time retrospective-board specification, scored on a 14-criterion functional rubric (42-point scale) and reviewed for visual quality. The dataset spans model generations, agent harnesses, reasoning-effort levels, a screenshot-testing tool, and a design-oriented prompt — with replicate runs to quantify run-to-run variation.
Each run built a self-hosted, real-time retrospective board (React/Vite + Node.js + Socket.io + SQLite) from the same OpenSpec. Requirements:
Claude Code runs were produced with Claude Code v2.1.132, using the /opsx:apply command to have the agent implement the OpenSpec specification.
| Model family | Runs | Mean | Range | Cost |
|---|---|---|---|---|
| Claude Opus 4.7 | 36 | 41.4 | 39–42 | $2.22–7.63 |
| Claude Opus 4.6 | 21 | 40.5 | 38–42 | $2.04–6.62 |
| Claude Sonnet 4.6 | 10 | 41.0 | 39–42 | $1.08–4.90 |
| Gemini | 3 | 39.3 | 38–40 | — |
| Qwen | 2 | 30.5 | 24–37 | $41.41–178.88 |
Qwen ran locally at no inference charge; its dollar figures are Claude-orchestration overhead only.
Every run is scored on the same 14 functional criteria, each rated 3 / 2 / 1; the run's total is their sum (42 max). The numbered columns in the heatmap below correspond to these criteria.
| # | Criterion | What it checks |
|---|---|---|
| 1 | Local Dev Environment | Does the local development environment come up without manual code changes? |
| 2 | Docker Deployment | Does the Docker image build and run without errors? |
| 3 | Home Page | Does the landing page load correctly and show the board dashboard? |
| 4 | Board Creation | Can you create a new board with a custom title? |
| 5 | User Identification | Can users identify themselves for the board? |
| 6 | Card Interaction | Can you add cards to columns? |
| 7 | Moving Cards | Can cards be moved between different columns? |
| 8 | Commenting | Can users add comments to existing cards? |
| 9 | Realtime Updates | Does a new card added to a board reflect in other browser windows instantly without refresh? |
| 10 | Realtime Updates | Does a card moved to a different column reflect in other browser windows instantly without refresh? |
| 11 | Realtime Updates | Does a new comment added to a card reflect in other browser windows instantly without refresh? |
| 12 | Data Persistence | Does data survive a server reboot? |
| 13 | Documentation | Is there documentation for the API and running the app? |
| 14 | Export | Does the app export data to CSV? |
Worked on the first try, no changes needed.
Failed initially, fixed after one prompt to the agent.
Never fully worked despite prompting.
A 2 × 3 design — High/xHigh effort across base, +Playwright, and +design-prompt conditions, six replicates per cell. Raising effort from High to xHigh moves first-try-perfect from 28% to 89%; the screenshot tool moves cost, not score; the design prompt moves aesthetics, not score.
| Cell | Mean score | First-try 42/42 | Cost (median) | Aesthetics /5 |
|---|---|---|---|---|
| High · base | 41.0 | 2/6 | $3.06 | 3.0 |
| High · +Playwright | 41.5 | 3/6 | $4.34 | 3.0 |
| High · +design prompt | 40.5 | 0/6 | $4.28 | 4.7 |
| xHigh · base | 42.0 | 6/6 | $3.33 | 3.0 |
| xHigh · +Playwright | 42.0 | 6/6 | $5.59 | 3.0 |
| xHigh · +design prompt | 41.5 | 4/6 | $5.17 | 4.8 |
Sorted by total score, then cost. Click any card for its screenshots. Repeated configurations appear multiple times by design — that spread is the point.
Each cell is a criterion score (3 / 2 / 1); hover a column number for its definition. Rows sorted by total. Docker (col 2) and Local Dev (col 1) carry most of the misses.
| Run · total | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| claude_sonnet_4.6_high_run_3 · 42 | 3 | 3 | 3 | 3 | 3 | 3 | 3 | 3 | 3 | 3 | 3 | 3 | 3 | 3 |
| claude_sonnet_4.6_high_with_antigravity_prompt_run_3 · 42 | 3 | 3 | 3 | 3 | 3 | 3 | 3 | 3 | 3 | 3 | 3 | 3 | 3 | 3 |
| claude_opus_4.6_high_run_5 · 42 | 3 | 3 | 3 | 3 | 3 | 3 | 3 | 3 | 3 | 3 | 3 | 3 | 3 | 3 |
| claude_opus_4.7_xhigh_run_2 · 42 | 3 | 3 | 3 | 3 | 3 | 3 | 3 | 3 | 3 | 3 | 3 | 3 | 3 | 3 |
| claude_sonnet_4.6_with_playwright_high_run_2 · 42 | 3 | 3 | 3 | 3 | 3 | 3 | 3 | 3 | 3 | 3 | 3 | 3 | 3 | 3 |
| claude_opus_4.7_xhigh_run_6 · 42 | 3 | 3 | 3 | 3 | 3 | 3 | 3 | 3 | 3 | 3 | 3 | 3 | 3 | 3 |
| claude_opus_4.7_high_run_6 · 42 | 3 | 3 | 3 | 3 | 3 | 3 | 3 | 3 | 3 | 3 | 3 | 3 | 3 | 3 |
| claude_opus_4.7_high · 42 | 3 | 3 | 3 | 3 | 3 | 3 | 3 | 3 | 3 | 3 | 3 | 3 | 3 | 3 |
| claude_opus_4.7_with_playwright_high_run_2 · 42 | 3 | 3 | 3 | 3 | 3 | 3 | 3 | 3 | 3 | 3 | 3 | 3 | 3 | 3 |
| claude_opus_4.7_xhigh · 42 | 3 | 3 | 3 | 3 | 3 | 3 | 3 | 3 | 3 | 3 | 3 | 3 | 3 | 3 |
| claude_opus_4.7_xhigh_run_5 · 42 | 3 | 3 | 3 | 3 | 3 | 3 | 3 | 3 | 3 | 3 | 3 | 3 | 3 | 3 |
| claude_opus_4.7_with_playwright_high · 42 | 3 | 3 | 3 | 3 | 3 | 3 | 3 | 3 | 3 | 3 | 3 | 3 | 3 | 3 |
| claude_opus_4.7_xhigh_run_3 · 42 | 3 | 3 | 3 | 3 | 3 | 3 | 3 | 3 | 3 | 3 | 3 | 3 | 3 | 3 |
| claude_opus_4.7_xhigh_run_4 · 42 | 3 | 3 | 3 | 3 | 3 | 3 | 3 | 3 | 3 | 3 | 3 | 3 | 3 | 3 |
| claude_opus_4.7_with_playwright_high_run_3 · 42 | 3 | 3 | 3 | 3 | 3 | 3 | 3 | 3 | 3 | 3 | 3 | 3 | 3 | 3 |
| claude_opus_4.7_with_playwright_xhigh_run_3 · 42 | 3 | 3 | 3 | 3 | 3 | 3 | 3 | 3 | 3 | 3 | 3 | 3 | 3 | 3 |
| claude_opus_4.7_with_playwright_xhigh_run_5 · 42 | 3 | 3 | 3 | 3 | 3 | 3 | 3 | 3 | 3 | 3 | 3 | 3 | 3 | 3 |
| claude_opus_4.7_xhigh_with_antigravity_prompt_run_2 · 42 | 3 | 3 | 3 | 3 | 3 | 3 | 3 | 3 | 3 | 3 | 3 | 3 | 3 | 3 |
| claude_opus_4.7_xhigh_with_antigravity_prompt_run_4 · 42 | 3 | 3 | 3 | 3 | 3 | 3 | 3 | 3 | 3 | 3 | 3 | 3 | 3 | 3 |
| claude_opus_4.7_xhigh_with_antigravity_prompt_run_5 · 42 | 3 | 3 | 3 | 3 | 3 | 3 | 3 | 3 | 3 | 3 | 3 | 3 | 3 | 3 |
| claude_opus_4.7_with_playwright_xhigh · 42 | 3 | 3 | 3 | 3 | 3 | 3 | 3 | 3 | 3 | 3 | 3 | 3 | 3 | 3 |
| claude_opus_4.7_xhigh_with_antigravity_prompt · 42 | 3 | 3 | 3 | 3 | 3 | 3 | 3 | 3 | 3 | 3 | 3 | 3 | 3 | 3 |
| claude_opus_4.7_with_playwright_xhigh_run_6 · 42 | 3 | 3 | 3 | 3 | 3 | 3 | 3 | 3 | 3 | 3 | 3 | 3 | 3 | 3 |
| claude_opus_4.7_with_playwright_xhigh_run_2 · 42 | 3 | 3 | 3 | 3 | 3 | 3 | 3 | 3 | 3 | 3 | 3 | 3 | 3 | 3 |
| claude_opus_4.7_with_playwright_xhigh_run_4 · 42 | 3 | 3 | 3 | 3 | 3 | 3 | 3 | 3 | 3 | 3 | 3 | 3 | 3 | 3 |
| antigravity_sonnet_4.6 · 42 | 3 | 3 | 3 | 3 | 3 | 3 | 3 | 3 | 3 | 3 | 3 | 3 | 3 | 3 |
| claude_sonnet_4.6_high_run_2 · 41 | 2 | 3 | 3 | 3 | 3 | 3 | 3 | 3 | 3 | 3 | 3 | 3 | 3 | 3 |
| claude_sonnet_4.6_high_with_antigravity_prompt · 41 | 3 | 2 | 3 | 3 | 3 | 3 | 3 | 3 | 3 | 3 | 3 | 3 | 3 | 3 |
| claude_opus_4.6_high_run_6 · 41 | 3 | 2 | 3 | 3 | 3 | 3 | 3 | 3 | 3 | 3 | 3 | 3 | 3 | 3 |
| claude_opus_4.6_high_run_4 · 41 | 3 | 2 | 3 | 3 | 3 | 3 | 3 | 3 | 3 | 3 | 3 | 3 | 3 | 3 |
| claude_opus_4.7_high_run_3 · 41 | 2 | 3 | 3 | 3 | 3 | 3 | 3 | 3 | 3 | 3 | 3 | 3 | 3 | 3 |
| claude_sonnet_4.6_high_with_antigravity_prompt_run_2 · 41 | 3 | 2 | 3 | 3 | 3 | 3 | 3 | 3 | 3 | 3 | 3 | 3 | 3 | 3 |
| claude_opus_4.6_high_with_antigravity_prompt_run_5 · 41 | 3 | 2 | 3 | 3 | 3 | 3 | 3 | 3 | 3 | 3 | 3 | 3 | 3 | 3 |
| claude_opus_4.6_high_with_antigravity_prompt_run_6 · 41 | 3 | 2 | 3 | 3 | 3 | 3 | 3 | 3 | 3 | 3 | 3 | 3 | 3 | 3 |
| claude_opus_4.6_high_run_2 · 41 | 3 | 2 | 3 | 3 | 3 | 3 | 3 | 3 | 3 | 3 | 3 | 3 | 3 | 3 |
| claude_sonnet_4.6_max_with_antigravity_prompt · 41 | 3 | 3 | 3 | 3 | 3 | 3 | 2 | 3 | 3 | 3 | 3 | 3 | 3 | 3 |
| claude_opus_4.7_high_run_4 · 41 | 2 | 3 | 3 | 3 | 3 | 3 | 3 | 3 | 3 | 3 | 3 | 3 | 3 | 3 |
| claude_opus_4.6_high_with_antigravity_prompt · 41 | 3 | 2 | 3 | 3 | 3 | 3 | 3 | 3 | 3 | 3 | 3 | 3 | 3 | 3 |
| claude_opus_4.7_high_run_2 · 41 | 2 | 3 | 3 | 3 | 3 | 3 | 3 | 3 | 3 | 3 | 3 | 3 | 3 | 3 |
| claude_opus_4.7_high_with_antigravity_prompt_run_6 · 41 | 2 | 3 | 3 | 3 | 3 | 3 | 3 | 3 | 3 | 3 | 3 | 3 | 3 | 3 |
| claude_opus_4.6_with_playwright_high_run_6 · 41 | 3 | 2 | 3 | 3 | 3 | 3 | 3 | 3 | 3 | 3 | 3 | 3 | 3 | 3 |
| claude_opus_4.6_with_playwright_high_run_5 · 41 | 3 | 3 | 2 | 3 | 3 | 3 | 3 | 3 | 3 | 3 | 3 | 3 | 3 | 3 |
| claude_opus_4.6_with_playwright_high_run_4 · 41 | 3 | 2 | 3 | 3 | 3 | 3 | 3 | 3 | 3 | 3 | 3 | 3 | 3 | 3 |
| claude_opus_4.6_with_playwright_high_run_3 · 41 | 3 | 2 | 3 | 3 | 3 | 3 | 3 | 3 | 3 | 3 | 3 | 3 | 3 | 3 |
| claude_opus_4.7_high_with_antigravity_prompt · 41 | 2 | 3 | 3 | 3 | 3 | 3 | 3 | 3 | 3 | 3 | 3 | 3 | 3 | 3 |
| claude_opus_4.7_high_with_antigravity_prompt_run_2 · 41 | 3 | 2 | 3 | 3 | 3 | 3 | 3 | 3 | 3 | 3 | 3 | 3 | 3 | 3 |
| claude_opus_4.7_with_playwright_high_run_4 · 41 | 3 | 2 | 3 | 3 | 3 | 3 | 3 | 3 | 3 | 3 | 3 | 3 | 3 | 3 |
| claude_opus_4.7_high_with_antigravity_prompt_run_3 · 41 | 3 | 2 | 3 | 3 | 3 | 3 | 3 | 3 | 3 | 3 | 3 | 3 | 3 | 3 |
| claude_opus_4.6_with_playwright_high_run_2 · 41 | 3 | 2 | 3 | 3 | 3 | 3 | 3 | 3 | 3 | 3 | 3 | 3 | 3 | 3 |
| claude_opus_4.7_with_playwright_high_run_6 · 41 | 3 | 2 | 3 | 3 | 3 | 3 | 3 | 3 | 3 | 3 | 3 | 3 | 3 | 3 |
| claude_opus_4.7_with_playwright_high_run_5 · 41 | 3 | 2 | 3 | 3 | 3 | 3 | 3 | 3 | 3 | 3 | 3 | 3 | 3 | 3 |
| claude_opus_4.7_xhigh_with_antigravity_prompt_run_6 · 41 | 3 | 3 | 3 | 3 | 3 | 3 | 2 | 3 | 3 | 3 | 3 | 3 | 3 | 3 |
| claude_opus_4.6_high · 41 | 3 | 2 | 3 | 3 | 3 | 3 | 3 | 3 | 3 | 3 | 3 | 3 | 3 | 3 |
| claude_opus_4.6_high_run_3 · 40 | 2 | 2 | 3 | 3 | 3 | 3 | 3 | 3 | 3 | 3 | 3 | 3 | 3 | 3 |
| claude_opus_4.6_high_with_antigravity_prompt_run_2 · 40 | 3 | 2 | 3 | 3 | 3 | 3 | 3 | 2 | 3 | 3 | 3 | 3 | 3 | 3 |
| claude_opus_4.6_high_with_antigravity_prompt_run_3 · 40 | 3 | 2 | 3 | 3 | 3 | 3 | 2 | 3 | 3 | 3 | 3 | 3 | 3 | 3 |
| claude_opus_4.6_with_playwright_high · 40 | 3 | 2 | 3 | 3 | 3 | 3 | 2 | 3 | 3 | 3 | 3 | 3 | 3 | 3 |
| claude_opus_4.6_high_with_antigravity_prompt_run_4 · 40 | 3 | 2 | 3 | 3 | 3 | 2 | 3 | 3 | 3 | 3 | 3 | 3 | 3 | 3 |
| claude_opus_4.7_high_with_antigravity_prompt_run_5 · 40 | 2 | 3 | 3 | 2 | 3 | 3 | 3 | 3 | 3 | 3 | 3 | 3 | 3 | 3 |
| claude_opus_4.7_xhigh_with_antigravity_prompt_run_3 · 40 | 3 | 2 | 3 | 3 | 3 | 3 | 2 | 3 | 3 | 3 | 3 | 3 | 3 | 3 |
| antigravity_gemini_3.1_pro_high · 40 | 3 | 2 | 3 | 3 | 3 | 3 | 3 | 3 | 3 | 3 | 3 | 3 | 2 | 3 |
| antigravity_gemini_3.1_pro_low · 40 | 3 | 2 | 3 | 3 | 3 | 3 | 3 | 3 | 3 | 3 | 3 | 3 | 3 | 2 |
| antigravity_opus_4.6 · 40 | 3 | 2 | 3 | 3 | 3 | 3 | 2 | 3 | 3 | 3 | 3 | 3 | 3 | 3 |
| claude_sonnet_4.6_high · 39 | 3 | 2 | 3 | 3 | 3 | 3 | 3 | 3 | 2 | 2 | 3 | 3 | 3 | 3 |
| claude_opus_4.6_with_playwright_high_run_7 · 39 | 3 | 2 | 3 | 3 | 3 | 3 | 1 | 3 | 3 | 3 | 3 | 3 | 3 | 3 |
| claude_opus_4.7_high_run_5 · 39 | 2 | 3 | 3 | 3 | 3 | 3 | 3 | 3 | 3 | 3 | 3 | 1 | 3 | 3 |
| claude_opus_4.7_high_with_antigravity_prompt_run_4 · 39 | 2 | 3 | 3 | 2 | 3 | 3 | 2 | 3 | 3 | 3 | 3 | 3 | 3 | 3 |
| claude_sonnet_4.6_with_playwright_high · 39 | 3 | 2 | 3 | 3 | 3 | 3 | 3 | 1 | 3 | 3 | 3 | 3 | 3 | 3 |
| claude_opus_4.6_high_run_1 · 38 | 3 | 2 | 3 | 3 | 3 | 3 | 1 | 3 | 2 | 3 | 3 | 3 | 3 | 3 |
| antigravity_gemini3_flash · 38 | 2 | 3 | 2 | 2 | 3 | 3 | 3 | 3 | 3 | 3 | 3 | 3 | 2 | 3 |
| claude_qwen_3.6_high_with_playwright · 37 | 3 | 2 | 3 | 2 | 2 | 3 | 2 | 2 | 3 | 3 | 3 | 3 | 3 | 3 |
| claude_qwen_coder_next_high_with_playwright · 24 | 2 | 2 | 3 | 2 | 1 | 2 | 1 | 1 | 1 | 1 | 1 | 3 | 3 | 1 |
Frontier models cluster near the 42 ceiling (family means ≈ 41); the cheap local model collapses to 24–37 at 20–90× the orchestration cost. The tier gap dwarfs anything tools, prompt, or effort do within a tier (≤ 1–2 points).
Playwright on vs off leaves functional score flat while raising cost +42–68%. Playwright-High runs still failed on Docker — a fault a screenshot can't see.
Opus 4.7 High→xHigh: first-try-perfect rises 28% → 89% for ~10–30% more cost. The reliability the tool didn't deliver, effort did.
Functional score unchanged; visual rating 4.5 vs 3.0 (prompt vs none), independent of effort and tool.
At High, identical prompts scatter 39–42 (and 24–627 lines of CSS); xHigh compresses the functional scatter to a near-uniform 42.
better-sqlite3 native builds and the Express 5 wildcard break most first-run containers. Capability and effort catch them; the tool doesn't.
Dashboards rated 1–5. Across the 31 newly rated runs, the 13 design-prompt runs average 4.5/5 vs 3.0/5 for the 18 non-design runs — a lift independent of effort (xHigh base = 3/5, identical to High base) and tool. The two labeled groups below show the contrast: design-prompt builds (marketing heroes, gradient themes, color-coded columns) vs default builds (clean but plain).






Final session cost (USD) after all fixes, low to high; bar scaled to the most expensive Claude API run. The two off-scale Qwen runs (local models, orchestration overhead only) are omitted here.
A frontier model at higher effort — effort, not a UI-testing tool, is what removes first-run failures.
Don't add a screenshot tool expecting reliability; the dominant failures are build/environment issues it can't see. Spend on capability and effort.
It adds cost and aesthetics, not correctness — invoke it when visual quality matters.