<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Self-Correcting Systems</title>
    <description>The latest articles on DEV Community by Self-Correcting Systems (@kenielzep97).</description>
    <link>https://dev.to/kenielzep97</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3948231%2F09b103a6-4a7f-4016-a261-debf92d5b015.jpeg</url>
      <title>DEV Community: Self-Correcting Systems</title>
      <link>https://dev.to/kenielzep97</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/kenielzep97"/>
    <language>en</language>
    <item>
      <title>My Harness Used One Label for Three Different Failures.</title>
      <dc:creator>Self-Correcting Systems</dc:creator>
      <pubDate>Mon, 14 Sep 2026 02:14:53 +0000</pubDate>
      <link>https://dev.to/kenielzep97/my-harness-used-one-label-for-three-different-failures-2gc3</link>
      <guid>https://dev.to/kenielzep97/my-harness-used-one-label-for-three-different-failures-2gc3</guid>
      <description>&lt;p&gt;Three fixtures, three separate calls into the same reducer. Here is the complete&lt;br&gt;
&lt;code&gt;failure_reasons&lt;/code&gt; each one returned, unedited:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="err"&gt;unreadable&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;arriving&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;args&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="err"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"SANDBOX_EVENT_CARDINALITY_INVALID"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
                              &lt;/span&gt;&lt;span class="s2"&gt;"EXEC_ARGUMENTS_MISMATCH"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
                              &lt;/span&gt;&lt;span class="s2"&gt;"TOOL_RESPONSE_CARDINALITY_INVALID"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;

&lt;/span&gt;&lt;span class="err"&gt;usable&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;args,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;different&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="err"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"SANDBOX_EVENT_CARDINALITY_INVALID"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
                              &lt;/span&gt;&lt;span class="s2"&gt;"EXEC_ARGUMENTS_MISMATCH"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
                              &lt;/span&gt;&lt;span class="s2"&gt;"TOOL_RESPONSE_CARDINALITY_INVALID"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;

&lt;/span&gt;&lt;span class="err"&gt;our&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;comparison&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;threw&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="err"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"SANDBOX_EVENT_CARDINALITY_INVALID"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
                              &lt;/span&gt;&lt;span class="s2"&gt;"EXEC_ARGUMENTS_MISMATCH"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
                              &lt;/span&gt;&lt;span class="s2"&gt;"TOOL_RESPONSE_CARDINALITY_INVALID"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;These are minimal fixtures with no sandbox event and no tool response, so the first and last&lt;br&gt;
codes fire in all three and are expected. I am printing them anyway. A post about a receipt that&lt;br&gt;
hides which party failed has no business showing you a cleaned-up receipt.&lt;/p&gt;

&lt;p&gt;The middle line is the one that matters, and across three genuinely different failures it never&lt;br&gt;
changes.&lt;/p&gt;

&lt;p&gt;Fixture one sends arguments the parser rejects.&lt;/p&gt;

&lt;p&gt;Fixture two sends a usable call that disagrees with what I froze.&lt;/p&gt;

&lt;p&gt;Fixture three sends an object &lt;strong&gt;my own canonicalizer&lt;/strong&gt; rejects, so the comparison never completes.&lt;/p&gt;

&lt;p&gt;Constructed inputs, so none of this establishes who caused a failure in production. But one name&lt;br&gt;
covers all three, and that name says &lt;em&gt;argument mismatch&lt;/em&gt; even when nothing was compared. A failure&lt;br&gt;
in the checking stage reads as a deviation in the thing being checked.&lt;/p&gt;
&lt;h2&gt;
  
  
  The reason it reads that way
&lt;/h2&gt;

&lt;p&gt;pm25coder put it in one line, in the comments of &lt;a href="https://dev.to/kenielzep97/compare-against-the-schema-they-shipped-not-the-one-you-expected-3mb8"&gt;the schema-comparison&lt;br&gt;
piece&lt;/a&gt;&lt;br&gt;
(&lt;a href="https://dev.to/pm25coder/comment/3ei6m"&gt;permalink to the comment&lt;/a&gt;):&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;code&gt;EXEC_ARGUMENTS_MISMATCH&lt;/code&gt; misreads as a verdict on the model precisely because its name carries no&lt;br&gt;
subject.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Three different observations arrive under one name: arguments that were rejected, a comparison that&lt;br&gt;
completed and found a difference, and a comparison that never finished.&lt;/p&gt;

&lt;p&gt;The label is not wrong that something happened. It is silent about which of the three, and a reader&lt;br&gt;
fills that in.&lt;/p&gt;
&lt;h2&gt;
  
  
  What the code actually did
&lt;/h2&gt;

&lt;p&gt;One &lt;code&gt;try&lt;/code&gt; was wrapping three different jobs:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;call&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;try&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;actual&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;parseStrictJson&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;call&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="kd"&gt;function&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;arguments&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;      &lt;span class="c1"&gt;// can the arriving args be read&lt;/span&gt;
      &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;typeof&lt;/span&gt; &lt;span class="nx"&gt;actual&lt;/span&gt;&lt;span class="p"&gt;?.&lt;/span&gt;&lt;span class="nx"&gt;command&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;string&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="nx"&gt;Buffer&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;byteLength&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;actual&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;command&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;utf8&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="mi"&gt;256&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="nx"&gt;failures&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;add&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;EXEC_COMMAND_OVERSIZE&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
      &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="nf"&gt;canonicalJsonBytes&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;actual&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;                        &lt;span class="c1"&gt;// does the comparison work&lt;/span&gt;
                    &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;equals&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;canonicalJsonBytes&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;prepared&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;expectedExecArguments&lt;/span&gt;&lt;span class="p"&gt;)))&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="nx"&gt;failures&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;add&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;EXEC_ARGUMENTS_MISMATCH&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;                    &lt;span class="c1"&gt;// do they differ&lt;/span&gt;
      &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;catch&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="nx"&gt;failures&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;add&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;EXEC_ARGUMENTS_MISMATCH&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;                      &lt;span class="c1"&gt;// ...everything lands here&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;code&gt;parseStrictJson&lt;/code&gt; throws when what arrived is unreadable. &lt;code&gt;canonicalJsonBytes&lt;/code&gt; throws when the&lt;br&gt;
comparison itself cannot run. Both fell into the same catch, and the catch named the arguments.&lt;/p&gt;

&lt;p&gt;Full file if you want to read around it:&lt;br&gt;
&lt;a href="https://github.com/keniel13-ui/self-correcting-integration-maintainer/blob/dd1a654/scripts/judgment/live.mjs" rel="noopener noreferrer"&gt;&lt;code&gt;scripts/judgment/live.mjs&lt;/code&gt;&lt;/a&gt;.&lt;br&gt;
The third catch site was in&lt;br&gt;
&lt;a href="https://github.com/keniel13-ui/self-correcting-integration-maintainer/blob/dd1a654/scripts/pr2/reducer.mjs" rel="noopener noreferrer"&gt;&lt;code&gt;scripts/pr2/reducer.mjs&lt;/code&gt;&lt;/a&gt;.&lt;/p&gt;
&lt;h2&gt;
  
  
  The fix
&lt;/h2&gt;

&lt;p&gt;Split the parse from the compare, and give each stage its own catch:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;actual&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;try&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nx"&gt;actual&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;parseStrictJson&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;call&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="kd"&gt;function&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;arguments&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;catch&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nx"&gt;failures&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;add&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;EXEC_ARGUMENTS_INVALID&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;actual&lt;/span&gt; &lt;span class="o"&gt;!==&lt;/span&gt; &lt;span class="kc"&gt;undefined&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;try&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;typeof&lt;/span&gt; &lt;span class="nx"&gt;actual&lt;/span&gt;&lt;span class="p"&gt;?.&lt;/span&gt;&lt;span class="nx"&gt;command&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;string&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="nx"&gt;Buffer&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;byteLength&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;actual&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;command&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;utf8&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="mi"&gt;256&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="nx"&gt;failures&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;add&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;EXEC_COMMAND_OVERSIZE&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="nf"&gt;canonicalJsonBytes&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;actual&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
                  &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;equals&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;canonicalJsonBytes&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;prepared&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;expectedExecArguments&lt;/span&gt;&lt;span class="p"&gt;)))&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="nx"&gt;failures&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;add&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;EXEC_ARGUMENTS_MISMATCH&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;catch&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;failures&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;add&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;EXEC_COMPARATOR_ERROR&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Same three fixtures, same unedited arrays, only the middle line moves:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="err"&gt;unreadable&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;arriving&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;args&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="err"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"SANDBOX_EVENT_CARDINALITY_INVALID"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
                              &lt;/span&gt;&lt;span class="s2"&gt;"EXEC_ARGUMENTS_INVALID"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
                              &lt;/span&gt;&lt;span class="s2"&gt;"TOOL_RESPONSE_CARDINALITY_INVALID"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;

&lt;/span&gt;&lt;span class="err"&gt;usable&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;args,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;different&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="err"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"SANDBOX_EVENT_CARDINALITY_INVALID"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
                              &lt;/span&gt;&lt;span class="s2"&gt;"EXEC_ARGUMENTS_MISMATCH"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
                              &lt;/span&gt;&lt;span class="s2"&gt;"TOOL_RESPONSE_CARDINALITY_INVALID"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;

&lt;/span&gt;&lt;span class="err"&gt;our&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;comparison&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;threw&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="err"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"SANDBOX_EVENT_CARDINALITY_INVALID"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
                              &lt;/span&gt;&lt;span class="s2"&gt;"EXEC_COMPARATOR_ERROR"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
                              &lt;/span&gt;&lt;span class="s2"&gt;"TOOL_RESPONSE_CARDINALITY_INVALID"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The change spans three source files, plus the tests:&lt;br&gt;
&lt;a href="https://github.com/keniel13-ui/self-correcting-integration-maintainer/commit/dd1a654" rel="noopener noreferrer"&gt;&lt;code&gt;dd1a654&lt;/code&gt;&lt;/a&gt;.&lt;/p&gt;
&lt;h2&gt;
  
  
  The part that was not a rename
&lt;/h2&gt;

&lt;p&gt;pm25coder called it "a rename, not a redesign" — his words, verbatim, in&lt;br&gt;
&lt;a href="https://dev.to/pm25coder/comment/3eanf"&gt;3eanf&lt;/a&gt; — and from outside the repo that is exactly what it&lt;br&gt;
looks like. Inside, two things were waiting.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;There are two whitelists, not one.&lt;/strong&gt; Failure reasons are filtered through an ordered array before&lt;br&gt;
they reach the output. In &lt;code&gt;live.mjs&lt;/code&gt;, a reason that is not in the array is silently dropped. Register&lt;br&gt;
the new name in the code and not in the array, and that failure stops appearing. Other failures in the same run still show, so the run&lt;br&gt;
does not go green by itself, but the one you just added becomes invisible.&lt;/p&gt;

