Every run received the identical real-time retrospective-board specification, was scored on a 14-criterion functional rubric (42-point scale), and was characterised for visual design treatment. The dataset spans model generations, two agent harnesses, reasoning-effort levels, a visual automation and testing tool (the Playwright MCP server), and a design-oriented prompt condition (a third-party prompt, not redistributed, and a one-paragraph paraphrase of its design directive, which is) — with six or seven repeated runs of identical configurations to quantify run-to-run variation. Conditions were chosen rather than randomised.
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 CLI v2.1.132, using the /opsx:apply command to have the agent implement the OpenSpec specification, zero shot. Antigravity runs used that agent's own harness and injected system prompt. The specification is identical in every run folder.
| Harness | Model family | Runs | Mean | Range | Cost |
|---|---|---|---|---|---|
| Claude Code | Claude Opus 4.7 | 48 | 41.3 | 39–42 | $2.22–7.63 |
| Claude Code | Claude Opus 4.6 | 26 | 40.7 | 38–42 | $2.04–6.62 |
| Claude Code | Claude Sonnet 4.6 | 9 | 40.9 | 39–42 | $1.08–4.90 |
| Claude Code | Qwen | 2 | 30.5 | 24–37 | $41.41–178.88 |
| Antigravity | Claude Opus 4.6 | 1 | 40.0 | 40 | not recorded |
| Antigravity | Claude Sonnet 4.6 | 1 | 42.0 | 42 | not recorded |
| Antigravity | Gemini 3.1 | 3 | 39.3 | 38–40 | not recorded |
Cost is Claude Code's /cost estimate from token counts at per-token model prices. The two Qwen models ran locally, so their figures are token-volume estimates at the hosted-model rate under which the harness reported the usage, not prices paid. The Antigravity harness does not report session cost.
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 corrective prompt that described only the observed error.
Never fully worked despite prompting.
A 2 × 4 design — High/xHigh effort across base, +Playwright, +full design prompt and +abridged design prompt, six replicates per cell. The abridged cells were added later as an ablation and are kept out of the pooled effort contrast. Pooling the six sweep cells, raising effort from High to xHigh moves first-try-perfect from 28% (5 of 18) to 89% (16 of 18); the testing tool moves cost, not score; either design prompt changes what is built and costs first-try reliability, not the total.
| Cell | Mean score | First-try 42/42 | Cost (median) | Visual rating (runs at 3 / 4 / 5) |
|---|---|---|---|---|
| High · base | 41.0 | 2/6 | $3.06 | 6 / 0 / 0 |
| High · +Playwright | 41.5 | 3/6 | $4.34 | 6 / 0 / 0 |
| High · +full design prompt | 40.5 | 0/6 | $4.28 | 0 / 1 / 5 |
| High · +abridged design prompt | 40.8 | 1/6 | $4.14 | 0 / 0 / 6 |
| xHigh · base | 42.0 | 6/6 | $3.33 | 6 / 0 / 0 |
| xHigh · +Playwright | 42.0 | 6/6 | $5.59 | 6 / 0 / 0 |
| xHigh · +full design prompt | 41.5 | 4/6 | $5.17 | 0 / 1 / 5 |
| xHigh · +abridged design prompt | 41.0 | 1/6 | $4.73 | 0 / 0 / 6 |
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_abridged_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.6_high_abridged_prompt_run_2 · 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.6_high_abridged_prompt · 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_abridged_prompt · 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_high_abridged_prompt_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_abridged_prompt_run_4 · 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_abridged_prompt_run_6 · 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.7_xhigh_abridged_prompt_run_4 · 41 | 3 | 3 | 3 | 3 | 3 | 3 | 2 | 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.7_high_abridged_prompt_run_5 · 41 | 3 | 3 | 3 | 3 | 3 | 3 | 2 | 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_abridged_prompt_run_3 · 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_abridged_prompt_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_xhigh_abridged_prompt_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_6 · 41 | 3 | 2 | 3 | 3 | 3 | 3 | 3 | 3 | 3 | 3 | 3 | 3 | 3 | 3 |
| claude_opus_4.7_xhigh_abridged_prompt_run_3 · 41 | 3 | 3 | 3 | 3 | 3 | 3 | 2 | 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.7_xhigh_abridged_prompt_run_2 · 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.7_high_abridged_prompt · 40 | 3 | 3 | 3 | 3 | 3 | 3 | 2 | 2 | 3 | 3 | 3 | 3 | 3 | 3 |
| claude_opus_4.7_xhigh_abridged_prompt_run_5 · 40 | 2 | 2 | 3 | 3 | 3 | 3 | 3 | 3 | 3 | 3 | 3 | 3 | 3 | 3 |
| claude_opus_4.7_high_abridged_prompt_run_6 · 40 | 2 | 3 | 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.6_high_abridged_prompt_run_5 · 39 | 3 | 2 | 3 | 3 | 3 | 2 | 2 | 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 two local Qwen models score 37 and 24, with token-volume estimates twelve to fifty times the frontier median. The tier gap dwarfs anything tools, prompt, or effort do within a tier (≤ 1–2 points on the total).
Docker deployment failed first try in 40 of 90 runs (44%). Its first-try pass rate rose from 19% on Opus 4.6 High to 75% on Opus 4.7 High while family means moved less than a point; local-environment failures moved the other way (1 of 26 → 10 of 24).
Playwright on vs off leaves the functional score flat while raising median cost +42% / +68% (Opus 4.7 High / xHigh; +27% on Opus 4.6). Every tool-enabled run invoked it; the premium is context re-reading (cache-read tokens 2.3M → 5.3M–7.0M), and tool-enabled runs still failed on Docker builds.
Opus 4.7 High→xHigh: first-try-perfect rises 28% → 89% (5 of 18 → 16 of 18), corrective prompts fall 16 → 3, for 9–29% more cost. The reliability the tool didn't deliver, effort did.
None of the 45 unprompted Claude Code runs shipped a gradient, a keyframe animation or an imported display font; all 40 prompted runs shipped all of them, and every one was rated 4 or 5 against 3 for every unprompted run. Functional totals were unchanged, but first-try reliability fell, concentrated on drag-and-drop, and the cost persists at xHigh. A one-paragraph paraphrase reproduces the whole effect.
Seven identical Opus 4.6 High base runs scatter 38–42 functionally and 41–626 lines of CSS; on Opus 4.7 the structural spread narrows on its own while scores still scatter 39–42 at High, and xHigh compresses them to a uniform 42.
better-sqlite3 native builds in minimal containers and the Express 5 change that removed the app.get('*') wildcard break most first-run containers. Capability and effort catch them; a browser-testing tool doesn't.
Two independent measures over the 85 Claude Code runs. The source-based measures count, in each run's shipped code, the features the design directive names and technique-agnostic styling effort (analysis/design_markers.csv, no judge involved). The holistic rating (1–5) was produced by a large language model from the archived dashboard screenshots, reviewed by the author, and not blinded to condition (analysis/VISUAL_RATING_INSTRUMENT.md). The two agree in every Claude Code run. Neither depends on effort or the testing tool: every base and +Playwright run at either effort level sits at 3.
| Measure | No design prompt (45) | Full design prompt (22) | Abridged prompt (18) |
|---|---|---|---|
| CSS gradient (runs with ≥ 1) | 0 / 45 | 22 / 22 | 18 / 18 |
| Keyframe animation (runs with ≥ 1) | 0 / 45 | 22 / 22 | 18 / 18 |
| Google Fonts import (runs with ≥ 1) | 0 / 45 | 22 / 22 | 18 / 18 |
| Named display font (runs with ≥ 1) | 0 / 45 | 22 / 22 | 18 / 18 |
| CSS custom properties (median) | 10 | 33 | 30 |
| CSS lines (median) | 330 | 967 | 956 |
| box-shadow rules (median) | 3 | 12 | 15 |
| transform rules (median) | 0 | 14 | 18 |
| Holistic visual rating 4 or 5 | 0 / 45 | 22 / 22 | 18 / 18 |
| Holistic visual rating 3 or below | 45 / 45 | 0 / 22 | 0 / 18 |









Final session cost (USD) after all fixes, low to high; bar scaled to the most expensive hosted-model run. The two off-scale Qwen runs (local models; their /cost figures are token-volume estimates, not prices) are omitted here, and the five Antigravity runs have no recorded cost.
A frontier model at higher effort — effort, not a UI-testing tool, is what removes first-run failures.
Don't add a browser-testing tool expecting reliability; the dominant failures are build/environment faults it can't see. Spend on capability and effort, or on a tool aimed at the build.
A paragraph of project instructions is enough to invoke it — and budget for the small first-try-reliability price it carries in the most interaction-heavy features.