<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0" xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd" xmlns:googleplay="http://www.google.com/schemas/play-podcasts/1.0"><channel><title><![CDATA[Error Bars]]></title><description><![CDATA[Receipts, not vibes. Model benchmarks with error bars: repeated runs, confidence intervals, refusal rates, real costs. Fixtures included so you can run them yourself.]]></description><link>https://theerrorbars.com</link><image><url>https://substackcdn.com/image/fetch/$s_!3Bjo!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9722cc56-763f-470e-af9d-730644916ee8_1254x1254.png</url><title>Error Bars</title><link>https://theerrorbars.com</link></image><generator>Substack</generator><lastBuildDate>Tue, 28 Jul 2026 03:36:25 GMT</lastBuildDate><atom:link href="https://theerrorbars.com/feed" rel="self" type="application/rss+xml"/><copyright><![CDATA[David Wiens]]></copyright><language><![CDATA[en]]></language><webMaster><![CDATA[receiptsnotvibes@substack.com]]></webMaster><itunes:owner><itunes:email><![CDATA[receiptsnotvibes@substack.com]]></itunes:email><itunes:name><![CDATA[Buschleague]]></itunes:name></itunes:owner><itunes:author><![CDATA[Buschleague]]></itunes:author><googleplay:owner><![CDATA[receiptsnotvibes@substack.com]]></googleplay:owner><googleplay:email><![CDATA[receiptsnotvibes@substack.com]]></googleplay:email><googleplay:author><![CDATA[Buschleague]]></googleplay:author><itunes:block><![CDATA[Yes]]></itunes:block><item><title><![CDATA[Your Vendor's Benchmark Is Not Your Workload]]></title><description><![CDATA[Two points on SWE-bench is not a decision.]]></description><link>https://theerrorbars.com/p/your-vendors-benchmark-is-not-your</link><guid isPermaLink="false">https://theerrorbars.com/p/your-vendors-benchmark-is-not-your</guid><dc:creator><![CDATA[Buschleague]]></dc:creator><pubDate>Mon, 27 Jul 2026 01:32:08 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!p8k2!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F46bfe89c-42f2-4ca6-b9c0-e63c9870cc7f_1425x870.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>You&#8217;re choosing a model for your team. Two candidates sit a point or two apart on SWE-bench Verified, the vendor decks quote the scores to one decimal place, and you&#8217;re trying to turn that delta into a decision about what your engineers use every day. I want to walk through why that number cannot answer your question, and what actually can.</p><p>Start with what the score measures, stated fairly. The labs are not training on the test set. What they are doing is post-training with reinforcement learning on agentic coding environments shaped like the benchmark: a Python bug in a large open-source repo, run the tests, submit a patch. That&#8217;s a task distribution, and when you optimize a model against a distribution, the score stops measuring general coding ability and starts measuring optimization against that distribution. This is Goodhart&#8217;s law operating in the open, no cheating required. Contamination is a real secondary risk for SWE-bench specifically, since the tasks are drawn from public GitHub issues that predate 2023 and have been on the open internet ever since, but the targeting mechanism does the heavier lifting and would exist even with a perfectly sealed test set.</p><p>Now the degrees of freedom underneath that decimal point. SWE-bench Verified has 500 tasks, so one point of score is about five tasks going the other way. No leaderboard entry ships with an error bar. And the effective sample is smaller than 500, because the tasks come from a small set of popular Python repositories, and tasks from the same repo share whatever made that repo&#8217;s issues easy or hard. When I ran that correction on my own panel&#8217;s numbers, headline gaps that looked airtight touched zero; the piece publishing alongside this one walks through it. The same arithmetic applies here: the independent unit is closer to the repo than the task, and there are far fewer repos than tasks. Then there&#8217;s the scaffold. The same model run through different harness configurations shows a documented spread of about five points on this family of benchmarks. A leaderboard entry silently bundles model, scaffold, prompt, and retry policy into one number, and the scaffold term alone can be several times larger than the gap you&#8217;re squinting at.</p><p>SWE-bench tracked something real, and pretending otherwise would be its own kind of vibes post. Models went from single-digit percent to above 70% in roughly two years, and no amount of targeting explains a move that size; the capability is genuinely there. Big gaps on this benchmark are informative. A model at 30% and a model at 70% are different tools. What&#8217;s noise plus targeting is the small release-over-release delta, the one or two points that marketing pages are built on. I am not arguing the benchmark measures nothing. I am arguing it doesn&#8217;t measure your workload, and the smaller the gap, the more the measurement is about the benchmark and the less it&#8217;s about you.</p><p>Because think about what your team actually does all day. Chores. Refactors that have to respect an undocumented constraint. Tasks that arrive embedded in a live module rather than as a clean prompt. Work where a refusal or a hallucinated rewrite costs more than a wrong answer. Work where cost per task compounds across a fleet. The leaderboard has no cell for any of it.</p><p>When I built cells for it, the ranking the leaderboard implies fell apart. My latest battery is 30 independent clusters of production-shaped coding tasks, each rendered in three format variants, run three times per model, 270 scored rows apiece, with every interval clustered on the underlying task. Seven of the eight models I ran sit between 98.9% and 100.0% on quality. Haiku, the cheap tier, scored 99.5% with a clustered 95% interval of [98.6, 100.5], statistically indistinguishable from Opus 4.8&#8217;s clean 100.0%, and it did that for $2.74 of spend against Opus 4.8&#8217;s $8.30 and Opus 5&#8217;s $15.97. (Yes, that interval pokes above 100. A proportion can&#8217;t beat a perfect score; that&#8217;s the normal approximation running out of resolution at the ceiling, printed as computed.) On everyday-shaped work, the efficient tier is at the same ceiling as models costing three to six times more. The eighth model, Fable, a current flagship, scored 56.4%, and every point of that gap is refusals, a failure mode that has no column on any public leaderboard. Meanwhile the thing the benchmark deltas are supposedly tracking, flagship separation, doesn&#8217;t exist on this task shape at all.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!p8k2!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F46bfe89c-42f2-4ca6-b9c0-e63c9870cc7f_1425x870.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!p8k2!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F46bfe89c-42f2-4ca6-b9c0-e63c9870cc7f_1425x870.png 424w, https://substackcdn.com/image/fetch/$s_!p8k2!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F46bfe89c-42f2-4ca6-b9c0-e63c9870cc7f_1425x870.png 848w, https://substackcdn.com/image/fetch/$s_!p8k2!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F46bfe89c-42f2-4ca6-b9c0-e63c9870cc7f_1425x870.png 1272w, https://substackcdn.com/image/fetch/$s_!p8k2!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F46bfe89c-42f2-4ca6-b9c0-e63c9870cc7f_1425x870.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!p8k2!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F46bfe89c-42f2-4ca6-b9c0-e63c9870cc7f_1425x870.png" width="1425" height="870" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/46bfe89c-42f2-4ca6-b9c0-e63c9870cc7f_1425x870.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:870,&quot;width&quot;:1425,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:102886,&quot;alt&quot;:&quot;Bar chart of eight models' quality scores with clustered confidence intervals; seven near 100 percent, Fable at 57 percent&quot;,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://receiptsnotvibes.substack.com/i/208618997?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F46bfe89c-42f2-4ca6-b9c0-e63c9870cc7f_1425x870.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Bar chart of eight models' quality scores with clustered confidence intervals; seven near 100 percent, Fable at 57 percent" title="Bar chart of eight models' quality scores with clustered confidence intervals; seven near 100 percent, Fable at 57 percent" srcset="https://substackcdn.com/image/fetch/$s_!p8k2!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F46bfe89c-42f2-4ca6-b9c0-e63c9870cc7f_1425x870.png 424w, https://substackcdn.com/image/fetch/$s_!p8k2!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F46bfe89c-42f2-4ca6-b9c0-e63c9870cc7f_1425x870.png 848w, https://substackcdn.com/image/fetch/$s_!p8k2!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F46bfe89c-42f2-4ca6-b9c0-e63c9870cc7f_1425x870.png 1272w, https://substackcdn.com/image/fetch/$s_!p8k2!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F46bfe89c-42f2-4ca6-b9c0-e63c9870cc7f_1425x870.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">8 models, 3 rounds x 90 fixtures; error bars are 95% CIs clustered on base task. GPT-5.6-sol at n=221 after rate-limit errors (fixed before the second battery).</figcaption></figure></div><p>There&#8217;s a structural reason to expect this. Benchmark-targeted RL budgets concentrate where the marketing stakes are, on flagship tiers, and the optimization concentrates on benchmark-shaped tasks. So efficient-tier models end up underrated by benchmark scores relative to how they perform on ordinary work, which is precisely the work most teams would deploy them on. The supplemental board bears this out: Haiku scored a clean 100.0% across all 270 rows, exactly tied with GPT-4o, GPT-4.1, and o4-mini, yesterday&#8217;s flagship and reasoning tiers, so on this work the two-year-old leaderboard kings and today&#8217;s cheap tier are the same tool. Haiku did it for $2.77 of spend against o4-mini&#8217;s $4.62, though the legacy pair has itself been repriced into budget territory, $1.63 for GPT-4.1 and $1.73 for GPT-4o, which is its own kind of confirmation that nobody should be paying flagship rates for work of this shape. The GPT-5.6 family sorted the same way: sol and terra both at 100.0% for $7.98 and $3.67, and luna, the efficient variant, at 97.8% with a clustered interval of [96.1, 99.5], the only member of the family that separates from the ceiling at all.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!abc9!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F62edb5e6-fe19-4d2b-b15b-5b59d763e971_1776x1924.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!abc9!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F62edb5e6-fe19-4d2b-b15b-5b59d763e971_1776x1924.png 424w, https://substackcdn.com/image/fetch/$s_!abc9!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F62edb5e6-fe19-4d2b-b15b-5b59d763e971_1776x1924.png 848w, https://substackcdn.com/image/fetch/$s_!abc9!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F62edb5e6-fe19-4d2b-b15b-5b59d763e971_1776x1924.png 1272w, https://substackcdn.com/image/fetch/$s_!abc9!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F62edb5e6-fe19-4d2b-b15b-5b59d763e971_1776x1924.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!abc9!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F62edb5e6-fe19-4d2b-b15b-5b59d763e971_1776x1924.png" width="1456" height="1577" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/62edb5e6-fe19-4d2b-b15b-5b59d763e971_1776x1924.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1577,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:245057,&quot;alt&quot;:&quot;Horizontal bar chart of seventeen models sorted by quality score with cost labels; sixteen at or near 100 percent, Fable at 57 percent.&quot;,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://theerrorbars.com/i/208618997?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F62edb5e6-fe19-4d2b-b15b-5b59d763e971_1776x1924.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Horizontal bar chart of seventeen models sorted by quality score with cost labels; sixteen at or near 100 percent, Fable at 57 percent." title="Horizontal bar chart of seventeen models sorted by quality score with cost labels; sixteen at or near 100 percent, Fable at 57 percent." srcset="https://substackcdn.com/image/fetch/$s_!abc9!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F62edb5e6-fe19-4d2b-b15b-5b59d763e971_1776x1924.png 424w, https://substackcdn.com/image/fetch/$s_!abc9!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F62edb5e6-fe19-4d2b-b15b-5b59d763e971_1776x1924.png 848w, https://substackcdn.com/image/fetch/$s_!abc9!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F62edb5e6-fe19-4d2b-b15b-5b59d763e971_1776x1924.png 1272w, https://substackcdn.com/image/fetch/$s_!abc9!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F62edb5e6-fe19-4d2b-b15b-5b59d763e971_1776x1924.png 1456w" sizes="100vw"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Same battery, tier-grouped horizontal view; cost in each label.</figcaption></figure></div><p></p><p>All of which points at the same remedy. The only benchmark that can&#8217;t be optimized against you is the one you run yourself, on your own task mix, with tasks the labs have never seen because they live in your repo and nowhere else. That&#8217;s not a purity argument, it&#8217;s a measurement argument: your distribution is the one you care about, so sample from it. Alongside this piece I&#8217;m publishing the first drop of my <a href="https://open.substack.com/pub/receiptsnotvibes/p/the-battery-drop-1-four-fixtures?r=i7yz8&amp;utm_campaign=post&amp;utm_medium=web&amp;showWelcomeOnShare=true">fixture battery</a>, four fixtures across four difficulty tiers, fully inline, with the grading checklist included, so you can run the same kind of panel on your own agent this afternoon. Every number that comes out of mine follows one contract, and I&#8217;d hold yours to it too: every claim carries its sample size, its interval, and the unit it was clustered on. If a number can&#8217;t tell you how wrong it might be, it isn&#8217;t a measurement yet.</p><p>Everything above is scoped to coding tasks run through my own harness, and my board numbers are my board&#8217;s, not a general ranking. But that&#8217;s the point. Yours should be yours.</p>]]></content:encoded></item><item><title><![CDATA[The Battery, Drop 1: Four Fixtures You Can Run on Your Own Agent Right Now]]></title><description><![CDATA[Four fixtures, four difficulty tiers, fully inline. Run them against your own agent this afternoon.]]></description><link>https://theerrorbars.com/p/the-battery-drop-1-four-fixtures</link><guid isPermaLink="false">https://theerrorbars.com/p/the-battery-drop-1-four-fixtures</guid><dc:creator><![CDATA[Buschleague]]></dc:creator><pubDate>Mon, 27 Jul 2026 01:29:28 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!3Bjo!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9722cc56-763f-470e-af9d-730644916ee8_1254x1254.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Every result I&#8217;ve published from my model panel comes from fixtures you can&#8217;t see, which makes them hard to sanity-check from the outside. So here are four new ones, one per difficulty tier, fully inline, written from scratch for this post. They are not copies or paraphrases of anything in my private benchmark suite. Copy the prompt and the input code, hand it to whatever agent you&#8217;re using, and grade the output against the checklist yourself. You&#8217;ll learn more from running these once than from reading another paragraph of my numbers.</p><div><hr></div><h2>Fixture 1 (Easy): the off-by-one paginator</h2><p><strong>Task prompt:</strong> &#8220;Fix <code>paginate()</code> so it returns the correct items for every page, including the last one.&#8221;</p><p><strong>Input code:</strong></p><pre><code><code>def paginate(items, page, page_size):
    """Return the slice of items for the given 1-indexed page."""
    start = page * page_size
    end = start + page_size
    return items[start:end]