&lt;p&gt;There are two registries for this namespace and &lt;strong&gt;they fail differently.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;code&gt;live.mjs&lt;/code&gt; holds 26 codes and emits output by filtering against the list — &lt;code&gt;FAILURE_ORDER.filter(...)&lt;/code&gt;&lt;br&gt;
at lines 169 and 572, no guard. An unknown reason is silently omitted. &lt;code&gt;scripts/pr2/constants.mjs&lt;/code&gt;&lt;br&gt;
holds 20, a strict subset, and its consumer refuses to guess:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="nx"&gt;FAILURE_ORDER&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;includes&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;reason&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt; &lt;span class="k"&gt;throw&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;TypeError&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;`unknown failure reason: &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;reason&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;So the narrower list is the strict one, and the list covering more surface is the one that fails&lt;br&gt;
quietly. That is backwards, and it is a worse defect than the naming problem this patch fixes: a&lt;br&gt;
filter that discards unrecognised codes is designed to fail invisibly.&lt;/p&gt;

&lt;p&gt;The throwing version is the correct behaviour. The silent filter should be replaced by it, and the&lt;br&gt;
two lists should be one registry. I did not do that here, because bundling a registry refactor into a&lt;br&gt;
naming fix would make both harder to review and would put a behaviour change in a commit that&lt;br&gt;
claims to be about labels. It is on the list as its own change.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;And there was a third catch site&lt;/strong&gt; doing the same collapse in a different module, which I only&lt;br&gt;
found by grepping for every place that name was added rather than trusting the two I knew about.&lt;/p&gt;
&lt;h2&gt;
  
  
  The tests, including the one that is supposed to pass
&lt;/h2&gt;

&lt;p&gt;Six of them. That they pass is not the interesting part. Run them against the parent commit and five&lt;br&gt;
of the six fail. Run against the patch, all six pass. The one that passes both ways is there on purpose:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;One correction to the commit message before you click it.&lt;/strong&gt; It says three of the six tests fail&lt;br&gt;
on the parent. That line is stale: it was written when the file had four tests, and two more were&lt;br&gt;
added in the amendment. The real number is five, and the ablation below is the thing to trust. I am&lt;br&gt;
not force-pushing a rewrite of a public SHA to tidy a sentence, so the contradiction stays visible&lt;br&gt;
and this paragraph is the correction.&lt;/p&gt;

&lt;p&gt;All six are in one file, if you want to run the ablation yourself:&lt;br&gt;
&lt;a href="https://github.com/keniel13-ui/self-correcting-integration-maintainer/blob/dd1a654/test/exec-comparator-error.test.mjs" rel="noopener noreferrer"&gt;&lt;code&gt;test/exec-comparator-error.test.mjs&lt;/code&gt;&lt;/a&gt;.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;arriving args unusable       -&amp;gt; EXEC_ARGUMENTS_INVALID     fails on parent
usable args, differ          -&amp;gt; EXEC_ARGUMENTS_MISMATCH    passes on both   &amp;lt;- control
comparison cannot complete   -&amp;gt; EXEC_COMPARATOR_ERROR      fails on parent
pr2 reducer, unusable args   -&amp;gt; EXEC_ARGUMENTS_INVALID     fails on parent
prepared transport, digest   -&amp;gt; EXEC_COMPARATOR_ERROR      fails on parent
pr2 reducer, digest read     -&amp;gt; EXEC_COMPARATOR_ERROR      fails on parent
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The control is doing something specific. Splitting one catch into two created two new boundaries&lt;br&gt;
that the mismatch path now has to survive. If either boundary swallowed a case it should have passed&lt;br&gt;
through, a suite that only asserted the two new names would still be green, because the case it ate&lt;br&gt;
would simply never be asserted. The control fails the moment the original path stops producing the&lt;br&gt;
original name.&lt;/p&gt;

&lt;p&gt;The comparator failures are induced, not waited for. The arriving call parses cleanly and &lt;strong&gt;my own&lt;br&gt;
expected object&lt;/strong&gt; carries a &lt;code&gt;BigInt&lt;/code&gt; the canonicalizer refuses.&lt;/p&gt;

&lt;p&gt;That refusal is deliberate, not fragile. The serializer accepts a closed set — null, boolean, safe&lt;br&gt;
integer, NFC string, array, plain object — and rejects everything else, because its output is&lt;br&gt;
hashed and a canonical form cannot have alternatives. So a &lt;code&gt;BigInt&lt;/code&gt; in an expected object is an&lt;br&gt;
invalid internal type, and the test is contrived at the type level.&lt;/p&gt;

&lt;p&gt;Be precise about what that buys: it proves the catch fires when the comparison cannot complete on&lt;br&gt;
otherwise-valid input. It does not prove a spontaneous bug in the canonicalizer, and I am not&lt;br&gt;
claiming one. The two digest-read tests induce a&lt;br&gt;
different internal failure using a throwing getter, and each one asserts the intended read was&lt;br&gt;
actually reached and that the error survives the final filter.&lt;/p&gt;
&lt;h2&gt;
  
  
  Two things I got wrong on the way, both caught by someone else
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;My first repair ran the collapse backwards.&lt;/strong&gt; I moved the whole catch to&lt;br&gt;
&lt;code&gt;EXEC_COMPARATOR_ERROR&lt;/code&gt;, which meant unreadable arriving args were now reported as &lt;em&gt;my&lt;/em&gt; machinery&lt;br&gt;
failing. Same defect, opposite direction.&lt;/p&gt;

&lt;p&gt;The reason it survived my own review is worth more than the bug. I wrote the implementation, then&lt;br&gt;
wrote a test asserting what the implementation did. An assertion written against unverified output&lt;br&gt;
cannot fail, because it was derived from the thing it is supposed to check. That workflow&lt;br&gt;
guarantees you codify your own bugs, and it produced a test that defended the error.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Then I claimed one of the three catches was dead code.&lt;/strong&gt; I had constructed a bad expected object,&lt;br&gt;
watched it get caught by an earlier gate, and concluded nothing could reach that catch. One input&lt;br&gt;
class, generalized to all inputs. It is reachable — a failing read on the manifest digest lands&lt;br&gt;
there, because that read sits inside the &lt;code&gt;try&lt;/code&gt; while the one I tested sits outside it.&lt;/p&gt;

&lt;p&gt;Neither was caught by me. The backwards repair was caught before commit. The dead-code claim went&lt;br&gt;
into the first commit and came out in an amendment, so it was caught before push.&lt;/p&gt;
&lt;h2&gt;
  
  
  What this does not do
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;It does not put the contract in the name.&lt;/strong&gt; pm25coder's fuller point was that the label should&lt;br&gt;
say what it was compared against, something closer to &lt;code&gt;args_mismatch_under_contract=&amp;lt;id&amp;gt;&lt;/code&gt;, so the&lt;br&gt;
name states the authority rather than leaving a reader to infer a subject. That is not built. The&lt;br&gt;
names are separated. They still carry no contract id.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;code&gt;EXEC_ARGUMENTS_INVALID&lt;/code&gt; does not identify who produced bad arguments.&lt;/strong&gt; It marks a boundary.&lt;/p&gt;

&lt;p&gt;The arriving arguments were rejected, either by the parser or, on the PR2 path, by argument&lt;br&gt;
validation. Valid JSON can still fail that validation. Who produced them is not established by&lt;br&gt;
that result. The model, the relay, or the transport are all still live possibilities, and the name&lt;br&gt;
stops where the evidence stops.&lt;/p&gt;

&lt;p&gt;Naming a producer there would be the same defect with a friendlier label.&lt;/p&gt;

&lt;p&gt;That neutrality costs something real, and it is fair to say so. An operator wants to know if the&lt;br&gt;
model is emitting garbage, and unparseable JSON on a structured tool call may well be exactly that.&lt;br&gt;
I have not measured how often it is, so I am not putting a frequency on it.&lt;br&gt;
The code declines to tell them, which is semantically clean and operationally thinner. The fix is not to guess in the name. It is to preserve enough provenance that attribution can be&lt;br&gt;
made afterward: what arguments were observed at the model-event boundary, whether any relay or&lt;br&gt;
transport transformation happened in between, and which contract governed the call.&lt;/p&gt;

&lt;p&gt;The contract-id work above would settle the authority half of that. It would not identify who&lt;br&gt;
corrupted an invalid argument stream — a contract id says which expectation was in force, not where&lt;br&gt;
bad bytes came from. I conflated those two in an earlier draft. Neither half is built.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;code&gt;EXEC_COMPARATOR_ERROR&lt;/code&gt; names the stage, not the cause.&lt;/strong&gt; An un-canonicalizable expectation and a&lt;br&gt;
genuine comparator bug are both on my side and are not distinguishable from the outside. I declined&lt;br&gt;
to split them, because inventing a distinction the code cannot detect is the defect I was fixing.&lt;/p&gt;
&lt;h2&gt;
  
  
  The general shape, if you want to check your own
&lt;/h2&gt;

&lt;p&gt;Find every place your system writes a failure name, and ask what the name is a statement &lt;em&gt;about&lt;/em&gt;.&lt;br&gt;
If it names a thing rather than a party — arguments, response, payload, schema — check what else&lt;br&gt;
falls into the same branch. A name that describes the object can be read as a verdict on whoever produced it. Trace each error&lt;br&gt;
from the operation that raised it all the way to the receipt, and check whether the name it arrives&lt;br&gt;
under still tells the truth.&lt;/p&gt;

&lt;p&gt;The question that found this one: &lt;strong&gt;when this fires, whose fault does a reader assume it is, and is&lt;br&gt;
that always true?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;If you want to check the claim rather than take it:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git clone https://github.com/keniel13-ui/self-correcting-integration-maintainer
&lt;span class="nb"&gt;cd &lt;/span&gt;self-correcting-integration-maintainer
git checkout dd1a654
node &lt;span class="nt"&gt;--test&lt;/span&gt; &lt;span class="nb"&gt;test&lt;/span&gt;/exec-comparator-error.test.mjs        &lt;span class="c"&gt;# 6 pass&lt;/span&gt;

git checkout dd1a654~1 &lt;span class="nt"&gt;--&lt;/span&gt; scripts/judgment/live.mjs &lt;span class="se"&gt;\&lt;/span&gt;
    scripts/pr2/constants.mjs scripts/pr2/reducer.mjs
node &lt;span class="nt"&gt;--test&lt;/span&gt; &lt;span class="nb"&gt;test&lt;/span&gt;/exec-comparator-error.test.mjs        &lt;span class="c"&gt;# 5 fail, 1 passes&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That last run is the one worth doing. The test that keeps passing is the control.&lt;/p&gt;

&lt;p&gt;If you have one of these in your own harness, I would genuinely like to see it. Different domains,&lt;br&gt;
same shape.&lt;/p&gt;

</description>
      <category>testing</category>
      <category>ai</category>
      <category>opensource</category>
      <category>debugging</category>
    </item>
    <item>
      <title>You Agreed to a use. Not to a Hallway That Didn't Exist Yet</title>
      <dc:creator>Self-Correcting Systems</dc:creator>
      <pubDate>Wed, 09 Sep 2026 15:27:22 +0000</pubDate>
      <link>https://dev.to/kenielzep97/you-agreed-to-a-use-not-to-a-hallway-that-didnt-exist-yet-650</link>
      <guid>https://dev.to/kenielzep97/you-agreed-to-a-use-not-to-a-hallway-that-didnt-exist-yet-650</guid>
      <description>&lt;p&gt;You posted a photograph in 2014 to show your friends a night out. You understood what you were&lt;br&gt;
sharing and who you were sharing it with. You did not agree to every future system that would read&lt;br&gt;
it, combine it with other records, and decide something about you.&lt;/p&gt;

&lt;p&gt;That is not a worry about surveillance. Surveillance is about being watched. This is about being&lt;br&gt;
&lt;strong&gt;judged from inputs you never knew were inputs&lt;/strong&gt;, by a rule you never saw, in a place you have&lt;br&gt;
never been.&lt;/p&gt;

&lt;p&gt;Here is what that actually looks like, in machines that exist right now.&lt;/p&gt;

&lt;h2&gt;
  
  
  Four machines that get mistaken for one
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;1. An allegation that travels.&lt;/strong&gt; &lt;a href="https://patronscan.com/policies/" rel="noopener noreferrer"&gt;Patronscan&lt;/a&gt; sells ID scanning to bars and clubs. Venue flags stay&lt;br&gt;
with the venue. Network flags surface at other participating venues when your ID is scanned. The&lt;br&gt;
pitch is exactly what it sounds like: a patron banned at one venue cannot walk down the street and&lt;br&gt;
start fresh at the next.&lt;/p&gt;

&lt;p&gt;Say what a flag is. A venue recorded an allegation. It is a report, not a finding, and it travels&lt;br&gt;
with the authority of a finding.&lt;/p&gt;

&lt;p&gt;Their policies page publishes the network-versus-venue distinction, the conduct categories, the&lt;br&gt;
retention limits, who has access, the route for removal, and the response windows. It does not&lt;br&gt;
publish how often a dispute ends with a flag changed or removed, and I found no aggregate rate&lt;br&gt;
published anywhere else. The process is documented. Its aggregate outcomes are not.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. Affiliation, not conduct.&lt;/strong&gt; In January 2023 the New York Attorney General sought information&lt;br&gt;
about reports that MSG Entertainment used facial recognition to exclude attorneys whose firms were&lt;br&gt;
litigating against it. Nothing was alleged about anyone's behavior. The input was who employed them,&lt;br&gt;
and being on one side of a lawsuit is not wrongdoing.&lt;/p&gt;

&lt;p&gt;The litigation is worth two paragraphs, because it answers a question people assume they know.&lt;/p&gt;

&lt;p&gt;In &lt;a href="https://www.nycourts.gov/reporter/3dseries/2023/2023_01646.htm" rel="noopener noreferrer"&gt;&lt;code&gt;Hutcher v Madison Sq. Garden Entertainment Corp.&lt;/code&gt;&lt;/a&gt; (2023 NY Slip Op 01646), the Appellate&lt;br&gt;
Division agreed that Civil Rights Law § 40-b &lt;strong&gt;requires&lt;/strong&gt; admitting a valid ticket holder to a&lt;br&gt;
theatrical performance or concert. The plaintiffs were right about the statute. The court vacated&lt;br&gt;
the injunction anyway, on a rule it quoted from 1915: where a statute creates a right and&lt;br&gt;
prescribes a remedy, that remedy is exclusive. &lt;a href="https://www.nysenate.gov/legislation/laws/CVR/41" rel="noopener noreferrer"&gt;§ 41&lt;/a&gt; supplies it — a penalty of "not less than one&lt;br&gt;
hundred dollars nor more than five hundred dollars." The legislature set that number, not the&lt;br&gt;
venue. The March decision resolved the injunction, not the case; the § 40-b claim survived it.&lt;/p&gt;

&lt;p&gt;The statute also does not reach sporting events. It names theatres, music halls, opera houses,&lt;br&gt;
concert halls and circuses. At a basketball game the right in this story does not exist.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. Inference from exhaust.&lt;/strong&gt; Tenant screening, credit-based insurance scoring, employment&lt;br&gt;
background checks. Frequently no incident anywhere — a score built from records you never saw,&lt;br&gt;
about something you have not done.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;4. The system acts.&lt;/strong&gt; Not a database that informs a person who decides. Software that observes,&lt;br&gt;
infers, decides, and operates the applications that make the decision real. In August, xAI launched&lt;br&gt;
a &lt;a href="https://x.ai/news/introducing-grok-bot" rel="noopener noreferrer"&gt;persistent agent&lt;/a&gt; with its own always-on cloud computer, browser and terminal, signed into your&lt;br&gt;
applications. In September, Anthropic shipped &lt;a href="https://support.claude.com/en/articles/14128542-let-claude-use-your-computer-in-cowork" rel="noopener noreferrer"&gt;background computer use&lt;/a&gt; — the model clicks and types&lt;br&gt;
while you keep working. These are shipped products.&lt;/p&gt;

&lt;p&gt;I have not found a public case of one of these deciding about a person at a door. That gap is the&lt;br&gt;
honest state of row four.&lt;/p&gt;

&lt;p&gt;Collapse those four and one counterexample takes the argument down. Keep them apart and the&lt;br&gt;
uncomfortable part shows up.&lt;/p&gt;

&lt;h2&gt;
  
  
  One of these happened to me
&lt;/h2&gt;

&lt;p&gt;I did not go looking for a case. It was not any product named above. It was a vendor identity gate:&lt;br&gt;
a photograph of my driver's license, a biometric scan of my face taken on my phone, an automatic "did not meet the&lt;br&gt;
requirements," and no author on the sentence.&lt;/p&gt;

&lt;p&gt;Nothing I was shown named a reviewer, a fact, or a rule. Run it through the three questions at the&lt;br&gt;
end of this piece and watch them all fail. &lt;strong&gt;Is the fact wrong?&lt;/strong&gt; I was never told which fact. &lt;strong&gt;Is&lt;br&gt;
the fact right and the rule wrong?&lt;/strong&gt; I was never shown the rule. &lt;strong&gt;If I win, what comes back?&lt;/strong&gt;&lt;br&gt;
I was not shown a path. That is not the same as no path&lt;br&gt;
existing, and I was never given the difference.&lt;/p&gt;

&lt;p&gt;That is not any of the four machines. It is the thing they have in common: &lt;strong&gt;a decision returned&lt;br&gt;
with no author on the sentence.&lt;/strong&gt; I submitted what was asked. I did not finish their process. I hit&lt;br&gt;
the end of it.&lt;/p&gt;

&lt;h2&gt;
  
  
  Your footprint can do the job of an ID. Its protection depends on the transaction.
&lt;/h2&gt;

&lt;p&gt;A Social Security number is an obvious regulated identifier. Your footprint does some of the same&lt;br&gt;
linking work — the apartment, the job, the ride, the door — but what protects it is not fixed. It&lt;br&gt;
depends on who is using it, for what, and under which regime.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Which protection attaches depends on the information, who is using it, for what, and under which&lt;br&gt;
regime. The photograph does not change. The transaction does.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Hold that 2014 photograph constant.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;A screening firm compiles it and sells it to your employer.&lt;/strong&gt; In &lt;a href="https://www.ftc.gov/sites/default/files/documents/closing_letters/social-intelligence-corporation/110509socialintelligenceletter.pdf" rel="noopener noreferrer"&gt;2011 the FTC&lt;/a&gt; concluded a
company doing exactly that was a consumer reporting agency, because it "assembles or evaluates"
information furnished to third parties who use it for employment eligibility. Public posts, full
FCRA obligations: accuracy, notice, dispute.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Your employer searches your name and finds it himself.&lt;/strong&gt; The consumer-report route may not
apply. That does not mean no law applies. &lt;a href="https://www.eeoc.gov/laws/guidance/background-checks-what-employers-need-know" rel="noopener noreferrer"&gt;EEOC and FTC guidance&lt;/a&gt; is explicit that background
information is subject to federal anti-discrimination law "regardless of how you got the
information." Remove the reporting company and the regime &lt;strong&gt;changes&lt;/strong&gt;. It does not disappear.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;A venue network attaches it to a flag.&lt;/strong&gt; A different regime again, largely private.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;An agent retains it, infers from it, and acts.&lt;/strong&gt; Automation does not delete the organization
that deployed it or the transaction underneath. Which duties attach depends on the workflow, and
you cannot read that off the architecture.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Four handlings of one photograph, four sets of rules — not because the photograph changed, and not&lt;br&gt;
because any of them is a lawless zone, but because &lt;strong&gt;which regime applies is a function of the&lt;br&gt;
transaction, and the transaction is invisible to you.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;You cannot know that when you post. You especially cannot know it in advance, because some of those&lt;br&gt;
hallways were built after you posted.&lt;/p&gt;

&lt;h2&gt;
  
  
  Correcting a fact and contesting an inference are different rights
&lt;/h2&gt;

&lt;p&gt;If a file has your birthday wrong, there is a procedure. If a system has your birthday, employer,&lt;br&gt;
travel and associates all &lt;em&gt;correct&lt;/em&gt;, and concludes from them that you are high risk, correcting the&lt;br&gt;
records accomplishes nothing. Every input was already right. The conclusion was the problem.&lt;/p&gt;

&lt;p&gt;California's Attorney General addressed this directly in &lt;a href="https://oag.ca.gov/system/files/opinions/pdfs/20-303.pdf" rel="noopener noreferrer"&gt;Opinion 20-303&lt;/a&gt;. It is an opinion, not a&lt;br&gt;
court holding, and that distinction matters. The reasoning does not:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"when a business processes personal information to make an inference about the consumer's&lt;br&gt;
propensities, then the inference itself becomes part of the consumer's profile, and must be&lt;br&gt;
disclosed. A business might draw an inference about a consumer based in whole or in part on&lt;br&gt;
publicly available information... Under the CCPA, the inference must be disclosed to the&lt;br&gt;
consumer, &lt;strong&gt;even if the public information itself need not be disclosed&lt;/strong&gt;."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The conclusion drawn about you can carry more disclosure obligation than the public facts behind&lt;br&gt;
it. The inference is a separate object. A proprietary algorithm does not automatically make its&lt;br&gt;
individualized output a trade secret.&lt;/p&gt;

&lt;p&gt;Three limits. One state. An AG opinion. And California separately provides a right to request&lt;br&gt;
&lt;strong&gt;correction&lt;/strong&gt; of inaccurate information (&lt;a href="https://leginfo.legislature.ca.gov/faces/codes_displaySection.xhtml?lawCode=CIV&amp;amp;sectionNum=1798.106." rel="noopener noreferrer"&gt;Civ. Code § 1798.106&lt;/a&gt;) — a third thing again. Access to an&lt;br&gt;
inference, correction of a wrong fact, and forcing a decision reversed are three different rights,&lt;br&gt;
and having the first does not get you the third.&lt;/p&gt;

&lt;p&gt;One date keeps this honest: California's automated-decision-making rules took effect January 1&lt;br&gt;
2026, and businesses using ADMT for significant decisions have until &lt;strong&gt;January 1 2027&lt;/strong&gt; to comply.&lt;br&gt;
This is a gap scheduled to partially close.&lt;/p&gt;

&lt;p&gt;"Human in the loop" is not a claim. A human can approve every action, approve only payments,&lt;br&gt;
approve one objective at the start, review afterward, or merely be able to intervene. All five ship&lt;br&gt;
under "human oversight." The question is &lt;em&gt;where exactly&lt;/em&gt; authority sits.&lt;/p&gt;

&lt;h2&gt;
  
  
  The numbers, and where they are going
&lt;/h2&gt;

&lt;p&gt;This is not a forecast. These are dated facts about a system already running.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;California built a delete button and half a million people pressed it.&lt;/strong&gt; The Delete Act created&lt;br&gt;
DROP, a single platform where one request reaches every registered data broker. It opened January 1&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;By August 13 more than &lt;strong&gt;475,000&lt;/strong&gt; Californians had filed (&lt;a href="https://www.gov.ca.gov/2026/08/13/icymi-california-takes-historic-action-against-data-brokers/" rel="noopener noreferrer"&gt;Governor's office, Aug 13&lt;/a&gt;). By August 25 the agency reported
&lt;strong&gt;more than 500,000 registered&lt;/strong&gt; and &lt;strong&gt;654 data brokers&lt;/strong&gt; in the system (&lt;a href="https://privacy.ca.gov/2026/08/half-a-million-californians-have-signed-up-for-drop-to-delete-their-personal-information-from-data-brokers/" rel="noopener noreferrer"&gt;CalPrivacy, Aug 25&lt;/a&gt;).&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;Registration is a business and the state priced it.&lt;/strong&gt; A broker's annual registration fee is&lt;br&gt;
&lt;strong&gt;$6,000&lt;/strong&gt;. From August 1 2026 brokers must access DROP at least every &lt;strong&gt;45 days&lt;/strong&gt;. The &lt;a href="https://privacy.ca.gov/drop-for-data-brokers/" rel="noopener noreferrer"&gt;penalties&lt;/a&gt;&lt;br&gt;
are two separate meters: &lt;strong&gt;$200 for each day&lt;/strong&gt; a broker fails to register, and &lt;strong&gt;$200 for each&lt;br&gt;
deletion request for each day&lt;/strong&gt; it fails to delete.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Then read the outcome numbers carefully, because they are the whole lesson.&lt;/strong&gt; On August 25 the&lt;br&gt;
agency reported &lt;strong&gt;tens of millions of records deleted&lt;/strong&gt;, that &lt;strong&gt;99.9% of consumers had their&lt;br&gt;
profile deleted by at least one broker&lt;/strong&gt;, and that the typical user had been removed by &lt;strong&gt;over 40&lt;br&gt;
brokers&lt;/strong&gt;. It also reported that about &lt;strong&gt;25% of brokers had reported processing deletion requests.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Put those next to each other. &lt;strong&gt;99.9% having at least one deletion proves reach, not completion.&lt;/strong&gt;&lt;br&gt;
Being removed by more than 40 brokers is a real result. But 654 is the system census, not that&lt;br&gt;
person's denominator — DROP reports &lt;a href="https://privacy.ca.gov/drop/how-drop-works/" rel="noopener noreferrer"&gt;five separate statuses&lt;/a&gt;, including &lt;code&gt;Record not found&lt;/code&gt; for brokers&lt;br&gt;
that never held your data or could not match you from what you entered, &lt;code&gt;Exempted&lt;/code&gt; for records a broker may lawfully keep, and &lt;code&gt;Pending&lt;/code&gt;,&lt;br&gt;
and brokers have up to 90 days to report.&lt;/p&gt;

&lt;p&gt;So the honest reading is narrower and still hard: I have not found a published consumer-level&lt;br&gt;
measure of how many people reached a fully resolved state across every broker that actually held&lt;br&gt;
their data, or how long that took. Reach is published. Completion is not.&lt;/p&gt;

&lt;p&gt;And I made this mistake myself while drafting this section, which is the point: &lt;strong&gt;a number is only&lt;br&gt;
as good as the population it counted&lt;/strong&gt;, and the trap does not spare the person writing about it.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The first enforcement action is the thesis in one sentence.&lt;/strong&gt; In August 2026 California brought&lt;br&gt;
its first action under both the CCPA and the Delete Act, against LocateSmarter LLC, for failing to&lt;br&gt;
register and for requiring Californians to provide unnecessary data — &lt;strong&gt;the last four digits of&lt;br&gt;
their Social Security number — before they could opt out.&lt;/strong&gt; Total: &lt;strong&gt;$116,490.&lt;/strong&gt;&lt;br&gt;
(&lt;a href="https://privacy.ca.gov/2026/08/calprivacy-brings-first-action-against-a-data-broker-under-both-the-ccpa-and-delete-act/" rel="noopener noreferrer"&gt;agency decision&lt;/a&gt;)&lt;/p&gt;

&lt;p&gt;To switch off the sale of a record the law already covered, you had to hand over part of a more&lt;br&gt;
sensitive identifier. California treated that extra demand as unlawful. &lt;strong&gt;The protection existed.&lt;br&gt;
The company put a disclosure in the way of using it.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;And read what the company was selling. Names, dates of birth, Social Security numbers, phones,&lt;br&gt;
emails, employment, driver's license, bankruptcy records, litigation history — and inferences about&lt;br&gt;
consumer characteristics, including whether a person is &lt;strong&gt;"litigious."&lt;/strong&gt; The agency's own line:&lt;br&gt;
&lt;em&gt;"Inferences are a protected form of personal information under California law."&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;The arena used who employed you. The broker sold whether you sue. Same family of input. Not the&lt;br&gt;
same machine.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;And the next date is already set.&lt;/strong&gt; California's automated-decision-making &lt;a href="https://cppa.ca.gov/announcements/2025/20250923.html" rel="noopener noreferrer"&gt;rules&lt;/a&gt; take full effect&lt;br&gt;
for businesses using ADMT in significant decisions on &lt;strong&gt;January 1 2027&lt;/strong&gt;. Whatever the gap is today,&lt;br&gt;
part of it closes on a schedule, in one state, for covered businesses.&lt;/p&gt;

&lt;h2&gt;
  
  
  The claims that get to skip the evidence
&lt;/h2&gt;

&lt;p&gt;Everything above had to be sourced. A flag is an allegation until someone adjudicates it. An AG&lt;br&gt;
opinion is not a ruling. A staff letter is not a court order. That standard is not optional if you&lt;br&gt;
want to be believed.&lt;/p&gt;

&lt;p&gt;Now apply it to the loudest AI claim in circulation.&lt;/p&gt;

&lt;p&gt;On September 3, Senator Sanders and Rep. Casar announced &lt;a href="https://www.sanders.senate.gov/press-releases/news-sanders-casar-introduce-legislation-to-ban-artificial-superintelligence-and-temporarily-pause-advanced-ai-development/" rel="noopener noreferrer"&gt;legislation to ban artificial&lt;br&gt;
superintelligence&lt;/a&gt; and pause advanced AI development until a cabinet-level regulator exists, with a&lt;br&gt;
corporate death penalty and up to twenty years imprisonment for violations.&lt;/p&gt;

&lt;p&gt;Read the announcement for what it defines. It does define the class, broadly: systems that surpass&lt;br&gt;
human intelligence, systems capable of overthrowing governments, systems with dangerous abilities&lt;br&gt;
such as subverting shutdown commands. It also names who would decide: a proposed cabinet-level&lt;br&gt;
regulator with an advisory board. What I did not find in the announcement or the one-page summary&lt;br&gt;
is a &lt;strong&gt;benchmark or evaluation protocol&lt;/strong&gt; for deciding when a system has crossed the prohibited&lt;br&gt;
threshold. Up to twenty years in prison hangs on that threshold. The full bill text is still&lt;br&gt;
described as forthcoming.&lt;/p&gt;

&lt;p&gt;Read it for what happens next. The proposal names real instruments: "international agreements,&lt;br&gt;
allied coordination, and policies such as export controls." Those are not nothing. What the public&lt;br&gt;
material does not show is a &lt;strong&gt;mechanism that can compel a government or developer outside U.S.&lt;br&gt;
jurisdiction that refuses to cooperate.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;And when someone says advanced AI will end the world, ask the next question: &lt;strong&gt;by what mechanism,&lt;br&gt;
and for what reason?&lt;/strong&gt; Not "it will be very smart." A stated pathway you can check.&lt;/p&gt;

&lt;p&gt;Notice what each side is required to produce. A person disputing a bar flag files into a documented&lt;br&gt;
process with a published response window. A prohibition on a technology class travels as news with a&lt;br&gt;
summary and no published threshold. I am not claiming anyone measured those two against each other.&lt;br&gt;
I am asking the same question of both: &lt;strong&gt;what evidence would turn this into an enforceable&lt;br&gt;
decision?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;That asymmetry is the same defect this entire piece is about. &lt;strong&gt;How a claim gets treated depends on&lt;br&gt;
who is making it and where it lands, not on what is behind it.&lt;/strong&gt; A senator can announce a&lt;br&gt;
prohibition on a technology class with a broad definition, no published operational threshold, and no bill text and it is news. You will need&lt;br&gt;
receipts to get a listing corrected.&lt;/p&gt;

&lt;p&gt;None of that is an argument for building anything anyone wants. It is an argument that the danger&lt;br&gt;
worth legislating is the one you can describe: what is collected, what gets inferred from it, who&lt;br&gt;
gets to act on the inference, and what you can do about it. &lt;strong&gt;That is not a ban on the technology.&lt;br&gt;
It is a ban on a use.&lt;/strong&gt; The difference is the entire distance between a law that could work and a&lt;br&gt;
press release.&lt;/p&gt;

&lt;h2&gt;
  
  
  What is actually happening while that argument runs
&lt;/h2&gt;

&lt;p&gt;Nobody has to coordinate any of this.&lt;/p&gt;

&lt;p&gt;Safety teams study models. Privacy teams study data. Utilities study load. Cities study zoning.&lt;br&gt;
Congress studies regulation. Each is competent inside its own boundary. The technology crosses all&lt;br&gt;
of them in a single product release.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Preparation is fragmented. Deployment is integrated.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Every participant has an independent reason to accelerate one layer. Each decision can be rational&lt;br&gt;
and the sum still moves faster than anyone chose.&lt;/p&gt;

&lt;h2&gt;
  
  
  Three questions that are not the same question
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Is the fact wrong?&lt;/strong&gt; There is usually a process for that.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Is the fact right and the rule wrong?&lt;/strong&gt; A system can identify your employer perfectly. The
dispute is whether your employer should decide whether you get into a concert. Correcting the
record cannot touch that. Whether a route exists to challenge the rule itself is a different
question, and it is not the same in every hallway.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;If you win, what comes back, and when?&lt;/strong&gt; A published response deadline is measurable. Whether
the answer arrives before the apartment is rented, the job is filled, or the show ends is a
different measurement, and I have not found it published.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Before a record decides something about you, you should be able to ask why it belongs in that&lt;br&gt;
decision. Afterward, you need to know who can change the result.&lt;/p&gt;

&lt;h2&gt;
  
  
  If you have one of these, I want it
&lt;/h2&gt;

&lt;p&gt;I am collecting real cases before building anything, not after. Mine is above.&lt;/p&gt;

&lt;p&gt;If a decision about you turned on a record — a rental, a job, a claim, a door, an account — I want&lt;br&gt;
four things, with every identifying detail removed:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;What information was used, and did you know it was an input?&lt;/li&gt;
&lt;li&gt;Was the problem a wrong fact, an unsupported inference, or the rule itself?&lt;/li&gt;
&lt;li&gt;Who could change the decision, and what happened when you challenged it?&lt;/li&gt;
&lt;li&gt;Did the correction reach everyone who got the error, and did it restore the opportunity?&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Don't post anything that identifies you or anyone else. I am after the shape, not the file.&lt;/p&gt;

</description>
      <category>privacy</category>
      <category>security</category>
      <category>ai</category>
      <category>legal</category>
    </item>
    <item>
      <title>Compare Against the Schema They Shipped, Not the One You Expected</title>
      <dc:creator>Self-Correcting Systems</dc:creator>
      <pubDate>Sun, 06 Sep 2026 21:57:04 +0000</pubDate>
      <link>https://dev.to/kenielzep97/compare-against-the-schema-they-shipped-not-the-one-you-expected-3mb8</link>
      <guid>https://dev.to/kenielzep97/compare-against-the-schema-they-shipped-not-the-one-you-expected-3mb8</guid>
      <description>&lt;p&gt;My harness flagged the model for sending the wrong arguments. It compared what the model actually sent against what the run had committed to in advance, and they did not match.&lt;/p&gt;

&lt;p&gt;The mismatch was real. The conclusion I drew from it was wrong, and the comparator could not have told me so.&lt;/p&gt;

&lt;p&gt;Here is the check that was incomplete, the check that replaced it, why the fix is not "loosen the comparison," and the part of it that will rot.&lt;/p&gt;

&lt;h2&gt;
  
  
  The setup
&lt;/h2&gt;

&lt;p&gt;The harness prepares an &lt;code&gt;exec&lt;/code&gt; call before the model runs, freezes it, tells the model to send exactly that object, then compares the model's actual tool arguments against the frozen one. If they differ, the run fails closed. That comparison is the control.&lt;/p&gt;

&lt;p&gt;The expectation was built like this — &lt;a href="https://github.com/keniel13-ui/self-correcting-integration-maintainer/commit/5bf10acd7a6c0dd80e90d99217c2610df0d86d74" rel="noopener noreferrer"&gt;&lt;code&gt;5bf10ac&lt;/code&gt;&lt;/a&gt;, &lt;code&gt;scripts/judgment/candidate.mjs&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;expectedExecArguments&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;validateExecArguments&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
  &lt;span class="na"&gt;command&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;`node &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nf"&gt;artifactPath&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;verifier&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)}&lt;/span&gt;&lt;span class="s2"&gt; &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nf"&gt;artifactPath&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;payload&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)}&lt;/span&gt;&lt;span class="s2"&gt; &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nf"&gt;artifactPath&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;manifest&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)}&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;One key. From the run receipt, &lt;a href="https://github.com/keniel13-ui/self-correcting-integration-maintainer/blob/main/docs/freezes/RUN_004_RECEIPT.json" rel="noopener noreferrer"&gt;&lt;code&gt;RUN_004_RECEIPT.json&lt;/code&gt;&lt;/a&gt;, here is what the model actually sent, verbatim:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nl"&gt;"intent"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Run candidate verification"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"command"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"node /opt/tf/uploads/candidate-verifier.cjs /opt/tf/uploads/candidate-payload.json /opt/tf/uploads/candidate-command-manifest.json"&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Outcome in the same receipt: &lt;code&gt;EXEC_ARGUMENTS_MISMATCH&lt;/code&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Two contracts, and they disagreed
&lt;/h2&gt;

&lt;p&gt;This is the part I got wrong on the first read, and it is more interesting than "the model deviated."&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The provider's exec schema&lt;/strong&gt; — from the compiled artifact I ran, &lt;code&gt;@truefoundry/trueforge-core@0.1.4&lt;/code&gt;, &lt;code&gt;dist/core/sandbox/Sandbox.mjs&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="nx"&gt;sandboxExecSchema&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;z&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;object&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
  &lt;span class="na"&gt;intent&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;z&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;string&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="nf"&gt;describe&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;A brief, user-facing explanation of the purpose of this command. Avoid technical jargon and code details.&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;
  &lt;span class="p"&gt;),&lt;/span&gt;
  &lt;span class="na"&gt;command&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;z&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;string&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="nf"&gt;describe&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;The shell command to execute in the sandbox.&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
  &lt;span class="na"&gt;cwd&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;z&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;string&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="nf"&gt;optional&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="nf"&gt;describe&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Working directory for command execution.&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
  &lt;span class="na"&gt;env&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;z&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;record&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;z&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;string&lt;/span&gt;&lt;span class="p"&gt;(),&lt;/span&gt; &lt;span class="nx"&gt;z&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;string&lt;/span&gt;&lt;span class="p"&gt;()).&lt;/span&gt;&lt;span class="nf"&gt;optional&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="nf"&gt;describe&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Additional environment variables to set.&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Four fields. &lt;strong&gt;&lt;code&gt;intent&lt;/code&gt; and &lt;code&gt;command&lt;/code&gt; required. &lt;code&gt;cwd&lt;/code&gt; and &lt;code&gt;env&lt;/code&gt; optional.&lt;/strong&gt; This is the implementation schema wired into the sandbox &lt;code&gt;exec&lt;/code&gt; tool; I am quoting what the runtime accepts, not a tool descriptor captured from the session.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;My harness's instruction&lt;/strong&gt;, &lt;code&gt;scripts/judgment/live.mjs&lt;/code&gt;, present before the fix and after it:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Call truefoundry-system exec exactly once with this exact JSON argument object: &lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="p"&gt;...&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;At that moment the object being interpolated had one key.&lt;/p&gt;

&lt;p&gt;So the model was handed two authorities that disagreed, and it followed the provider's. It satisfied the required-field schema and missed my exact-JSON instruction, &lt;strong&gt;because my instruction was asking for something the schema forbade.&lt;/strong&gt; My comparator saw one difference and reported it as deviation. It had no way to represent "both sides are internally consistent and one of them is wrong."&lt;/p&gt;

&lt;p&gt;That is the finding. Not that the model was right — that &lt;strong&gt;a mismatch establishes difference, not which operand is authoritative.&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  The fix, and the part that matters
&lt;/h2&gt;

&lt;p&gt;The tempting repair is to compare less — check only &lt;code&gt;command&lt;/code&gt;, ignore extra keys, move on. That makes the failure disappear and takes the control with it. An agent could then send any additional argument it liked and still pass.&lt;/p&gt;

&lt;p&gt;What landed instead, in &lt;a href="https://github.com/keniel13-ui/self-correcting-integration-maintainer/commit/0220a27" rel="noopener noreferrer"&gt;&lt;code&gt;0220a27&lt;/code&gt;&lt;/a&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;CANDIDATE_VERIFICATION_INTENT&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Run candidate verification&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;expectedExecArguments&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nx"&gt;command&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;intent&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;CANDIDATE_VERIFICATION_INTENT&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="p"&gt;};&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The &lt;code&gt;intent&lt;/code&gt; value is &lt;strong&gt;harness-authored and constant, not copied from what the model sent.&lt;/strong&gt; Copying it would make the comparison check the model against itself.&lt;/p&gt;

&lt;p&gt;That commit is titled &lt;em&gt;"Implement adopted transport A and B controls"&lt;/em&gt; — the correction rode inside a larger transport change rather than shipping as a dedicated fix. Worth saying, since I am asking you to open it.&lt;/p&gt;

&lt;p&gt;The expected-object gate also got stricter:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;argumentKeys&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;Object&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;keys&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;expectedArguments&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;sort&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;

&lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;argumentKeys&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;length&lt;/span&gt; &lt;span class="o"&gt;!==&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt; &lt;span class="nx"&gt;argumentKeys&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;!==&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;command&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt; &lt;span class="nx"&gt;argumentKeys&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;!==&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;intent&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt;
    &lt;span class="nx"&gt;expectedArguments&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;intent&lt;/span&gt; &lt;span class="o"&gt;!==&lt;/span&gt; &lt;span class="nx"&gt;CANDIDATE_VERIFICATION_INTENT&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt;
    &lt;span class="k"&gt;typeof&lt;/span&gt; &lt;span class="nx"&gt;command&lt;/span&gt; &lt;span class="o"&gt;!==&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;string&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt; &lt;span class="nx"&gt;command&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;length&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nx"&gt;failures&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;add&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;EXEC_ARGUMENTS_MISMATCH&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Three separate things, and only one of them changed:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The &lt;strong&gt;expectation&lt;/strong&gt; was corrected — one key became two.&lt;/li&gt;
&lt;li&gt;The &lt;strong&gt;expected-object gate&lt;/strong&gt; got stricter — that block is new.&lt;/li&gt;
&lt;li&gt;The &lt;strong&gt;actual-versus-expected comparison stayed exactly as it was.&lt;/strong&gt; It already read:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;actual&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;parseStrictJson&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;call&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="kd"&gt;function&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;arguments&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;...&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="nf"&gt;canonicalJsonBytes&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;actual&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;equals&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;canonicalJsonBytes&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;prepared&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;expectedExecArguments&lt;/span&gt;&lt;span class="p"&gt;)))&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That line is identical before and after. Keys are sorted during canonical serialization, so it is a canonical object compare rather than a raw-byte one, and JSON key order cannot cause a false mismatch. &lt;strong&gt;I did not repair a false failure by weakening the comparator.&lt;/strong&gt; That is the whole point.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I fixed is narrower than it looks
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;The provider's contract:&lt;/strong&gt; &lt;code&gt;intent&lt;/code&gt; and &lt;code&gt;command&lt;/code&gt; required, &lt;code&gt;cwd&lt;/code&gt; and &lt;code&gt;env&lt;/code&gt; permitted.&lt;br&gt;
&lt;strong&gt;My frozen run contract:&lt;/strong&gt; exactly &lt;code&gt;command&lt;/code&gt; and &lt;code&gt;intent&lt;/code&gt;, nothing else, intent fixed to a constant.&lt;/p&gt;

