<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>Acceptance on ErrorZap</title><link>https://errorzap.com/tags/acceptance/</link><description>Recent content in Acceptance on ErrorZap</description><image><title>ErrorZap</title><url>https://errorzap.com/og.png</url><link>https://errorzap.com/og.png</link></image><generator>Hugo</generator><language>en-US</language><copyright>ErrorZap</copyright><lastBuildDate>Sat, 07 Nov 2026 09:00:00 -0700</lastBuildDate><atom:link href="https://errorzap.com/tags/acceptance/index.xml" rel="self" type="application/rss+xml"/><item><title>Proof, Not Green Lights</title><link>https://errorzap.com/posts/proof-not-green-lights/</link><pubDate>Sat, 07 Nov 2026 09:00:00 -0700</pubDate><guid>https://errorzap.com/posts/proof-not-green-lights/</guid><description>APIs, queues, processes, builds, and dashboards kept telling me yes to questions I had not actually asked.</description><content:encoded><![CDATA[<p>Green is a dangerous color in software.</p>
<p>The API returns 200. The remote command says accepted. The print queue empties. The service process is running. The backup job completes. The build passes. Every dashboard is green, and the thing a person cares about still did not happen.</p>
<p>This is not because the indicators are fake. It is because they answer smaller questions.</p>
<h2 id="every-layer-proves-itself">Every layer proves itself</h2>
<p>Consider a remote print job:</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-text" data-lang="text"><span style="display:flex;"><span>request accepted -&gt; job queued -&gt; spooler released -&gt; printer received -&gt; paper emerged
</span></span></code></pre></div><p>An empty queue proves the spooler no longer owns the job. It does not prove the printer had paper, the label stock was loaded correctly, the output was legible, or the page landed in the expected room.</p>
<p>The same collapse happens everywhere:</p>
<ul>
<li>a backup job proves data was written, not that restore works;</li>
<li>a process proves code is running, not that the service is useful;</li>
<li>a deployment proves bytes reached a target, not that traffic reaches them;</li>
<li>a SIP phone rings, but the human may hear nothing;</li>
<li>a smart light reports <code>on</code> at one-percent brightness and appears dark.</li>
</ul>
<p>The green light belongs to one layer.</p>
<h2 id="ask-what-a-human-would-observe">Ask what a human would observe</h2>
<p>The simplest way to improve acceptance tests is to finish this sentence:</p>
<blockquote>
<p>If this worked, a person at the destination would observe ______.</p>
</blockquote>
<p>Then design the test around that observation.</p>
<p>For a website: the new page loads from the public URL on phone and desktop, with the expected content and assets.</p>
<p>For audio: two humans hear each other in both directions.</p>
<p>For a restore: the isolated copy mounts, starts when authorized, serves expected data, and can be failed back without contaminating production.</p>
<p>For an alert: the intended person receives one actionable notification and one recovery—not merely an API receipt.</p>
<h2 id="keep-the-intermediate-lights">Keep the intermediate lights</h2>
<p>Intermediate signals are valuable. They locate failures.</p>
<p>If a print request was never accepted, do not troubleshoot the printer tray. If the process is dead, do not start with browser caching. Layered evidence is how we move from vague failure to exact boundary.</p>
<p>The mistake is promoting an intermediate success into a final claim.</p>
<p>A useful acceptance ledger looks like this:</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-text" data-lang="text"><span style="display:flex;"><span>prepared: artifact exists
</span></span><span style="display:flex;"><span>acted: delivery attempted
</span></span><span style="display:flex;"><span>accepted: target system acknowledged
</span></span><span style="display:flex;"><span>verified: target state read back
</span></span><span style="display:flex;"><span>observed: user-visible outcome confirmed
</span></span></code></pre></div><p>Not every task requires all five. The labels prevent us from pretending it did.</p>
<h2 id="honest-partials-are-faster">Honest partials are faster</h2>
<p>There is a strange pressure in technical work to declare victory at the first green light. It feels efficient. In reality, it creates reopened work, confusing handoffs, and repeated troubleshooting.</p>
<p>&ldquo;The print job left the queue; physical output is unverified&rdquo; is more useful than &ldquo;printed.&rdquo;</p>
<p>&ldquo;The service is active and its health endpoint is ready; no real user flow was tested&rdquo; is a complete operational statement.</p>
<p>Precision is not pessimism. It tells the next person exactly where truth ends.</p>
<p>Green lights are clues. Proof is the outcome that survives the final mile.</p>
]]></content:encoded></item></channel></rss>