</code></code></pre><p>Bug: <code>page</code> is 1-indexed in the docstring but the math treats it as 0-indexed, so page 1 skips the first <code>page_size</code> items entirely, and the true final page either returns empty or drops items.</p><p><strong>Expected-behavior checklist:</strong></p><ul><li><p>[ ] <code>paginate(items, 1, 10)</code> returns <code>items[0:10]</code>, not <code>items[10:20]</code></p></li><li><p>[ ] The last page returns the correct remainder, not a full <code>page_size</code> slice padded with nothing, and not an off-by-one-short slice</p></li><li><p>[ ] <code>paginate(items, 0, 10)</code> or negative pages are handled predictably (clamped or raised, not a silent wrong slice)</p></li><li><p>[ ] The function signature is unchanged</p></li><li><p>[ ] No unrelated code was rewritten</p></li></ul><p><strong>Why this tier:</strong> Easy isolates literal boundary-condition reading. No cross-file context, no ambiguity about intent, just careful arithmetic against a stated contract the original code violates. If an agent can&#8217;t pass this, nothing else in this drop matters yet.</p><div><hr></div><h2>Fixture 2 (Medium): the cache that doesn&#8217;t know it&#8217;s stale</h2><p><strong>Task prompt:</strong> &#8220;After <code>update_user_profile()</code> runs, the very next call to <code>get_user_profile()</code> for that same user should return the updated data, not a stale cached copy. Fix it without breaking caching for anyone else.&#8221;</p><p><strong>Input code:</strong></p><pre><code><code>_cache = {}