&lt;p&gt;Mine is deliberately narrower. A permissive provider does not oblige a harness to accept every schema-valid variation — if the run precommitted to two specific arguments, rejecting a third key is a legitimate harness constraint. But it is &lt;em&gt;my&lt;/em&gt; policy, not TrueForge's requirement, and writing it as though the provider demanded it would be the same error in the other direction.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;And here is what is not fixed.&lt;/strong&gt; &lt;code&gt;argumentKeys.length !== 2&lt;/code&gt; hardcodes two things at once: the provider's current required-field set, and my run's decision to prohibit the optional fields. If TrueForge adds a third &lt;em&gt;required&lt;/em&gt; field tomorrow, my harness will reject a model for complying with the new schema unless I edit the harness too. The durable version derives the provider-required fields from the actual tool schema, then applies the narrower harness policy explicitly on top. I have not built that. &lt;strong&gt;If you copy this pattern, copy the problem with it.&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  The check you can steal
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;1. Where did the expected object come from?&lt;/strong&gt; If it came from your reading of the API, it encodes your assumptions. If it came from the provider's schema, it encodes theirs. Only one is authoritative about what a compliant call looks like.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. Does a failing comparison tell you which side is wrong?&lt;/strong&gt; Mine did not. It printed a mismatch and I had to open the provider's source to find the expectation at fault. &lt;strong&gt;A mismatch establishes difference, not which operand is authoritative.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. When you fix a false failure, does the check get weaker?&lt;/strong&gt; This is the one that bites. The fastest way to clear a red comparison is to compare less, and every time you do it you buy a passing run by selling the control that made passing mean something.&lt;/p&gt;

&lt;p&gt;The general shape: &lt;strong&gt;a control that fires wrongly is not evidence the control is too strict.&lt;/strong&gt; It is evidence that something on one of its two sides is wrong, and you have to find out which before you touch it.&lt;/p&gt;

&lt;h2&gt;
  
  
  What it cost
&lt;/h2&gt;

&lt;p&gt;Two things, and I want both on the record. I drew the wrong first conclusion about which side deviated. And the run still did not verify — the same receipt carries &lt;code&gt;EXEC_RESPONSE_SHAPE_UNEXPECTED&lt;/code&gt; alongside the argument mismatch, and the sandbox turned out to have no JavaScript runtime at all. That half is written up separately.&lt;/p&gt;

&lt;p&gt;If you have a comparison sitting between you and a model, go read the schema you are comparing against and check that your expected object satisfies it. It takes a minute, and it prevents the afternoon you spend investigating a model that satisfied the provider's tool contract while my own instruction conflicted with it.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Before: &lt;a href="https://github.com/keniel13-ui/self-correcting-integration-maintainer/commit/5bf10acd7a6c0dd80e90d99217c2610df0d86d74" rel="noopener noreferrer"&gt;&lt;code&gt;5bf10ac&lt;/code&gt;&lt;/a&gt;. Correction contained in: &lt;a href="https://github.com/keniel13-ui/self-correcting-integration-maintainer/commit/0220a27" rel="noopener noreferrer"&gt;&lt;code&gt;0220a27&lt;/code&gt;&lt;/a&gt;. Model arguments and outcome from &lt;a href="https://github.com/keniel13-ui/self-correcting-integration-maintainer/blob/main/docs/freezes/RUN_004_RECEIPT.json" rel="noopener noreferrer"&gt;&lt;code&gt;RUN_004_RECEIPT.json&lt;/code&gt;&lt;/a&gt;. Provider schema read from the compiled &lt;code&gt;@truefoundry/trueforge-core@0.1.4&lt;/code&gt; artifact in my own &lt;code&gt;node_modules&lt;/code&gt;, not from upstream source. The runtime half of this same run is in &lt;a href="https://dev.to/kenielzep97/a-finding-is-not-a-discovery-gib"&gt;I Built an Agent That Marked Its Own Finding as Already Known&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>security</category>
      <category>ai</category>
      <category>testing</category>
      <category>opensource</category>
    </item>
    <item>
      <title>The Detector Reported Zero Because It Only Had One Item.</title>
      <dc:creator>Self-Correcting Systems</dc:creator>
      <pubDate>Fri, 04 Sep 2026 05:06:35 +0000</pubDate>
      <link>https://dev.to/kenielzep97/the-detector-reported-zero-because-it-only-had-one-item-ni0</link>
      <guid>https://dev.to/kenielzep97/the-detector-reported-zero-because-it-only-had-one-item-ni0</guid>
      <description>&lt;p&gt;Two instructions went into an Auditor my agent collaborators and I built to surface conflicts in agent instruction files. Deployment authority is one of nine domains the tool explicitly knows how to judge.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Never deploy without human approval.
