<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Testing on Roland Huß</title><link>https://ro14nd.de/tags/testing/</link><description>Recent content in Testing on Roland Huß</description><generator>Hugo -- gohugo.io</generator><language>en</language><copyright>© 2026 Roland Huß</copyright><lastBuildDate>Wed, 21 Oct 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://ro14nd.de/tags/testing/index.xml" rel="self" type="application/rss+xml"/><item><title>Approved Isn't the Same as Trusted</title><link>https://ro14nd.de/approved-isnt-trusted/</link><pubDate>Wed, 21 Oct 2026 00:00:00 +0000</pubDate><guid>https://ro14nd.de/approved-isnt-trusted/</guid><description>&lt;p&gt;This week &lt;a href="https://agenttacho.dev" target="_blank" rel="noreferrer"&gt;AgentTacho&lt;/a&gt;, my small incubating macOS menu bar app for tracking agent usage, got a feature that refreshes its numbers whenever I open its menu.
Before the merge, agents reviewed it at every stage: three rounds on the spec, three on the plan, two correctness checks during implementation, and a final code review by five specialized review agents plus CodeRabbit and Codex.
Not one of those reviewers was a human.
They reported 100% spec compliance, and all 978 tests passed.
Then I opened the menu twice, and the second time nothing refreshed.&lt;/p&gt;

&lt;figure&gt;
 &lt;img class="my-0 rounded-md" src="https://ro14nd.de/images/approved-isnt-trusted/hero.jpg" alt="Retro-technical 1950s illustration in front of a brand-new workshop building with a WORKSHOP sign over the door. A seasoned woman mechanic in work overalls, with safety glasses pushed up on her curly red hair, holds up the chrome doorknob that just came off the freshly painted teal door and eyes it with a wry, skeptical look. Next to her, a tin robot builder in a yellow hard hat and tool belt raises a hand in surprise, holding a clipboard with three red APPROVED stamps." /&gt;
 
 
 &lt;/figure&gt;

&lt;h2 class="relative group"&gt;The second opening
 &lt;div id="the-second-opening" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#the-second-opening" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;p&gt;The walkthrough, the hands-on step at the end of my pipeline, had me open the menu, wait a minute, and open it again, while the agent watched the app&amp;rsquo;s log.
The first opening refreshed the numbers, the second did nothing.
With that log in front of it, the agent found the cause within minutes.
The refresh was tied to the moment the menu is first built, and the app keeps the menu around after that, so the trigger never fired again.
A second trigger fixed it, and the next two openings gave two refreshes.&lt;/p&gt;
&lt;p&gt;So why did no reviewer catch it?
The review agents read the code, and the code was correct line by line; the flaw only shows when someone clicks the menu.
No reviewer can click anything.
The agents that built the feature had seen that limit coming, though.
Before any code existed, the implementation plan said about this trigger: &amp;ldquo;The walkthrough verifies that it fires on every opening.&amp;rdquo;
The implementing agent listed it again in its final report, among the things it couldn&amp;rsquo;t check by hand.
They didn&amp;rsquo;t know about the bug, but they knew where their checking ended, and they handed exactly that question to me.&lt;/p&gt;
&lt;p&gt;Agent reviews never catch everything, and the only way I really learn to trust what my agents build is to try it myself.&lt;/p&gt;

&lt;h2 class="relative group"&gt;Trust is the actual product
 &lt;div id="trust-is-the-actual-product" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#trust-is-the-actual-product" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;p&gt;Working with coding agents means building trust slowly, in the agents and in the tooling around them.
Every feature that ships without surprises adds a little to it, and a single bad surprise can wipe out weeks of it.
Addy Osmani put it well in his piece on &lt;a href="https://addyosmani.com/blog/agentic-code-review/" target="_blank" rel="noreferrer"&gt;agentic code review&lt;/a&gt;.
The hard part of engineering, he writes, &amp;ldquo;moved from writing code to deciding whether to trust it.&amp;rdquo;
He also warns about &amp;ldquo;borrowed confidence&amp;rdquo;, the comfort you get when one model approves what another model wrote.&lt;/p&gt;
&lt;p&gt;Agent reviews give me exactly that borrowed kind.
They read the code against the spec, and they&amp;rsquo;re good at it, but they never use the feature the way a person does.
Without trying it, all I have left is hope, plus whatever trust I&amp;rsquo;ve built up so far.
I made a similar point about knowledge in &lt;a href="https://ro14nd.de/know-your-limits/" &gt;Know Your Limits&lt;/a&gt;: trust in AI output should rest on something you can check yourself.&lt;/p&gt;
&lt;p&gt;So in my spec-driven setup, the last step before a merge is a guided walkthrough.
The agents drive almost everything up to that point, and I&amp;rsquo;ve written a whole series about &lt;a href="https://ro14nd.de/the-flock/" &gt;running them unsupervised&lt;/a&gt;.
The walkthrough sits at the very end of that pipeline because it&amp;rsquo;s the one step that needs a human.&lt;/p&gt;