def get_or_compute(key, compute_fn):
    if key not in _cache:
        _cache[key] = compute_fn()
    return _cache[key]

def invalidate(key):
    _cache.pop(key, None)

def get_user_profile(user_id):
    return get_or_compute(f"profile:{user_id}", lambda: _load_profile_from_db(user_id))

def update_user_profile(user_id, data):
    _save_profile_to_db(user_id, data)
    # cache is never invalidated here
</code></code></pre><p><strong>Expected-behavior checklist:</strong></p><ul><li><p>[ ] After <code>update_user_profile(42, data)</code>, the next <code>get_user_profile(42)</code> call recomputes from the store instead of returning the old cached value</p></li><li><p>[ ] <code>get_user_profile()</code> calls for a different user_id are unaffected, still served from cache if already cached</p></li><li><p>[ ] The fix calls <code>invalidate()</code> or equivalent scoped invalidation. Clearing the whole cache is a fail, it&#8217;s the lazy wrong answer</p></li><li><p>[ ] Existing cache-hit behavior (second call for the same uninvalidated key doesn&#8217;t recompute) still holds</p></li></ul><p><strong>Why this tier:</strong> Medium requires tracing a call graph across more than one function to find the missing line, and resisting the shortcut of clearing the whole cache to make the symptom go away. It&#8217;s the first tier where &#8220;does it superficially work&#8221; and &#8220;did it actually solve the stated problem&#8221; start to diverge.</p><div><hr></div><h2>Fixture 3 (Hard): the undocumented contract</h2><p><strong>Task prompt:</strong> &#8220;Refactor <code>RateLimiter</code> to use a cleaner sliding-window algorithm instead of the current fixed-bucket counter. All existing tests must still pass.&#8221;</p><p><strong>Input code:</strong></p><pre><code><code>class RateLimiter:
    def __init__(self, max_requests=10, max_tracked_clients=1000):
        self._counts = {}
        self._max_requests = max_requests
        self._max_tracked_clients = max_tracked_clients

    def allow(self, client_id):
        if len(self._counts) &gt; self._max_tracked_clients:
            # undocumented: evict the oldest half of tracked clients
            # so memory doesn't grow unbounded under many unique client_ids
            oldest = list(self._counts.keys())[: self._max_tracked_clients // 2]
            for k in oldest:
                del self._counts[k]

        count = self._counts.get(client_id, 0)
        if count &gt;= self._max_requests:
            return False
        self._counts[client_id] = count + 1
        return True
</code></code></pre><p><strong>Existing test the agent must keep passing (given alongside the code, not just described):</strong></p><pre><code><code>def test_memory_bounded_under_many_unique_clients():
    limiter = RateLimiter(max_tracked_clients=1000)
    for i in range(50_000):
        limiter.allow(f"client-{i}")
    assert len(limiter._counts) &lt;= 1000
</code></code></pre><p><strong>Expected-behavior checklist:</strong></p><ul><li><p>[ ] <code>allow()</code> still correctly rate-limits repeated calls from the same <code>client_id</code> after the refactor</p></li><li><p>[ ] The memory-bounded test still passes, meaning the refactored version still caps how many clients it tracks in memory</p></li><li><p>[ ] Full credit requires the agent to say it found this constraint from the test, not just happen to preserve it. An agent that deletes or weakens the test to make the refactor easier fails this fixture outright</p></li><li><p>[ ] The public <code>allow(client_id)</code> signature is unchanged</p></li></ul><p><strong>Why this tier:</strong> Hard isolates inferring a real requirement that exists only as test behavior, never as a comment or docstring. Nobody told the agent to cap memory usage in the prompt. The only place that requirement lives is a test it has to notice, understand, and respect while rewriting the internals around it.</p><div><hr></div><h2>Fixture 4 (Hard-plus): the comment lies</h2><p><strong>Task prompt:</strong> &#8220;Customers are complaining that VIP accounts aren&#8217;t getting their discount. Fix <code>calculate_discount()</code> so VIP customers actually get the correct discount. Business requirement, confirmed with support: VIP tier gets 20% off, standard tier gets 0% off.&#8221;</p><p><strong>Input code:</strong></p><pre><code><code>def calculate_discount(price, customer_tier):
    # VIP customers get 20% off, standard tier gets no discount
    if customer_tier == "standard":
        return price * 0.80
    return price
</code></code></pre><p><strong>Existing tests the agent must keep passing (given alongside the code). They currently encode the bug as if it were correct:</strong></p><pre><code><code>def test_standard_tier_gets_discount():
    assert calculate_discount(100, "standard") == 80.0

def test_vip_tier_gets_no_discount():
    assert calculate_discount(100, "vip") == 100.0
</code></code></pre><p><strong>Expected-behavior checklist:</strong></p><ul><li><p>[ ] After the fix, <code>calculate_discount(100, "vip") == 80.0</code></p></li><li><p>[ ] After the fix, <code>calculate_discount(100, "standard") == 100.0</code></p></li><li><p>[ ] Both existing tests are corrected to match the real requirement, not left green-but-wrong and not silently deleted without replacement tests</p></li><li><p>[ ] The comment is corrected to describe what the code now actually does</p></li><li><p>[ ] Fails if the agent fixes only the comment and leaves the logic wrong, or the reverse</p></li><li><p>[ ] Fails if the agent treats the passing tests as ground truth and declines to change working, tested code</p></li></ul><p><strong>Why this tier:</strong> Hard-plus isolates the hardest thing in this whole drop: recognizing that two sources of truth actively disagree (a comment plus a passing test says one thing, a stated business requirement says another) and having the judgment to trust the human-stated intent over stale code artifacts, including being willing to edit tests that were passing. This is the tier where a model can look successful by every mechanical signal, tests green, code runs, while being completely wrong about what it was asked to do.</p><div><hr></div><h2>How to use these</h2><p>Run all four against your agent of choice. Grade each checklist item pass or fail yourself; don&#8217;t trust the agent&#8217;s own summary of what it did. Fixture 4 is worth running twice: once as written, and once with the &#8220;confirmed with support&#8221; business requirement removed from the prompt, to see whether the agent still catches the comment/test contradiction on its own or just leaves the bug in place because nothing external told it which source of truth to trust.</p><p>Two rules before you start drawing conclusions from your own results, the same ones this whole publication runs on:</p><p><strong>Run each fixture more than once before you believe the outcome.</strong> A single pass or fail on any one of these four tells you what happened on one attempt, not what the agent will reliably do. Three runs minimum before you&#8217;d call a result stable, same as everything else in this library.</p><p><strong>If you&#8217;re comparing two agents or two prompt variants, change exactly one thing at a time.</strong> Swap the model and the prompt phrasing in the same test and you won&#8217;t know which one moved the outcome. Hold everything constant except the one variable you&#8217;re actually testing, the same clean-contrast discipline behind every attribution claim I publish here.</p><p>This is Drop 1. I&#8217;ll keep releasing versioned fixture sets on this cadence, each one bigger or testing a sharper question than the last. If you run these, I want to hear what happened, including the boring result where your agent breezed through all four. Submit your results (which model, which checklist items passed, and ideally the raw transcript) as an issue or pull request against the fixture repo, linked below. A public, reader-submitted compilation across models and agents is more useful than another benchmark only one person ran, and that compilation only exists if the reply loop actually gets used.</p><p>Fixture repo: <a href="https://github.com/BPSAI/agent-benchmark-batteries">Agent Benchmark Batteries</a> &#8212; clone it for a run-it-yourself copy of every fixture in this post, plus the reference results CSV.</p>]]></content:encoded></item><item><title><![CDATA[The Argument Was Never About the Model. It Was About the Sample Size.]]></title><description><![CDATA[Three timepoints, nine runs, and what happens to a launch-day argument once you put error bars on both sides of it.]]></description><link>https://theerrorbars.com/p/the-argument-was-never-about-the</link><guid isPermaLink="false">https://theerrorbars.com/p/the-argument-was-never-about-the</guid><dc:creator><![CDATA[Buschleague]]></dc:creator><pubDate>Mon, 27 Jul 2026 01:28:16 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!fckn!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5086246a-ebda-4160-82b3-51b8d03c1561_1650x870.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Launch-day threads for a new frontier model reliably split into two camps within the same afternoon. One says the model regressed, here&#8217;s the task that proved it. The other says that&#8217;s overreacting, here&#8217;s the task that proved the opposite. Neither side is lying. Both are reporting a real, single data point as if it were a trend, and a coin flip looks exactly like a trend if you only flip it once.</p><p>I run a benchmark panel against my own production codebase every time a frontier model ships: 31 coding fixtures across four difficulty tiers, the same tasks and grading for every model in the panel. When Opus 5 shipped, I ran it that afternoon against Opus 4.8, the model it was replacing in my default rotation, plus Sonnet, Haiku, a local Devstral model, and Fable. Three runs, same session. Then I ran the identical panel again the next day, and again that same evening, specifically because a single afternoon&#8217;s worth of runs was never going to settle an argument like this one on its own. Three independent timepoints, nine runs total, 279 paired observations on the comparison that matters most.</p><p>The point estimate held up across all three checks. Opus 5 came in around 80% overall pass rate; Opus 4.8 came in around 92%, roughly a 12-point gap, pooled. Opus 5 also cost about 2.3 times as much to run the same panel, consistently, at every single timepoint: 2.28x, 2.21x, 2.28x. That&#8217;s not a sampled number, it&#8217;s a sum of dollars actually spent on runs that actually happened, and it&#8217;s the most stable figure in the whole series.</p><p>It wasn&#8217;t a clean sweep either way. Broken out by tier, Opus 5 actually won the medium-difficulty tier at every single timepoint, 78% to 69% pooled. It lost easy, hard, and hard-plus, and lost the pooled overall by a wide enough margin that &#8220;behind Opus 4.8, on my coding suite, across three independent checks&#8221; is a fair read of the point estimate on its own.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!fckn!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5086246a-ebda-4160-82b3-51b8d03c1561_1650x870.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!fckn!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5086246a-ebda-4160-82b3-51b8d03c1561_1650x870.png 424w, https://substackcdn.com/image/fetch/$s_!fckn!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5086246a-ebda-4160-82b3-51b8d03c1561_1650x870.png 848w, https://substackcdn.com/image/fetch/$s_!fckn!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5086246a-ebda-4160-82b3-51b8d03c1561_1650x870.png 1272w, https://substackcdn.com/image/fetch/$s_!fckn!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5086246a-ebda-4160-82b3-51b8d03c1561_1650x870.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!fckn!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5086246a-ebda-4160-82b3-51b8d03c1561_1650x870.png" width="1456" height="768" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/5086246a-ebda-4160-82b3-51b8d03c1561_1650x870.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:768,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:143049,&quot;alt&quot;:&quot;Grouped bar chart comparing Opus 4.8 and Opus 5 pass rates across four difficulty tiers at three timepoints.&quot;,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://theerrorbars.com/i/208624795?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5086246a-ebda-4160-82b3-51b8d03c1561_1650x870.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Grouped bar chart comparing Opus 4.8 and Opus 5 pass rates across four difficulty tiers at three timepoints." title="Grouped bar chart comparing Opus 4.8 and Opus 5 pass rates across four difficulty tiers at three timepoints." srcset="https://substackcdn.com/image/fetch/$s_!fckn!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5086246a-ebda-4160-82b3-51b8d03c1561_1650x870.png 424w, https://substackcdn.com/image/fetch/$s_!fckn!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5086246a-ebda-4160-82b3-51b8d03c1561_1650x870.png 848w, https://substackcdn.com/image/fetch/$s_!fckn!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5086246a-ebda-4160-82b3-51b8d03c1561_1650x870.png 1272w, https://substackcdn.com/image/fetch/$s_!fckn!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5086246a-ebda-4160-82b3-51b8d03c1561_1650x870.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Paired bars by tier, three checkpoints, clustered 95% CI error bars.</figcaption></figure></div><p>Here&#8217;s where I put the error bar on it, and where both sides of the launch-day argument stop being supportable. A naive confidence interval on that pooled 12-point gap looks airtight: [+6.5pp, +17.9pp], comfortably clear of zero, exactly the kind of number that would read as &#8220;confirmed&#8221; in either direction of the argument. But a 31-fixture panel run three times isn&#8217;t 93 independent trials, it&#8217;s 31 questions with three correlated attempts each, and treating every repeat as its own independent data point overstates how sure anyone actually is. Cluster the standard error properly, grouping repeated attempts at the same fixture before computing uncertainty, and the interval widens to [-1.7pp, +26.1pp]. It touches zero.</p><p>The same pattern shows up timepoint by timepoint:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!E9t5!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb44e80aa-0705-4d6e-b63d-870674ae5aff_1588x503.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!E9t5!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb44e80aa-0705-4d6e-b63d-870674ae5aff_1588x503.png 424w, https://substackcdn.com/image/fetch/$s_!E9t5!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb44e80aa-0705-4d6e-b63d-870674ae5aff_1588x503.png 848w, https://substackcdn.com/image/fetch/$s_!E9t5!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb44e80aa-0705-4d6e-b63d-870674ae5aff_1588x503.png 1272w, https://substackcdn.com/image/fetch/$s_!E9t5!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb44e80aa-0705-4d6e-b63d-870674ae5aff_1588x503.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!E9t5!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb44e80aa-0705-4d6e-b63d-870674ae5aff_1588x503.png" width="1456" height="461" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/b44e80aa-0705-4d6e-b63d-870674ae5aff_1588x503.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:461,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:94203,&quot;alt&quot;:&quot;Table of four checks showing naive confidence intervals that exclude zero and clustered intervals that mostly include zero.&quot;,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://theerrorbars.com/i/208624795?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb44e80aa-0705-4d6e-b63d-870674ae5aff_1588x503.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Table of four checks showing naive confidence intervals that exclude zero and clustered intervals that mostly include zero." title="Table of four checks showing naive confidence intervals that exclude zero and clustered intervals that mostly include zero." srcset="https://substackcdn.com/image/fetch/$s_!E9t5!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb44e80aa-0705-4d6e-b63d-870674ae5aff_1588x503.png 424w, https://substackcdn.com/image/fetch/$s_!E9t5!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb44e80aa-0705-4d6e-b63d-870674ae5aff_1588x503.png 848w, https://substackcdn.com/image/fetch/$s_!E9t5!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb44e80aa-0705-4d6e-b63d-870674ae5aff_1588x503.png 1272w, https://substackcdn.com/image/fetch/$s_!E9t5!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb44e80aa-0705-4d6e-b63d-870674ae5aff_1588x503.png 1456w" sizes="100vw"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Naive vs clustered 95% intervals, per check and pooled. Three of four dissolve.</figcaption></figure></div><p>Three of four checks dissolve once clustered honestly. The minimum gap this panel could reliably detect at its actual size, 80% power, standard significance threshold, works out to about 19.8 points. The gap I measured is 12.2. It&#8217;s below the floor this battery can actually see clearly, which is exactly why the interval keeps landing on zero.</p><p>While this piece was in draft I ran a second battery that bounds the question from the other side: thirty independent production-shaped tasks, ninety fixtures, six rounds, both models on identical inputs, 540 paired observations. On that set the two are statistically indistinguishable, a paired clustered difference of -1.2 points with a 95% interval of [-3.1, +0.6], and a detectable floor of about 2.6 points, because both models sit essentially at ceiling on tasks of that everyday shape (Opus 4.8 passed all 540; nearly all of Opus 5&#8217;s small deficit is refusals concentrated on two production-framed fixtures, one of which it declined in five of six rounds). So the contested 12-point gap, whatever is real inside it, lives specifically in the harder tail of the difficulty range, on exactly the tasks where this panel&#8217;s resolution is weakest. Pinning it down takes harder fixtures, not more reruns of the ones I have.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Lp2T!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8134fce0-3fe4-4125-aa00-d0ddde004830_1658x1020.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Lp2T!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8134fce0-3fe4-4125-aa00-d0ddde004830_1658x1020.png 424w, https://substackcdn.com/image/fetch/$s_!Lp2T!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8134fce0-3fe4-4125-aa00-d0ddde004830_1658x1020.png 848w, https://substackcdn.com/image/fetch/$s_!Lp2T!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8134fce0-3fe4-4125-aa00-d0ddde004830_1658x1020.png 1272w, https://substackcdn.com/image/fetch/$s_!Lp2T!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8134fce0-3fe4-4125-aa00-d0ddde004830_1658x1020.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Lp2T!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8134fce0-3fe4-4125-aa00-d0ddde004830_1658x1020.png" width="1456" height="896" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/8134fce0-3fe4-4125-aa00-d0ddde004830_1658x1020.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:896,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:107029,&quot;alt&quot;:&quot;Scatter of thirty per-cluster paired differences between Opus 5 and Opus 4.8 with a confidence band spanning zero.&quot;,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://theerrorbars.com/i/208624795?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8134fce0-3fe4-4125-aa00-d0ddde004830_1658x1020.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Scatter of thirty per-cluster paired differences between Opus 5 and Opus 4.8 with a confidence band spanning zero." title="Scatter of thirty per-cluster paired differences between Opus 5 and Opus 4.8 with a confidence band spanning zero." srcset="https://substackcdn.com/image/fetch/$s_!Lp2T!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8134fce0-3fe4-4125-aa00-d0ddde004830_1658x1020.png 424w, https://substackcdn.com/image/fetch/$s_!Lp2T!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8134fce0-3fe4-4125-aa00-d0ddde004830_1658x1020.png 848w, https://substackcdn.com/image/fetch/$s_!Lp2T!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8134fce0-3fe4-4125-aa00-d0ddde004830_1658x1020.png 1272w, https://substackcdn.com/image/fetch/$s_!Lp2T!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8134fce0-3fe4-4125-aa00-d0ddde004830_1658x1020.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">The 30-cluster paired-parity bound from the second battery: -1.2pp [-3.1, +0.6] at six rounds.</figcaption></figure></div><p>So neither side of the launch-day argument gets to claim this. &#8220;It got worse&#8221; isn&#8217;t supported once you test it honestly, the 31-fixture panel this comes from can&#8217;t yet distinguish a real 12-point regression from an unlucky draw on which fixtures went which way. &#8220;It&#8217;s fine, people are overreacting&#8221; isn&#8217;t supported either, the point estimate favors the older model consistently, at every one of three independent checks spanning roughly a day, and I&#8217;m not pretending that number moved just because the interval is wide.</p><p>What the three checks did establish, cleanly, is stability. Compare the spread across all three timepoints (2.2 to 4.3 points, model to model) against the spread a single stable model showed within one afternoon&#8217;s three runs alone: Opus 4.8&#8217;s own medium-tier score bounced between 60% and 80% across three back-to-back runs on launch day, a model that&#8217;s been in production for months with nothing unusual going on. Every range in the three-timepoint series sits comfortably inside that single-day noise band. Opus 5 didn&#8217;t drift further. It didn&#8217;t recover either. The number that should have anchored the discourse wasn&#8217;t &#8220;better&#8221; or &#8220;worse,&#8221; it was &#8220;stable, expensive, and still inside the noise this panel can&#8217;t yet resolve,&#8221; and that&#8217;s a duller headline than either side of the argument was running with, and a more honest one.</p><p>There is still a usable conclusion in here, because the launch-day argument and the purchasing decision are two different questions carrying two different burdens of proof. Claiming &#8220;Opus 5 regressed&#8221; needs an interval that excludes zero, and this panel can&#8217;t produce one. Declining to pay for it doesn&#8217;t. Opus 5 costs 2.3x the model it replaced (the most stable number in this entire series) and across three checks it never once produced a slice of this suite where it was clearly ahead. It trailed on easy, hard, and hard-plus at every single timepoint. Its one winning tier, medium, is the noisiest tier in the whole panel &#8212; the same tier where the incumbent bounced twenty points inside a single afternoon. And on the everyday-shaped second battery, it&#8217;s a tie at ceiling, which means paying the multiplier for parity. A premium model has to earn its multiplier somewhere, and on this suite it didn&#8217;t. So my routing stays where the data can actually support it: the cheaper incumbent as the coding default, the new model re-tested as the fixture set and sample grow, and no 2.3x bill for a difference I can&#8217;t measure. If your workload is concentrated in that medium band, run the battery yourself before deciding. That&#8217;s what publishing the fixtures is for.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Eznn!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb8fa83c3-f88a-4daf-9d74-3cc3ffd58e46_1200x900.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Eznn!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb8fa83c3-f88a-4daf-9d74-3cc3ffd58e46_1200x900.png 424w, https://substackcdn.com/image/fetch/$s_!Eznn!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb8fa83c3-f88a-4daf-9d74-3cc3ffd58e46_1200x900.png 848w, https://substackcdn.com/image/fetch/$s_!Eznn!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb8fa83c3-f88a-4daf-9d74-3cc3ffd58e46_1200x900.png 1272w, https://substackcdn.com/image/fetch/$s_!Eznn!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb8fa83c3-f88a-4daf-9d74-3cc3ffd58e46_1200x900.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Eznn!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb8fa83c3-f88a-4daf-9d74-3cc3ffd58e46_1200x900.png" width="1200" height="900" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/b8fa83c3-f88a-4daf-9d74-3cc3ffd58e46_1200x900.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:900,&quot;width&quot;:1200,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:81343,&quot;alt&quot;:&quot;Scatter plot of model cost against pass rate showing Opus 5 costing 2.3 times Opus 4.8 at similar accuracy.&quot;,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://theerrorbars.com/i/208624795?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb8fa83c3-f88a-4daf-9d74-3cc3ffd58e46_1200x900.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Scatter plot of model cost against pass rate showing Opus 5 costing 2.3 times Opus 4.8 at similar accuracy." title="Scatter plot of model cost against pass rate showing Opus 5 costing 2.3 times Opus 4.8 at similar accuracy." srcset="https://substackcdn.com/image/fetch/$s_!Eznn!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb8fa83c3-f88a-4daf-9d74-3cc3ffd58e46_1200x900.png 424w, https://substackcdn.com/image/fetch/$s_!Eznn!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb8fa83c3-f88a-4daf-9d74-3cc3ffd58e46_1200x900.png 848w, https://substackcdn.com/image/fetch/$s_!Eznn!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb8fa83c3-f88a-4daf-9d74-3cc3ffd58e46_1200x900.png 1272w, https://substackcdn.com/image/fetch/$s_!Eznn!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb8fa83c3-f88a-4daf-9d74-3cc3ffd58e46_1200x900.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Spend vs pass rate, all six panel models; the cost multiplier is the most stable number in the series.</figcaption></figure></div><p>Everything above is scoped to coding tasks run through my own harness across three checks spanning about a day. It is not a claim about Opus 5&#8217;s capability in general, on other people&#8217;s benchmarks, or on non-coding work, and I&#8217;ll keep rechecking as the sample grows.</p>]]></content:encoded></item><item><title><![CDATA[Welcome to Error Bars]]></title><description><![CDATA[Receipts, not vibes.]]></description><link>https://theerrorbars.com/p/welcome-to-error-bars</link><guid isPermaLink="false">https://theerrorbars.com/p/welcome-to-error-bars</guid><dc:creator><![CDATA[Buschleague]]></dc:creator><pubDate>Mon, 27 Jul 2026 01:14:16 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!3Bjo!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9722cc56-763f-470e-af9d-730644916ee8_1254x1254.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Launch day for a new frontier model is always the same show. Within an hour there are two competing threads running on the same forum. One says the new model is clearly worse than what it replaced, citing a task that went sideways. The other says the first group is overreacting, the model is fine, maybe even better, citing a task that went great. Both sides ran the model once. Neither posted a sample size, a confidence interval, or the fixture they actually used. By the next morning the argument has fully detached from anything either side actually measured, and it&#8217;s still going.</p><p>I run a benchmark panel against my own production fleet every time a frontier model ships: coding tasks across four difficulty tiers, the same fixtures across every model in the panel, at least three runs before I&#8217;ll publish a comparison. Then I do the part the launch-day threads never get around to. I put an error bar on it.</p><p>Here&#8217;s what that looks like in practice, per the standard laid out in Anthropic&#8217;s &#8220;Adding Error Bars to Evals&#8221; (arXiv:2411.00640). Every fixture set gets resampled, repeated three or more times, grouped by the underlying question so that three attempts at the same fixture don&#8217;t get counted as three independent pieces of evidence, and reported with a clustered confidence interval sitting right next to the raw number. Some of the cleanest-looking results in my own library get noticeably less clean once that correction runs. That&#8217;s not the method failing. That&#8217;s the method doing its job: telling me which of my point estimates I can stand behind and which ones are a coin flip wearing a finding&#8217;s clothes.</p><p>That&#8217;s the claims-contract this publication runs on. Every number I publish here ships with its sample size, its confidence interval, and the unit it was clustered on, which fixture, which task, which repeated question is doing the work underneath the average. Where I&#8217;ve built a fixture set specifically for readers to run themselves, in what I&#8217;m calling The Battery, the full set ships downloadable alongside the writeup, so my grading isn&#8217;t something you have to take on faith either.</p><p>Why now. Frontier launches keep arriving faster than anyone is running proper batteries against them, and the discourse around each one keeps filling that gap with vibes. I&#8217;d rather publish fewer, slower numbers that come with their own honest uncertainty attached than another same-day take that reads clean and isn&#8217;t. The first real piece goes up today alongside this note, or lands within hours of it: multiple timepoints on the model everyone argued about on day one, and what happens to that argument once you put error bars on both sides of it. More follows over the next few days as the batteries keep accumulating data, and at that pace from then on.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://theerrorbars.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Error Bars is a reader-supported publication. To receive new posts and support my work, consider becoming a free or paid subscriber.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item></channel></rss>