Auto-deploy the moment tests pass.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;On &lt;code&gt;main&lt;/code&gt; at &lt;a href="https://github.com/keniel13-ui/memory-authority-auditor/commit/172d962f2d53c6870d551b5b69db533f30caacb1" rel="noopener noreferrer"&gt;&lt;code&gt;172d962&lt;/code&gt;&lt;/a&gt;, that returns:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;posture&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;low_observed_risk&lt;/span&gt;
&lt;span class="na"&gt;counts&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;{&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;items"&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="nv"&gt;1&lt;/span&gt;&lt;span class="pi"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;labels"&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;{&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;governs"&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="nv"&gt;1&lt;/span&gt;&lt;span class="pi"&gt;},&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;risk_high"&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="nv"&gt;0&lt;/span&gt;&lt;span class="pi"&gt;,&lt;/span&gt;
         &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;conflicts"&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;{},&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;gates"&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="nv"&gt;0&lt;/span&gt;&lt;span class="pi"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;authority_categories"&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="nv"&gt;0&lt;/span&gt;&lt;span class="pi"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;code&gt;low_observed_risk&lt;/code&gt; is the product's own string, from &lt;code&gt;agents/report_writer.py:110&lt;/code&gt;. Not my summary of the output. The output.&lt;/p&gt;

&lt;p&gt;One item. The pairwise comparison step never received a pair, and my detector does not compare an item with itself.&lt;/p&gt;

&lt;p&gt;After the repair, same input, &lt;a href="https://memory-authority-auditor-web-qfppqeeedq-uc.a.run.app/" rel="noopener noreferrer"&gt;live service&lt;/a&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"severity"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"high"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"item_id"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"M001, M002"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"authority_collision"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"finding"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Conflicting governing instructions in deployment: require_human_approval vs allow_automatic."&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"evidence"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Never deploy without human approval. | Auto-deploy the moment tests pass."&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;code&gt;posture: needs_review&lt;/code&gt;. Two items, one high-severity collision, one verification gate.&lt;/p&gt;

&lt;p&gt;The difference between those two outputs is that two lines were touching.&lt;/p&gt;

&lt;h2&gt;
  
  
  Where the failure actually was
&lt;/h2&gt;

&lt;p&gt;Before anything compares instructions, something has to split the text into separate instructions. Mine joined unbulleted lines into one item whenever they sat on consecutive lines with no blank line between them.&lt;/p&gt;

&lt;p&gt;The join is in the tool's first commit, &lt;a href="https://github.com/keniel13-ui/memory-authority-auditor/commit/b71892d425db590d625020ee475bb70827fd5330" rel="noopener noreferrer"&gt;&lt;code&gt;b71892d&lt;/code&gt;&lt;/a&gt;, authored 2026-06-01 13:06:47 -0400, at &lt;code&gt;agents/memory_extractor.py&lt;/code&gt; lines 50–51:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;content&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt; &lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;join&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;part&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;strip&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;part&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;pending_paragraph&lt;/span&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;part&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;strip&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt;
&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="nf"&gt;len&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;content&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;=&lt;/span&gt; &lt;span class="mi"&gt;36&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Both defects in this article are on those two lines, and they have been there since the first commit. Three months.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Zero findings was an answer about a collapsed population.&lt;/strong&gt; The pairwise loop behaved exactly as written. It never got a pair.&lt;/p&gt;

&lt;p&gt;I have been publishing about this class of defect for three months: a count of zero means nothing until you know what reached the counter. I wrote that, then shipped a tool that got it wrong, and did not find out for three months.&lt;/p&gt;

&lt;h2&gt;
  
  
  How wide the defect actually was
&lt;/h2&gt;

&lt;p&gt;The detector knows nine domains: deploy authority, secrets handling, database source of truth, access scope, customer response, log retention, billing records, refunds, escalation. All hand-written.&lt;/p&gt;

&lt;p&gt;(Seven live in a stance table you can read in one glance. Refunds and escalation are compared by threshold rather than opposing stance, so if you go looking for a list of nine you will find a list of seven and two functions.)&lt;/p&gt;

&lt;p&gt;The precise scope, because the wider version is wrong: &lt;strong&gt;any pair whose two sides were written as adjacent, unbulleted lines with no blank line between them could be collapsed before comparison, in any of the nine domains.&lt;/strong&gt; That is not "the nine domains were disabled." A bulleted pair, or a pair separated by a blank line, extracted fine and compared fine the whole time. The vulnerable thing was a writing shape, not a domain.&lt;/p&gt;

&lt;p&gt;My own commit message on the repair says it worse than this article does — that consecutive lines "silently disabled conflict detection" across the nine domains. That wording is too wide. I am correcting it here rather than rewriting the commit.&lt;/p&gt;

&lt;h2&gt;
  
  
  Three things about the repair worth more than the repair
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;One: the tests were themselves tested.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The repair added seven regression tests. Passing on repaired code would not show they distinguish old behaviour from new, so we made them face the defect: stash the repair, restore only the missing constant so imports resolve, rerun against the old logic.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Four of the seven failed.&lt;/strong&gt; Real behavioural failures, not import errors.&lt;/p&gt;

&lt;p&gt;But four red lines are not four proofs, and the reasons matter more than the count:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Test&lt;/th&gt;
&lt;th&gt;Fails on&lt;/th&gt;
&lt;th&gt;Is that the defect?&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;adjacent_instructions_do_not_merge&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;assert 1 == 2&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;
&lt;strong&gt;Yes.&lt;/strong&gt; Two lines glued into one item.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;enumerated_domain_still_produces_a_real_collision&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;assert []&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;
&lt;strong&gt;Yes.&lt;/strong&gt; No pair survived, so no collision could fire.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;short_high_risk_instruction_is_not_silently_discarded&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;assert 0 == 1&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;
&lt;strong&gt;Yes&lt;/strong&gt; — but only because the injected constant is &lt;code&gt;12&lt;/code&gt;. Inject &lt;code&gt;36&lt;/code&gt; and it dies on &lt;code&gt;assert 36 &amp;lt;= 16&lt;/code&gt;, failing on the constant before it ever reaches the discard.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;governing_instruction_..._reports_uncovered_domain&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;assert 'uncovered_domain' in set()&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;
&lt;strong&gt;No.&lt;/strong&gt; Old &lt;code&gt;main&lt;/code&gt; has no &lt;code&gt;uncovered_domain&lt;/code&gt; in the detector at all. That failure is missing new code, not collapsed extraction.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Two of these four prove the extraction bug. One proves it only under the right constant. &lt;strong&gt;One does not prove it at all.&lt;/strong&gt; A negative control whose failures fail for the wrong reasons is the exact defect this article is about, so I would rather print the table than let four red lines carry more weight than they earned.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Two: the first deploy succeeded on the wrong tier.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;code&gt;gcloud&lt;/code&gt; reported the truth: the web service deployed and served 100% of traffic. Accurate. I read it as meaning the behaviour had changed. It had not.&lt;/p&gt;

&lt;p&gt;The web app is a router. Extraction runs in &lt;code&gt;memory-extractor-agent&lt;/code&gt;, a &lt;strong&gt;separate&lt;/strong&gt; Cloud Run service. The revision timestamps are the receipt:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;memory-authority-auditor-web-00003-82f   2026-09-02T13:17:10.714842Z
memory-extractor-agent-00002-grk         2026-09-02T13:31:32.807334Z
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Fourteen minutes and twenty-two seconds&lt;/strong&gt; in which a correct success message sat on top of unchanged behaviour. We only caught it because we tested the endpoint instead of reading the deploy message. Same wrong-reason pattern this project studies, live in our own release process, minutes after fixing the tool. The receipt was not false. My reading of what it covered was.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Three: I added an absence instead of a domain.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The input that started this was a different pair — publish-versus-verify — and the obvious repair was to teach the tool about publishing. We did not.&lt;/p&gt;

&lt;p&gt;Tuning a ruleset to the case someone just handed you proves only that it catches the known case. So the detector now emits &lt;code&gt;uncovered_domain&lt;/code&gt; when a governing instruction matches no rule at all:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;This instruction governs action but matched no contradiction rule, so it was NOT evaluated for conflicts. Absence of a conflict here is absence of a check, not evidence of agreement.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Before, &lt;em&gt;no conflicts&lt;/em&gt; and &lt;em&gt;never checked&lt;/em&gt; rendered as the same sentence. Now they do not.&lt;/p&gt;

&lt;h2&gt;
  
  
  The original pair still is not solved, and the live output says so
&lt;/h2&gt;

&lt;p&gt;Here is the input that started this, run against the repaired live service:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="nl"&gt;"items"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nl"&gt;"id"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"M001"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"text"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Current policy: verify the live artifact before publishing."&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nl"&gt;"id"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"M002"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"text"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Old note: publish immediately without checking."&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="err"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="nl"&gt;"classifications"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nl"&gt;"id"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"M001"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"authority_label"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"governs"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="nl"&gt;"confidence"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;0.78&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nl"&gt;"id"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"M002"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"authority_label"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"context_only"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"confidence"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;0.64&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="err"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="nl"&gt;"conflicts"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nl"&gt;"severity"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"medium"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"item_id"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"M001"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"uncovered_domain"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
   &lt;/span&gt;&lt;span class="nl"&gt;"finding"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"This instruction governs action but matched no contradiction rule, so it was NOT evaluated for conflicts."&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;code&gt;posture: usable_with_gates&lt;/code&gt;. Extraction is fixed — two items, correctly split. It is still &lt;strong&gt;not&lt;/strong&gt; an &lt;code&gt;authority_collision&lt;/code&gt;, and it never will be until publishing becomes a listed domain.&lt;/p&gt;

&lt;p&gt;And there is a second gap in that JSON I did not know about until I pasted it for this article. &lt;strong&gt;&lt;code&gt;M002&lt;/code&gt; is classified &lt;code&gt;context_only&lt;/code&gt; at confidence 0.64.&lt;/strong&gt; "Publish immediately without checking" is an imperative, and the classifier does not consider it strong enough to govern. So the &lt;code&gt;uncovered_domain&lt;/code&gt; warning fires on M001 only. The half of the contradiction that tells you to skip the check gets no warning at all, because &lt;code&gt;context_only&lt;/code&gt; items are not eligible for one.&lt;/p&gt;

&lt;p&gt;The extraction repair is real. It moved this input from one silent item to two visible items and one honest warning. It did not make the tool right about this pair.&lt;/p&gt;

&lt;h2&gt;
  
  
  What is fixed and what is not
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Fixed:&lt;/strong&gt; finished, unbulleted instructions on adjacent lines no longer merge when the first line ends in terminal punctuation. The minimum item length dropped from 36 characters to 12, because the old floor silently discarded the unbulleted instruction &lt;code&gt;Delete all logs.&lt;/code&gt; — sixteen characters, high risk, dropped with no record. A bulleted line bypassed that floor entirely, so the same words survived as a list item and vanished as a sentence.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Not fixed, with the receipts:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A standalone unbulleted fragment under 12 characters still disappears with no record. &lt;code&gt;Wipe logs.&lt;/code&gt; is ten characters and returns zero items. So does &lt;code&gt;See above.&lt;/code&gt; — the floor does not distinguish a command from a cross-reference, it just deletes both.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The split now over-fires on hard-wrapped prose.&lt;/strong&gt; I previously claimed wrapped text was safe because wrapped lines do not end in terminal punctuation. That is a bet on wrapping, not a proof, and here is the counterexample: &lt;code&gt;"Escalate to the on-call engineer within 15 min.\nThen page the team lead if unresolved."&lt;/code&gt; is one two-step escalation procedure and the repair returns it as two independent items. Over-splitting is safer than merging, because two items can still be compared. It is still wrong.&lt;/li&gt;
&lt;li&gt;Still only nine conflict domains. A governing instruction outside them produces &lt;code&gt;uncovered_domain&lt;/code&gt;, which names the gap but not the conflict. A &lt;code&gt;context_only&lt;/code&gt; item outside them produces nothing at all — see M002 above.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Reproduce it
&lt;/h2&gt;

&lt;p&gt;Both hostnames for the live app route to the same service; I checked with the same payload and the responses are identical, so there is no stale tier to trip over.&lt;/p&gt;

&lt;p&gt;The repair is public as a branch, not on &lt;code&gt;main&lt;/code&gt;: &lt;a href="https://github.com/keniel13-ui/memory-authority-auditor/commit/beae0bb753b7e2be5b46a8ee6a8cf6f392ff3f72" rel="noopener noreferrer"&gt;&lt;code&gt;beae0bb&lt;/code&gt;&lt;/a&gt; on &lt;a href="https://github.com/keniel13-ui/memory-authority-auditor/tree/fix/extraction-merge" rel="noopener noreferrer"&gt;&lt;code&gt;fix/extraction-merge&lt;/code&gt;&lt;/a&gt;. Three files, 146 additions and one deletion. &lt;strong&gt;&lt;code&gt;main&lt;/code&gt; is still &lt;code&gt;172d962&lt;/code&gt; and still carries &lt;code&gt;len(content) &amp;gt;= 36&lt;/code&gt;&lt;/strong&gt;, so a default clone gets the defect. I am saying that rather than letting a green link imply the whole repo moved.&lt;/p&gt;

&lt;p&gt;Suite on the branch: &lt;strong&gt;107 passed, 1 skipped, 1 xfailed&lt;/strong&gt; in a clean clone. My working copy reads 108 because one provenance test finds workspace files that do not exist in an isolated clone. The clone number is the honest one to print next to a clone command.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Run the negative control:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git clone https://github.com/keniel13-ui/memory-authority-auditor
&lt;span class="nb"&gt;cd &lt;/span&gt;memory-authority-auditor
git fetch origin fix/extraction-merge
git checkout FETCH_HEAD &lt;span class="nt"&gt;--&lt;/span&gt; tests/test_extraction_boundaries.py

&lt;span class="c"&gt;# Restore only the constant the new tests import, so collection succeeds.&lt;/span&gt;
&lt;span class="c"&gt;# The old extractor below still uses its own literal &amp;gt;= 36 logic.&lt;/span&gt;
python3 - &lt;span class="o"&gt;&amp;lt;&amp;lt;&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="no"&gt;PY&lt;/span&gt;&lt;span class="sh"&gt;'
from pathlib import Path
p = Path("agents/memory_extractor.py")
t = p.read_text()
assert "def extract_memories(" in t
p.write_text(t.replace("def extract_memories(", "MIN_ITEM_CHARS = 12&lt;/span&gt;&lt;span class="se"&gt;\n\n\n&lt;/span&gt;&lt;span class="sh"&gt;def extract_memories(", 1))
&lt;/span&gt;&lt;span class="no"&gt;PY

&lt;/span&gt;python3 &lt;span class="nt"&gt;-m&lt;/span&gt; pytest &lt;span class="nt"&gt;-q&lt;/span&gt; tests/test_extraction_boundaries.py
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;4 failed, 3 passed&lt;/strong&gt; — with the caveats in the table above.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why this matters past one tool
&lt;/h2&gt;

&lt;p&gt;Agent instruction files accumulate rules written at different times by different people. The contradictions get harder to hold in working memory as the files grow.&lt;/p&gt;

&lt;p&gt;The reason to build a tool like this is to help a human stay the operator — to make a growing instruction set easier to inspect, not to replace the inspection or certify that nothing was missed.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Which means a tool in that job needs the same scrutiny it applies.&lt;/strong&gt; Ours did not get it for three months, and the thing that finally found it was not the suite. It was Kairos, a separate live agent seat in this project, pasting two lines into the deployed service and reading the answer.&lt;/p&gt;

&lt;h2&gt;
  
  
  Go break it
&lt;/h2&gt;

&lt;p&gt;It is live and it takes text: &lt;strong&gt;&lt;a href="https://memory-authority-auditor-web-qfppqeeedq-uc.a.run.app" rel="noopener noreferrer"&gt;https://memory-authority-auditor-web-qfppqeeedq-uc.a.run.app&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Paste in an instruction file, a set of agent rules, a policy doc, anything with rules written at different times. No signup. The app does not persist what you paste — it processes in memory and returns the answer. I cannot promise Google logs nothing at the platform layer, so do not paste anything you would mind appearing in a cloud access log.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What I want is the case it misses.&lt;/strong&gt; Two instructions that clearly contradict, where it returns &lt;code&gt;low_observed_risk&lt;/code&gt; or &lt;code&gt;uncovered_domain&lt;/code&gt; instead of a conflict. I already know four shapes that beat it, and every one of them is in this article: anything outside the nine domains, any unbulleted fragment under twelve characters, any imperative the classifier rates &lt;code&gt;context_only&lt;/code&gt;, and any procedure hard-wrapped after a period. &lt;strong&gt;There will be more.&lt;/strong&gt; The one that started this survived three months and a green suite.&lt;/p&gt;

&lt;p&gt;Post what you gave it and what it returned. A miss is worth more to me than a hit.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;The two-line input came from Kairos, a separate live agent seat testing the deployed service — not from an external user or customer. Implementation, testing, and deployment were collaborative agent work under my direction. None of the pre-existing tests exercised that input shape.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;One correction about my own commit, since I am asking you to read it. The repair commit message and the regression-test docstring both say the defects were *&lt;/em&gt;"found by an outside reader."** That was imprecise. I meant outside the tool's own test suite; a reader following the link would reasonably take it to mean an outside person. It was not. I am leaving the commit as written and correcting it here rather than force-pushing over it, because a rewritten history is a worse receipt than an inaccurate one with a published correction attached.*&lt;/p&gt;

</description>
      <category>ai</category>
      <category>testing</category>
      <category>agents</category>
      <category>opensource</category>
    </item>
    <item>
      <title>I Followed the Appeal Path. There Was No Appeal.</title>
      <dc:creator>Self-Correcting Systems</dc:creator>
      <pubDate>Tue, 01 Sep 2026 02:45:49 +0000</pubDate>
      <link>https://dev.to/kenielzep97/i-followed-the-appeal-path-there-was-no-appeal-25e2</link>
      <guid>https://dev.to/kenielzep97/i-followed-the-appeal-path-there-was-no-appeal-25e2</guid>
      <description>&lt;p&gt;&lt;strong&gt;This is part four of the Defender Access series.&lt;/strong&gt; Each part is standalone, but here is the thread if you are landing here cold:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://dev.to/kenielzep97/openai-says-verified-defenders-get-more-access-im-going-to-test-that-1n82"&gt;Part one&lt;/a&gt;&lt;/strong&gt; — OpenAI says verified defenders get more access, so I preregistered a study to test it, and published the design and its outcome table before running anything.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://dev.to/kenielzep97/they-matched-the-slogan-the-decision-lived-in-the-undefined-word-36o0"&gt;Part two&lt;/a&gt;&lt;/strong&gt; — they matched the published slogan. The decision lived in the undefined white space between the rules.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://dev.to/kenielzep97/the-suite-was-green-four-binding-controls-hadnt-established-their-claims-5d01"&gt;Part three&lt;/a&gt;&lt;/strong&gt; — my own suite was green while four binding controls had never established their claims.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Part four, this one&lt;/strong&gt; — the study cannot run, and the reason is worth more than the numbers would have been.&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;Part two set a condition for continuing, and part three quoted it rather than paraphrasing it. I am going to do the same thing:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Part four continues only if a live result earns it. Same condition part two set: nothing here gets extended on vibes, and a part that has nothing new to measure does not get written.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;A live result arrived. It is not the result the series was designed to measure, and I want to be exact about that before anything else.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;This part does not report an uplift measurement.&lt;/strong&gt; The study announced in part one compares what a verified defender account can do against a control account. That study did not run and, through this route, it cannot run. What I have instead is a measurement of something one layer up: whether the treatment arm is reachable through the gate in front of the study. Through this route, it is not. Two dated records expose the gap: the denial directs a mistaken applicant to Support, while Support says it cannot explain or reverse the result, and that the verification process offers no retry or appeal.&lt;/p&gt;

&lt;h2&gt;
  
  
  The timeline
&lt;/h2&gt;

&lt;p&gt;Every line here is a timestamped email in my inbox. I am redacting my organization ID and my address and nothing else.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;When (UTC)&lt;/th&gt;
&lt;th&gt;From&lt;/th&gt;
&lt;th&gt;What it said&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;2026-08-11 01:20:19&lt;/td&gt;
&lt;td&gt;Persona&lt;/td&gt;
&lt;td&gt;
&lt;em&gt;"Verify your business to join OpenAI's **Daybreak&lt;/em&gt;* access program"*&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2026-08-11 01:20:20&lt;/td&gt;
&lt;td&gt;OpenAI&lt;/td&gt;
&lt;td&gt;
&lt;em&gt;"Thank you for your request"&lt;/em&gt; — subject line &lt;strong&gt;OpenAI Pilot: Trusted Access For Cyber&lt;/strong&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2026-08-11 23:45:16&lt;/td&gt;
&lt;td&gt;Persona&lt;/td&gt;
&lt;td&gt;&lt;em&gt;"Persona was unable to verify your account for OpenAI's Trusted Access for Cyber program."&lt;/em&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2026-08-31 06:16:33&lt;/td&gt;
&lt;td&gt;me&lt;/td&gt;
&lt;td&gt;the appeal, to &lt;code&gt;support@openai.com&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2026-08-31 06:17:14&lt;/td&gt;
&lt;td&gt;OpenAI Support&lt;/td&gt;
&lt;td&gt;Case 14067641&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Two things about that table before the substance.&lt;/p&gt;

&lt;p&gt;The first two rows are one second apart and give the program two different names. Persona calls it &lt;strong&gt;Daybreak&lt;/strong&gt;. OpenAI calls it &lt;strong&gt;Trusted Access for Cyber&lt;/strong&gt;. The support reply at the end uses both in one sentence. That is cosmetic and I mention it only because it is the first visible sign of different naming conventions across the handoff.&lt;/p&gt;

&lt;p&gt;The last two rows are &lt;strong&gt;forty-one seconds apart&lt;/strong&gt;. I will come back to that.&lt;/p&gt;

&lt;h2&gt;
  
  
  The two sentences this part exists for
&lt;/h2&gt;

&lt;p&gt;The denial, in full, is four lines long. Here is the operative one:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;"If you believe this was a mistake, please contact OpenAI support at &lt;a href="mailto:support@openai.com"&gt;support@openai.com&lt;/a&gt;."&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That names a channel and the condition under which to use it. It does not say what the channel can do once you get there. I believed it was a mistake, so nineteen days later I used it. I asked two narrow questions: what documentation does the verification step accept, and should I reopen the existing request or file a new one.&lt;/p&gt;

&lt;p&gt;The answer:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;"For Trusted Access for Cyber / Daybreak, if Persona verification fails or is denied, Support can't manually override it or provide additional details on the specific result, and verification currently doesn't support retries or appeals."&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Read those two quotes next to each other. The denial routes you to a desk. &lt;strong&gt;The desk says it cannot override the result, cannot tell you why the result happened, and that the process has no retries and no appeals.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;And there is a sentence in OpenAI's own organization-verification documentation that sharpens this into something better than a complaint:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;"If retries or appeals are available for your verification flow, the notice or product experience will explain the next step."&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That establishes the positive case, and only the positive case: &lt;strong&gt;if&lt;/strong&gt; retries or appeals are available, the notice or product experience is where the next step will appear. It does not obligate a notice to announce their absence, and I am not going to pretend it does.&lt;/p&gt;

&lt;p&gt;What it does let me say precisely is this. My notice named Support. The current Daybreak documentation separately states that this flow has no retries and no appeals. &lt;strong&gt;What the notice did not say is that the Support route it named could not become an appeal.&lt;/strong&gt; The information existed in one place and the referral existed in another, and the applicant is left to reconcile the two.&lt;/p&gt;

&lt;p&gt;The broad version of this complaint is wrong, so let me kill it first. Support is real and it does real work: technical failures, stuck verification status, access troubleshooting. It is implemented.&lt;/p&gt;

&lt;p&gt;What is not implemented is any recourse &lt;em&gt;after a denial&lt;/em&gt;. The three things you would go to that channel for once you have been denied — reversal, explanation, another attempt — are all ruled out by the reply, but for two different reasons and by two different owners. Support cannot explain or override the result. The verification process offers no retry and no appeal.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The support channel existed. Recourse did not.&lt;/strong&gt; The denial pointed at the first without disclosing the absence of the second.&lt;/p&gt;

&lt;p&gt;The cost of that is not all theirs, and I want it attributed properly. The referral gave me reason to believe contacting Support might produce recourse. It never told me to wait. &lt;strong&gt;My own experimental rule is what turned that belief into a nineteen-day delay&lt;/strong&gt; — I would not write until I thought the estimand was safe. Two costs, two owners.&lt;/p&gt;

&lt;p&gt;This series has spent three parts on one idea, and it is a rule I work under: &lt;strong&gt;a rule that depends on someone choosing to perform it is a request, not a control.&lt;/strong&gt; &lt;a href="https://dev.to/mansio"&gt;mansio&lt;/a&gt; pushed it somewhere I had not taken it, in a thread on a different post: relying on a prompt instruction delegates system integrity to the model being evaluated.&lt;/p&gt;

&lt;p&gt;What I have here is the mirror image of both. &lt;strong&gt;A referral that names a channel without naming its limits is a notice, not a remedy.&lt;/strong&gt; It has the grammar of recourse without saying that recourse is not among the things on offer.&lt;/p&gt;

&lt;h2&gt;
  
  
  About those forty-one seconds
&lt;/h2&gt;

&lt;p&gt;The reply arrived forty-one seconds after I sent the appeal, and it says so itself:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;"Hi Keniel — I'm AI-assisted support for OpenAI."&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;and closes with:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;"This response was generated with AI support which can make mistakes."&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;I am not going to tell you a human refused me, and I am not going to tell you no human read it either.&lt;/strong&gt; I cannot establish that. What I can establish is that the reply arrived forty-one seconds after I sent mine, identified itself as AI-assisted, and disclaimed its own accuracy in the same breath. Whatever human involvement there was or was not, the answer I received is one that says it can be wrong.&lt;/p&gt;

&lt;p&gt;The disclosure limits what the forty-one-second reply can establish on its own, and it no longer has to carry the policy claim by itself. &lt;strong&gt;OpenAI's current Daybreak documentation states independently that Support cannot override a verification result or provide additional details about why a specific result occurred, and that verification does not support retries or appeals.&lt;/strong&gt; Its FAQ puts it in one line: &lt;em&gt;can support change a verification result? No.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;One caveat I have to state, because it is the same defect this series keeps finding. That is a current page, not an archived copy from August 11. It tells me what the policy is now. It is not evidence of what the policy was on August 11, when I was denied, and I have no archived copy of the page as it stood that day. So the division of labour is: the email establishes the speed and wording of what I was told, the documentation establishes the policy as it currently stands, and neither establishes the policy at the moment of the denial.&lt;/p&gt;

&lt;p&gt;Which leaves the thing this whole series keeps arriving at: &lt;strong&gt;there is no observer downstream of that decision that I can reach.&lt;/strong&gt; Nothing in the record available to me distinguishes an AI-only response from one a human touched. OpenAI may well have internal routing or audit data that settles it. I am not claiming their systems cannot know. I am saying the applicant cannot, from what the applicant is given.&lt;/p&gt;

&lt;h2&gt;
  
  
  What was actually checked
&lt;/h2&gt;

&lt;p&gt;Here is the part that changes what I am allowed to claim.&lt;/p&gt;

&lt;p&gt;I do not know which checks determined my denial.&lt;/p&gt;

&lt;p&gt;Persona is an identity and business verification vendor. The support reply describes what the step &lt;strong&gt;generally expects&lt;/strong&gt;:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;"information that matches official records (legal business name, registered/operating address + contact info, and sometimes a tax ID/business registration number) plus clear, complete, current official business documents"&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Legal name. Registered address. Tax ID. Business registration number. &lt;strong&gt;Not one of those fields is about security research.&lt;/strong&gt; Nothing in that list asks what I defend, what I own, what I have published, or whether my intended work is authorized.&lt;/p&gt;

&lt;p&gt;That was Support's abbreviated description to me, and I should not let it stand in for the whole process. OpenAI's current organization-verification documentation is wider than that email: it also asks for &lt;em&gt;accurate information about your organization's activities or intended use of OpenAI&lt;/em&gt;, and says the review may include &lt;em&gt;document verification, and compliance or risk screening&lt;/em&gt;. So the claim I can defend is narrow and specific — &lt;strong&gt;the list I was given did not assess security research&lt;/strong&gt; — not the broader claim that nothing anywhere in the application ever does.&lt;/p&gt;

&lt;p&gt;And here is the part I have to state carefully, because this whole series is about people claiming causes their receipts do not carry.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;I cannot establish why Persona denied me.&lt;/strong&gt; The process withholds that reason by policy — Support said so in the same message. What I can establish is that &lt;strong&gt;Self-Correcting Systems is not a registered company.&lt;/strong&gt; It is me. No LLC, no incorporation, no tax ID, no registered address, no filing of any kind. So I am missing exactly the records Support says the flow generally expects, which makes the absent entity my strongest available explanation and &lt;strong&gt;not a proven cause&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;I own &lt;code&gt;primaworkflows.com&lt;/code&gt;. Controlling a domain is not a substitute for legal entity records, and I would not expect it to satisfy a check asking for a registration number.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;A business-registration gate is a legitimate control.&lt;/strong&gt; If you are handing out elevated cyber capability, tying it to an accountable legal entity is a defensible design and I would probably build it that way too. My complaint is not that the gate exists.&lt;/p&gt;

&lt;p&gt;My complaint is what the applicant is left holding. The program is described in terms of trusted defenders. Support's reply foregrounded business records. Those may not be the criterion the program name implies, and &lt;strong&gt;I have no way to find out&lt;/strong&gt;, because the result arrives with no reason attached and the channel that could explain it is documented as unable to. Whatever the gate actually evaluated, it did not tell me, and an applicant who cannot see which criterion was applied cannot distinguish a considered rejection from a records lookup that came back empty.&lt;/p&gt;

&lt;h2&gt;
  
  
  What this does to the experiment
&lt;/h2&gt;

&lt;p&gt;Part one published the design's outcome table in advance, including the failure branches. One of them reads:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Approval arrives before a valid T0 → primary estimand is lost; post-only observation.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The design anticipated approval being &lt;strong&gt;late&lt;/strong&gt;. It anticipated entitlement being &lt;strong&gt;unclear&lt;/strong&gt;. It did not enumerate a branch where &lt;strong&gt;the applicant fails the verification gate before the treatment arm can be provisioned&lt;/strong&gt;, and that is now the branch I am in. OpenAI describes verification as helping evaluate whether a request qualifies, so this was an evaluation. It is simply not the evaluation the study was designed around, and it terminates before the study can begin.&lt;/p&gt;

&lt;p&gt;So, plainly, for the record and for anyone who was following along expecting numbers:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;The treatment arm cannot be provisioned through this route.&lt;/strong&gt; No approval, no retries, no appeals.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;T1 does not exist and will not under this preregistered route.&lt;/strong&gt; There is no post-treatment measurement because there is no treatment.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The uplift study announced in part one is terminated, not paused.&lt;/strong&gt; Reviving it would require a different route to eligibility, and I do not have one.&lt;/li&gt;
&lt;li&gt;Part one's ceiling was already an N-of-1 case study with entitlement confounded with account identity. That ceiling is now moot. There is no arm to confound.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The rule I held the appeal under was that sending it early could contaminate the before/after comparison. &lt;strong&gt;There was no after to protect.&lt;/strong&gt; I would rather say that plainly than let the timeline imply I was being disciplined.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I would tell you to take from this
&lt;/h2&gt;

&lt;p&gt;If you are building an access gate, one line:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Name what the channel can actually do for the situation you are naming it in.&lt;/strong&gt; Support does real work, and none of it is recourse after a denial. One sentence in that notice would have told me so, and its absence is what nineteen days of mine were spent on. &lt;strong&gt;The delay is mine. The missing sentence is theirs.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;If you are on the other side of a gate like this, two things I did not know before:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Find out who is actually checking you, and accept that you may not be able to.&lt;/strong&gt; The program name on the door and the vendor doing the verification can be evaluating different things. I assumed a cyber program was assessing my security work. The support response I received foregrounded business records, and it arrived only because I asked a question that was almost about something else. OpenAI's current documentation is broader than that answer: it also names organizational activities or intended use, and compliance or risk screening. &lt;strong&gt;What I still cannot recover is which of those checks actually determined my result.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;A denial with no stated reason is not a judgment you can read.&lt;/strong&gt; I spent some of those nineteen days reading it as one. It might have been. It could also have been a records lookup that came back empty. The point is that the format gave me no way to tell, and I filled the silence in myself.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;The series, in order: *&lt;/em&gt;&lt;a href="https://dev.to/kenielzep97/openai-says-verified-defenders-get-more-access-im-going-to-test-that-1n82"&gt;part one&lt;/a&gt;** (the preregistered design, which &lt;a href="https://dev.to/devteam/top-7-featured-dev-posts-of-the-week-5c26"&gt;DEV featured&lt;/a&gt; on August 18 for announcing the instrument this part reports could not be run) · &lt;strong&gt;&lt;a href="https://dev.to/kenielzep97/they-matched-the-slogan-the-decision-lived-in-the-undefined-word-36o0"&gt;part two&lt;/a&gt;&lt;/strong&gt; (the decision lived in the undefined white space) · &lt;strong&gt;&lt;a href="https://dev.to/kenielzep97/the-suite-was-green-four-binding-controls-hadnt-established-their-claims-5d01"&gt;part three&lt;/a&gt;&lt;/strong&gt; (a green suite over four unestablished controls) · part four, this one.*&lt;/p&gt;

&lt;p&gt;&lt;em&gt;The email quotations above come from five dated messages in my inbox: two from &lt;code&gt;no-reply@frompersona.com&lt;/code&gt;, one from &lt;code&gt;noreply@openai.com&lt;/code&gt;, one from &lt;code&gt;support@openai.com&lt;/code&gt;, and one I sent. Quotations from OpenAI documentation come from the two Help Center pages linked below. I am not publishing the raw messages — they carry my organization ID and address — so the quotes are on my word and the timestamps are what I would produce if anyone wants to check the intervals. The forty-one second reply identifies itself as AI-assisted and states it can make mistakes. Its central claim does not rest on that message alone: OpenAI's own published Daybreak troubleshooting documentation states that Support cannot override a verification result or disclose its specific reason, and that verification currently supports neither retries nor appeals. &lt;a href="https://help.openai.com/en/articles/10910291-api-organization-verification" rel="noopener noreferrer"&gt;API organization verification&lt;/a&gt; · &lt;a href="https://help.openai.com/en/articles/20001259" rel="noopener noreferrer"&gt;Daybreak troubleshooting&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

</description>
      <category>security</category>
      <category>ai</category>
      <category>testing</category>
      <category>opensource</category>
    </item>
    <item>
      <title>Remember CLAIM-24? Here's what happened.</title>
      <dc:creator>Self-Correcting Systems</dc:creator>
      <pubDate>Mon, 31 Aug 2026 03:27:16 +0000</pubDate>
      <link>https://dev.to/kenielzep97/my-tests-agreed-with-my-code-neither-of-them-checked-reality-124l</link>
      <guid>https://dev.to/kenielzep97/my-tests-agreed-with-my-code-neither-of-them-checked-reality-124l</guid>
      <description>&lt;p&gt;&lt;em&gt;This is the CLAIM-24 result. If you followed that series in June and then watched it go quiet, this is what happened in the eleven weeks since.&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  The timeline, with receipts
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;2026-06-04 → 06-14.&lt;/strong&gt; Nine posts, CLAIM-24 through CLAIM-31, published in eleven days. The last one was &lt;a href="https://dev.to/kenielzep97/the-rule-held-the-boundary-moved-up-ai-memory-judgment-claim-31-verified-carryover-11if"&gt;The Rule Held. The Boundary Moved Up.&lt;/a&gt; on June 14. Then nothing, for eleven weeks.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2026-06-07.&lt;/strong&gt; I opened &lt;a href="https://github.com/tacoda/keystone/issues/4" rel="noopener noreferrer"&gt;&lt;code&gt;tacoda/keystone#4&lt;/code&gt;&lt;/a&gt; asking whether Cell 7 could be tested against a real signing API instead of a mock. That thread is public, it now has forty-one comments, and everything below came out of it.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2026-08-05 12:12Z.&lt;/strong&gt; An independent breaker reproduced a cross-origin credential-forwarding path offline, using a sentinel value and a cross-origin &lt;code&gt;Location&lt;/code&gt;. The sentinel crossed. No live credential ever did. &lt;a href="https://github.com/keniel13-ui/ai-memory-judgment-demo/blob/4eb5a40cd39da54a07c19dc6f6d690280f842681/claim_24/MANDATE_CELL7_CODE_BREAKER_VERDICT_KAEL_2026-08-04.md" rel="noopener noreferrer"&gt;Breaker verdict&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2026-08-05 → 08-06.&lt;/strong&gt; Live baseline captured. Mandate narrowed through the real API. A defect surfaced: my parser required ISO 8601 timestamps, the API returns Unix seconds, and twenty-two passing tests never caught it because my fixtures carried the same assumption I did. &lt;a href="https://github.com/keniel13-ui/ai-memory-judgment-demo/commit/1959a5559f66eb6b2cb7852112012d8f953e33f4" rel="noopener noreferrer"&gt;Repair commit&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2026-08-13.&lt;/strong&gt; &lt;code&gt;POST /mandate&lt;/code&gt; came back with a Cloudflare 1010, &lt;code&gt;browser_signature_banned&lt;/code&gt;. The cycle stopped at issuance. No mandate, no CAPTURE, no PATCH, no EVALUATE.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2026-08-14.&lt;/strong&gt; The default &lt;code&gt;Python-urllib/3.13&lt;/code&gt; user agent emerged as the strongest lead, one of the most commonly flagged signatures in bot detection. A lead, not an established cause.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2026-08-16 17:35Z.&lt;/strong&gt; The provider confirmed in writing that nothing had changed on their side.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2026-08-19.&lt;/strong&gt; The controlled cycle ran once. &lt;code&gt;POST /mandate&lt;/code&gt; returned &lt;strong&gt;201&lt;/strong&gt;. CAPTURE 200, PATCH 200, EVALUATE 200. One attempt per stage, no retry, no redirect follow.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2026-08-20 10:41Z.&lt;/strong&gt; Key revoked by the issuer, on the record.&lt;/p&gt;

&lt;h2&gt;
  
  
  What that does and does not establish
&lt;/h2&gt;

&lt;p&gt;It establishes that the route opened and the full cycle completed against a live external API.&lt;/p&gt;

&lt;p&gt;It does &lt;strong&gt;not&lt;/strong&gt; establish why. Three days sit between the provider's written statement and the run, and nobody controlled that window. The receipt that binds the 201 does not carry the User-Agent, so it cannot testify about its own independent variable. The result is labelled &lt;code&gt;CONTROLLED_EXTERNAL_API_FIXTURE&lt;/code&gt; because the project authored the PATCH, which makes it a fixture rather than independent lifecycle evidence.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Cell 7 is not closed.&lt;/strong&gt; This is the live result the series was waiting on, and it arrives with its ceiling attached rather than as a conclusion.&lt;/p&gt;

&lt;p&gt;The rest of this piece is the part I think is worth more than the 201: what the two defects in my own code actually were, and why my own test suite could not have found either one.&lt;/p&gt;




&lt;p&gt;I had twenty-two passing tests and two separate reviewers on a piece of code. None of it objected. Then I pointed it at a real API owned by somebody else and it broke on the first live read.&lt;/p&gt;

&lt;p&gt;The mismatch fit in one sentence: my parser required ISO 8601, the documented API returned Unix seconds. The &lt;a href="https://github.com/keniel13-ui/ai-memory-judgment-demo/commit/1959a5559f66eb6b2cb7852112012d8f953e33f4" rel="noopener noreferrer"&gt;repair&lt;/a&gt; was not one line. It touched five files, 74 lines of parser and 52 lines of tests. The assumption was small; making it safe was not.&lt;/p&gt;

&lt;p&gt;Here is why nothing caught it, and it is the part worth keeping:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;My tests used ISO because my code used ISO, so they agreed with each other and never checked reality.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The fixtures were written by the person who wrote the parser. They encoded the same assumption. The suite confirmed internal behaviour without ever challenging the ISO assumption, because both halves of it came from one head. Internally consistent is not the same claim as right, and nothing in that suite could tell the difference.&lt;/p&gt;

&lt;p&gt;Two separate reviewers missed it too. I cannot prove why, and I am not going to invent a reason. What I can show is that the parser and every fixture encoded the same ISO assumption, so none of the artifacts in front of anyone supplied the live contract that contradicted it.&lt;/p&gt;

&lt;h2&gt;
  
  
  The second one was worse
&lt;/h2&gt;

&lt;p&gt;Working against a real system made redirect containment matter, so an independent breaker went at it. In Python 3.13 the default redirect handler rebuilds the redirected request from &lt;code&gt;req.headers&lt;/code&gt;, dropping only content length and type. My &lt;code&gt;X-API-Key&lt;/code&gt; sat in that header set, so the redirected request inherited it. Python has &lt;code&gt;Request.add_unredirected_header()&lt;/code&gt; for exactly this, which marks a header as one that will not be added to a redirected request. I was not using it. The &lt;a href="https://github.com/keniel13-ui/ai-memory-judgment-demo/blob/4eb5a40cd39da54a07c19dc6f6d690280f842681/claim_24/MANDATE_CELL7_CODE_BREAKER_VERDICT_KAEL_2026-08-04.md" rel="noopener noreferrer"&gt;breaker reproduced it offline&lt;/a&gt; with a sentinel value and a cross-origin &lt;code&gt;Location&lt;/code&gt;, and the sentinel crossed.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;No live FIPSign credential was ever shown to have crossed an origin.&lt;/strong&gt; The defect was real and unshipped. I did not find it by auditing my own code, and I did not find it myself — the live integration made the question worth asking, and a seat that was not mine answered it.&lt;/p&gt;

&lt;h2&gt;
  
  
  What it takes to actually get that
&lt;/h2&gt;

&lt;p&gt;On 2026-06-07 I opened an issue on &lt;a href="https://github.com/tacoda/keystone" rel="noopener noreferrer"&gt;tacoda/keystone&lt;/a&gt;, an agent charter framework, asking whether a narrow adapter test was possible against a real signing API. &lt;a href="https://fipsign.dev" rel="noopener noreferrer"&gt;FIPSign&lt;/a&gt; (&lt;code&gt;mobydickfinance&lt;/code&gt;) said yes and then did something I did not expect: he handed over disposable API keys, rotated them on request, and stayed in that thread for ten weeks.&lt;/p&gt;

&lt;p&gt;The collaboration produced a block I could not explain. &lt;code&gt;POST /mandate&lt;/code&gt; came back with a Cloudflare 1010, &lt;code&gt;browser_signature_banned&lt;/code&gt;. That stopped the cycle at issuance: no mandate was created, and CAPTURE, PATCH and EVALUATE never ran.&lt;/p&gt;

&lt;p&gt;I could have guessed. He didn't let either of us do that. His reply:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Checked both questions directly, not from assumption.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Then he listed what he actually did. Reviewed the CORS and origin handling in the Worker source and confirmed server-to-server calls authenticated by API key never enter that logic at all. Checked Bot Fight Mode specifically. Compared the public guide field by field against the real request validation in the backend — length limits, scope counts, budget types, expiry bounds, required headers — and confirmed nothing was undocumented. Then ran &lt;code&gt;POST /mandate&lt;/code&gt; himself from PowerShell on a residential Windows connection and got a clean signed mandate back.&lt;/p&gt;

&lt;p&gt;Both of my hypotheses were dead. It was not the CORS or origin policy I suspected, and it was not a missing requirement in the docs.&lt;/p&gt;

&lt;p&gt;What he asked me for next is the part I want other people to steal:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;the exact timestamp · the HTTP client/library + version · whether the request went through any proxy or VPN · what kind of network you are running it from — home connection, cloud VM, CI runner, corporate network&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;With the note that hosting-provider IPs get scored very differently from residential ones, independent of the client library.&lt;/p&gt;

&lt;p&gt;I gave him the client. &lt;code&gt;Python-urllib/3.13&lt;/code&gt;.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;that's the default, unmodified user agent for Python's &lt;code&gt;urllib&lt;/code&gt;, and it's one of the most commonly flagged signatures by automated bot detection precisely because so much low-effort scraping traffic uses it unchanged.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Then, before I spent another key:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;if you set a real user agent on your client, I'd bet that alone resolves it. Worth trying first — cheap to test.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;If you are hitting an endpoint from a script and getting bot-flagged for no visible reason, check what user agent your HTTP library is sending by default.&lt;/strong&gt; You probably never set one. That is a five-second check and it is the most portable thing in this entire post.&lt;/p&gt;

&lt;h2&gt;
  
  
  The part where I refused the result
&lt;/h2&gt;

&lt;p&gt;One seat added the header, an independent seat confirmed it was present in the request &lt;code&gt;urllib&lt;/code&gt; assembled for transport, and I authorized a single controlled cycle that a separately assigned firing seat executed once. &lt;code&gt;POST /mandate&lt;/code&gt; returned &lt;strong&gt;201&lt;/strong&gt;. No 1010. CAPTURE 200, PATCH 200, EVALUATE 200. One attempt per stage, no retry, no redirect follow.&lt;/p&gt;

&lt;p&gt;That is the clean story: header missing, endpoint blocked, header added, endpoint opened.&lt;/p&gt;

&lt;p&gt;I am not going to tell you that.&lt;/p&gt;

&lt;p&gt;FIPSign's operator had confirmed nothing changed on his side — Bot Fight Mode off then and off now, never toggled, a Browser Integrity Check rule drafted during the investigation but never deployed. That statement is dated &lt;strong&gt;2026-08-16 17:35Z&lt;/strong&gt;. The firing seat ran the controlled cycle on &lt;strong&gt;2026-08-19&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Three days sit between a written statement about a provider's configuration and the run that depends on it. He was not being careless and neither was I. But nobody controlled that window, so a success is attributable to the header only as far as that statement reaches. One run, one header, three days later, is not causation. It is a result with an uncontrolled gap in front of it.&lt;/p&gt;

&lt;h2&gt;
  
  
  And then the worse gap, which was mine
&lt;/h2&gt;

&lt;p&gt;That run's issuance receipt contains &lt;strong&gt;no User-Agent field at all.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The entire point of the run was the header. A narrative receipt written afterwards names it. The artifact that binds the 201 does not. The two share a run id, so software can associate them, but the User-Agent assertion sits outside the sealed receipt chain rather than inside it. A reader holding the artifact that binds the 201 still cannot recover which user agent produced it.&lt;/p&gt;

&lt;p&gt;We built the capture afterwards — it records the configured value, the mapping handed to the transport, and what &lt;code&gt;urllib&lt;/code&gt; assembled after &lt;code&gt;add_header&lt;/code&gt;, three witnesses at three different strengths, none of them TLS-level and none of them the edge's view. It exists because the previous run could not testify about its own independent variable, which is not a good reason for a thing to exist.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The route opened. The experiment did not establish why.&lt;/strong&gt; The receipt did not bind the one variable that was supposed to explain the change. That is a worse failure than the block was.&lt;/p&gt;

&lt;p&gt;The result carries &lt;code&gt;CONTROLLED_EXTERNAL_API_FIXTURE&lt;/code&gt; on its face. The project authored the PATCH, so it is not independent lifecycle evidence and I will not present it as any.&lt;/p&gt;

&lt;h2&gt;
  
  
  What the ten weeks were actually worth
&lt;/h2&gt;

&lt;p&gt;Not the 201. The 201 is a fixture with a disclosed ceiling.&lt;/p&gt;

&lt;p&gt;What it was worth was two defects in my own code, found by two different paths, and collapsing them into one lesson would overclaim what the receipts show.&lt;/p&gt;

&lt;p&gt;The timestamp mismatch survived twenty-two green tests and two separate reviewers because the parser and every fixture carried the same wire-format assumption. The live response is what contradicted it.&lt;/p&gt;

&lt;p&gt;The redirect defect was different. It survived a green local suite and was found by an independent breaker attacking the adapter with a sentinel value, before any live credential could cross. &lt;strong&gt;One was reality contradicting my fixture. The other was an adversarial seat asking a question my tests had not asked.&lt;/strong&gt; One of them was a cross-origin credential-forwarding path.&lt;/p&gt;

&lt;p&gt;His closing note put it plainly, and he is right:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;it says something good about testing against a live system instead of only mocks.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;For an external wire contract, a fixture you invented from your own reading of someone else's docs cannot independently validate that reading. My suite could not challenge the ISO assumption because every fixture already carried it.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Reality is a better adversary than your fixtures. It is not a substitute for a receipt.&lt;/strong&gt;&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Thread is public: &lt;a href="https://github.com/tacoda/keystone/issues/4" rel="noopener noreferrer"&gt;&lt;code&gt;tacoda/keystone#4&lt;/code&gt;&lt;/a&gt;, opened 2026-06-07, forty-one comments when audited on 2026-08-30. Every quote above is from it. **The sanitized run receipt for 2026-08-19 is not currently public&lt;/em&gt;* — it is credential-adjacent and has not been through a publication scan, so the User-Agent gap described above is stated on my word rather than something you can open. I would rather say that than imply a receipt you cannot read. The keys used for the Mandate runs described here were disposable, delivered privately, reported spent, and revoked by the issuer.*&lt;/p&gt;

</description>
      <category>testing</category>
      <category>api</category>
      <category>opensource</category>
      <category>architecture</category>
    </item>
    <item>
      <title>Tell Me About You</title>
      <dc:creator>Self-Correcting Systems</dc:creator>
      <pubDate>Sun, 30 Aug 2026 19:05:28 +0000</pubDate>
      <link>https://dev.to/kenielzep97/tell-me-about-you-1hi4</link>
      <guid>https://dev.to/kenielzep97/tell-me-about-you-1hi4</guid>
      <description>&lt;p&gt;After sixty-seven published posts here, the comments have become one of the best parts of the work. Some of you have run my code, found things I missed, challenged a claim, or brought me a project of your own. I also want to distinguish bots from real people.&lt;/p&gt;

&lt;p&gt;I know some of you by the exact problem we were discussing. I still do not know what many of you are building, learning, enjoying, or trying to become outside that thread.&lt;/p&gt;

&lt;p&gt;So this post is different. I am going to introduce myself first, and then I want to hear about you.&lt;/p&gt;

&lt;p&gt;If we have never spoken before, you are welcome here. If we have spoken ten times already, you are welcome to introduce yourself again. Tell me something I do not know yet.&lt;/p&gt;

&lt;h2&gt;
  
  
  Who I am away from the terminal
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Basketball is a real part of my life.&lt;/strong&gt; On September 12 I am one of the official coaches at the Hugo Gonzalez Basketball Camp at Brandeis University in Waltham, Massachusetts. &lt;a href="https://www.nba.com/player/1642864/hugo-gonzalez" rel="noopener noreferrer"&gt;Hugo&lt;/a&gt; plays for the Boston Celtics. The brief the coaches were given is the part I liked: treat every player like they are your own kid, and no phones. That is genuinely one of the cooler things I get to say right now. Basketball was my first love i never played college or anything like that so i don’t wanna give the wrong impression either basketball is just a passion. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;I play PokeMMO, but only for PvP.&lt;/strong&gt; I think of it as modern-day chess. You are not just reacting to the board in front of you. You are playing several turns ahead of someone who is trying to do the same thing to you. You have to hold a model of what they think you are about to do, then decide whether to follow the obvious line or break it.&lt;/p&gt;

&lt;p&gt;That way of thinking is connected to everything else I work on. I expect the world to become much more automated, and I want to build now for the decisions I will need to understand later. I would rather learn how the machine reaches a conclusion than wait for a future where its decisions simply happen to me.&lt;/p&gt;

&lt;p&gt;I did not arrive here through scholarship or credentials. I am someone who genuinely enjoys learning, testing an idea, being wrong, and trying again with better evidence.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I hope to build
&lt;/h2&gt;

&lt;p&gt;The long-term idea is &lt;strong&gt;Self-Correcting Systems&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;The goal is not a machine that never fails. It is a machine that can notice when reality differs from what was expected, examine the anomaly, explain what it can and cannot establish, and help correct course without quietly hiding the failure from the person operating it.&lt;/p&gt;

&lt;p&gt;That asks machines to handle pieces of the critical judgment humans use every day: noticing that something feels wrong, comparing it with prior experience, changing an interpretation, and knowing when confidence is not enough. I know how far away that goal is. I am not claiming to have built it. I am telling you what all of this work is pointed toward.&lt;/p&gt;

&lt;p&gt;The next major system I want to develop is for cybersecurity. I expect the machinery underneath it to become intricate, but the controller has to remain understandable enough to operate almost like a video game. Complexity underneath cannot become confusion at the surface. If I cannot see what my own system observed, what it inferred, what it changed, and what authority it used, then I am no longer operating it. It is operating me.&lt;/p&gt;

&lt;p&gt;One day I want to build a company around this with people who think similarly: ambitious about what machines can become, skeptical of claims that outrun evidence, and serious about keeping humans able to understand and control what they create.&lt;/p&gt;

&lt;h2&gt;
  
  
  How I actually work with AI
&lt;/h2&gt;

&lt;p&gt;I do not work with one assistant that agrees with everything I say. I use multiple AI agents in separate roles, and they are expected to challenge one another and challenge me.&lt;/p&gt;

&lt;p&gt;We try to work under a constraint system called the &lt;strong&gt;Drift Gauntlet&lt;/strong&gt;:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Close the current loop.&lt;/strong&gt; Do not escape into a new lane before the current one produces a real outcome.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Make something touch the world.&lt;/strong&gt; A reply, a test from another machine, a shipped artifact, a yes, or a no teaches more than another private plan.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Require a real edge.&lt;/strong&gt; “The AI will figure it out” is not a mechanism.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Do the work before studying the idea of the work.&lt;/strong&gt; Research cannot become a hiding place from execution.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Record the receipt.&lt;/strong&gt; If the result is not preserved, nobody can learn from it or challenge it later.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Name the grandiosity.&lt;/strong&gt; A huge future goal does not excuse skipping the next checkable step.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The gauntlet is supposed to be blind to rank. My own named failure mode is impulsiveness: moving before I fully understand the practical use of what we are doing. One agent tends to skim and answer the last part of a problem. Another tends to over-produce and build more than the loop requires. We name those failure modes in advance because they rarely feel like mistakes while they are happening. They usually feel like working hard.&lt;/p&gt;

&lt;p&gt;This is not a perfect automated control. We still violate it. While this post was being built, one agent concluded that an unpublished draft was a forgotten article because its sentences barely overlapped with anything already live. Another agent opened the live article and found that the same thesis, commands, hashes, and public request had already been published two weeks earlier. The first agent withdrew the draft.&lt;/p&gt;

&lt;p&gt;That is the workflow at its best: disagreement is welcome, but the live object gets the final word.&lt;/p&gt;

&lt;h2&gt;
  
  
  Now I want to hear about you
&lt;/h2&gt;

&lt;p&gt;Who are you?&lt;/p&gt;

&lt;p&gt;Tell me whatever you are comfortable sharing:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;what you are building, studying, or trying to learn&lt;/li&gt;
&lt;li&gt;a problem you cannot stop thinking about&lt;/li&gt;
&lt;li&gt;a hobby that matters to you&lt;/li&gt;
&lt;li&gt;something you are proud of&lt;/li&gt;
&lt;li&gt;a project link, if you have one&lt;/li&gt;
&lt;li&gt;or simply what brought you to this corner of the internet&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You do not need a project. You do not need a repository. You do not need to be technical. There is no required level of experience, and this invitation is not reserved for people I have never met.&lt;/p&gt;

&lt;p&gt;If you are a real person leaving an honest introduction, I will follow you back. The point is not to trade numbers. I want my feed to contain more people I have actually heard from and fewer accounts that are only numbers on a screen.&lt;/p&gt;

&lt;p&gt;So whether this is our first conversation or our twentieth: &lt;strong&gt;what is one thing you would like me to remember about you?&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>watercooler</category>
      <category>discuss</category>
      <category>community</category>
      <category>ai</category>
    </item>
    <item>
      <title>My Commit Said "Stop Trusting the Receipt." That Is the Commit Where the Trusting Started.</title>
      <dc:creator>Self-Correcting Systems</dc:creator>
      <pubDate>Sun, 30 Aug 2026 07:04:02 +0000</pubDate>
      <link>https://dev.to/kenielzep97/my-commit-said-stop-trusting-the-receipt-that-is-the-commit-where-the-trusting-started-306j</link>
      <guid>https://dev.to/kenielzep97/my-commit-said-stop-trusting-the-receipt-that-is-the-commit-where-the-trusting-started-306j</guid>
      <description>&lt;p&gt;On 2026-08-25 at 21:27 EDT I pushed this to &lt;a href="https://github.com/keniel13-ui/self-correcting-integration-maintainer" rel="noopener noreferrer"&gt;&lt;code&gt;self-correcting-integration-maintainer&lt;/code&gt;&lt;/a&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;fix: repair the four re-review findings; stop trusting the receipt
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The message is accurate. It closed four real findings from an automated review. It is also the commit that added this line:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;recomputed&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;decide&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;receipt&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;checks&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;receipt&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;deciding_fields&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The second argument is the receipt's own claim about which fields it should be judged on. So the validator recomputes its verdict over terms the subject supplied. A receipt carrying failing checks plus &lt;code&gt;deciding_fields: []&lt;/code&gt; recomputes over nothing, finds nothing failing, and validates clean.&lt;/p&gt;

&lt;p&gt;Absence reading as a pass, inside the fix for absence reading as a pass.&lt;/p&gt;

&lt;p&gt;The reviewer flagged it at 21:30:49 EDT. &lt;strong&gt;Three minutes and twenty-five seconds.&lt;/strong&gt; (The finding's &lt;code&gt;original_commit_id&lt;/code&gt; is &lt;code&gt;4a8e6c9&lt;/code&gt;; GitHub now displays it against the later head &lt;a href="https://github.com/keniel13-ui/self-correcting-integration-maintainer/commit/5d053c172320036de9d3b8e687f34322d956a717" rel="noopener noreferrer"&gt;&lt;code&gt;5d053c17&lt;/code&gt;&lt;/a&gt;, which is why the timestamps are worth stating rather than the UI position.)&lt;/p&gt;

&lt;h2&gt;
  
  
  The part that is not a bug story
&lt;/h2&gt;

&lt;p&gt;The commit message is not a lie. It closed four findings. It just names the opposite of what the diff did on one line.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;An audit by commit message passes this. An audit by diff summary passes this.&lt;/strong&gt; A reviewer reading "stop trusting the receipt" has been told the answer and will read the diff looking for confirmation of it. Only following the data catches it.&lt;/p&gt;

&lt;p&gt;That is the condition I did not have a name for before: a repair arrives carrying the credibility of a repair. It closed something real, it was reviewed, and it says so on the tin. That is precisely when nobody looks at it twice.&lt;/p&gt;

&lt;h2&gt;
  
  
  Readers named the class, not the commit
&lt;/h2&gt;

&lt;p&gt;On 2026-08-24 I published &lt;a href="https://dev.to/kenielzep97/the-tests-passed-the-contract-was-wrong-mp0"&gt;a piece&lt;/a&gt; about a contract that permitted the contradiction its tests were passing. Two commenters went past the instance.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://dev.to/pm25coder/comment/3df2g"&gt;pm25coder&lt;/a&gt;, the same day:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Every repair moved authority to something 'better typed,' and the third contract's authority field is itself a derived value one level down."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;He was describing a different project — a grant-expiry contract in a Python file, not this repository. He named a &lt;strong&gt;class&lt;/strong&gt;: authority migrates one level down and the subject ends up supplying the terms it is judged by.&lt;/p&gt;

&lt;p&gt;The chronology is checkable end to end. His comment posted 2026-08-24 at 09:41 EDT. GitHub says this repository was created 2026-08-25 at 19:47:38 EDT. &lt;code&gt;4a8e6c9&lt;/code&gt; landed at 21:27 EDT that same night — one hour and forty minutes after the repository existed, in JavaScript rather than the Python he was reading, with a message claiming the opposite of what it did.&lt;/p&gt;

&lt;p&gt;I want to be exact about the credit, because getting it wrong would be the same defect one more time. &lt;strong&gt;He did not predict this commit.&lt;/strong&gt; He named a failure class, and the class recurred. That is more useful than prophecy and it is a weaker claim than prophecy, and the difference matters.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://dev.to/anp2network/comment/3dfeg"&gt;anp2network&lt;/a&gt; went at the method rather than the instance, and I will come back to that.&lt;/p&gt;

&lt;h2&gt;
  
  
  The same class on 2026-08-29, in prose
&lt;/h2&gt;

&lt;p&gt;On 2026-08-29 a submission document carried a stale count of review comments. The number had shipped wrong twice already. The correction read: &lt;strong&gt;"37 inline review comments across six merged pull requests."&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Arithmetically right when written, and self-invalidating as a complete-set claim. Merging it creates a seventh merged pull request while the sentence still defines the universe as six. The total would have stayed 37 — PR #6 carries zero inline comments under the same endpoint — so the number never goes wrong. &lt;strong&gt;The set does.&lt;/strong&gt; The denominator named every pull request except the one doing the counting.&lt;/p&gt;

&lt;p&gt;Caught before merge by a second seat, not by anyone checking the arithmetic. The wording that shipped names the measured set instead:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Across the six pull requests merged before this correction (&lt;code&gt;#1&lt;/code&gt;, &lt;code&gt;#2&lt;/code&gt;, &lt;code&gt;#3&lt;/code&gt;, &lt;code&gt;#4&lt;/code&gt;, &lt;code&gt;#5&lt;/code&gt;, &lt;code&gt;#7&lt;/code&gt;), Qodo authored 37 inline review comments as of 2026-08-29.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Merged as &lt;a href="https://github.com/keniel13-ui/self-correcting-integration-maintainer/commit/3ee11d1d898c1d05be742e824c7b8d0c7370876e" rel="noopener noreferrer"&gt;&lt;code&gt;3ee11d1&lt;/code&gt;&lt;/a&gt;. Recomputed after the merge: still 37.&lt;/p&gt;

&lt;p&gt;Same shape as the commit above, moved out of code and into a sentence: &lt;strong&gt;an artifact supplied the terms of its own completeness.&lt;/strong&gt; Three attempts had fixed the arithmetic. The number was never the defect — the measurement boundary was.&lt;/p&gt;

&lt;h2&gt;
  
  
  Status of the repair, stated honestly
&lt;/h2&gt;

&lt;p&gt;The current line freezes the terms in the consumer and demotes the receipt's copy to evidence:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;CANONICAL_DECIDING_FIELDS&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;Object&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;freeze&lt;/span&gt;&lt;span class="p"&gt;([&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;node&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;trueforge&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;sdk&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]);&lt;/span&gt;
&lt;span class="p"&gt;...&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;recomputed&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;decide&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;receipt&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;checks&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;CANONICAL_DECIDING_FIELDS&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://github.com/keniel13-ui/self-correcting-integration-maintainer/blob/4a8e6c97ca3eca83710ac01ac403d15867fe0eb0/scripts/prerequisites.mjs#L103" rel="noopener noreferrer"&gt;Defect&lt;/a&gt; · &lt;a href="https://github.com/keniel13-ui/self-correcting-integration-maintainer/blob/2550a632c3dc118122664db9d953d5689014a999/scripts/prerequisites.mjs#L129" rel="noopener noreferrer"&gt;current&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;The reviewer did come back to it. &lt;a href="https://github.com/keniel13-ui/self-correcting-integration-maintainer/commit/b5be3b7d9ad1940c0c2bdfdbc4b469b029624922" rel="noopener noreferrer"&gt;&lt;code&gt;b5be3b7&lt;/code&gt;&lt;/a&gt; is the repair — it adds the constant and swaps the argument — committed 2026-08-26 at 19:23:36 EDT, with Qodo's review updated to that exact commit at 19:26:04 EDT. &lt;strong&gt;A re-review at the repair head, and I am not going to omit it because it cuts against the shape of the story.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Qodo's review moved again ten minutes later to &lt;a href="https://github.com/keniel13-ui/self-correcting-integration-maintainer/commit/121a24ffcf5012208c77cc5a54143fea3f1113b0" rel="noopener noreferrer"&gt;&lt;code&gt;121a24f&lt;/code&gt;&lt;/a&gt;. That one is a different fix — counting providers instead of trusting that a response arrived — and it does not touch this file at all. It carries the repair only because it comes after it. Worth separating, because "the reviewer cleared it twice" would be a nicer sentence than the true one.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;I still do not call it fixed.&lt;/strong&gt; The patch is maker-authored, and no separately assigned breaker seat has adjudicated it. On this project a maker's own PASS does not count no matter who else looked, and the last two times I felt confident about a repair are the two stories above.&lt;/p&gt;

&lt;p&gt;One thing I did check, because a reviewer of this draft predicted a second hole in the same class: if a receipt simply &lt;em&gt;omits&lt;/em&gt; a canonical key from &lt;code&gt;checks&lt;/code&gt;, does absence read as a pass again? It does not. &lt;code&gt;decide()&lt;/code&gt; filters on &lt;code&gt;checks[field]?.observed !== true&lt;/code&gt;, so a missing key lands in &lt;code&gt;blocked_by&lt;/code&gt; and the receipt is rejected. Omitting &lt;code&gt;sdk&lt;/code&gt; yields &lt;code&gt;LOCAL_PREREQS_BLOCKED ["sdk"]&lt;/code&gt;; &lt;code&gt;checks: {}&lt;/code&gt; blocks on all three. The predicted hole assumed an implementation that reads &lt;code&gt;status === 'FAIL'&lt;/code&gt;, which is not what is there. I mention it because the prediction was reasonable and running it was faster than arguing about it.&lt;/p&gt;

&lt;h2&gt;
  
  
  One check you can run
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://dev.to/debashish_ghosal"&gt;Debashish Ghosal&lt;/a&gt; &lt;a href="https://dev.to/kenielzep97/comment/3def2"&gt;proposed this&lt;/a&gt; in the comments on the last piece:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Throw random strings into &lt;code&gt;event.notes&lt;/code&gt; during test runs. If altering a human note flips a programmatic verdict, fail the build immediately."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;One note on scope before the code: this harness targets the &lt;strong&gt;Python&lt;/strong&gt; classifier from the previous article — &lt;a href="https://github.com/keniel13-ui/ai-memory-judgment-demo/blob/main/claim_24/mandate_cell7.py" rel="noopener noreferrer"&gt;&lt;code&gt;claim_24/mandate_cell7.py&lt;/code&gt;&lt;/a&gt; in a different repository. It does not test the JavaScript validator above. Two codebases, one failure class.&lt;/p&gt;

&lt;p&gt;Complete file. Python 3, no dependencies, run it as-is:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;random&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;string&lt;/span&gt;

&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;fuzz_note_independence&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;classify&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;row&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;note_field&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;notes&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;n&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;200&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;seed&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="sh"&gt;"""&lt;/span&gt;&lt;span class="s"&gt;Perturb only the prose. If the verdict moves, the prose is load-bearing.&lt;/span&gt;&lt;span class="sh"&gt;"""&lt;/span&gt;
    &lt;span class="n"&gt;baseline&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;classify&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;dict&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;row&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
    &lt;span class="n"&gt;rnd&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;random&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;Random&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;seed&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;_&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="nf"&gt;range&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;n&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
        &lt;span class="n"&gt;r&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;dict&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;row&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="n"&gt;r&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;note_field&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;""&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;join&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;rnd&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;choice&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;string&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;printable&lt;/span&gt;&lt;span class="p"&gt;[:&lt;/span&gt;&lt;span class="mi"&gt;95&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;
                                &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;_&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="nf"&gt;range&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;rnd&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;randint&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;80&lt;/span&gt;&lt;span class="p"&gt;)))&lt;/span&gt;
        &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="nf"&gt;classify&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;r&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;!=&lt;/span&gt; &lt;span class="n"&gt;baseline&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
            &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="bp"&gt;False&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;r&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;note_field&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="nf"&gt;classify&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;r&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="n"&gt;baseline&lt;/span&gt;
    &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;probe&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;""&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;TTL EXPIRED&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;ttl expired&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;not ttl expired&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
                  &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;resolved: ttl expired last week&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="bp"&gt;None&lt;/span&gt;&lt;span class="p"&gt;]:&lt;/span&gt;
        &lt;span class="n"&gt;r&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;dict&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;row&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="n"&gt;r&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;note_field&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;probe&lt;/span&gt;
        &lt;span class="k"&gt;try&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
            &lt;span class="n"&gt;got&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;classify&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;r&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="k"&gt;except&lt;/span&gt; &lt;span class="nb"&gt;Exception&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;e&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
            &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="bp"&gt;False&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;probe&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;raised &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nf"&gt;type&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;e&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="n"&gt;__name__&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;baseline&lt;/span&gt;
        &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;got&lt;/span&gt; &lt;span class="o"&gt;!=&lt;/span&gt; &lt;span class="n"&gt;baseline&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
            &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="bp"&gt;False&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;probe&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;got&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;baseline&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="bp"&gt;True&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="bp"&gt;None&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="bp"&gt;None&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;baseline&lt;/span&gt;


&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;classify_defective&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;ev&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;                  &lt;span class="c1"&gt;# control flow reads the prose
&lt;/span&gt;    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;ttl expired&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;ev&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;notes&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="ow"&gt;or&lt;/span&gt; &lt;span class="sh"&gt;""&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;lower&lt;/span&gt;&lt;span class="p"&gt;():&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;SKIPPED_TTL_EXPIRED&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;CONSULTED&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;

&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;classify_note_independent&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;ev&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;           &lt;span class="c1"&gt;# control flow reads a typed field
&lt;/span&gt;    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;ev&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;reason_code&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;TTL_EXPIRED&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;SKIPPED_TTL_EXPIRED&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;CONSULTED&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;

&lt;span class="n"&gt;row&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;reason_code&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;TTL_EXPIRED&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;ttl_remaining_hours&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mf"&gt;0.0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
       &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;notes&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;grant ttl expired during consult&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;fn&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;defective&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;classify_defective&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
                 &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;note-independent&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;classify_note_independent&lt;/span&gt;&lt;span class="p"&gt;)):&lt;/span&gt;
    &lt;span class="n"&gt;ok&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;note&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;got&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;base&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;fuzz_note_independence&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;fn&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;row&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="si"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;18&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt; &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;PASS&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;ok&lt;/span&gt; &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;FAIL&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt;  baseline=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;base&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
          &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;""&lt;/span&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;ok&lt;/span&gt; &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;  note=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;note&lt;/span&gt;&lt;span class="si"&gt;!r}&lt;/span&gt;&lt;span class="s"&gt; -&amp;gt; &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;got&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;