&lt;h2 class="relative group"&gt;How a walkthrough works
 &lt;div id="how-a-walkthrough-works" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#how-a-walkthrough-works" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;p&gt;The walkthrough lives in &lt;a href="https://github.com/rhuss/cc-spex" target="_blank" rel="noreferrer"&gt;cc-spex&lt;/a&gt;, my set of extensions for GitHub&amp;rsquo;s &lt;a href="https://github.com/github/spec-kit" target="_blank" rel="noreferrer"&gt;Spec Kit&lt;/a&gt;.
The diagram below shows where it sits: the agents drive the whole pipeline, and only the final walkthrough step has a human in the loop.&lt;/p&gt;

&lt;figure&gt;
 &lt;img class="my-0 rounded-md" src="https://ro14nd.de/images/approved-isnt-trusted/spex-flow.png" alt="Diagram of the cc-spex flow: specify, clarify, spec review, plan, tasks, plan review, implement and code review run as an automated pipeline. The finish step then runs verification, the walkthrough and the merge. The walkthrough is highlighted as the only step with a human in the loop." /&gt;
 
 
 &lt;/figure&gt;
&lt;p&gt;When the pipeline is done, the agent first decides whether there&amp;rsquo;s anything a person could try by hand.
A pure refactoring gets a one-line &amp;ldquo;not testable&amp;rdquo; and nothing else.
Everything else gets a &lt;code&gt;RUNBOOK.md&lt;/code&gt;, a single journey through the feature in the order a user would take it.
Every step says why it matters, gives the exact command or the clicks, and states &lt;strong&gt;what you should see&lt;/strong&gt;, written before anything runs.
An expectation written after the fact is just a copy of the output, so this order matters more than it looks.&lt;/p&gt;
&lt;p&gt;Then the agent and I go through the runbook together.
For each step I choose whether I run it myself (the command lands on my clipboard), whether the agent runs it, or whether the agent runs everything it can until it hits a step that needs me.
In practice that last option does most of the work.
The agent checks the mechanical things on its own, such as the tests, the build, the logs, and the files a feature writes, and stops wherever a person has to click, look, or judge.&lt;/p&gt;
&lt;p&gt;That doesn&amp;rsquo;t mean I skip the agent&amp;rsquo;s steps.
Reading them is part of the trust.
When the agent runs a step, it shows the exact command, the real output, and a line-by-line comparison with the runbook&amp;rsquo;s expectation.
That way I see what it counts as proof.
Here is the step from the beginning of this post, as the walkthrough showed it:&lt;/p&gt;
&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;Step 4 of 12: Open the menu after a minute
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;Do: open the menu, wait a minute, open it again.
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;What you should see (written before the run):
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; a new &amp;#34;trigger dropdownOpen, endpoint fetched&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; line for every opening.
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;If you see something else: no line at all means
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; the open trigger did not fire.
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;$ rg &amp;#34;trigger dropdownOpen&amp;#34; \
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; ~/Library/Logs/agenttacho/usage.log | tail -n 1
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;07:33:08Z [refresh] done in 2.153 s, ...
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; trigger dropdownOpen, endpoint fetched
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;Expected vs actual:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;✔ 1st opening: refresh line at 07:33:08
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;✘ 2nd opening: newest line is still 07:33:08
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;Step 4: failed&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;I did the clicking, and the agent ran the command.
The newest refresh line was still the one from the first opening, which is exactly the symptom the runbook had described before anything ran.
After the fix, the agent rebuilt the app and we repeated the step:&lt;/p&gt;
&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;Step 4 of 12: retry after the fix
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;$ rg &amp;#34;trigger dropdownOpen&amp;#34; \
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; ~/Library/Logs/agenttacho/usage.log | tail -n 2
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;07:37:59Z [refresh] done in 2.684 s, ...
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; trigger dropdownOpen, endpoint fetched
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;07:40:39Z [refresh] done in 2.336 s, ...
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; trigger dropdownOpen, endpoint fetched
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;Expected vs actual:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;✔ 1st opening: refresh line at 07:37:59
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;✔ 2nd opening: refresh line at 07:40:39
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;Step 4: passed (after a fix)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;Two openings, two refresh lines.
After a few of those blocks I know which log line means &amp;ldquo;it works&amp;rdquo;, and I know the agent isn&amp;rsquo;t just telling me it does.&lt;/p&gt;
&lt;p&gt;The format has a history, by the way.
The first version produced neat summary cards of what the agent had done, and I couldn&amp;rsquo;t tell from them what the feature did or what good output looked like.
A summary of output is still borrowed confidence, so the rewrite kept one rule above all others: always show the real output, never a summary of it.&lt;/p&gt;