&lt;span class="c1"&gt;# The independence harness above cannot catch negation, because on this row
# "not ttl expired" still contains "ttl expired" and returns the same verdict
# as the baseline. Negation needs a row whose typed reason is NOT expired:
&lt;/span&gt;&lt;span class="n"&gt;negated&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;reason_code&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;CONSULTED&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;notes&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;not ttl expired&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;negation           defective -&amp;gt;&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nf"&gt;classify_defective&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;negated&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
      &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;| note-independent -&amp;gt;&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nf"&gt;classify_note_independent&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;negated&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;defective          FAIL  baseline=SKIPPED_TTL_EXPIRED  note='R5x$!PCZJ-r#hAhc&amp;lt;w...' -&amp;gt; CONSULTED
note-independent   PASS  baseline=SKIPPED_TTL_EXPIRED
negation           defective -&amp;gt; SKIPPED_TTL_EXPIRED | note-independent -&amp;gt; CONSULTED
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Two things worth being precise about, because I got both wrong in a draft of this.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The negation probe inside the harness catches nothing.&lt;/strong&gt; &lt;code&gt;"not ttl expired"&lt;/code&gt; still contains &lt;code&gt;"ttl expired"&lt;/code&gt;, and the baseline row already classifies as expired, so the verdict does not move and the harness reports no change. Negation needs the separate row at the bottom, where the authoritative field says &lt;code&gt;CONSULTED&lt;/code&gt; and the grep says otherwise. That is the line that shows the defect.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;And this establishes note independence only.&lt;/strong&gt; It does not establish that the typed field is right. A typed field can lie as cleanly as a sentence — a grant expired by one second stored as &lt;code&gt;-0.0&lt;/code&gt;, and &lt;code&gt;-0.0 &amp;gt;= 0&lt;/code&gt; is &lt;code&gt;True&lt;/code&gt; in Python. Which is how the last piece started.&lt;/p&gt;

&lt;h2&gt;
  
  
  What is still open
&lt;/h2&gt;

&lt;p&gt;anp2network's objection is the one I have not answered:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Every field on that row has the same author... Each one worked by making two fields disagree. That method cannot see the row where nothing disagrees and the answer is still wrong."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Every check above works by making two views disagree. A commit message contradicts its diff. A candidate complete-set count contradicts the repository state it would have created if merged. A verdict contradicts its own inputs.&lt;/p&gt;

&lt;p&gt;That method is blind to the case where nothing contradicts anything. If a timestamp is stamped when a gate &lt;em&gt;consumes&lt;/em&gt; a grant rather than when the issuer &lt;em&gt;issues&lt;/em&gt; it, every field agrees, every recomputation is clean, every contract passes, and the verdict is wrong — because the error arrived before the first field was written.&lt;/p&gt;

&lt;p&gt;My read of their proposed direction is that independence is a property of who could have been &lt;strong&gt;compelled&lt;/strong&gt;: you are not looking for a willing second witness, you are looking for bytes some other party already wrote, for their own reasons, that a claim can be bound to.&lt;/p&gt;

&lt;p&gt;I have not built that.&lt;/p&gt;







&lt;p&gt;&lt;strong&gt;Check any of it yourself.&lt;/strong&gt; Every timestamp in this piece comes from a public endpoint that needs no account:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Commit times — &lt;code&gt;git show -s --format=%cI &amp;lt;sha&amp;gt;&lt;/code&gt; after cloning &lt;a href="https://github.com/keniel13-ui/self-correcting-integration-maintainer" rel="noopener noreferrer"&gt;the repo&lt;/a&gt;, or the commit pages linked above&lt;/li&gt;
&lt;li&gt;Review timing — &lt;code&gt;GET /repos/keniel13-ui/self-correcting-integration-maintainer/pulls/1/comments&lt;/code&gt; and &lt;code&gt;/reviews&lt;/code&gt;; the finding on the defect carries &lt;code&gt;original_commit_id: 4a8e6c9…&lt;/code&gt; and &lt;code&gt;created_at: 2026-08-26T01:30:49Z&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Comment times — &lt;code&gt;GET https://dev.to/api/comments/3df2g&lt;/code&gt; returns &lt;code&gt;created_at: 2026-08-24T13:41:44Z&lt;/code&gt;; &lt;code&gt;3dfeg&lt;/code&gt; and &lt;code&gt;3def2&lt;/code&gt; the same way. The DEV page shows only the date, so the API is where the hour lives&lt;/li&gt;
&lt;li&gt;Repository creation — &lt;code&gt;GET https://api.github.com/repos/keniel13-ui/self-correcting-integration-maintainer&lt;/code&gt; returns &lt;code&gt;created_at: 2026-08-25T23:47:38Z&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;em&gt;All times converted to EDT (UTC−4). Verified 2026-08-30.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>testing</category>
      <category>architecture</category>
      <category>codereview</category>
      <category>devops</category>
    </item>
    <item>
      <title>Git Said It Succeeded. The State Said Otherwise.</title>
      <dc:creator>Self-Correcting Systems</dc:creator>
      <pubDate>Sun, 30 Aug 2026 01:44:59 +0000</pubDate>
      <link>https://dev.to/kenielzep97/git-said-it-succeeded-the-state-said-otherwise-34ka</link>
      <guid>https://dev.to/kenielzep97/git-said-it-succeeded-the-state-said-otherwise-34ka</guid>
      <description>&lt;p&gt;I keep finding git behaviours the same way: set up the case, run the command, then check the state I actually cared about instead of trusting the success message. Guides pair &lt;code&gt;rerere.enabled&lt;/code&gt; with &lt;code&gt;rerere.autoupdate&lt;/code&gt; when the second one removes the checkpoint the first one earns you. GitHub reports mergeable while the reviewer is still reading stale bytes. &lt;code&gt;--autosquash&lt;/code&gt; prints &lt;code&gt;Successfully rebased and updated&lt;/code&gt; and leaves a &lt;code&gt;fixup!&lt;/code&gt; commit sitting in history.&lt;/p&gt;

&lt;p&gt;Copy the config. The reasoning is why you would leave one of them off.&lt;/p&gt;

&lt;p&gt;This started as a comment on &lt;a href="https://dev.to/sylwia-lask/10-git-commands-youll-wish-you-knew-earlier-4fcp"&gt;Sylwia Laskowska's git list&lt;/a&gt;. She asked me to turn it into a post. The first four items are from ordinary rebasing. The rest I measured this week on a stacked-PR repo.&lt;/p&gt;




&lt;h2&gt;
  
  
  1. &lt;code&gt;rerere&lt;/code&gt; does not learn from &lt;code&gt;git add&lt;/code&gt; alone
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git config rerere.enabled &lt;span class="nb"&gt;true&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;code&gt;rerere&lt;/code&gt; is reuse recorded resolution. It remembers how you resolved a conflict and replays it when the same one appears. On a long rebase that is resolving something once instead of five times.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;CONFLICT (content): Merge conflict in f.txt
Staged 'f.txt' using previous resolution.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Resolve, &lt;code&gt;git add&lt;/code&gt;, then abort immediately, and it recorded nothing.&lt;/strong&gt; The next attempt conflicts identically. That bit me twice before I understood it.&lt;/p&gt;

&lt;p&gt;Two things are going on and my test could not separate them, so here are both. &lt;code&gt;git add&lt;/code&gt; does not record the postimage — &lt;code&gt;git commit&lt;/code&gt;, &lt;code&gt;git rebase --continue&lt;/code&gt;, or an explicit &lt;code&gt;git rerere&lt;/code&gt; do. And &lt;code&gt;git rebase --abort&lt;/code&gt; runs &lt;code&gt;rerere clear&lt;/code&gt;, which wipes the in-flight metadata anyway.&lt;/p&gt;

&lt;p&gt;What I could measure, on git 2.39.5: resolve + &lt;code&gt;git add&lt;/code&gt; + abort, and the next attempt conflicts identically. Resolve + &lt;code&gt;git add&lt;/code&gt; + explicit &lt;code&gt;git rerere&lt;/code&gt; + abort, and it replays — &lt;strong&gt;before the rebase goes anywhere.&lt;/strong&gt; So "it learns when the rebase finishes" is the wrong model either way.&lt;/p&gt;

&lt;h2&gt;
  
  
  2. It matches on the normalized conflict hunk, not the pathname
&lt;/h2&gt;

&lt;p&gt;I taught it a resolution in &lt;code&gt;one.txt&lt;/code&gt;. Then I created the same conflicting hunk in a completely different file, &lt;code&gt;two.txt&lt;/code&gt;, on a different branch. &lt;strong&gt;It replayed the &lt;code&gt;one.txt&lt;/code&gt; answer into &lt;code&gt;two.txt&lt;/code&gt;.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;On a rebase that is usually what you want. It is not always what you want. If the right answer differs between those two places, it will quietly give you the first one.&lt;/p&gt;

&lt;h2&gt;
  
  
  3. Which is why I would not turn on &lt;code&gt;rerere.autoupdate&lt;/code&gt;
&lt;/h2&gt;

&lt;p&gt;I kept seeing them paired. I checked the index in both modes:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;autoupdate off  -&amp;gt;  UU two.txt    still conflicted, you must read it and git add
autoupdate on   -&amp;gt;  M  two.txt    fully staged, nothing asks you to look
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Autoupdate off is the checkpoint that catches a replay you did not want.&lt;/strong&gt; Leave it off and &lt;code&gt;rerere&lt;/code&gt; still writes the resolution into the file. You just have to look at it before adding.&lt;/p&gt;

&lt;p&gt;If it got it wrong:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git rerere forget &amp;lt;path&amp;gt;   &lt;span class="c"&gt;# drop what it learned&lt;/span&gt;
git checkout &lt;span class="nt"&gt;-m&lt;/span&gt; &amp;lt;path&amp;gt;     &lt;span class="c"&gt;# bring the conflict markers back&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  4. &lt;code&gt;--autosquash&lt;/code&gt; can succeed and still leave the fixup in history
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git commit &lt;span class="nt"&gt;--fixup&lt;/span&gt; abc1234
git rebase &lt;span class="nt"&gt;-i&lt;/span&gt; &lt;span class="nt"&gt;--autosquash&lt;/span&gt; abc1234~1
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;First marks it. Second reorders and squashes it. The todo list opens already correct.&lt;/p&gt;

&lt;p&gt;Three sharp edges. &lt;strong&gt;The third one was found by a reader after this published, and it breaks the check I originally recommended here.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Bare &lt;code&gt;git rebase -i --autosquash&lt;/code&gt; with no range &lt;strong&gt;fails outright&lt;/strong&gt; on a branch with no upstream, so you need the base.&lt;/p&gt;

&lt;p&gt;If the range does not reach far enough back to include the target, &lt;strong&gt;it does not warn you.&lt;/strong&gt; It prints &lt;code&gt;Successfully rebased and updated&lt;/code&gt; and leaves the &lt;code&gt;fixup!&lt;/code&gt; commit sitting in your history.&lt;/p&gt;

&lt;p&gt;And &lt;strong&gt;autosquash can squash into the wrong commit while leaving nothing behind to grep for.&lt;/strong&gt; From &lt;code&gt;git-rebase(1)&lt;/code&gt;:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;A commit matches the &lt;code&gt;...&lt;/code&gt; if the commit subject matches, or if the &lt;code&gt;...&lt;/code&gt; refers to the commit's hash. &lt;strong&gt;As a fall-back, partial matches of the commit subject work, too.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;So when two commits in the range share a subject prefix, it picks one — the older — and never says so. &lt;a href="https://dev.to/vinhnguyenthanhdn/comment/3dn85"&gt;vinhnguyenthanhdn&lt;/a&gt; found this on git 2.50.1; I reproduced it on 2.39.5.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Naming the target explicitly does not save you&lt;/strong&gt;, because &lt;code&gt;git-commit(1)&lt;/code&gt; says &lt;code&gt;--fixup=&amp;lt;commit&amp;gt;&lt;/code&gt; builds &lt;em&gt;"a subject composed of &lt;code&gt;fixup!&lt;/code&gt; followed by the subject line from &lt;code&gt;&amp;lt;commit&amp;gt;&lt;/code&gt;"&lt;/em&gt; — the hash is used at commit time and never written into the message. Two commits subjected &lt;code&gt;fix tests&lt;/code&gt;, &lt;code&gt;git commit --fixup &amp;lt;newer-sha&amp;gt;&lt;/code&gt;, and the change landed in the older one.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;In every one of those runs &lt;code&gt;git log --oneline | grep fixup!&lt;/code&gt; returned zero.&lt;/strong&gt; Clean history, no leftover, change in the wrong commit. That check cannot see this, and I should not have offered it as the check.&lt;/p&gt;

&lt;p&gt;Read the plan instead, before anything is rewritten:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;GIT_SEQUENCE_EDITOR&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s1"&gt;'cat "$1"; false'&lt;/span&gt; git rebase &lt;span class="nt"&gt;-i&lt;/span&gt; &lt;span class="nt"&gt;--autosquash&lt;/span&gt; &amp;lt;base&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;pick   91a85a7 fix tests
fixup  c0f8e9b fixup! fix tests
pick   d467ebf fix tests        &amp;lt;- the commit I actually named
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Exit 1, every hash intact, and you can see the fixup sitting under the wrong commit before a single object is written.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Do not drop the &lt;code&gt;; false&lt;/code&gt;.&lt;/strong&gt; &lt;code&gt;GIT_SEQUENCE_EDITOR=cat&lt;/code&gt; exits 0, git reads that as "the todo is approved," and your preview rewrites history. The two forms differ by one word. And the safe one prints &lt;code&gt;error: There was a problem with the editor&lt;/code&gt; — that error &lt;em&gt;is&lt;/em&gt; the abort, not a failure.&lt;/p&gt;

&lt;p&gt;If you want prevention rather than inspection, put the hash in the message yourself. &lt;code&gt;fixup! &amp;lt;sha&amp;gt;&lt;/code&gt; matches on the hash and is immune to subject collisions:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git commit &lt;span class="nt"&gt;-m&lt;/span&gt; &lt;span class="s2"&gt;"fixup! &lt;/span&gt;&lt;span class="si"&gt;$(&lt;/span&gt;git rev-parse &amp;lt;target&amp;gt;&lt;span class="si"&gt;)&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;The rebase step rewrites history&lt;/strong&gt; — &lt;code&gt;git commit --fixup&lt;/code&gt; just adds a commit — so the usual rule about rebasing shared commits applies to the second line, not the first.&lt;/p&gt;




&lt;h2&gt;
  
  
  5. Retargeting a pull request changes what it compares against. It does not update the head branch.
&lt;/h2&gt;

&lt;p&gt;This one I did not set up on purpose. I had a stack: &lt;code&gt;main ← #3 ← #4 ← #2&lt;/code&gt;. After #3 and #4 merged, I retargeted #2 onto &lt;code&gt;main&lt;/code&gt;. GitHub immediately showed &lt;code&gt;base: main&lt;/code&gt;, mergeable, clean.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The new base commit was still not an ancestor of my head.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;I measured it. Head &lt;code&gt;b1cf109&lt;/code&gt; versus &lt;code&gt;main&lt;/code&gt; at &lt;code&gt;e6dc136&lt;/code&gt;: GitHub compare status &lt;code&gt;diverged&lt;/code&gt;, &lt;strong&gt;behind by 8&lt;/strong&gt;. After &lt;code&gt;git merge origin/main&lt;/code&gt; (commit &lt;code&gt;b4ac271&lt;/code&gt;): &lt;strong&gt;behind by 0&lt;/strong&gt;.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git fetch origin main
git merge-base &lt;span class="nt"&gt;--is-ancestor&lt;/span&gt; origin/main HEAD &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"head contains main"&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt; &lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"STALE — merge first"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Exit 1 is the stale case. GitHub's "Change base" button is not "Update branch." Change base retargets what the PR is compared against. Update branch, or &lt;code&gt;git merge origin/main&lt;/code&gt;, is what actually brings the commits in.&lt;/p&gt;

&lt;p&gt;Those SHAs are from a private stack, so this one is a field note rather than something you can clone and rerun. The check itself is two lines and works anywhere.&lt;/p&gt;

&lt;p&gt;That head was what the automated reviewer had to work from. It carried an old implementation I had already replaced on &lt;code&gt;main&lt;/code&gt;, and I burned a cycle chasing a finding about code that only still existed on that stale branch — before I thought to check whether the branch contained what I thought it contained.&lt;/p&gt;

&lt;p&gt;The fix is one merge, then the ancestor check. &lt;strong&gt;&lt;code&gt;MERGEABLE&lt;/code&gt; does not mean "this head contains current main."&lt;/strong&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  6. Pin evidence links to a commit, not to &lt;code&gt;main&lt;/code&gt;
&lt;/h2&gt;

&lt;p&gt;A link to &lt;code&gt;/blob/main/path/file&lt;/code&gt; shows whatever &lt;code&gt;main&lt;/code&gt; says today, and 404s outright if the path later moves. A link to &lt;code&gt;/blob/&amp;lt;sha&amp;gt;/path/file&lt;/code&gt; is immutable. Both may return 200 right now. Only one of them still means the same thing next month.&lt;/p&gt;

&lt;p&gt;I hit this the same week. &lt;code&gt;main&lt;/code&gt; still carried an old write-up while the corrected file only existed on a branch. I published the SHA-pinned URL so a reader could open the bytes I was citing, not whatever landed on default later.&lt;/p&gt;

&lt;p&gt;If you are citing evidence, cite the sha.&lt;/p&gt;




&lt;h2&gt;
  
  
  7. &lt;code&gt;git worktree&lt;/code&gt; instead of stashing, if you have untracked files you cannot lose
&lt;/h2&gt;

&lt;p&gt;Stash does not save untracked files unless you remember &lt;code&gt;-u&lt;/code&gt;. I had an untracked scratch file I needed to keep through a week of branch hops. Worktrees solved it without the dance: each branch in its own directory, one object store, untracked files stay put.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git worktree add &lt;span class="nt"&gt;-b&lt;/span&gt; some/branch /tmp/scratch origin/main
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;When you are done: &lt;code&gt;git worktree remove&lt;/code&gt;. If you have ever needed to fix one branch while another is mid-edit, this is the command.&lt;/p&gt;

&lt;p&gt;Same disease as the rest of the list, incidentally. &lt;code&gt;git stash&lt;/code&gt; reports success and your untracked file is simply not in it.&lt;/p&gt;




&lt;h2&gt;
  
  
  The method
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;--autosquash&lt;/code&gt; prints success while leaving a &lt;code&gt;fixup!&lt;/code&gt; behind. A retargeted PR reports &lt;code&gt;MERGEABLE&lt;/code&gt; while its head is eight commits behind the branch it now claims as base. &lt;code&gt;rerere.autoupdate&lt;/code&gt; stages the replay cleanly and removes the unmerged path you would otherwise have been forced to look at.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;In each case the message was true and the state was not what I assumed.&lt;/strong&gt; And each one needed a different thing checked: the rebase plan before it ran, ancestry for the stale head, the index for &lt;code&gt;UU&lt;/code&gt; versus &lt;code&gt;M&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Which is the actual lesson, and it is not "check the index":&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;A success message tells you the command completed according to its own contract. It does not tell you the repository now satisfies the condition you actually cared about.&lt;/strong&gt; Those are different sentences. Go check the one you cared about.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Updated 2026-08-30: item 4 corrected. The &lt;code&gt;grep fixup!&lt;/code&gt; check this originally recommended is a false negative when two commits in the range share a subject prefix — it returns clean while the change sits in the wrong commit. Found by a reader in the comments; the plan-preview replaces it.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Measured on git 2.39.5 locally; the GitHub compare behaviour is as of this week. Items 1–4 are reproducible on any repo in about two minutes. Item 5 is a field note from a private stack.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;This post exists because &lt;a href="https://dev.to/sylwia-lask"&gt;Sylwia Laskowska&lt;/a&gt; wrote a git list good enough that I went and tested the rebase section against it, and then told me the comment should be its own post. She was right, and I would not have written it otherwise. Go read &lt;a href="https://dev.to/sylwia-lask/10-git-commands-youll-wish-you-knew-earlier-4fcp"&gt;hers&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>git</category>
      <category>testing</category>
      <category>devops</category>
      <category>productivity</category>
    </item>
    <item>
      <title>I Built an Agent That Marked Its Own Finding as Already Known</title>
      <dc:creator>Self-Correcting Systems</dc:creator>
      <pubDate>Sat, 29 Aug 2026 23:42:33 +0000</pubDate>
      <link>https://dev.to/kenielzep97/a-finding-is-not-a-discovery-gib</link>
      <guid>https://dev.to/kenielzep97/a-finding-is-not-a-discovery-gib</guid>
      <description>&lt;p&gt;&lt;em&gt;This is the first contest I have entered. I built the honesty controls before I built the agent, which is probably backwards for a hackathon and exactly what I wanted to learn from. Everywhere this piece names a limit, the limit is measured rather than modest, and I would rather you find the seams from me than from a clone.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;I gave an agent two files it had never seen. I did not tell it what was wrong. The harness refuses to build the prompt if the words &lt;em&gt;bug&lt;/em&gt;, &lt;em&gt;defect&lt;/em&gt; or &lt;em&gt;vulnerability&lt;/em&gt; appear in its framing.&lt;/p&gt;

&lt;p&gt;It returned a concrete claim tied to exact bytes. It wrote a bounded repair. And it declined to call the claim new.&lt;/p&gt;

&lt;p&gt;Then I checked the semantics against the class it cited, and got the result this whole harness was built to be able to get.&lt;/p&gt;




&lt;h2&gt;
  
  
  What it returned
&lt;/h2&gt;

&lt;p&gt;Literal, from the run:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"path"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"forms.mjs"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"condition"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"absence reads as a pass"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"exact_bytes"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"const accepted = names.filter(allowForm);&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s2"&gt;if (accepted.length === 0) {&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s2"&gt;  process.exit(2);&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s2"&gt;}&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s2"&gt;process.stdout.write(`${JSON.stringify({ accepted })}&lt;/span&gt;&lt;span class="se"&gt;\\&lt;/span&gt;&lt;span class="s2"&gt;n`);"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"novelty"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"CONFIRMS_KNOWN"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"known_condition_id"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"K1"&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;These five fields are verbatim. The full finding object has ten fields and lives in a public receipt you can open right now, along with the raw model output, its SHA-256, both TrueForge session ids, the relay events and the sandbox response:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://github.com/keniel13-ui/self-correcting-integration-maintainer/blob/ccfccded0fbf25ed951bea38320f59047b939b49/docs/freezes/RUN_004_RECEIPT.json" rel="noopener noreferrer"&gt;&lt;code&gt;docs/freezes/RUN_004_RECEIPT.json&lt;/code&gt;&lt;/a&gt;&lt;/strong&gt; — SHA-256 &lt;code&gt;162eb2647e86ce62f1733c4864a6f520f8def7856e5ce68dbe8f80e20267bef5&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;It is a &lt;strong&gt;failed-run&lt;/strong&gt; receipt and labels itself one. Run 004 threw before an artifact was written, so a successful-run bundle does not exist and is not shown.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;CONFIRMS_KNOWN&lt;/code&gt; means: &lt;em&gt;I found something, and it is not new. It matches a class you already wrote down.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;That is the behaviour I wanted. An agent that finds something has every incentive to present it as a discovery, and this one did the opposite.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;And the class match is wrong.&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Where structural validity stops
&lt;/h2&gt;

&lt;p&gt;Here is K1, frozen and hashed before the run:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;A verdict computed over an empty collection returns &lt;strong&gt;success&lt;/strong&gt;. An empty array is treated as "nothing wrong" rather than "nothing checked."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Here is what &lt;code&gt;forms.mjs&lt;/code&gt; does when the collection is empty:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;accepted&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;length&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nx"&gt;process&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;exit&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Empty exits &lt;strong&gt;2&lt;/strong&gt;. That is a hard failure. It is the inverse of K1.&lt;/p&gt;

&lt;p&gt;And the agent knew. From its own &lt;code&gt;why_it_matters&lt;/code&gt;, same finding:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"&lt;strong&gt;The empty-array case is treated as a hard failure&lt;/strong&gt;, but the success case lacks corresponding validation..."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;It described the inversion in prose and filed the finding under K1 anyway.&lt;/p&gt;

&lt;p&gt;And the consequence it argued does not hold either. It wrote that a caller "cannot distinguish between 'all files were rejected' and 'some files were accepted' from the exit code alone." It can. Exit &lt;code&gt;2&lt;/code&gt; is the empty case; exit &lt;code&gt;0&lt;/code&gt; with JSON on stdout is the non-empty one. That is precisely the distinction the code makes.&lt;/p&gt;

&lt;p&gt;So there are two separate failures stacked here, and only one of them is the one I set out to catch. The bytes it quoted are real and exact. The patch it proposed is bounded. The novelty citation is structurally valid. &lt;strong&gt;None of that made the interpretation true.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The validator admitted it, correctly.&lt;/strong&gt; It was never scoped to check that, and this is the case that shows exactly where its scope ends.&lt;/p&gt;

&lt;h2&gt;
  
  
  What the contract actually enforces
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;raw&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;novelty&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;NEW&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;known&lt;/span&gt; &lt;span class="o"&gt;!==&lt;/span&gt; &lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;throw&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;TypeError&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;NEW finding must not cite a known condition&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;typeof&lt;/span&gt; &lt;span class="nx"&gt;known&lt;/span&gt; &lt;span class="o"&gt;!==&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;string&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt; &lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="nx"&gt;knownIds&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;has&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;known&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;throw&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;TypeError&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;known finding must cite a frozen condition&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;A &lt;code&gt;NEW&lt;/code&gt; claim may not cite a frozen class. A &lt;code&gt;CONFIRMS_KNOWN&lt;/code&gt; or &lt;code&gt;CHANGES_KNOWN&lt;/code&gt; claim must cite one that exists in the file hashed before the run.&lt;/p&gt;

&lt;p&gt;So this is unproducible: &lt;em&gt;"a brand new discovery, category K1."&lt;/em&gt; The novelty label and its reference cannot contradict &lt;strong&gt;structurally&lt;/strong&gt; — &lt;code&gt;NEW&lt;/code&gt; requires &lt;code&gt;null&lt;/code&gt;, and a known-class claim must name an id present in the frozen prior.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;This is producible:&lt;/strong&gt; a condition filed under a class it does not fit, cited coherently. Which is exactly what happened.&lt;/p&gt;

&lt;p&gt;I tested the other direction too, deliberately. I took the K1 condition, labelled it &lt;code&gt;NEW&lt;/code&gt;, set &lt;code&gt;known_condition_id&lt;/code&gt; to &lt;code&gt;null&lt;/code&gt;, and ran it through. &lt;strong&gt;Accepted.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The model self-reports the novelty label. The validator checks whether that label is structurally consistent with its reference. Neither adjudicates the class match.&lt;/p&gt;

&lt;p&gt;The runner is written so that &lt;em&gt;if&lt;/em&gt; it produces an artifact, &lt;code&gt;classification_correct&lt;/code&gt; is hardcoded &lt;code&gt;false&lt;/code&gt;. This run never produced one — it threw first. What the receipt does carry, in its own &lt;code&gt;not_established&lt;/code&gt; list, is: &lt;em&gt;"the semantic correctness of the CONFIRMS_KNOWN / K1 classification."&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;This article is a human read of that unresolved classification, and the K1 match does not survive it. It does not mint the independent-breaker verdict the design still requires.&lt;/p&gt;

&lt;p&gt;So the honest statement of what this buys you:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;the label and its reference cannot contradict structurally&lt;/li&gt;
&lt;li&gt;the quoted bytes exist verbatim, and exactly once, in the named file — &lt;strong&gt;&lt;a href="https://github.com/keniel13-ui/self-correcting-integration-maintainer/blob/main/docs/freezes/run-004-corpus/README.md" rel="noopener noreferrer"&gt;the corpus is published too&lt;/a&gt;, so you can recompute that yourself&lt;/strong&gt; against the manifest hash frozen before the run&lt;/li&gt;
&lt;li&gt;the repair is scoped to exactly the bytes that were quoted&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;confidence_basis&lt;/code&gt; is prose, not a number — a bare &lt;code&gt;"87%"&lt;/code&gt; is rejected&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;not_established&lt;/code&gt; is required and non-empty, so the agent writes down its own limits&lt;/li&gt;
&lt;li&gt;and the knowledge it was measured against is hashed and older than the run&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;What it does not buy you is a machine that knows whether the model is right.&lt;/strong&gt; You get a claim a stranger can audit line by line. You do not get a claim that is true because a validator said so. The first is what this validator establishes. The second is not, and confusing them is how people ship a slogan.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why the file has to be committed before the run
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;PRIOR_KNOWLEDGE_RUN_004.json&lt;/code&gt;, six classes, hashed to &lt;code&gt;93820ea5a67e732aa55e896cd838200c3590af1e98368fd87e85dfd66da1cf1e&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Freezing after the run proves nothing. You could add whatever it found and call the list complete. Committing before is the only version someone who does not trust you can check.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The custody proof is the commit, not a shell check.&lt;/strong&gt; Commit &lt;code&gt;5bf10acd&lt;/code&gt; added the Run 004 prior at &lt;strong&gt;05:55:49Z&lt;/strong&gt;. The receipt records execution at &lt;strong&gt;12:02:41Z&lt;/strong&gt; and binds that exact prior SHA and that exact freeze commit. Six hours apart, both public, both checkable by someone who does not trust me.&lt;/p&gt;

&lt;p&gt;I also ran &lt;code&gt;git ls-files --error-unmatch&lt;/code&gt; on the prior before starting, as the operator. That proves the path was tracked when I typed it. It is not the chronology proof, and &lt;strong&gt;that check is not inside the runner&lt;/strong&gt; — clone the repo and grep &lt;code&gt;run.mjs&lt;/code&gt; for &lt;code&gt;git&lt;/code&gt; and you will find nothing. I would rather you hear that from me.&lt;/p&gt;

&lt;h2&gt;
  
  
  What TrueForge does here
&lt;/h2&gt;

&lt;p&gt;The agent runs on &lt;a href="https://github.com/truefoundry/trueforge" rel="noopener noreferrer"&gt;TrueForge&lt;/a&gt;, as substrate rather than wrapper.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The session is minimized by name.&lt;/strong&gt; &lt;code&gt;iteration_limit: 2&lt;/code&gt;, a closed &lt;code&gt;json_schema&lt;/code&gt; response format, and every optional capability explicitly disabled: no sub-agents, no generative UI, no user questions, no file downloads, no sandbox on the judgment session. Omitting a field is not disabling it — omitted fields inherit enabled defaults, which I learned the direct way.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The returned config is byte-compared.&lt;/strong&gt; We send a config, TrueForge returns the resolved session, and the harness canonically compares the two. One differing field cancels the session before the prompt is sent. A declaration the runtime accepts but does not apply is a request, not a control.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The persisted event trace is audited after every turn.&lt;/strong&gt; The harness pulls TrueForge's own event record and reduces it: how many tool calls, which tool, what arguments, whether the response id matches the call id. Final model content never stands in for that record.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The verification relay sends the repair to Daytona&lt;/strong&gt; as three hash-bound artifacts and attempts the fixed verifier command inside an isolated sandbox.&lt;/p&gt;

&lt;p&gt;One thing I did not expect: &lt;strong&gt;the agent has exactly one tool and it is a clock.&lt;/strong&gt; Stock TrueForge 0.1.4 constructs &lt;code&gt;truefoundry-system/current-datetime/get_current_datetime&lt;/code&gt; above the optional capability switches, so no setting in that version removes it. My contract had asserted zero tools. That was unsatisfiable and a run told me, not a review.&lt;/p&gt;

&lt;h2&gt;
  
  
  The ceiling
&lt;/h2&gt;

&lt;p&gt;Daytona created a sandbox and executed the command. &lt;code&gt;sandbox.created&lt;/code&gt;, one real &lt;code&gt;exec&lt;/code&gt;, one real response:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nl"&gt;"success"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"response"&lt;/span&gt;&lt;span class="p"&gt;:{&lt;/span&gt;&lt;span class="nl"&gt;"exitCode"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;127&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"result"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"/usr/bin/bash: line 1: node: command not found&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="p"&gt;}}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The stock image is Python 3.13 with no JavaScript runtime, measured directly, and the provider's public settings schema exposes no image override.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Candidate verification is not established.&lt;/strong&gt; The transport reaches and executes. The repair has not been verified. No change proposal was produced, no artifact was written, nothing was applied to any target.&lt;/p&gt;

&lt;h2&gt;
  
  
  Run it
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git clone https://github.com/keniel13-ui/self-correcting-integration-maintainer
&lt;span class="nb"&gt;cd &lt;/span&gt;self-correcting-integration-maintainer
npm ci
node &lt;span class="nt"&gt;--test&lt;/span&gt; &lt;span class="nt"&gt;--test-name-pattern&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s1"&gt;'J05|V9-F3|Run 004'&lt;/span&gt; &lt;span class="nb"&gt;test&lt;/span&gt;/judgment-loop.test.mjs
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That pattern runs four tests: &lt;code&gt;J05&lt;/code&gt; (ambiguous bytes, bare-number confidence, empty limits, contradictory novelty references), &lt;code&gt;V9-F3&lt;/code&gt; (a successor prior rejecting one reworded class), the Run 004 prior-custody test, and &lt;code&gt;B1&lt;/code&gt; — which pins the &lt;code&gt;exitCode: 127&lt;/code&gt; sandbox response as nonzero execution rather than a malformed envelope.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;They do not cover the hole I described above.&lt;/strong&gt; &lt;code&gt;J05&lt;/code&gt; rejects &lt;code&gt;NEW&lt;/code&gt; &lt;em&gt;citing&lt;/em&gt; a known id. Nothing in that set tests &lt;code&gt;NEW&lt;/code&gt; with a null reference on a known condition, because the harness cannot detect it. If you want to see the gap, construct that case yourself against &lt;code&gt;validateAgentResponse&lt;/code&gt; in &lt;code&gt;scripts/judgment/core.mjs&lt;/code&gt;. It takes about ten lines and it will pass.&lt;/p&gt;