&lt;h2 class="relative group"&gt;Where it pays off most: what you see
 &lt;div id="where-it-pays-off-most-what-you-see" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#where-it-pays-off-most-what-you-see" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;p&gt;Showing real output matters most when the thing being judged is visual.
With a UI, &amp;ldquo;works&amp;rdquo; isn&amp;rsquo;t the whole question; it also has to feel right, and that&amp;rsquo;s very hard to specify upfront without seeing it.
Earlier AgentTacho walkthroughs changed features in ways no agent review would have.
The pace forecast first showed an extra text line under every row.
It looked fine in the spec but took far too much room in the real menu, so it turned into a small pace meter while I was looking at it.
A checkbox label, &amp;ldquo;Also show ⚠ / ‼ symbols&amp;rdquo;, made no sense next to the other option once I saw them together, and became &amp;ldquo;Mark levels with ⚠ / ‼&amp;rdquo;.
These are small things, a label here and a row there, and every agent review had blessed them.&lt;/p&gt;
&lt;p&gt;It&amp;rsquo;s also fun, which I didn&amp;rsquo;t expect to write in a post about quality gates.
The walkthrough is often the first time I see a feature in action.
The agent sits next to me like a colleague who built it and wants to show it off.&lt;/p&gt;

&lt;h2 class="relative group"&gt;Beyond looking: the agent builds the workshop
 &lt;div id="beyond-looking-the-agent-builds-the-workshop" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#beyond-looking-the-agent-builds-the-workshop" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;p&gt;For many features, the hard part isn&amp;rsquo;t looking but setting the stage, and that&amp;rsquo;s where the agent surprised me most.
Before a single step can run, a lot of features need an environment that would take me an afternoon to build by hand.&lt;/p&gt;
&lt;p&gt;OpenShell, NVIDIA&amp;rsquo;s sandbox project for agents, is the heavy case.
Trying its SPIFFE/SPIRE support means a Kubernetes cluster with a SPIRE server, SPIRE agents, and registration entries before there&amp;rsquo;s anything to look at.
The agent builds all of that as the walkthrough&amp;rsquo;s test environment, records how to tear it down, and asks before it starts anything slow or anything that costs money.
I get to spend my time on the interesting part, checking the identities the sandboxes get, instead of on the setup.&lt;/p&gt;
&lt;p&gt;AgentTacho&amp;rsquo;s auto-update feature needed something else entirely: a newer release to auto-update to.
The runbook had the agent create a throwaway GitHub repository, build and notarize a test release 0.9.0, publish it there, and point a special test build at it.
I clicked &amp;ldquo;Install&amp;rdquo; in the menu, the app replaced and relaunched itself, and in a later step the agent published a tampered release that the app had to refuse.
At the end it deleted the test repository and the local tags again, so nothing was left behind.&lt;/p&gt;
&lt;p&gt;Even behavior that is hard to provoke gets a creative step.
For AgentTacho&amp;rsquo;s adaptive refresh, Low Power Mode was just a switch in System Settings.
But showing that agent work speeds the refresh up again needed fresh usage, so the runbook planned a one-line &lt;code&gt;claude -p&lt;/code&gt; prompt to create some.
That step never ran, though.
It needed 20 quiet minutes with no agent working first.
But the walkthrough itself counts as activity, so the runbook marks it and the two steps before it as skipped, not passed.
Whatever the agent couldn&amp;rsquo;t provoke at all, like thermal pressure, it listed under &amp;ldquo;Not covered here&amp;rdquo;, together with the tests that cover it instead.&lt;/p&gt;
&lt;p&gt;The agent handles the setup and gathers the evidence, and the human judges whether it&amp;rsquo;s what a user would want.&lt;/p&gt;