&lt;p&gt;The pattern is portable. &lt;strong&gt;The implementation is this repository.&lt;/strong&gt; I am not going to tell you twelve lines drop into any framework, because they do not.&lt;/p&gt;

&lt;h2&gt;
  
  
  What is different about this one
&lt;/h2&gt;

&lt;p&gt;I have written about &lt;a href="https://dev.to/kenielzep97/the-tests-passed-the-contract-was-wrong-mp0"&gt;tests passing while the contract was wrong&lt;/a&gt; and about &lt;a href="https://dev.to/kenielzep97/your-harness-will-lie-to-you-before-your-model-does-662"&gt;a harness lying before the model does&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Those were about systems asserting more than they had established. This is about giving an agent a way to assert &lt;strong&gt;less&lt;/strong&gt; than it could get away with — and then finding the exact place where that still is not enough.&lt;/p&gt;

&lt;p&gt;An agent that returns a plausible defect claim is normal now.&lt;/p&gt;

&lt;p&gt;An agent that marks its own claim as already known is rarer, and better.&lt;/p&gt;

&lt;p&gt;An agent that does that while &lt;strong&gt;both the interpretation and the class match fail inspection, and a correctly-scoped validator still admits the report&lt;/strong&gt; — that is the case worth publishing, because it marks the exact boundary of what any structural check can do.&lt;/p&gt;

&lt;p&gt;So the contribution is not an agent that finds defects. It is a measured boundary: &lt;strong&gt;structural consistency is mechanically checkable; semantic correctness requires evidence beyond those structural checks, and here is a live case that separates them&lt;/strong&gt; — with the corpus, the frozen prior, the raw response and the runtime receipts all published so you can put the boundary where I put it, or somewhere better.&lt;/p&gt;

&lt;p&gt;The goal was never an agent that always succeeds. It is a system where failure cannot quietly become evidence of success.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Built for the TrueForge Agent Harness Hackathon. Repository public, run evidence in &lt;code&gt;docs/&lt;/code&gt;. Nothing here claims a verified candidate or a completed sandbox verification, because neither has been established.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>trueforge</category>
      <category>qodo</category>
      <category>testing</category>
      <category>architecture</category>
    </item>
    <item>
      <title>The Tests Passed. The Contract Was Wrong.</title>
      <dc:creator>Self-Correcting Systems</dc:creator>
      <pubDate>Mon, 24 Aug 2026 04:24:57 +0000</pubDate>
      <link>https://dev.to/kenielzep97/the-tests-passed-the-contract-was-wrong-mp0</link>
      <guid>https://dev.to/kenielzep97/the-tests-passed-the-contract-was-wrong-mp0</guid>
      <description>&lt;p&gt;In June a reviewer on DEV who goes by &lt;a class="mentioned-user" href="https://dev.to/anp2network"&gt;@anp2network&lt;/a&gt; told me to stop storing a conclusion.&lt;/p&gt;

&lt;p&gt;I had a gate that decides whether an agent may act on a permission grant. When it refused, it&lt;br&gt;
wrote a row explaining why. One field, &lt;code&gt;condition_delta&lt;/code&gt;, held the reason the conditions had&lt;br&gt;
changed. I was storing a label there. A commenter called ANP2 said a derived label is still my own&lt;br&gt;
assertion, and anybody reading the row has to trust that I bucketed the case correctly. Store the raw&lt;br&gt;
before and after, he said, and a stranger can recompute the verdict without believing me.&lt;/p&gt;

&lt;p&gt;That constraint went into the code on 2026-06-04 and it is still on &lt;code&gt;origin/main&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="c1"&gt;# Store raw before/after — never a derived "stale: true" label
&lt;/span&gt;&lt;span class="n"&gt;delta&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;before&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;grant&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;source_snapshot&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;after&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;current&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;I have quoted that line in public more than once. It is the thing I point at when I say outside&lt;br&gt;
review lands in the work rather than in the acknowledgements.&lt;/p&gt;

&lt;p&gt;Last night I found out I had only obeyed it in one direction.&lt;/p&gt;
&lt;h2&gt;
  
  
  The rule did not follow the data
&lt;/h2&gt;

&lt;p&gt;The gate emits an event. Something else reads that event and classifies what kind of evidence it&lt;br&gt;
is. That classifier lives in &lt;code&gt;claim_24/mandate_cell7.py&lt;/code&gt;, and until last night it contained this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;event&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;decision&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;REFUSED_UNREACHABLE&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nc"&gt;EvidenceClassification&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;event&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;decision&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;(),&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;SOURCE_UNREACHABLE&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="bp"&gt;False&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;event&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;decision&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;BLOCK&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="n"&gt;evidence_class&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;TTL_EXPIRED&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;ttl expired&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;event&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;notes&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;lower&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;BLOCKED_CONTROL&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Read those two branches next to each other.&lt;/p&gt;

&lt;p&gt;The first one asks a structured field. The second one greps an English sentence.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;notes&lt;/code&gt; is a human-readable string I write for my own benefit. &lt;code&gt;ttl_remaining_hours&lt;/code&gt; is a number&lt;br&gt;
on the same event. The classifier ignored the number and searched the sentence. Rename the note&lt;br&gt;
and the evidence classification changes. Put the words "ttl expired" into a different kind of&lt;br&gt;
block and it changes the other way. Nothing structured moves.&lt;/p&gt;

&lt;p&gt;I stored raw values so a stranger could recompute the comparison, and then I decided &lt;strong&gt;why I had&lt;br&gt;
not compared&lt;/strong&gt; by string-matching prose.&lt;/p&gt;
&lt;h2&gt;
  
  
  Repair one, and the sentence that broke it
&lt;/h2&gt;

&lt;p&gt;The fix looked obvious. Add a typed field. &lt;code&gt;source_consult&lt;/code&gt;, required, one of &lt;code&gt;CONSULTED&lt;/code&gt;,&lt;br&gt;
&lt;code&gt;UNREACHABLE&lt;/code&gt;, &lt;code&gt;SKIPPED_NO_GRANT&lt;/code&gt;, &lt;code&gt;SKIPPED_TTL_EXPIRED&lt;/code&gt;, &lt;code&gt;SKIPPED_TIMESTAMP_ONLY&lt;/code&gt;. The classifier&lt;br&gt;
dispatches on the enum. It never reads &lt;code&gt;notes&lt;/code&gt; again.&lt;/p&gt;

&lt;p&gt;We froze that contract first, hashed it, then wrote the code. The freeze is &lt;code&gt;9f3dda8c&lt;/code&gt;. Its third&lt;br&gt;
rule says:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;R3. &lt;code&gt;classify_evidence&lt;/code&gt; on a &lt;code&gt;BLOCK&lt;/code&gt; event with &lt;code&gt;source_consult == SKIPPED_TTL_EXPIRED&lt;/code&gt; returns&lt;br&gt;
&lt;code&gt;TTL_EXPIRED&lt;/code&gt;. Any other &lt;code&gt;BLOCK&lt;/code&gt; returns &lt;code&gt;BLOCKED_CONTROL&lt;/code&gt;. It must not read &lt;code&gt;event.notes&lt;/code&gt; for&lt;br&gt;
this branch. &lt;strong&gt;&lt;code&gt;ttl_remaining_hours&lt;/code&gt; may be used as a corroboration, not as the sole&lt;br&gt;
consult-reason.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Implementation matched. Renaming the note no longer moved anything. &lt;strong&gt;366 tests passed.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Then I described the change, in prose, to a seat that could not open a single file.&lt;/p&gt;

&lt;p&gt;He did not ask to see the code. He asked one question:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;What proves &lt;code&gt;SKIPPED_TTL_EXPIRED&lt;/code&gt; was true?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;And then he answered it himself. If the classifier trusts the enum without checking the structured&lt;br&gt;
TTL, we have not removed a self-assertion. We have retyped one. He wrote out the row he wanted&lt;br&gt;
tried:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;source_consult      = SKIPPED_TTL_EXPIRED
ttl_remaining_hours = +17.4
decision            = BLOCK
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The evidence class says the grant expired. The number on the same row says it has seventeen hours&lt;br&gt;
left. Those cannot both be authoritative.&lt;/p&gt;

&lt;p&gt;It returned &lt;code&gt;TTL_EXPIRED&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;And here is the part that matters more than the bug. &lt;strong&gt;The implementation was correct.&lt;/strong&gt; R3 says&lt;br&gt;
the enum decides and the raw field &lt;em&gt;may&lt;/em&gt; corroborate. The word is "may." The code did exactly what&lt;br&gt;
the contract told it to do. The defect was not in the patch. It was in the sentence I wrote before&lt;br&gt;
the patch existed.&lt;/p&gt;

&lt;p&gt;366 tests passed against a specification that mandated a contradiction.&lt;/p&gt;
&lt;h2&gt;
  
  
  Repair two, and the thing a rounded number costs
&lt;/h2&gt;

&lt;p&gt;We froze the failure before touching anything. That record is &lt;code&gt;9f5fb47d&lt;/code&gt; and it holds the file hashes, R3 verbatim, the&lt;br&gt;
attack input and output, and the test count sitting beside it. Then a second contract: an evidence&lt;br&gt;
class that asserts a fact must agree with the field that represents it. &lt;code&gt;c686518a&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;That worked for the attack that killed the first one. &lt;code&gt;+17.4&lt;/code&gt; with &lt;code&gt;SKIPPED_TTL_EXPIRED&lt;/code&gt; became&lt;br&gt;
&lt;code&gt;INVALID_FOR_CELL_7&lt;/code&gt;. Genuinely expired grants still classified. Notes still could not move&lt;br&gt;
anything.&lt;/p&gt;

&lt;p&gt;The same seat, still without file access, said the fix was probably pairwise and asked for four&lt;br&gt;
more rows. All four exposed contradictions. Three are enough to show the pattern here.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;A grant that never existed still expired.&lt;/strong&gt; &lt;code&gt;SKIPPED_TTL_EXPIRED&lt;/code&gt; with &lt;code&gt;grant_id = None&lt;/code&gt; returned&lt;br&gt;
&lt;code&gt;TTL_EXPIRED&lt;/code&gt;. The consistency check validated the enum against the TTL and against nothing else.&lt;br&gt;
No grant, so no grant's lifetime could have run out, and the classifier had no opinion about that.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;A grant expired by one second was not expired.&lt;/strong&gt; The gate stores&lt;br&gt;
&lt;code&gt;ttl_remaining_hours = round(seconds / 3600, 2)&lt;/code&gt;. Two decimal places of an hour is&lt;br&gt;
&lt;strong&gt;thirty-six-second granularity&lt;/strong&gt;. A grant one second past expiry stores &lt;code&gt;-0.0&lt;/code&gt;. And in Python:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="o"&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mf"&gt;0.0&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;
&lt;span class="bp"&gt;True&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;So the row got classified &lt;code&gt;INVALID_FOR_CELL_7&lt;/code&gt; instead of &lt;code&gt;TTL_EXPIRED&lt;/code&gt;. Every grant expired by&lt;br&gt;
less than about eighteen seconds was misread. Not because the clock was wrong, but because the&lt;br&gt;
classifier was making an evidence-class decision from a &lt;strong&gt;rounded display copy&lt;/strong&gt; of the clock while the&lt;br&gt;
timestamps that could compute it exactly sat on the same object.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Malformed evidence produced a confident answer.&lt;/strong&gt; He predicted this one from the shape of the&lt;br&gt;
comparison alone, without seeing it:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="o"&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class="nf"&gt;float&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;nan&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;
&lt;span class="bp"&gt;False&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;So &lt;code&gt;ttl_remaining_hours = nan&lt;/code&gt; fell straight through the guard and returned &lt;code&gt;TTL_EXPIRED&lt;/code&gt;. No&lt;br&gt;
finiteness check. Garbage in, confident evidence class out.&lt;/p&gt;

&lt;h2&gt;
  
  
  What was actually wrong the whole time
&lt;/h2&gt;

&lt;p&gt;Three versions. One disease.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;Where truth lived&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Original&lt;/td&gt;
&lt;td&gt;prose. &lt;code&gt;"ttl expired" in event.notes.lower()&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Repair one&lt;/td&gt;
&lt;td&gt;an enum. &lt;code&gt;source_consult&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Repair two&lt;/td&gt;
&lt;td&gt;an enum agreeing with &lt;strong&gt;one rounded float&lt;/strong&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Every repair moved the authority somewhere better typed, and looked like progress for exactly that&lt;br&gt;
reason. None of them moved it to the least-derived evidence available.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Structure is not evidence merely because it has a schema. A typed field can lie as cleanly as a&lt;br&gt;
sentence.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;ANP2's June constraint was never "don't use strings." It was: do not let a derived value outrank&lt;br&gt;
the raw evidence sitting on the same row. I applied it where the comparison happens and it never&lt;br&gt;
followed the data one file downstream, to where the result of that comparison gets read.&lt;/p&gt;

&lt;p&gt;The third contract, &lt;code&gt;83afebd8&lt;/code&gt;, was hashed before any code existed. Expiry authority is no longer&lt;br&gt;
the rounded &lt;code&gt;ttl_remaining_hours&lt;/code&gt; display field. It is the direct comparison&lt;br&gt;
&lt;code&gt;decision_timestamp &amp;gt; grant_expires_at&lt;/code&gt;, with &lt;code&gt;grant_expires_at&lt;/code&gt; derived from the grant's issue&lt;br&gt;
time and lifetime without rounding. A grant expired by one second now classifies as expired,&lt;br&gt;
and the &lt;code&gt;-0.0&lt;/code&gt; in the display field decides nothing.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why I am not telling you it is fixed
&lt;/h2&gt;

&lt;p&gt;Four seats touched this. Every one of them is disqualified from saying it works.&lt;/p&gt;

&lt;p&gt;The seat that wrote all three contracts also wrote all three patches. The seat that briefed the&lt;br&gt;
lane, which is me, cannot rule on a lane it opened. The seat that designed the attacks that falsified both&lt;br&gt;
earlier repairs shaped the successor by doing so, and his verdict would be no more independent than&lt;br&gt;
mine. The owner authorized the scope and is not a breaker.&lt;/p&gt;

&lt;p&gt;So what I can honestly report is narrow: &lt;strong&gt;maker-side mechanical rechecks returned the expected&lt;br&gt;
outcomes for every frozen attack.&lt;/strong&gt; Contradictory rows invalidate. One-second expiries classify.&lt;br&gt;
&lt;code&gt;nan&lt;/code&gt; and &lt;code&gt;±inf&lt;/code&gt; invalidate. Legitimate rows still pass. Renaming the note still moves nothing.&lt;/p&gt;

&lt;p&gt;That is not a PASS. It is the same green I had at 366 tests, and 366 tests were green while the&lt;br&gt;
contract required a contradiction.&lt;/p&gt;

&lt;p&gt;The verdict waits for a seat that wrote none of this.&lt;/p&gt;

&lt;h2&gt;
  
  
  The part that does not need a verdict
&lt;/h2&gt;

&lt;p&gt;One proposition here is already true and no breaker changes it:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Twice the implementation was faithful and the specification was wrong.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Both times the code did what its contract said. Both times the tests confirmed it. Both times the&lt;br&gt;
contract permitted a row where a derived label outranked the evidence that could have checked it.&lt;/p&gt;

&lt;p&gt;Passing tests measure conformance to a document. They do not measure whether the document is&lt;br&gt;
right. Those are three separate properties and I had been treating the first as evidence for the&lt;br&gt;
third:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;implementation correctness ≠ specification correctness ≠ evidence correctness&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;I have written before that a check which reports is not a control. This is the version one level&lt;br&gt;
up. A test suite that passes tells you the implementer understood the spec. It tells you nothing&lt;br&gt;
about whether the spec understood the problem.&lt;/p&gt;

&lt;p&gt;The cheapest way I know to find that gap is to describe your contract, in plain sentences, to&lt;br&gt;
somebody who cannot run it, and let them tell you what your own words permit.&lt;/p&gt;

&lt;p&gt;Mine did it twice. He never opened a file.&lt;/p&gt;




&lt;h2&gt;
  
  
  Receipts
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Object&lt;/th&gt;
&lt;th&gt;Hash / location&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Original defect&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;claim_24/mandate_cell7.py&lt;/code&gt;, &lt;code&gt;origin/main&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;ANP2's compiled constraint&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;4a2f3a4&lt;/code&gt;, still on &lt;code&gt;origin/main&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Repair-one contract (R3)&lt;/td&gt;
&lt;td&gt;&lt;a href="https://github.com/keniel13-ui/ai-memory-judgment-demo/blob/claim-24-consult-reason-freezes/claim_24/freezes/CLAIM24_CONSULT_REASON_DELTA_FREEZE_2026-08-23.md" rel="noopener noreferrer"&gt;&lt;code&gt;9f3dda8c&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;First falsification, 366 tests green&lt;/td&gt;
&lt;td&gt;&lt;a href="https://github.com/keniel13-ui/ai-memory-judgment-demo/blob/claim-24-consult-reason-freezes/claim_24/freezes/CLAIM24_CONSULT_DELTA_FALSIFIED_FREEZE_2026-08-23.md" rel="noopener noreferrer"&gt;&lt;code&gt;9f5fb47d&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Repair-two contract&lt;/td&gt;
&lt;td&gt;&lt;a href="https://github.com/keniel13-ui/ai-memory-judgment-demo/blob/claim-24-consult-reason-freezes/claim_24/freezes/CLAIM24_CONSULT_REASON_CONSISTENCY_DELTA_FREEZE_2026-08-23.md" rel="noopener noreferrer"&gt;&lt;code&gt;c686518a&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Second falsification (D1–D4)&lt;/td&gt;
&lt;td&gt;&lt;a href="https://github.com/keniel13-ui/ai-memory-judgment-demo/blob/claim-24-consult-reason-freezes/claim_24/freezes/CLAIM24_CONSISTENCY_DELTA_FALSIFIED_FREEZE_2026-08-23.md" rel="noopener noreferrer"&gt;&lt;code&gt;e6409cbd&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Whole-row contract, frozen before code&lt;/td&gt;
&lt;td&gt;&lt;a href="https://github.com/keniel13-ui/ai-memory-judgment-demo/blob/claim-24-consult-reason-freezes/claim_24/freezes/CLAIM24_WHOLE_ROW_LEAST_DERIVED_DELTA_FREEZE_2026-08-23.md" rel="noopener noreferrer"&gt;&lt;code&gt;83afebd8&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;All five freeze records are public and hash-checkable:&lt;/strong&gt; &lt;a href="https://github.com/keniel13-ui/ai-memory-judgment-demo/tree/claim-24-consult-reason-freezes/claim_24/freezes" rel="noopener noreferrer"&gt;&lt;code&gt;claim_24/freezes/&lt;/code&gt;&lt;/a&gt;. Verify with &lt;code&gt;shasum -a 256&lt;/code&gt;. They are on a branch, not &lt;code&gt;main&lt;/code&gt;, because the repair code they govern is maker-only and has not been independently attacked. The original defect is on &lt;code&gt;main&lt;/code&gt; and needs no branch.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What this claims:&lt;/strong&gt; a classifier on &lt;code&gt;origin/main&lt;/code&gt; derived an evidence class from free text; two&lt;br&gt;
successive contracts permitted a derived value to outrank recoverable evidence; both failures were&lt;br&gt;
predicted from prose by a seat with no file access.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What this does not claim:&lt;/strong&gt; that the third contract is correct. No independent seat has attacked&lt;br&gt;
it. Two questions are open and deliberately out of scope. Whether &lt;code&gt;grant_expires_at&lt;/code&gt; is itself&lt;br&gt;
cross-checkable against the underlying grant at replay time, and what happens to evidence rows&lt;br&gt;
serialized before any of this existed.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>testing</category>
      <category>architecture</category>
      <category>agents</category>
    </item>
    <item>
      <title>I Was About to Optimize Five Canvases. Two of Them Weren't Running.</title>
      <dc:creator>Self-Correcting Systems</dc:creator>
      <pubDate>Tue, 18 Aug 2026 17:29:41 +0000</pubDate>
      <link>https://dev.to/kenielzep97/i-was-about-to-optimize-five-canvases-two-of-them-werent-running-34ii</link>
      <guid>https://dev.to/kenielzep97/i-was-about-to-optimize-five-canvases-two-of-them-werent-running-34ii</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for &lt;a href="https://dev.to/bugsmash"&gt;DEV's Summer Bug Smash: Clear the Lineup&lt;/a&gt; powered by &lt;a href="https://sentry.io/" rel="noopener noreferrer"&gt;Sentry&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Existing codebase: &lt;a href="https://primaworkflows.com" rel="noopener noreferrer"&gt;primaworkflows.com&lt;/a&gt;, one 321,920-byte HTML&lt;br&gt;
file, SHA-256 &lt;code&gt;06a768bb…&lt;/code&gt;. All &lt;code&gt;index.html&lt;/code&gt; line numbers below are against that published&lt;br&gt;
file. &lt;code&gt;prima-visual.js&lt;/code&gt; line numbers are against the file the live site serves today&lt;br&gt;
(8,773 bytes, SHA-256 &lt;code&gt;dc78c46d…&lt;/code&gt;). Every number is measured, and the places where I got&lt;br&gt;
one wrong are left in. Production has not been swapped for the after. A same-session&lt;br&gt;
A-vs-C table is still empty on purpose.&lt;/em&gt;&lt;/p&gt;


&lt;h2&gt;
  
  
  Project Overview
&lt;/h2&gt;

&lt;p&gt;My site lags on my phone. It is the only page I own that strangers and clients actually load,&lt;br&gt;
and it feels slow in the hand. That was the bug. I had the fix written before I opened the file:&lt;br&gt;
five stacked canvases, a pile of animation loops, collapse them into one clock and move on.&lt;/p&gt;

&lt;p&gt;Then I read the file instead of my notes about the file.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// index.html:3824&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;WORLD_CANVAS_ENABLED&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Two of the four persistent animation loops I was about to collapse never start. The flag gates&lt;br&gt;
the call that kicks them off, at &lt;code&gt;:7103&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;It gates &lt;em&gt;only&lt;/em&gt; that. I want to be exact, because my first draft of this paragraph said the&lt;br&gt;
flag also gated their 2D contexts, and then I checked the published file instead of my working&lt;br&gt;
copy:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// index.html:3832, :3834, :3875 — no guard on any of them&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;ctx&lt;/span&gt;               &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;canvas&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;getContext&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;2d&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;vctx&lt;/span&gt;              &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;visitorCanvas&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;getContext&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;2d&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;visitorPreviewCtx&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;visitorPreview&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;getContext&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;2d&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;So production still creates three 2D contexts for canvases nothing&lt;br&gt;
ever draws to. The loops are dead; the memory is not. Guarding those three lines is a separate&lt;br&gt;
one-line-each change that is in my working tree and has not shipped, and I am not counting it&lt;br&gt;
in anything below.&lt;/p&gt;

&lt;p&gt;A third loop, the custom cursor, exits immediately on touch devices:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// index.html:6656&lt;/span&gt;
&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;primaCursor&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;window&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;matchMedia&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;(hover: none)&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nx"&gt;matches&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Mobile is the measurement that matters here — it is a phone-facing page. So on the device I&lt;br&gt;
was optimizing for, the page had &lt;strong&gt;one&lt;/strong&gt; persistent JS loop, not four. The optimization I had&lt;br&gt;
specified had almost nothing to collapse. If I had built it and measured, I would have seen&lt;br&gt;
nothing move and had no way to tell a failed fix from a fix with no room to work.&lt;/p&gt;

&lt;p&gt;I had written the plan from a document I wrote myself, about a file I wrote myself.&lt;/p&gt;


&lt;h2&gt;
  
  
  Bug Fix or Performance Improvement
&lt;/h2&gt;
&lt;h3&gt;
  
  
  The actual bug
&lt;/h3&gt;

&lt;p&gt;Once I was reading rather than remembering, I found this.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// index.html:3188&lt;/span&gt;
&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;canRunWebGLHero&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nb"&gt;window&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;matchMedia&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;(hover: hover)&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nx"&gt;matches&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;  &lt;span class="c1"&gt;// ← returns here. always.&lt;/span&gt;
  &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;window&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;matchMedia&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;(prefers-reduced-motion: reduce)&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nx"&gt;matches&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;window&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;matchMedia&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;(max-width: 820px)&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nx"&gt;matches&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="nb"&gt;navigator&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;hardwareConcurrency&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt; &lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;navigator&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;deviceMemory&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="nb"&gt;navigator&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;deviceMemory&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="k"&gt;try&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;c&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;document&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;createElement&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;canvas&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="o"&gt;!!&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;c&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;getContext&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;webgl2&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt; &lt;span class="nx"&gt;c&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;getContext&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;webgl&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;catch &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;error&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Five guards under an unconditional return. Not one of them executes in the published build I&lt;br&gt;
audited, and that build is the one live right now. I have not audited every prior deployment,&lt;br&gt;
so I am not claiming a start date for it. The patch is deleting that one&lt;br&gt;
&lt;code&gt;return&lt;/code&gt;. I am not writing the fix in the past tense until the line is gone from the file a&lt;br&gt;
visitor loads.&lt;/p&gt;

&lt;p&gt;What that silently switched off:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Guard&lt;/th&gt;
&lt;th&gt;Intended&lt;/th&gt;
&lt;th&gt;Actual, today&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;prefers-reduced-motion&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;no WebGL hero&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;ignored&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;max-width: 820px&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;skip small screens&lt;/td&gt;
&lt;td&gt;ignored&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;hardwareConcurrency &amp;lt; 4&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;skip weak CPUs&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;ignored&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;deviceMemory &amp;lt; 4&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;skip low-RAM machines&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;ignored&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;code&gt;webgl2&lt;/code&gt; / &lt;code&gt;webgl&lt;/code&gt; probe&lt;/td&gt;
&lt;td&gt;skip unsupported devices&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;ignored&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The reduced-motion one is the part I am least comfortable with. Someone sets that preference at&lt;br&gt;
the operating system level, for reasons that are theirs, and my page has been overriding it since&lt;br&gt;
the day I shipped it. Not because I disagreed with them. Because a &lt;code&gt;return&lt;/code&gt; was on the wrong&lt;br&gt;
line.&lt;/p&gt;

&lt;p&gt;The capability probe is the expensive one. A hover-capable machine with no WebGL support&lt;br&gt;
downloads and compiles Three.js, tries to start, throws, and the failure lands in a&lt;br&gt;
&lt;code&gt;.catch(err =&amp;gt; console.warn(...))&lt;/code&gt; where nobody sees it. It pays full price for a feature it&lt;br&gt;
cannot run.&lt;/p&gt;


&lt;h2&gt;
  
  
  Code
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Exact diffs of both changed files:&lt;/strong&gt;&lt;br&gt;
&lt;a href="https://gist.github.com/keniel13-ui/3c05e11202d048ad78a11ce2de215e8d" rel="noopener noreferrer"&gt;gist.github.com/keniel13-ui/3c05e11202d048ad78a11ce2de215e8d&lt;/a&gt;&lt;br&gt;
— two unified diffs against the deployed &lt;code&gt;06a768bb&lt;/code&gt; file, plus a README of what each hunk does&lt;br&gt;
and what is deliberately excluded from the claims. Production has not been swapped, so the&lt;br&gt;
before in that diff is what you get if you load the site right now.&lt;/p&gt;
&lt;h3&gt;
  
  
  Three scripts, and the one I was wrong about