&lt;h2 class="relative group"&gt;Not about the plugin
 &lt;div id="not-about-the-plugin" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#not-about-the-plugin" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;p&gt;None of this needs cc-spex.
The pattern is small: before a merge, have the agent write a runbook with expectations stated upfront, prepare the environment, run it together, and record the real output.
The portable place to make it part of &amp;ldquo;done&amp;rdquo; is &lt;a href="https://agents.md" target="_blank" rel="noreferrer"&gt;AGENTS.md&lt;/a&gt;, the context file coding agents share and the subject of &lt;a href="https://ro14nd.de/what-goes-in-agents-md/" &gt;an earlier post&lt;/a&gt;.
AgentTacho&amp;rsquo;s own &lt;a href="https://github.com/AgentTacho/agenttacho/blob/main/AGENTS.md" target="_blank" rel="noreferrer"&gt;AGENTS.md&lt;/a&gt; already lists the walkthrough as a workflow step.
For a project without cc-spex, this is the gist of the walkthrough command, boiled down to what took me the longest to get right:&lt;/p&gt;
&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-markdown" data-lang="markdown"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;## Walkthrough before merge
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;A change is done when a person has tried it. Before
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;merging:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;1.&lt;/span&gt; Decide if anything is user-observable (output, a
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; file, an API answer, a screen). If not, say so in
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; one line and stop. Cover what is testable and list
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; the rest under &amp;#34;Not covered here&amp;#34;, with the tests
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; that cover it.
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;2.&lt;/span&gt; Write RUNBOOK.md: one journey in the order a user
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; would take it. Every step has: Why, Needs, Run
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; (exact command) or Do (clicks), &amp;#34;What you should
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; see&amp;#34; (written BEFORE running), &amp;#34;If you see
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; something else&amp;#34;, and Result. Prerequisites are
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; steps of their own. Read runtime values with
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; commands, never use placeholders.
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;3.&lt;/span&gt; Set up what the runbook needs. Reuse services that
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; already run. Start quick ones after one approval,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; ask before slow ones (say how long), and get an
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; explicit yes for anything remote or paid. Record a
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; teardown command for each.
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;4.&lt;/span&gt; Run it together, step by step. The person picks:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; run it myself (put the command on the clipboard),
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; let the agent run it, run the rest until the first
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; step that needs a person, or skip with a reason.
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;5.&lt;/span&gt; When the agent runs a step: show the exact command,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; the real output, and expected vs actual, one line
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; per observation.
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;6.&lt;/span&gt; Never fabricate evidence. A step that could not
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; really run is &amp;#34;skipped&amp;#34; with the reason, never
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &amp;#34;passed&amp;#34;. Redact secrets.
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;7.&lt;/span&gt; On a mismatch: investigate, fix and retry only with
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; a concrete cause, record and continue, or stop. If
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; the runbook was wrong, fix the step and say so.
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;8.&lt;/span&gt; Record each result right away and end with a tally.
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; If the code changed since the runbook was written,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; refresh the affected steps first.&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;Instructions like these are still prose, and &lt;a href="https://ro14nd.de/agent-scripts-suggestions/" &gt;agents tend to treat prose as a suggestion&lt;/a&gt;.
That&amp;rsquo;s why cc-spex moves the bookkeeping into scripts: the step count, the results, the freshness check, the runbook structure, and the fixtures.
The AGENTS.md version gets you the habit, and the scripts make it stick.&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;ll keep running all my review agents, and they&amp;rsquo;ll keep finding things.
They&amp;rsquo;re the inspection report, and I wouldn&amp;rsquo;t move in without one.
But trust comes from opening the door yourself, twice, with the builder standing right next to you.&lt;/p&gt;
&lt;div class="ai-attribution"&gt;
&lt;p&gt;Author: Roland Huß &lt;a href="https://aiattribution.github.io/statements/AIA-HAb-CeNc-Hin-R-?model=Claude%20Opus%205.5-v1.0" target="_blank" rel="noreferrer"&gt;AIA HAb CeNc Hin R Claude Opus 5.5 v1.0&lt;/a&gt;&lt;/p&gt;
&lt;/div&gt;</description></item></channel></rss>