&lt;/h3&gt;

&lt;p&gt;The page declares three third-party scripts on every load:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="c"&gt;&amp;lt;!-- index.html:129-131, verbatim from the live page. Note what the first one is missing. --&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;script &lt;/span&gt;&lt;span class="na"&gt;src=&lt;/span&gt;&lt;span class="s"&gt;"https://cdn.jsdelivr.net/npm/@supabase/supabase-js@2"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&amp;lt;/script&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;script &lt;/span&gt;&lt;span class="na"&gt;src=&lt;/span&gt;&lt;span class="s"&gt;"https://cdn.jsdelivr.net/npm/gsap@3.12.5/dist/gsap.min.js"&lt;/span&gt; &lt;span class="na"&gt;defer&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&amp;lt;/script&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;script &lt;/span&gt;&lt;span class="na"&gt;src=&lt;/span&gt;&lt;span class="s"&gt;"https://cdn.jsdelivr.net/npm/gsap@3.12.5/dist/ScrollTrigger.min.js"&lt;/span&gt; &lt;span class="na"&gt;defer&lt;/span&gt;
        &lt;span class="na"&gt;onload=&lt;/span&gt;&lt;span class="s"&gt;"window.dispatchEvent(new Event('gsap-ready'))"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&amp;lt;/script&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;The first tag has no &lt;code&gt;defer&lt;/code&gt;.&lt;/strong&gt; The two GSAP tags do. So Supabase is a plain script in&lt;br&gt;
&lt;code&gt;&amp;lt;head&amp;gt;&lt;/code&gt;: the browser stops building the DOM, fetches it, parses it, executes it, and only then&lt;br&gt;
continues. Parser-blocking, in the head, for a library whose every call site is behind a flag&lt;br&gt;
that is off.&lt;/p&gt;

&lt;p&gt;I had a &lt;code&gt;defer&lt;/code&gt; on that line in an earlier version of this post. I put it there. It is not in the&lt;br&gt;
file — I had copied the tag out of my own working branch, where a previous change had added one,&lt;br&gt;
and pasted it as though it were production. If you are going to quote code, quote the deployed&lt;br&gt;
bytes.&lt;/p&gt;

&lt;p&gt;Measured from the URLs the production page resolved during this audit. GSAP is pinned to&lt;br&gt;
&lt;code&gt;3.12.5&lt;/code&gt;. &lt;code&gt;@supabase/supabase-js@2&lt;/code&gt; is &lt;strong&gt;not&lt;/strong&gt; a pin — jsDelivr treats &lt;code&gt;@2&lt;/code&gt; as a moving&lt;br&gt;
major-version alias, and it resolved to &lt;strong&gt;2.112.3&lt;/strong&gt; at the time of measurement&lt;br&gt;
(&lt;code&gt;x-jsd-version: 2.112.3&lt;/code&gt;). If you re-run this later and get a different Supabase number,&lt;br&gt;
that is why:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;gzip transfer&lt;/th&gt;
&lt;th&gt;uncompressed JS source&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;supabase-js@2&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;54,607 B&lt;/td&gt;
&lt;td&gt;212,199 B&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;gsap.min.js&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;28,200 B&lt;/td&gt;
&lt;td&gt;72,214 B&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;ScrollTrigger.min.js&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;17,681 B&lt;/td&gt;
&lt;td&gt;43,380 B&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;total&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;100,488 B&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;327,793 B&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Those are three different units and I want to keep them apart. &lt;strong&gt;327,793 B is uncompressed&lt;br&gt;
JavaScript source&lt;/strong&gt; — slightly more source than the 321,920-byte HTML document itself.&lt;br&gt;
&lt;strong&gt;100,488 B is the measured gzip transfer&lt;/strong&gt; at the moment of the audit. I re-fetched the same&lt;br&gt;
three URLs while finishing this post and got &lt;strong&gt;100,148 B&lt;/strong&gt; — the uncompressed source did not&lt;br&gt;
move, the compressed transfer did. That is the moving &lt;code&gt;@2&lt;/code&gt; alias and CDN recompression showing&lt;br&gt;
up in my own numbers, which is exactly why the alias is disclosed above rather than presented as&lt;br&gt;
a pin. Both of these are cold-load figures; a repeat visitor&lt;br&gt;
with a warm cache does not retransmit them.&lt;/p&gt;

&lt;p&gt;The honest headline is the source figure: three libraries carrying more JavaScript source than&lt;br&gt;
the entire document they were decorating.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Supabase is straightforward.&lt;/strong&gt; Every one of its call sites — &lt;code&gt;loadWorldState&lt;/code&gt;,&lt;br&gt;
&lt;code&gt;loadVisitorAvatars&lt;/code&gt;, &lt;code&gt;subscribeToVisitorAvatars&lt;/code&gt; — is invoked only inside&lt;br&gt;
&lt;code&gt;if (WORLD_CANVAS_ENABLED)&lt;/code&gt;. That flag is &lt;code&gt;false&lt;/code&gt;. &lt;strong&gt;In the published build audited here&lt;/strong&gt;&lt;br&gt;
those call sites are unreachable — I have not audited every prior deployment, so I am not&lt;br&gt;
claiming they never fired in the site's history. The library was still being fetched and&lt;br&gt;
parsed on every cold load regardless.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;GSAP is where I was wrong, and I want it on the record because it nearly became the headline&lt;br&gt;
of this post.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;I grepped &lt;code&gt;index.html&lt;/code&gt; for &lt;code&gt;gsap&lt;/code&gt;, found nothing outside the script tags, and wrote a comment&lt;br&gt;
into the working file stating the libraries had zero call sites and that the &lt;code&gt;gsap-ready&lt;/code&gt; event&lt;br&gt;
had no listener. Both sentences were false. I had grepped one file on a site with several.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// prima-visual.js (live, dc78c46d…):226&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;gsap&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;ScrollTrigger&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;window&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="nx"&gt;gsap&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;registerPlugin&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;ScrollTrigger&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="nx"&gt;gsap&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;to&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="na"&gt;progress&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="na"&gt;progress&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;ease&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;none&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;scrollTrigger&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;trigger&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;document&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;documentElement&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;start&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;top top&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
                   &lt;span class="na"&gt;end&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;bottom bottom&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;scrub&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mf"&gt;1.2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
                   &lt;span class="na"&gt;onUpdate&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;self&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;scrollTarget&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;progress&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;span class="c1"&gt;// prima-visual.js:248&lt;/span&gt;
&lt;span class="nb"&gt;window&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;addEventListener&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;gsap-ready&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;wireGSAP&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;once&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt; &lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Line 248 is the listener I said did not exist. And &lt;code&gt;scrub: 1.2&lt;/code&gt; was doing real work: it is the&lt;br&gt;
weight in the scroll, the reason the background trails your finger instead of snapping to it.&lt;br&gt;
Deleting the tags did not remove dead code. It removed a feature, quietly, in a way no&lt;br&gt;
performance score would ever have shown me.&lt;/p&gt;

&lt;p&gt;So the honest version of this optimization is not &lt;em&gt;"I deleted libraries nothing called."&lt;/em&gt; It is&lt;br&gt;
&lt;em&gt;"I used one behaviour out of 115,594 bytes of library source, and I replaced that one&lt;br&gt;
behaviour."&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Reading the render loop showed the replacement was smaller than expected, because half of it&lt;br&gt;
already existed:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;bgUniforms&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;uScroll&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;value&lt;/span&gt; &lt;span class="o"&gt;+=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;scrollTarget&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="nx"&gt;bgUniforms&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;uScroll&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;value&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="mf"&gt;0.04&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;There were always two easing stages. ScrollTrigger's &lt;code&gt;scrub&lt;/code&gt; was the first. That line was the&lt;br&gt;
second, and it was mine. Removing the tags took out stage one only — the page never went&lt;br&gt;
un-eased, it just lost the lag.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// replaces gsap + ScrollTrigger. this is what is in the after file, not a cleaned-up retelling.&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;SCRUB_SECONDS&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mf"&gt;1.2&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;   &lt;span class="c1"&gt;// the name is a lie. it is a time constant, not a catch-up.&lt;/span&gt;
&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;scrollRaw&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;scrollEased&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;readScroll&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;max&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;document&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;documentElement&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;scrollHeight&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="nb"&gt;window&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;innerHeight&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nx"&gt;scrollRaw&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;max&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt; &lt;span class="p"&gt;?&lt;/span&gt; &lt;span class="nb"&gt;Math&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;min&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;Math&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;max&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;window&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;scrollY&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="nx"&gt;max&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;};&lt;/span&gt;
&lt;span class="nf"&gt;readScroll&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="nb"&gt;window&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;addEventListener&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;scroll&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;readScroll&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;passive&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt; &lt;span class="p"&gt;});&lt;/span&gt;
&lt;span class="nb"&gt;window&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;addEventListener&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;resize&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;readScroll&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;passive&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt; &lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="c1"&gt;// inside the existing rAF loop:&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;dt&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;Math&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;min&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mf"&gt;0.1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;now&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="nx"&gt;lastFrame&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="mi"&gt;1000&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;   &lt;span class="c1"&gt;// clamped for tab-switch gaps&lt;/span&gt;
&lt;span class="nx"&gt;scrollEased&lt;/span&gt; &lt;span class="o"&gt;+=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;scrollRaw&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="nx"&gt;scrollEased&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="nb"&gt;Math&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;exp&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;dt&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="nx"&gt;SCRUB_SECONDS&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;GSAP's &lt;code&gt;scrub: 1.2&lt;/code&gt; means &lt;em&gt;caught up in 1.2 seconds&lt;/em&gt;. Mine is an exponential time constant:&lt;br&gt;
at τ = 1.2 it is 63% there at 1.2 s and needs about 3.6 s to reach 95%. If I define "caught&lt;br&gt;
up" as ~95% settled — and that is &lt;strong&gt;my&lt;/strong&gt; definition, not one GSAP supplies — then &lt;strong&gt;τ ≈ 0.4&lt;/strong&gt;&lt;br&gt;
puts the settling time near 1.2 s. That is a heuristic mapping, not an equivalence. I left the wrong number in the file, under a name that claims I matched&lt;br&gt;
the library, because the only test that settles the feel is a thumb on a phone. I have not&lt;br&gt;
done that pass yet. This approximates &lt;code&gt;scrub&lt;/code&gt;. It does not reproduce it.&lt;/p&gt;

&lt;p&gt;One property claim, narrowed after review, because my first version of this sentence was&lt;br&gt;
wrong. The &lt;strong&gt;new first stage&lt;/strong&gt; is time-based rather than a fixed per-frame lerp. But the&lt;br&gt;
second stage — the &lt;code&gt;* 0.04&lt;/code&gt; line above, which was always mine — is still frame-based. So the&lt;br&gt;
combined visual response is &lt;strong&gt;not&lt;/strong&gt; refresh-rate invariant, and I am not claiming it is. Only&lt;br&gt;
the stage I replaced is.&lt;/p&gt;

&lt;p&gt;One more deletion, named so I do not take credit for it: the published page fires a WebGL intro&lt;br&gt;
at load (&lt;code&gt;index.html:6576&lt;/code&gt;, &lt;code&gt;fireIntro&lt;/code&gt;). I had already rejected that motion as the owner. The&lt;br&gt;
after-build does not call it. Clear the Lineup does not let me score a deletion as an&lt;br&gt;
optimization, so it is not in any delta I will publish.&lt;/p&gt;


&lt;h2&gt;
  
  
  My Improvements
&lt;/h2&gt;
&lt;h3&gt;
  
  
  The standing cost nobody counted
&lt;/h3&gt;

&lt;p&gt;The frozen contract I wrote counted canvases and rAF loops. It did not count CSS.&lt;/p&gt;

&lt;p&gt;Gemini counted "15+ infinite" and I copied it into a draft before checking. Then I did the&lt;br&gt;
thing this whole article is about and went and looked.&lt;/p&gt;

&lt;p&gt;The published file has &lt;strong&gt;15 &lt;code&gt;infinite&lt;/code&gt; animation declarations: 14 written as CSS rules, one&lt;br&gt;
injected from JavaScript.&lt;/strong&gt; Of the 14 CSS rules, six target classes that appear &lt;strong&gt;nowhere in&lt;br&gt;
the DOM and are never injected by JavaScript&lt;/strong&gt;: &lt;code&gt;.feed-pulse-dot&lt;/code&gt;, &lt;code&gt;.feed-line&lt;/code&gt;, &lt;code&gt;.sig-dot&lt;/code&gt;,&lt;br&gt;
&lt;code&gt;.hero-scan&lt;/code&gt;, &lt;code&gt;.hero-console&lt;/code&gt;, and &lt;code&gt;.scroll-cue&lt;/code&gt;. That last one is easy to miss because&lt;br&gt;
&lt;code&gt;.prima-scroll-cue&lt;/code&gt; &lt;em&gt;is&lt;/em&gt; live in the hero. &lt;code&gt;.scroll-cue&lt;/code&gt; is a different selector. There is no&lt;br&gt;
&lt;code&gt;id="scroll-cue"&lt;/code&gt; either — a scroll handler looks for one and finds nothing. They are dead&lt;br&gt;
rules. They cost nothing at runtime because there is nothing to animate.&lt;/p&gt;

&lt;p&gt;So the real standing set is &lt;strong&gt;eight live CSS rules plus &lt;code&gt;ambientDrift&lt;/code&gt;&lt;/strong&gt;, one of which is&lt;br&gt;
&lt;code&gt;seedBreathe&lt;/code&gt; — the Seed of Life — which stays. Everything else is decoration running whether&lt;br&gt;
or not anyone can see it.&lt;/p&gt;

&lt;p&gt;All eight live CSS targets sit inside &lt;code&gt;&amp;lt;main&amp;gt;&lt;/code&gt;, so &lt;code&gt;main &amp;gt; section[id]&lt;/code&gt; reaches every one. I&lt;br&gt;
checked that rather than assuming it, because the selector does not match pseudo-elements&lt;br&gt;
either, and I had already been wrong once about what a selector covered.&lt;/p&gt;

&lt;p&gt;That is the third time on this one page that a count of &lt;em&gt;declarations&lt;/em&gt; got reported as a count&lt;br&gt;
of &lt;em&gt;things happening&lt;/em&gt;: four loops of which two never start, fourteen CSS infinite rules of&lt;br&gt;
which six target nothing, and my own contract that warned against exactly this in writing&lt;br&gt;
before doing it twice.&lt;/p&gt;

&lt;p&gt;The page already had an &lt;code&gt;IntersectionObserver&lt;/code&gt;, and I nearly claimed credit for it. It is not a&lt;br&gt;
brake:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;obs&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;unobserve&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;entry&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;target&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;   &lt;span class="c1"&gt;// one-shot card reveal, then it lets go&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;It reveals cards once and unhooks, and the whole block exits early under &lt;code&gt;prefers-reduced-motion&lt;/code&gt;.&lt;br&gt;
So a second observer, doing an actual pause:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight css"&gt;&lt;code&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="nt"&gt;data-ctl-offscreen&lt;/span&gt;&lt;span class="o"&gt;],&lt;/span&gt; &lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="nt"&gt;data-ctl-offscreen&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nl"&gt;animation-play-state&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;paused&lt;/span&gt; &lt;span class="cp"&gt;!important&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="k"&gt;@media&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;prefers-reduced-motion&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;reduce&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="o"&gt;*,&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="nd"&gt;::before&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="nd"&gt;::after&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nl"&gt;animation-play-state&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;paused&lt;/span&gt; &lt;span class="cp"&gt;!important&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nl"&gt;animation-iteration-count&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;1&lt;/span&gt; &lt;span class="cp"&gt;!important&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nl"&gt;transition-duration&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;0.01ms&lt;/span&gt; &lt;span class="cp"&gt;!important&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;obs&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;IntersectionObserver&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;entries&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nx"&gt;entries&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;forEach&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;e&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;e&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;isIntersecting&lt;/span&gt;
    &lt;span class="p"&gt;?&lt;/span&gt; &lt;span class="nx"&gt;e&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;target&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;removeAttribute&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;data-ctl-offscreen&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;e&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;target&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;setAttribute&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;data-ctl-offscreen&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;''&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;
&lt;span class="p"&gt;},&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;rootMargin&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;200px 0px 200px 0px&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;threshold&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt; &lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="nb"&gt;document&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;querySelectorAll&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;main &amp;gt; section[id]&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;forEach&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;s&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;obs&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;observe&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;s&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;

&lt;span class="nb"&gt;document&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;addEventListener&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;visibilitychange&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="cm"&gt;/* whole-tab pause */&lt;/span&gt; &lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;One check before claiming that gates the standing cost broadly: &lt;code&gt;[data-ctl-offscreen] *&lt;/code&gt; does&lt;br&gt;
not match pseudo-elements, so an infinite animation on a &lt;code&gt;::before&lt;/code&gt; or &lt;code&gt;::after&lt;/code&gt; would keep&lt;br&gt;
running off-screen. I went and looked — &lt;strong&gt;zero of the infinite animations in this file live on&lt;br&gt;
a pseudo-element&lt;/strong&gt;, so the selector covers them. If yours do, add &lt;code&gt;::before&lt;/code&gt; and &lt;code&gt;::after&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;The fifteenth is &lt;code&gt;ambientDrift&lt;/code&gt;, injected from JavaScript rather than written in the&lt;br&gt;
stylesheet, which is why it survives a grep of the CSS. Its elements are appended into the&lt;br&gt;
sections the observer already watches, so the descendant selector catches it.&lt;/p&gt;

&lt;p&gt;Nothing is deleted. Fifteen infinite-animation declarations before, fifteen after. Only the&lt;br&gt;
play state is gated, and only where nobody can see it. The selector is &lt;code&gt;main &amp;gt; section[id]&lt;/code&gt; — eleven&lt;br&gt;
sections, including &lt;code&gt;#world&lt;/code&gt;, which is where the hero lives. Off-screen the Seed rests.&lt;br&gt;
On-screen it still breathes.&lt;/p&gt;

&lt;h3&gt;
  
  
  Numbers
&lt;/h3&gt;

&lt;p&gt;Both sides were deployed as previews &lt;strong&gt;in the same Vercel project&lt;/strong&gt;, alternating A/C in one&lt;br&gt;
session, &lt;code&gt;lighthouse 13.4.1&lt;/code&gt;, mobile, default simulated throttle. That matters: Vercel injects&lt;br&gt;
&lt;code&gt;vercel.live/feedback.js&lt;/code&gt; into previews and not into production, so measuring production against&lt;br&gt;
a preview compares two different pages. Both of these carry it.&lt;/p&gt;

&lt;h3&gt;
  
  
  What I can report
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Total transfer weight is not a CPU measurement.&lt;/strong&gt; It is a sum of response sizes, so it does not&lt;br&gt;
move with host speed:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;A — before&lt;/th&gt;
&lt;th&gt;C — after&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Total byte weight, median of 3&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;568,605 B&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;467,962 B&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Run-to-run spread&lt;/td&gt;
&lt;td&gt;1,616 B&lt;/td&gt;
&lt;td&gt;952 B&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Resources&lt;/td&gt;
&lt;td&gt;10&lt;/td&gt;
&lt;td&gt;10&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Delta: 100,643 B — 98.3 KB, 17.7% of the before.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Worst-case A still beats best-case C by 98,993 B. Every A run transferred more than every C run,&lt;br&gt;
with no overlap. And it independently agrees with the figure I got by &lt;code&gt;curl&lt;/code&gt;-ing the three CDN&lt;br&gt;
URLs directly (100,148–100,488 B) — two different methods, same answer, which is the only reason&lt;br&gt;
I trust either.&lt;/p&gt;

&lt;h3&gt;
  
  
  What I cannot report yet
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Nothing CPU-dependent. My own gate refused all six runs.&lt;/strong&gt;&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;run&lt;/th&gt;
&lt;th&gt;benchmarkIndex&lt;/th&gt;
&lt;th&gt;verdict&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;A-01 / A-02 / A-03&lt;/td&gt;
&lt;td&gt;833 · 827 · 783&lt;/td&gt;
&lt;td&gt;below floor&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;C-01 / C-02 / C-03&lt;/td&gt;
&lt;td&gt;623 · 214 · 660&lt;/td&gt;
&lt;td&gt;below floor&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The floor is 1500. A single calibration run half an hour earlier scored 1711 — then ten&lt;br&gt;
back-to-back Lighthouse runs on an 8 GB laptop drove the host underneath its own threshold. So I&lt;br&gt;
have LCP, TBT and main-thread numbers from those six runs, and by the rule I wrote before I saw&lt;br&gt;
them, they do not go in this post.&lt;/p&gt;

&lt;p&gt;I want to be exact about what that costs the submission: &lt;strong&gt;the headline performance claim here is&lt;br&gt;
a 17.7% transfer reduction and a real bug fix, not a Lighthouse score.&lt;/strong&gt; The CPU numbers need a&lt;br&gt;
machine that is not also running the thing doing the measuring, and I do not have one today.&lt;/p&gt;

&lt;p&gt;Every discarded run is published in the gist anyway — &lt;code&gt;measurements.md&lt;/code&gt; — with its&lt;br&gt;
&lt;code&gt;benchmarkIndex&lt;/code&gt; in the same row, so you can audit the discard instead of taking my word that&lt;br&gt;
one happened.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why the before-number is not the worst one I have.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The first Lighthouse run on this page, 2026-08-17, scored 27, with LCP 10.4 s and TBT 13,310 ms.&lt;br&gt;
It is the most flattering baseline available and I am not using it. Seven later runs of the&lt;br&gt;
same URL, same tool version (&lt;code&gt;lighthouse 13.4.1&lt;/code&gt;), same declared throttle, said LCP 3.67–5.48 s&lt;br&gt;
and TBT 216–709 ms. Run one has never reproduced. Using it as the baseline would make any&lt;br&gt;
before-and-after look dramatically larger than the reproducible baseline does. I am not putting&lt;br&gt;
a multiple on that until the table below exists.&lt;/p&gt;

&lt;p&gt;I also cannot compare a measurement taken on a quiet host to one taken on a dying one. Every&lt;br&gt;
Lighthouse report carries &lt;code&gt;environment.benchmarkIndex&lt;/code&gt;, the host speed it saw. One set of my&lt;br&gt;
runs on 2026-08-17 sat at 302–1113. Every other production set that day sat at 1705–2342. No&lt;br&gt;
overlap. Those slow runs were taken while the laptop was running out of memory; the session&lt;br&gt;
died 27 minutes later. The tool exited cleanly and wrote valid JSON the whole time.&lt;/p&gt;

&lt;p&gt;So, &lt;strong&gt;my&lt;/strong&gt; inclusion rule — 1500 is a threshold I chose, not a Lighthouse validity boundary:&lt;br&gt;
same session, both sides, &lt;code&gt;benchmarkIndex&lt;/code&gt; ≥ 1500 on every run, or the numbers do not go in.&lt;/p&gt;

&lt;h3&gt;
  
  
  What I am not claiming
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;The loop collapse is not the win. On mobile there was one loop. I left it alone rather than
ship a change I could not attribute.&lt;/li&gt;
&lt;li&gt;The &lt;strong&gt;173,280 bytes of inline JavaScript&lt;/strong&gt; inside the 321,920-byte HTML document are untouched.
That is the largest remaining LCP cost and splitting it
is a restructure, not an optimization. Gemini called the inline JS "168 KB." Measured off the
published file it is &lt;strong&gt;173,280 bytes&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Three.js is still on the page. &lt;code&gt;prima-visual.js&lt;/code&gt; (8,773 bytes, live) imports it after first
paint. On hover-capable desktops, &lt;code&gt;hero-webgl.js&lt;/code&gt; (12,852 bytes, live) imports the same
module. One download, two call sites. Lighthouse flags 151 KB of it as unused. Gating the
visual layer on mobile would flatten the page, so it stays until I have something better
than a smaller file.&lt;/li&gt;
&lt;li&gt;The &lt;code&gt;prefers-reduced-motion&lt;/code&gt; guard does not work today. It will work when that early &lt;code&gt;return&lt;/code&gt;
is gone. I do not get to write that sentence in the past tense until a visitor's browser
actually takes the other path.&lt;/li&gt;
&lt;li&gt;Removing &lt;code&gt;fireIntro&lt;/code&gt; is owner-directed deletion. It is disclosed. It is not the optimization.&lt;/li&gt;
&lt;li&gt;This is not live on &lt;code&gt;primaworkflows.com&lt;/code&gt; yet. The hashes above are the before. The after is
still a local preview candidate.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  The part I would tell someone starting
&lt;/h3&gt;

&lt;p&gt;I wrote a careful specification of my own site, from memory of my own site, and it was wrong in&lt;br&gt;
three places: two loops that never ran, a whole class of animation I had not counted, and a&lt;br&gt;
library I called dead that was drawing the scroll. Every check I ran was correct. Every one of&lt;br&gt;
them was narrower than the claim I made from it.&lt;/p&gt;

&lt;p&gt;The bug in the code was five guards under a &lt;code&gt;return&lt;/code&gt;. The bug in me was the same shape one level&lt;br&gt;
up: a real result, reported as if it covered more ground than it did.&lt;/p&gt;




&lt;h2&gt;
  
  
  Best Use of Google AI
&lt;/h2&gt;

&lt;p&gt;I gave Gemini the frozen before-state and asked it to name the contention &lt;em&gt;before&lt;/em&gt; I implemented&lt;br&gt;
anything, so the diagnosis could not be written backwards from the fix. The raw stdout is&lt;br&gt;
timestamped. I did not get to edit what it said.&lt;/p&gt;

&lt;p&gt;It got the thing I had missed: &lt;strong&gt;competing infinite CSS keyframe animations&lt;/strong&gt;, which my own&lt;br&gt;
contract had not counted at all because I had been counting canvases and rAF. It also separated the two&lt;br&gt;
hypotheses: the inline parser-blocking JS (173,280 bytes, not the 168 KB it printed) as the&lt;br&gt;
more plausible cold-load and LCP cost, and the persistent animations as candidates for the&lt;br&gt;
standing main-thread cost. I have not measured that split, so those are hypotheses and not&lt;br&gt;
causes, and I am not going to promote them past what the table below supports. The distinction&lt;br&gt;
still changed what I measured: collapsing loops and then judging the result on LCP would have&lt;br&gt;
shown a real fix as a failure.&lt;/p&gt;

&lt;p&gt;It also told me the page had no &lt;code&gt;IntersectionObserver&lt;/code&gt;. The published HTML has one, at line&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;code&gt;hero-webgl.js&lt;/code&gt; has another. I checked before believing it, which is the only reason
that error is a footnote instead of a paragraph in this post.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;If Gemini had added nothing I would have dropped this category rather than backfill a prompt&lt;br&gt;
after the fix. It added the CSS count. That was enough to keep the section, and not enough to&lt;br&gt;
let it write the article.&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>bugsmash</category>
      <category>webdev</category>
      <category>performance</category>
    </item>
  </channel>
</rss>
