<?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: joyrswd</title>
    <description>The latest articles on DEV Community by joyrswd (@joyrswd).</description>
    <link>https://dev.to/joyrswd</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%2F4093725%2Fc6cbf447-6ce1-498a-a38b-3787c0f7eb25.png</url>
      <title>DEV Community: joyrswd</title>
      <link>https://dev.to/joyrswd</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/joyrswd"/>
    <language>en</language>
    <item>
      <title>I Let AI Handle More of Its Own Review Feedback. Then I Had to Give the Work Boundaries.</title>
      <dc:creator>joyrswd</dc:creator>
      <pubDate>Fri, 11 Sep 2026 09:35:29 +0000</pubDate>
      <link>https://dev.to/joyrswd/i-let-ai-handle-more-of-its-own-review-feedback-then-i-had-to-give-the-work-boundaries-5145</link>
      <guid>https://dev.to/joyrswd/i-let-ai-handle-more-of-its-own-review-feedback-then-i-had-to-give-the-work-boundaries-5145</guid>
      <description>&lt;p&gt;In the previous article, I wrote about treating AI development rules as something that needed regression testing too.&lt;/p&gt;

&lt;p&gt;AIDD Skeleton is my open-source repository template for governing AI-assisted development through repository-level rules.&lt;/p&gt;

&lt;p&gt;That led to another question:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;If an external reviewer finds a problem, how much of the response should the implementation agent handle on its own?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;I did not want every review cycle to become:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;review
↓
finding
↓
human: "fix this"
↓
review again
↓
human: "check this too"
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The implementation agent already had the repository context. Ideally, one useful finding should let it investigate further on its own.&lt;/p&gt;

&lt;p&gt;But more autonomy created another problem.&lt;/p&gt;

&lt;p&gt;The better the agent became at finding related issues, the easier it became for the current task to expand indefinitely.&lt;/p&gt;

&lt;p&gt;So the real problem became:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;How do I let the AI reason broadly without letting it silently redefine the work?&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  I stopped treating review findings as isolated lines
&lt;/h2&gt;

&lt;p&gt;When a reviewer reported a problem, I started asking the implementation agent to look beyond the exact reported location.&lt;/p&gt;

&lt;p&gt;A finding might indicate a broader missed invariant or assumption.&lt;/p&gt;

&lt;p&gt;Instead of:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;finding
↓
fix the reported location
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;the process became closer to:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;finding
↓
what assumption failed?
↓
where else does it matter?
↓
what belongs to the current work?
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This became part of what I called &lt;strong&gt;Coherent Correction&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;The important distinction was:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;The investigation boundary can be wider than the modification boundary.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The agent may inspect sibling paths or higher-level design to understand a problem.&lt;/p&gt;

&lt;p&gt;But discovering an improvement does not automatically authorize it to change that improvement now.&lt;/p&gt;

&lt;p&gt;That boundary was introduced while restructuring the root governance.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/joyrswd/AIDDSkeleton/commit/f34be080551a174cc85635ed5261fa48e904bbf9" rel="noopener noreferrer"&gt;docs: restructure root governance boundaries&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  A valid finding still might not belong to the current work
&lt;/h2&gt;

&lt;p&gt;Once the agent started looking more broadly, it naturally found more things.&lt;/p&gt;

&lt;p&gt;Some needed to be fixed now.&lt;/p&gt;

&lt;p&gt;Some were good ideas, but unrelated to current acceptance.&lt;/p&gt;

&lt;p&gt;Some might matter later.&lt;/p&gt;

&lt;p&gt;So I separated two questions:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Is the finding valid?&lt;/p&gt;
&lt;/blockquote&gt;

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

&lt;blockquote&gt;
&lt;p&gt;What should happen to it now?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;At that stage, AIDD Skeleton used four dispositions:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Disposition&lt;/th&gt;
&lt;th&gt;Meaning&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;Accept now&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Handle it in the current work&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;Reject&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Do not adopt it&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;Defer&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Reconsider it later under relevant conditions&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;Observe&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Keep watching because evidence is insufficient&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The important part was not the names.&lt;/p&gt;

&lt;p&gt;It was that &lt;strong&gt;discovery no longer implied authorization&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;A reviewer could be correct without expanding the current task.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/joyrswd/AIDDSkeleton/commit/08ded669da3b45629c0601c9f8fe8ba81e99fd26" rel="noopener noreferrer"&gt;docs: govern feedback triage and review recall&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Then I made the correction itself a review target
&lt;/h2&gt;

&lt;p&gt;Looking at related surfaces helped, but another pattern remained.&lt;/p&gt;

&lt;p&gt;The agent would correctly fix a finding, and the next review would find a problem introduced by that fix.&lt;/p&gt;

&lt;p&gt;For example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;finding:
there is no fallback

correction:
add a fallback
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now there are new questions.&lt;/p&gt;

&lt;p&gt;What if the fallback fails?&lt;/p&gt;

&lt;p&gt;What if the primary path partially succeeds first?&lt;/p&gt;

&lt;p&gt;Does the fallback still preserve the original invariant?&lt;/p&gt;

&lt;p&gt;So I stopped treating a material correction as evidence that the review was finished.&lt;/p&gt;

&lt;p&gt;The correction itself became something to challenge.&lt;/p&gt;

&lt;p&gt;One of the rules was expressed as:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“Treat a material correction ... as a new adversarial surface.”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;A finding was also treated as a clue about &lt;strong&gt;what the previous review had failed to consider&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;For example:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"There is no real database evidence here."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;could become:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Are we treating simulated evidence as proof of real persistence elsewhere too?"&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That missing review perspective could then be applied to related paths before another external reviewer had to find them one by one.&lt;/p&gt;

&lt;p&gt;This became &lt;strong&gt;Adversarial Self-Review&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/joyrswd/AIDDSkeleton/commit/0611d61bc0a73c0b6caf66add181386a11155a0f" rel="noopener noreferrer"&gt;docs: shift review learning into adversarial self-review&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  When the same problem kept returning, I stopped fixing it locally
&lt;/h2&gt;

&lt;p&gt;Even with broader inspection and self-review, similar findings sometimes kept appearing.&lt;/p&gt;

&lt;p&gt;At some point, repeated findings become evidence themselves.&lt;/p&gt;

&lt;p&gt;If several different surfaces expose the same or closely related cause, maybe the problem is not any single implementation.&lt;/p&gt;

&lt;p&gt;Maybe:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;an invariant is still implicit,&lt;/li&gt;
&lt;li&gt;responsibilities are divided incorrectly,&lt;/li&gt;
&lt;li&gt;the verification model is weak,&lt;/li&gt;
&lt;li&gt;or the work itself was divided at the wrong boundary.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That became the trigger for &lt;strong&gt;Structural Reassessment&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;The distinction matters.&lt;/p&gt;

&lt;p&gt;With the first finding, the agent looks broadly:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Where else could this problem exist?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;When the same cause keeps reappearing, it asks:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Why does this structure keep producing this problem?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The governance later expressed the trigger in terms of cases where:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“findings or corrections repeatedly expose the same or closely related cause”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;I did not want every defect to trigger a repository-wide redesign.&lt;/p&gt;

&lt;p&gt;Repeated related failures became the signal to move up a level.&lt;/p&gt;

&lt;p&gt;Interestingly, this rule ended up applying to the governance itself.&lt;/p&gt;

&lt;p&gt;While compressing the adversarial-review rules, external reviews repeatedly found different meanings that had been lost.&lt;/p&gt;

&lt;p&gt;Instead of restoring missing sentences forever, the agent eventually reconsidered the structure of the review rules themselves.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/joyrswd/AIDDSkeleton/commit/1f5dafd619ee5b23fe4f32ecb16ff287654eef0d" rel="noopener noreferrer"&gt;docs: separate adversarial review responsibilities&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  "Not now" still needed somewhere to live
&lt;/h2&gt;

&lt;p&gt;The feedback dispositions created one more problem.&lt;/p&gt;

&lt;p&gt;What happens to &lt;code&gt;Defer&lt;/code&gt;?&lt;/p&gt;

&lt;p&gt;Keeping it only in a conversation means it may disappear with the session.&lt;/p&gt;

&lt;p&gt;Putting it into formal project definition makes it look adopted.&lt;/p&gt;

&lt;p&gt;Turning every review comment into an Issue felt excessive.&lt;/p&gt;

&lt;p&gt;So I used &lt;code&gt;workbench/&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;A deferred item could be kept with:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;why it was not being handled now,&lt;/li&gt;
&lt;li&gt;the context in which it was found,&lt;/li&gt;
&lt;li&gt;and what condition should cause it to be reconsidered.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;But retention did not mean adoption.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;retained ≠ adopted
retained ≠ promised
retained ≠ active work
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This gave the agent an option between:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;do it now
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;and:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;forget it
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;It could preserve enough context for a later decision without silently turning that decision into a future commitment.&lt;/p&gt;




&lt;h2&gt;
  
  
  &lt;code&gt;workbench/&lt;/code&gt; was starting to mean something different
&lt;/h2&gt;

&lt;p&gt;Originally, &lt;code&gt;workbench/&lt;/code&gt; was mainly for temporary work:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;investigations,&lt;/li&gt;
&lt;li&gt;comparisons,&lt;/li&gt;
&lt;li&gt;prototypes,&lt;/li&gt;
&lt;li&gt;drafts,&lt;/li&gt;
&lt;li&gt;validation output.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;But deferred review findings introduced something different.&lt;/p&gt;

&lt;p&gt;Now some retained material had:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;a reason for not acting now,&lt;/li&gt;
&lt;li&gt;a condition for reconsideration,&lt;/li&gt;
&lt;li&gt;and continuity across conversations.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The repository was starting to preserve &lt;strong&gt;work state&lt;/strong&gt;, not only temporary work material.&lt;/p&gt;

&lt;p&gt;That also clarified what I actually wanted from AI autonomy.&lt;/p&gt;

&lt;p&gt;Not an agent that simply did more.&lt;/p&gt;

&lt;p&gt;An agent that could:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;inspect broadly,&lt;/li&gt;
&lt;li&gt;keep modification scope bounded,&lt;/li&gt;
&lt;li&gt;challenge its own corrections,&lt;/li&gt;
&lt;li&gt;recognize repeated structural problems,&lt;/li&gt;
&lt;li&gt;and preserve work that should be reconsidered later.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;At that point, &lt;code&gt;workbench/&lt;/code&gt; was starting to feel like the wrong name.&lt;/p&gt;

&lt;p&gt;It was no longer just a workbench.&lt;/p&gt;

&lt;p&gt;That led to the next structural change in AIDD Skeleton.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>softwaredevelopment</category>
      <category>git</category>
      <category>opensource</category>
    </item>
    <item>
      <title>AI Development Rules Needed Regression Tests Too</title>
      <dc:creator>joyrswd</dc:creator>
      <pubDate>Sat, 05 Sep 2026 02:44:05 +0000</pubDate>
      <link>https://dev.to/joyrswd/ai-development-rules-needed-regression-tests-too-9f</link>
      <guid>https://dev.to/joyrswd/ai-development-rules-needed-regression-tests-too-9f</guid>
      <description>&lt;p&gt;I had already reached an uncomfortable conclusion:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Giving an AI coding agent better instructions in chat was not enough.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;So I started moving those instructions into the repository itself.&lt;/p&gt;

&lt;p&gt;In AIDDSkeleton, most of that governance lives in &lt;code&gt;AGENTS.md&lt;/code&gt; files.&lt;/p&gt;

&lt;p&gt;They define things like source-of-truth ownership, review behavior, evidence, scope, and lifecycle. Instead of reminding the AI about those rules in every prompt, I wanted an agent to read the repository, understand the rules, and make the right decisions on its own.&lt;/p&gt;

&lt;p&gt;So the experiment was not:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Can I write a better prompt?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;It was:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Can I change &lt;code&gt;AGENTS.md&lt;/code&gt; and cause a fresh AI agent to behave differently without telling it what behavior I expect?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The repository became more consistent.&lt;/p&gt;

&lt;p&gt;The agents seemed to behave better.&lt;/p&gt;

&lt;p&gt;And then I ran into another problem.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How did I know the &lt;code&gt;AGENTS.md&lt;/code&gt; changes were actually responsible for the improvement?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;An AI agent can produce a better result for many reasons:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;the task prompt was slightly different,&lt;/li&gt;
&lt;li&gt;previous conversation context leaked the expected answer,&lt;/li&gt;
&lt;li&gt;the agent saw later commits,&lt;/li&gt;
&lt;li&gt;I accidentally hinted at the problem,&lt;/li&gt;
&lt;li&gt;or the model simply took a different reasoning path that day.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;At some point, “this seems better” stopped being good enough.&lt;/p&gt;

&lt;p&gt;So I started regression-testing the rules themselves.&lt;/p&gt;




&lt;h2&gt;
  
  
  The repository was becoming part of the prompt
&lt;/h2&gt;

&lt;p&gt;The project is &lt;a href="https://github.com/joyrswd/AIDDSkeleton" rel="noopener noreferrer"&gt;AIDDSkeleton&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;It is a repository skeleton for AI-driven development.&lt;/p&gt;

&lt;p&gt;Most of its interesting behavior does not come from scripts or a framework.&lt;/p&gt;

&lt;p&gt;It comes from repository-local governance.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;AGENTS.md&lt;/code&gt; files tell an AI agent how to interpret the information around it: what counts as authority, which documents are sources of truth, what evidence is sufficient, how findings should affect current scope, and when work should or should not continue.&lt;/p&gt;

&lt;p&gt;That distinction matters.&lt;/p&gt;

&lt;p&gt;I was deliberately trying to reduce the amount of intelligence carried by the immediate task prompt.&lt;/p&gt;

&lt;p&gt;A task could remain relatively ordinary:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Review this change.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;or:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Fix this issue.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The more interesting behavior was supposed to come from the repository instructions the agent discovered and followed by itself.&lt;/p&gt;

&lt;p&gt;That creates a strange testing problem.&lt;/p&gt;

&lt;p&gt;If I change a TypeScript function, I can run a test.&lt;/p&gt;

&lt;p&gt;If I change &lt;code&gt;AGENTS.md&lt;/code&gt; and expect an AI agent to make a different autonomous decision, what exactly do I run?&lt;/p&gt;




&lt;h2&gt;
  
  
  Commit &lt;code&gt;08ded669&lt;/code&gt; — feedback stopped meaning “do this now”
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://github.com/joyrswd/AIDDSkeleton/commit/08ded669da3b45629c0601c9f8fe8ba81e99fd26" rel="noopener noreferrer"&gt;&lt;strong&gt;08ded669 — docs: govern feedback triage and review recall&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;One early change separated two things I had been mixing together:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How serious is this finding?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;and&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What should we do with it now?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;A review comment could be valid without automatically becoming current work.&lt;/p&gt;

&lt;p&gt;The governance started distinguishing dispositions such as:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Accept now
Reject
Defer
Observe
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;from classifications such as:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Blocker
In-scope deficiency
Follow-up
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This made it harder for every interesting suggestion to silently expand the task.&lt;/p&gt;

&lt;p&gt;More importantly, this was not supposed to require me to remind the agent:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Be careful not to expand scope.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The rule lived in the repository.&lt;/p&gt;

&lt;p&gt;The agent was supposed to encounter a finding, interpret it under the current &lt;code&gt;AGENTS.md&lt;/code&gt;, and decide for itself whether that finding belonged in the current work.&lt;/p&gt;

&lt;p&gt;That exposed a deeper problem.&lt;/p&gt;

&lt;p&gt;I could read the new rule and think:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Yes. This is clearer.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;But that still did not tell me whether a fresh agent would actually make a different decision because of it.&lt;/p&gt;

&lt;p&gt;So I started applying candidate governance to another repository that already used AIDDSkeleton-style rules and observing what the agent did.&lt;/p&gt;

&lt;p&gt;That became the basic idea:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;A governance change is not validated only by reading &lt;code&gt;AGENTS.md&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;It also needs behavioral evidence from an agent actually operating under that &lt;code&gt;AGENTS.md&lt;/code&gt;.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  My first regression tests had a bug
&lt;/h2&gt;

&lt;p&gt;At first, the experiments looked promising.&lt;/p&gt;

&lt;p&gt;I would give the agent a review finding and ask things such as:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Is there a common cause?&lt;/li&gt;
&lt;li&gt;Are there sibling surfaces with the same problem?&lt;/li&gt;
&lt;li&gt;Should this be reconsidered at a higher level?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The agent generalized.&lt;/p&gt;

&lt;p&gt;It found related problems.&lt;/p&gt;

&lt;p&gt;It produced broader corrections.&lt;/p&gt;

&lt;p&gt;Great.&lt;/p&gt;

&lt;p&gt;Except for one thing.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;I had told it what kind of reasoning I wanted.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The candidate &lt;code&gt;AGENTS.md&lt;/code&gt; might have been causing the behavior.&lt;/p&gt;

&lt;p&gt;But the task prompt was carrying the same idea.&lt;/p&gt;

&lt;p&gt;If I wanted to test whether repository governance caused an agent to look beyond the immediate symptom, I could not write:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Look beyond the immediate symptom.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;I had effectively written the expected answer into the test input.&lt;/p&gt;

&lt;p&gt;That meant the experiment could answer:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Can the model follow this hint?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;But not:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Did the &lt;code&gt;AGENTS.md&lt;/code&gt; change make the model do this on its own?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The regression test itself had a bug.&lt;/p&gt;




&lt;h2&gt;
  
  
  Commit &lt;code&gt;0611d61b&lt;/code&gt; — a finding became more than a patch target
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://github.com/joyrswd/AIDDSkeleton/commit/0611d61bc0a73c0b6caf66add181386a11155a0f" rel="noopener noreferrer"&gt;&lt;strong&gt;0611d61b — docs: shift review learning into adversarial self-review&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The review model then changed more substantially.&lt;/p&gt;

&lt;p&gt;A valid finding was no longer just something to patch.&lt;/p&gt;

&lt;p&gt;It could also reveal something about the reasoning that had failed to detect the problem earlier.&lt;/p&gt;

&lt;p&gt;The idea was roughly:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;finding
   |
   v
what did we miss?
   |
   v
does that missed perspective matter elsewhere?
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Again, the important part was that I did &lt;strong&gt;not&lt;/strong&gt; want to put that sequence into every review prompt.&lt;/p&gt;

&lt;p&gt;I wanted a fresh agent to receive an ordinary finding, read the repository governance, and independently decide whether the finding implied a wider review surface.&lt;/p&gt;

&lt;p&gt;That sounded useful.&lt;/p&gt;

&lt;p&gt;It also made the testing problem harder.&lt;/p&gt;

&lt;p&gt;If I explicitly asked the agent to inspect sibling paths or look for a shared cause, I would no longer know whether &lt;code&gt;AGENTS.md&lt;/code&gt; itself was responsible.&lt;/p&gt;

&lt;p&gt;So the prompt had to become more neutral as the repository governance became more capable.&lt;/p&gt;




&lt;h2&gt;
  
  
  Freezing the past
&lt;/h2&gt;

&lt;p&gt;The next version of the experiment started from a real historical commit.&lt;/p&gt;

&lt;p&gt;Not the latest repository.&lt;/p&gt;

&lt;p&gt;Not a manually reconstructed example.&lt;/p&gt;

&lt;p&gt;An actual past state.&lt;/p&gt;

&lt;p&gt;I treated that commit as a fixture.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;historical consumer commit
          |
          +-- Control
          |     old AGENTS.md
          |
          +-- Treatment
                candidate AGENTS.md
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Both worlds started from the same repository state.&lt;/p&gt;

&lt;p&gt;The task prompt was kept materially the same.&lt;/p&gt;

&lt;p&gt;The intended experimental variable was the governance.&lt;/p&gt;

&lt;p&gt;The important part was also what the agent was &lt;strong&gt;not&lt;/strong&gt; allowed to see.&lt;/p&gt;

&lt;p&gt;Everything after the fixture was treated as nonexistent:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;later commits,&lt;/li&gt;
&lt;li&gt;later Pull Requests,&lt;/li&gt;
&lt;li&gt;later review comments,&lt;/li&gt;
&lt;li&gt;known fixes,&lt;/li&gt;
&lt;li&gt;previous regression results.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In other words, I tried to create two artificial timelines from Git history.&lt;/p&gt;

&lt;p&gt;The agent could see the past.&lt;/p&gt;

&lt;p&gt;It could not see the future.&lt;/p&gt;

&lt;p&gt;If a later review had already identified a bug, allowing the agent to discover that comment would destroy the experiment.&lt;/p&gt;

&lt;p&gt;It would no longer be testing whether the candidate &lt;code&gt;AGENTS.md&lt;/code&gt; helped the agent discover the issue.&lt;/p&gt;

&lt;p&gt;It would be testing whether the agent could read the answer.&lt;/p&gt;




&lt;h2&gt;
  
  
  Control and Treatment did not behave the way I wanted
&lt;/h2&gt;

&lt;p&gt;This was probably the point where I started trusting the method.&lt;/p&gt;

&lt;p&gt;The candidate governance did &lt;strong&gt;not&lt;/strong&gt; simply win every round.&lt;/p&gt;

&lt;p&gt;In one MediaStorage scenario, the Control branch explored a collision problem more aggressively.&lt;/p&gt;

&lt;p&gt;The original issue was effectively:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;destination already exists
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The Control agent spontaneously pushed further toward:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;what if two writers race for the same destination?
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The Treatment agent improved the requested surface, but in that run it did not expand as far into the race condition.&lt;/p&gt;

&lt;p&gt;That was inconvenient.&lt;/p&gt;

&lt;p&gt;It was also excellent evidence.&lt;/p&gt;

&lt;p&gt;If every experiment had ended with:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;new &lt;code&gt;AGENTS.md&lt;/code&gt; good&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;I would have trusted the experiments less.&lt;/p&gt;

&lt;p&gt;Instead, I had an actual behavioral concern.&lt;/p&gt;

&lt;p&gt;The candidate governance seemed stronger in some kinds of generalization, but possibly weaker in immediate exploration breadth.&lt;/p&gt;

&lt;p&gt;So I did not declare victory.&lt;/p&gt;

&lt;p&gt;I changed the repository rules again.&lt;/p&gt;




&lt;h2&gt;
  
  
  This was regression evidence, not a benchmark
&lt;/h2&gt;

&lt;p&gt;There is an important limitation here.&lt;/p&gt;

&lt;p&gt;I was not running each fixture dozens or hundreds of times.&lt;/p&gt;

&lt;p&gt;I was not estimating a statistically meaningful success rate.&lt;/p&gt;

&lt;p&gt;And across different AI providers, I was not controlling sampling parameters such as temperature closely enough to claim that the runs formed a clean quantitative benchmark.&lt;/p&gt;

&lt;p&gt;So results like:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Treatment expanded the review surface.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;or:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Control found the race condition first.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;should not be read as:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Treatment has a 73% probability of doing X.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;I did not have that data.&lt;/p&gt;

&lt;p&gt;The regressions were primarily adversarial behavioral checks.&lt;/p&gt;

&lt;p&gt;I was asking questions such as:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Can the intended behavior appear without being prompted?&lt;/li&gt;
&lt;li&gt;Does the candidate introduce a material behavioral regression?&lt;/li&gt;
&lt;li&gt;Does it cause scope or authority violations?&lt;/li&gt;
&lt;li&gt;Does a concern still reproduce after the governance is refined?&lt;/li&gt;
&lt;li&gt;Does the final candidate retain the behavior seen in an earlier revision?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In practice, my judgments were closer to:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;PASS
- intended behavior appeared without being hinted
- no material governance violation appeared

CONCERN
- useful behavior appeared
- but another material regression or scope issue appeared

FAIL
- expected behavior did not appear
- or the candidate caused a material governance violation
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Those categories were not a formal scoring system from day one.&lt;/p&gt;

&lt;p&gt;They emerged as I repeated the experiments.&lt;/p&gt;

&lt;p&gt;That distinction matters.&lt;/p&gt;

&lt;p&gt;I was building a regression method, not claiming to have built an LLM benchmark.&lt;/p&gt;




&lt;h2&gt;
  
  
  Commit &lt;code&gt;94d163b8&lt;/code&gt; — a useful experiment that I deliberately removed
&lt;/h2&gt;

&lt;p&gt;At one point I tried persistent review knowledge.&lt;/p&gt;

&lt;p&gt;The idea was attractive.&lt;/p&gt;

&lt;p&gt;If one task teaches the agent a useful lesson, why not save it in the repository and let later agents reuse it?&lt;/p&gt;

&lt;p&gt;The experiment worked.&lt;/p&gt;

&lt;p&gt;Almost too well.&lt;/p&gt;

&lt;p&gt;The retained knowledge materially changed later reasoning.&lt;/p&gt;

&lt;p&gt;A fresh agent could pick up that knowledge and go deeper without me prompting it to do so.&lt;/p&gt;

&lt;p&gt;That was exactly the kind of repository-driven autonomy I was trying to create.&lt;/p&gt;

&lt;p&gt;But it also exposed the danger.&lt;/p&gt;

&lt;p&gt;The retained knowledge influenced decisions outside the original task strongly enough that the boundary between:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;useful prior knowledge
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;and:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;accidental design authority
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;became difficult to control.&lt;/p&gt;

&lt;p&gt;So I removed it.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/joyrswd/AIDDSkeleton/commit/94d163b8a00bad1a4c3af5770a7af3a4303108af" rel="noopener noreferrer"&gt;&lt;strong&gt;94d163b8 — docs: remove knowledge base governance&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;That commit changed how I thought about successful AI testing.&lt;/p&gt;

&lt;p&gt;A test did not need to prove that a new form of autonomous behavior was good.&lt;/p&gt;

&lt;p&gt;It could tell me:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;This repository instruction clearly changes what later agents do, but the side effects are not bounded well enough. Do not ship it.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That is still a successful test.&lt;/p&gt;




&lt;h2&gt;
  
  
  The test became part of the development loop
&lt;/h2&gt;

&lt;p&gt;By this point the workflow looked suspiciously familiar.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;change AGENTS.md
      |
      v
start agent against consumer fixture
      |
      v
observe autonomous behavior
      |
      v
find unexpected behavior
      |
      v
change AGENTS.md again
      |
      v
rerun regression
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That is just software development.&lt;/p&gt;

&lt;p&gt;The implementation language happened to be English.&lt;/p&gt;

&lt;p&gt;And the thing being implemented was partly &lt;strong&gt;agent behavior&lt;/strong&gt;.&lt;/p&gt;




&lt;h2&gt;
  
  
  Commit &lt;code&gt;e5033e6d&lt;/code&gt; — refactoring natural language broke behavior
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://github.com/joyrswd/AIDDSkeleton/commit/e5033e6dd0355173471b6d4171a13efd5bf57d55" rel="noopener noreferrer"&gt;&lt;strong&gt;e5033e6d — docs: compact adversarial self-review escalation&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Next I tried to make the review rules in &lt;code&gt;AGENTS.md&lt;/code&gt; shorter.&lt;/p&gt;

&lt;p&gt;The existing responsibilities were compressed into a smaller structure.&lt;/p&gt;

&lt;p&gt;The new version looked cleaner.&lt;/p&gt;

&lt;p&gt;I believed the semantics were preserved.&lt;/p&gt;

&lt;p&gt;Then review started finding things I had lost.&lt;/p&gt;

&lt;p&gt;The compacted version had weakened or dropped details such as:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;diagnosing why a problem escaped detection,&lt;/li&gt;
&lt;li&gt;retaining the concrete context that exposed it,&lt;/li&gt;
&lt;li&gt;reopening review when later evidence changed the basis,&lt;/li&gt;
&lt;li&gt;keeping review proportional and bounded,&lt;/li&gt;
&lt;li&gt;reopening broader review after a broad correction.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This was a useful reminder that natural-language refactoring can fail exactly like code refactoring.&lt;/p&gt;

&lt;p&gt;A human reader can look at two versions of &lt;code&gt;AGENTS.md&lt;/code&gt; and decide that they “basically say the same thing.”&lt;/p&gt;

&lt;p&gt;An agent may not behave as though they say the same thing.&lt;/p&gt;

&lt;p&gt;The behaviorally important conditions can disappear even when the prose looks cleaner.&lt;/p&gt;

&lt;p&gt;Eventually I stopped treating “fewer bullets” as a goal.&lt;/p&gt;




&lt;h2&gt;
  
  
  Commit &lt;code&gt;1f5dafd6&lt;/code&gt; — structure won over compression
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://github.com/joyrswd/AIDDSkeleton/commit/1f5dafd619ee5b23fe4f32ecb16ff287654eef0d" rel="noopener noreferrer"&gt;&lt;strong&gt;1f5dafd6 — docs: separate adversarial review responsibilities&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The rule was reorganized around five responsibilities:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;1. Initial adversarial review
2. Signal assimilation
3. Correction challenge
4. Review continuation / re-entry
5. Structural reassessment
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The &lt;code&gt;AGENTS.md&lt;/code&gt; text became slightly larger again.&lt;/p&gt;

&lt;p&gt;But the responsibilities became clearer.&lt;/p&gt;

&lt;p&gt;At that point I had another problem.&lt;/p&gt;

&lt;p&gt;Most of the behavioral evidence had been collected against earlier candidate commits.&lt;/p&gt;

&lt;p&gt;The repository instructions had changed during review.&lt;/p&gt;

&lt;p&gt;So the final merge candidate needed to go back through the consumer test again.&lt;/p&gt;

&lt;p&gt;A previous agent behaving correctly under an earlier &lt;code&gt;AGENTS.md&lt;/code&gt; did not prove that a fresh agent would behave correctly under the final one.&lt;/p&gt;

&lt;p&gt;Evidence from an earlier revision was not enough.&lt;/p&gt;




&lt;h2&gt;
  
  
  The final &lt;code&gt;AGENTS.md&lt;/code&gt; went back into the frozen past
&lt;/h2&gt;

&lt;p&gt;This time I did not need another full Control/Treatment A/B.&lt;/p&gt;

&lt;p&gt;The earlier comparisons had already given me a baseline.&lt;/p&gt;

&lt;p&gt;What I wanted to know was simpler:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Does a fresh agent operating under the actual final candidate still behave well in the historical fixture?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;So I ran it again.&lt;/p&gt;

&lt;p&gt;The agent got the candidate repository governance.&lt;/p&gt;

&lt;p&gt;It got the historical consumer state.&lt;/p&gt;

&lt;p&gt;It did &lt;strong&gt;not&lt;/strong&gt; get hints about the behaviors I hoped to see.&lt;/p&gt;

&lt;p&gt;It did not get later review comments.&lt;/p&gt;

&lt;p&gt;It did not get the historical answer key.&lt;/p&gt;

&lt;p&gt;This time the earlier breadth concern did not reproduce.&lt;/p&gt;

&lt;p&gt;The agent independently moved from an existing-key collision problem into concurrent same-key publication.&lt;/p&gt;

&lt;p&gt;That was encouraging.&lt;/p&gt;

&lt;p&gt;It meant the wider reasoning appeared without me putting that reasoning into the immediate prompt.&lt;/p&gt;

&lt;p&gt;Then it did something even more interesting.&lt;/p&gt;

&lt;p&gt;It explored media reads and introduced requirements around:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;avoiding whole-artifact buffering,&lt;/li&gt;
&lt;li&gt;backpressure,&lt;/li&gt;
&lt;li&gt;client-disconnect cancellation,&lt;/li&gt;
&lt;li&gt;handling storage read failures after response start.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Technically?&lt;/p&gt;

&lt;p&gt;Reasonable.&lt;/p&gt;

&lt;p&gt;Possibly even good engineering.&lt;/p&gt;

&lt;p&gt;And that was exactly the problem.&lt;/p&gt;




&lt;h2&gt;
  
  
  The AI autonomously found a good idea it was not authorized to adopt
&lt;/h2&gt;

&lt;p&gt;I went back to the historical requirements.&lt;/p&gt;

&lt;p&gt;Those read-performance behaviors had not actually been required.&lt;/p&gt;

&lt;p&gt;The approved design did not establish them as current acceptance criteria.&lt;/p&gt;

&lt;p&gt;The agent had crossed a subtle boundary on its own.&lt;/p&gt;

&lt;p&gt;It had moved from:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Find deficiencies in the adopted design.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;to:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Improve the design because this would be better.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;This is one of the failures I now find most interesting in AI-driven development.&lt;/p&gt;

&lt;p&gt;The generated result can look &lt;strong&gt;better&lt;/strong&gt; and still be wrong.&lt;/p&gt;

&lt;p&gt;As repository instructions make an agent more autonomous, finding more things is not enough.&lt;/p&gt;

&lt;p&gt;The agent also needs to distinguish:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;this is a real deficiency in current work
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;from:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;this is a good idea for some other scope
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;A benchmark based only on code quality could easily reward the wrong behavior here.&lt;/p&gt;




&lt;h2&gt;
  
  
  I sent one finding back into the same session
&lt;/h2&gt;

&lt;p&gt;I did not tell the agent to revert the change.&lt;/p&gt;

&lt;p&gt;I did not tell it which parts to keep.&lt;/p&gt;

&lt;p&gt;I gave it one narrower challenge:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Are these new read-performance contracts actually required by the existing approved scope, or were useful improvements promoted into formal design without sufficient authority?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The agent re-evaluated its own previous work under the same repository governance.&lt;/p&gt;

&lt;p&gt;It removed the new read-performance requirements.&lt;/p&gt;

&lt;p&gt;But it did &lt;strong&gt;not&lt;/strong&gt; revert everything from the previous correction.&lt;/p&gt;

&lt;p&gt;The collision changes stayed.&lt;/p&gt;

&lt;p&gt;Why?&lt;/p&gt;

&lt;p&gt;Because those were supported by an already-adopted invariant:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;do not silently overwrite an existing key
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Concurrent publication could violate that invariant.&lt;/p&gt;

&lt;p&gt;So collision safety remained an in-scope correction.&lt;/p&gt;

&lt;p&gt;The new read-performance contract did not.&lt;/p&gt;

&lt;p&gt;The resulting behavior was effectively:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;finding
   |
   v
re-evaluate authority and scope
   |
   +-- read performance requirements
   |      no existing requirement
   |      -&amp;gt; remove
   |
   +-- collision safety
          existing invariant
          -&amp;gt; keep
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That was a much stronger result than simply finding more bugs.&lt;/p&gt;

&lt;p&gt;The agent had expanded its own review, overreached, received a finding, and then separated the justified part of its own work from the unjustified part.&lt;/p&gt;

&lt;p&gt;That was much closer to the kind of autonomous development behavior I wanted &lt;code&gt;AGENTS.md&lt;/code&gt; to produce.&lt;/p&gt;




&lt;h2&gt;
  
  
  The harness is still mostly manual
&lt;/h2&gt;

&lt;p&gt;Another limitation is operational.&lt;/p&gt;

&lt;p&gt;There is no fully automated CI harness behind these experiments yet.&lt;/p&gt;

&lt;p&gt;Git gives me reproducible fixtures and branches, but the full loop still involves manual orchestration:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;select historical fixture
      |
      v
prepare Control / Treatment state
      |
      v
apply candidate governance
      |
      v
start a fresh agent
      |
      v
retain commits, diffs, and reports
      |
      v
compare observed behavior
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The mechanical parts are reproducible.&lt;/p&gt;

&lt;p&gt;The behavioral assessment still involves human judgment, often assisted by another AI review.&lt;/p&gt;

&lt;p&gt;That has a real cost.&lt;/p&gt;

&lt;p&gt;A consumer regression is much heavier than running a normal unit test.&lt;/p&gt;

&lt;p&gt;But at this stage, I think that is acceptable.&lt;/p&gt;

&lt;p&gt;Automating the loop before the evaluation criteria stabilized would have meant automating my assumptions too.&lt;/p&gt;

&lt;p&gt;The experiments were still teaching me what should count as a signal, what should count as overreach, and which differences actually mattered.&lt;/p&gt;

&lt;p&gt;Once those criteria become stable enough, much more of the loop could be automated.&lt;/p&gt;

&lt;p&gt;A future harness could:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;restore a fixed fixture commit,&lt;/li&gt;
&lt;li&gt;apply a selected &lt;code&gt;AGENTS.md&lt;/code&gt; candidate,&lt;/li&gt;
&lt;li&gt;launch a fresh agent with a fixed neutral task,&lt;/li&gt;
&lt;li&gt;retain the transcript, diff, commits, and reports,&lt;/li&gt;
&lt;li&gt;repeat the same fixture N times,&lt;/li&gt;
&lt;li&gt;classify predefined behavioral outcomes,&lt;/li&gt;
&lt;li&gt;compare Control and Treatment rates.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;That would also make it possible to say things I cannot honestly say today, such as:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Control:
  intended behavior in 3 / 10 runs

Treatment:
  intended behavior in 8 / 10 runs
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;I am not there yet.&lt;/p&gt;

&lt;p&gt;For now, the method is closer to an adversarial regression suite than an automated statistical benchmark.&lt;/p&gt;




&lt;h2&gt;
  
  
  What I learned from black-box testing &lt;code&gt;AGENTS.md&lt;/code&gt;
&lt;/h2&gt;

&lt;p&gt;The obvious lesson is that prompts can be tested.&lt;/p&gt;

&lt;p&gt;But that is not really the interesting part.&lt;/p&gt;

&lt;p&gt;The more important lesson is that &lt;strong&gt;repository instructions behave like executable policy once an AI agent is expected to act on them autonomously&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Changing a few lines in &lt;code&gt;AGENTS.md&lt;/code&gt; can alter:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;what an agent inspects,&lt;/li&gt;
&lt;li&gt;which nearby problems it notices,&lt;/li&gt;
&lt;li&gt;what it considers evidence,&lt;/li&gt;
&lt;li&gt;what it decides belongs in current scope,&lt;/li&gt;
&lt;li&gt;when it reopens review,&lt;/li&gt;
&lt;li&gt;when it stops,&lt;/li&gt;
&lt;li&gt;and what it believes it is allowed to change.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Those ar&lt;/p&gt;

</description>
      <category>ai</category>
      <category>opensource</category>
      <category>git</category>
      <category>softwaredevelopment</category>
    </item>
    <item>
      <title>The Repository Was Organized. The Documentation Still Kept Spreading.</title>
      <dc:creator>joyrswd</dc:creator>
      <pubDate>Mon, 31 Aug 2026 10:55:13 +0000</pubDate>
      <link>https://dev.to/joyrswd/the-repository-was-organized-the-documentation-still-kept-spreading-36co</link>
      <guid>https://dev.to/joyrswd/the-repository-was-organized-the-documentation-still-kept-spreading-36co</guid>
      <description>&lt;p&gt;By the beginning of August, AIDD Skeleton had its basic shape.&lt;/p&gt;

&lt;p&gt;There were five places for project information:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;plans/
etc/
workbench/
references/
products/
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The first problem had been structural.&lt;/p&gt;

&lt;p&gt;When development happens through conversations with AI, where should requirements go? Where should unfinished investigations go? Where should implementation live?&lt;/p&gt;

&lt;p&gt;Giving each responsibility a place helped.&lt;/p&gt;

&lt;p&gt;But some of the problems I mentioned in the first article had already hinted that structure alone would not be enough.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;TRACEABILITY.md&lt;/code&gt; had started growing too easily.&lt;/p&gt;

&lt;p&gt;The source of truth could disagree with the implementation — and sometimes the source of truth itself was the thing that needed correction.&lt;/p&gt;

&lt;p&gt;At the time, these looked like separate early problems.&lt;/p&gt;

&lt;p&gt;They weren't.&lt;/p&gt;

&lt;p&gt;They were the first signs of a much deeper question:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;It wasn't enough to decide where documentation belonged. I also had to decide what that documentation was allowed to mean.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  The first warning was documentation that could grow forever
&lt;/h2&gt;

&lt;p&gt;In the first article, I mentioned that the first pull request in AIDD Skeleton was about preventing &lt;code&gt;TRACEABILITY.md&lt;/code&gt; from growing without bound.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/joyrswd/AIDDSkeleton/commit/9be3f708b7cff30d42ffefe927cf4b0f1e2850a9" rel="noopener noreferrer"&gt;Prevent TRACEABILITY.md from growing without bound — August 1, 2026&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;At the time, I treated it mostly as a local documentation problem.&lt;/p&gt;

&lt;p&gt;Traceability was useful because it connected requirements, design, implementation, and verification.&lt;/p&gt;

&lt;p&gt;But it was also an obvious place to keep adding more information.&lt;/p&gt;

&lt;p&gt;More implementation units.&lt;/p&gt;

&lt;p&gt;More tests.&lt;/p&gt;

&lt;p&gt;More verification records.&lt;/p&gt;

&lt;p&gt;More relationships.&lt;/p&gt;

&lt;p&gt;More historical context.&lt;/p&gt;

&lt;p&gt;Each addition could be justified.&lt;/p&gt;

&lt;p&gt;Together, they could turn one useful document into an ever-growing index of the entire project.&lt;/p&gt;

&lt;p&gt;What became clear later was that &lt;code&gt;TRACEABILITY.md&lt;/code&gt; was not a special case.&lt;/p&gt;

&lt;p&gt;The same pattern could happen everywhere.&lt;/p&gt;

&lt;p&gt;A status document could start carrying implementation history.&lt;/p&gt;

&lt;p&gt;A testing document could accumulate execution results.&lt;/p&gt;

&lt;p&gt;A design document could absorb facts discovered from the current code.&lt;/p&gt;

&lt;p&gt;An investigation could eventually look like a project decision simply because nobody had removed it.&lt;/p&gt;

&lt;p&gt;The repository did not just need rules about &lt;strong&gt;where documents belonged&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;It needed rules about &lt;strong&gt;what those documents were allowed to mean&lt;/strong&gt;.&lt;/p&gt;




&lt;h2&gt;
  
  
  The source of truth could be wrong too
&lt;/h2&gt;

&lt;p&gt;Another event from the first stage of the project became more important in hindsight.&lt;/p&gt;

&lt;p&gt;If the implementation disagreed with the documentation, the obvious reaction was:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;The code is wrong. Make it match the source of truth.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;But that assumes the source of truth is actually correct.&lt;/p&gt;

&lt;p&gt;So AIDD Skeleton introduced a different order of diagnosis:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Check whether the source of truth is complete, current, and internally consistent.&lt;/li&gt;
&lt;li&gt;Then check whether the implementation conforms to it.&lt;/li&gt;
&lt;li&gt;Then check whether verification actually demonstrates that conformity.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://github.com/joyrswd/AIDDSkeleton/commit/cee2f15a6a910cb881f5569e1a779dcf8cda6c8c" rel="noopener noreferrer"&gt;Review sources of truth before implementation — August 1, 2026&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;At first, this looked like a rule for resolving documentation drift.&lt;/p&gt;

&lt;p&gt;Later, I realized it implied something much broader.&lt;/p&gt;

&lt;p&gt;Documentation was not automatically trustworthy because it lived in the right directory.&lt;/p&gt;

&lt;p&gt;That changed the questions I was asking.&lt;/p&gt;

&lt;p&gt;Not:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Where should I put this file?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;But:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Is this actually an adopted decision?&lt;/p&gt;

&lt;p&gt;Is this describing what the system should be, or what it happens to be today?&lt;/p&gt;

&lt;p&gt;Is this a requirement, a design decision, an implementation observation, or evidence from one execution?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Those distinctions turned out to matter much more than the directory names.&lt;/p&gt;




&lt;h2&gt;
  
  
  &lt;code&gt;plans/&lt;/code&gt; needed a much stricter meaning
&lt;/h2&gt;

&lt;p&gt;The largest early ambiguity was inside &lt;code&gt;plans/&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;At first, it was tempting to keep both the current state and a proposed target state there.&lt;/p&gt;

&lt;p&gt;That sounds useful.&lt;/p&gt;

&lt;p&gt;You can see where the project is now and where it is supposed to go.&lt;/p&gt;

&lt;p&gt;But it creates an authority problem.&lt;/p&gt;

&lt;p&gt;Suppose a document says:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Current:
Authentication uses approach A.

Target:
Authentication will use approach B.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Has B been approved?&lt;/p&gt;

&lt;p&gt;Is it still being discussed?&lt;/p&gt;

&lt;p&gt;Can the AI begin migrating toward it?&lt;/p&gt;

&lt;p&gt;What happens if another document still describes A as the intended design?&lt;/p&gt;

&lt;p&gt;The distinction between &lt;strong&gt;describing a possible future&lt;/strong&gt; and &lt;strong&gt;adopting that future as the project definition&lt;/strong&gt; was too important to leave implicit.&lt;/p&gt;

&lt;p&gt;By August 13, AIDD Skeleton made the boundary much clearer:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;workbench/  -&amp;gt; candidate state, investigation, proposed change
plans/      -&amp;gt; adopted project definition
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://github.com/joyrswd/AIDDSkeleton/commit/4a26a81ae3ce9f206c57d81ea9bca070fe014867" rel="noopener noreferrer"&gt;Clarify source-of-truth change handling — August 13, 2026&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This meant a proposed design did not become authoritative just because someone had documented it carefully.&lt;/p&gt;

&lt;p&gt;It remained in the workbench until it was actually adopted.&lt;/p&gt;

&lt;p&gt;That rule solved more than a file-placement problem.&lt;/p&gt;

&lt;p&gt;It separated two fundamentally different states of knowledge:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;We are thinking about this.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;and&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;The project has decided this.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;For AI-driven development, that difference is enormous.&lt;/p&gt;

&lt;p&gt;A human developer can often recognize that a beautifully written target design is still only a proposal.&lt;/p&gt;

&lt;p&gt;An AI agent should not have to infer that from tone.&lt;/p&gt;

&lt;p&gt;The repository needed to represent the distinction explicitly.&lt;/p&gt;




&lt;h2&gt;
  
  
  Then implementation knowledge started leaking back into design
&lt;/h2&gt;

&lt;p&gt;Another problem appeared from the opposite direction.&lt;/p&gt;

&lt;p&gt;Suppose an AI investigates an existing application.&lt;/p&gt;

&lt;p&gt;It reads the code.&lt;/p&gt;

&lt;p&gt;It discovers file paths, framework conventions, database structures, library behavior, deployment details, and internal APIs.&lt;/p&gt;

&lt;p&gt;That information can be extremely useful.&lt;/p&gt;

&lt;p&gt;But useful does not automatically mean normative.&lt;/p&gt;

&lt;p&gt;If the current implementation is copied into a design document, the design gradually stops describing what the system &lt;strong&gt;must mean&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;It starts describing how this particular version happens to be implemented.&lt;/p&gt;

&lt;p&gt;Eventually, future implementations become constrained by yesterday's implementation details.&lt;/p&gt;

&lt;p&gt;So another boundary had to become explicit:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Can the project still be reconstructed semantically from its normative documentation without access to the current implementation?&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That question led to a much stronger separation between normative and non-normative information.&lt;/p&gt;

&lt;p&gt;On August 20:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/joyrswd/AIDDSkeleton/commit/7ea1f5bb5b7ce403f0f1ef4c615f7b08d756a3f4" rel="noopener noreferrer"&gt;Tighten normative documentation boundaries — August 20, 2026&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Requirements, design, and testing were increasingly treated as documents that could constrain future implementation.&lt;/p&gt;

&lt;p&gt;Current implementation observations could still be valuable.&lt;/p&gt;

&lt;p&gt;But they should not silently inherit that authority.&lt;/p&gt;

&lt;p&gt;This was one of the points where I realized that "documentation" was too broad a category.&lt;/p&gt;

&lt;p&gt;Two Markdown files could look almost identical while having completely different responsibilities.&lt;/p&gt;

&lt;p&gt;One might define what future code must preserve.&lt;/p&gt;

&lt;p&gt;The other might simply record something useful I learned today.&lt;/p&gt;

&lt;p&gt;Treating both as equally authoritative was dangerous.&lt;/p&gt;




&lt;h2&gt;
  
  
  Testing had the same problem
&lt;/h2&gt;

&lt;p&gt;Testing introduced another version of the same confusion.&lt;/p&gt;

&lt;p&gt;A testing specification might say:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;The system must reject an expired token.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That is a normative statement.&lt;/p&gt;

&lt;p&gt;It defines what must be verified.&lt;/p&gt;

&lt;p&gt;Now suppose I run the test today and record:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;PHPUnit 12.3.1 passed this test on commit &lt;code&gt;abc123&lt;/code&gt;.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That is useful too.&lt;/p&gt;

&lt;p&gt;But it is not the testing specification.&lt;/p&gt;

&lt;p&gt;It is evidence from a particular execution.&lt;/p&gt;

&lt;p&gt;The difference matters because one of them can remain valid while the other becomes stale.&lt;/p&gt;

&lt;p&gt;The requirement to reject expired tokens may still be valid six months later.&lt;/p&gt;

&lt;p&gt;The fact that one test passed six months ago does not prove that the current system still does.&lt;/p&gt;

&lt;p&gt;Yet AI-generated project documentation can easily mix the two.&lt;/p&gt;

&lt;p&gt;Testing intent, execution output, screenshots, logs, observations, and verification summaries can all look like "testing information."&lt;/p&gt;

&lt;p&gt;So AIDD Skeleton began separating them explicitly.&lt;/p&gt;

&lt;p&gt;On August 21:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/joyrswd/AIDDSkeleton/commit/1f5ff0682b5d41b5f4ad83a49643c0c9eaf5d294" rel="noopener noreferrer"&gt;Separate execution evidence from normative testing — August 21, 2026&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Then the boundary was refined further:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/joyrswd/AIDDSkeleton/commit/d72ba1eff5f17884f98af909729a921fb6e54216" rel="noopener noreferrer"&gt;Refine execution evidence boundaries — August 21, 2026&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;And the next day, active verification evidence was routed through the workbench instead of being allowed to quietly become permanent project truth:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/joyrswd/AIDDSkeleton/commit/04eb9564c55266d50c2b4e1afe95e0b27d59c80b" rel="noopener noreferrer"&gt;Route verification evidence through workbench — August 22, 2026&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/joyrswd/AIDDSkeleton/commit/759318f51e95aa31b404f63f174b65f908ba3270" rel="noopener noreferrer"&gt;Tighten verification evidence lifecycle — August 22, 2026&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The underlying lesson was simple:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Evidence has a lifecycle.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;A specification can remain valid.&lt;/p&gt;

&lt;p&gt;An execution result can become stale.&lt;/p&gt;

&lt;p&gt;A useful investigation can stop being useful.&lt;/p&gt;

&lt;p&gt;A temporary artifact can deserve promotion into durable reference material.&lt;/p&gt;

&lt;p&gt;Another can simply be deleted.&lt;/p&gt;

&lt;p&gt;Keeping everything forever is not traceability.&lt;/p&gt;

&lt;p&gt;Sometimes it is just accumulation.&lt;/p&gt;




&lt;h2&gt;
  
  
  I had been treating documentation as files
&lt;/h2&gt;

&lt;p&gt;By this point, the original five-directory model still looked almost unchanged.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;plans/
etc/
workbench/
references/
products/
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;But my understanding of what lived inside those directories had changed substantially.&lt;/p&gt;

&lt;p&gt;At the beginning, I had mostly been asking:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Where should this go?&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Now the questions looked more like:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Has this been adopted?&lt;/p&gt;

&lt;p&gt;Does this constrain future implementation?&lt;/p&gt;

&lt;p&gt;Is it an observation or a decision?&lt;/p&gt;

&lt;p&gt;Is this testing intent or execution evidence?&lt;/p&gt;

&lt;p&gt;How long is this evidence valid?&lt;/p&gt;

&lt;p&gt;If this information is retained, why is it still useful?&lt;/p&gt;

&lt;p&gt;If it is moved, what other documents still depend on it?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The repository structure had not become much more complicated.&lt;/p&gt;

&lt;p&gt;The information model had.&lt;/p&gt;

&lt;p&gt;And that was probably unavoidable.&lt;/p&gt;

&lt;p&gt;The more development I delegated to AI, the less comfortable I became relying on distinctions that existed only in my head.&lt;/p&gt;

&lt;p&gt;A human developer might look at a draft and intuitively understand:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"We're still discussing this."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;An AI agent needs that state to be represented somewhere.&lt;/p&gt;

&lt;p&gt;A human might see an old verification report and know:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"That was from before the refactor."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;An AI agent needs enough provenance and lifecycle information not to mistake it for current proof.&lt;/p&gt;

&lt;p&gt;A human might recognize that a design section merely describes the current framework implementation.&lt;/p&gt;

&lt;p&gt;An AI agent may treat it as a requirement unless the repository tells it otherwise.&lt;/p&gt;

&lt;p&gt;The goal was no longer simply to preserve information.&lt;/p&gt;

&lt;p&gt;It was to preserve its &lt;strong&gt;meaning&lt;/strong&gt;.&lt;/p&gt;




&lt;h2&gt;
  
  
  Less documentation became a feature
&lt;/h2&gt;

&lt;p&gt;This also changed how I thought about documentation quality.&lt;/p&gt;

&lt;p&gt;Previously, completeness often meant adding information.&lt;/p&gt;

&lt;p&gt;Now I was increasingly interested in whether information deserved to exist in the durable project record at all.&lt;/p&gt;

&lt;p&gt;Does this fact belong in the source of truth?&lt;/p&gt;

&lt;p&gt;Does it only matter while we are investigating something?&lt;/p&gt;

&lt;p&gt;Can it be derived from another authoritative source?&lt;/p&gt;

&lt;p&gt;Has it become stale?&lt;/p&gt;

&lt;p&gt;Does keeping it create another place that must be synchronized forever?&lt;/p&gt;

&lt;p&gt;A documentation system can fail because information is missing.&lt;/p&gt;

&lt;p&gt;It can also fail because information never leaves.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;The goal was not maximum documentation.&lt;br&gt;&lt;br&gt;
The goal was minimum ambiguity.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That distinction became increasingly central to AIDD Skeleton.&lt;/p&gt;

&lt;p&gt;And eventually it led to a much stranger problem.&lt;/p&gt;

&lt;p&gt;I had spent weeks tightening the rules that told AI how to classify, retain, promote, and remove project information.&lt;/p&gt;

&lt;p&gt;Those rules were becoming powerful enough to cause significant changes when applied to an existing repository.&lt;/p&gt;

&lt;p&gt;Which raised an uncomfortable question:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;How did I know the rules themselves were right?&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;It was no longer enough to inspect AIDD Skeleton and decide that the rules looked reasonable.&lt;/p&gt;

&lt;p&gt;If the framework was supposed to govern real projects, eventually those rules would have to be tested against real projects too.&lt;/p&gt;

&lt;p&gt;And if applying them produced a bad result, I would need to resist the easiest explanation:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"The project was wrong."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Sometimes the thing that needed debugging might be the framework itself.&lt;/p&gt;

&lt;p&gt;That became the next stage of the project.&lt;/p&gt;




&lt;p&gt;AIDD Skeleton is still evolving:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/joyrswd/AIDDSkeleton" rel="noopener noreferrer"&gt;AIDD Skeleton on GitHub&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The first article in this development history covered how conversations with AI led to the initial five-part repository structure and the creation of &lt;code&gt;workbench/&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;This article covers what happened next: realizing that organizing documents was not enough. Their authority, lifecycle, and evidentiary scope also had to be controlled.&lt;/p&gt;

&lt;p&gt;The next stage began when I started applying those rules to other repositories and asking a different question:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Can the framework itself fail the test?&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;




&lt;p&gt;&lt;em&gt;AI disclosure: This article was written with AI assistance. The narrative was reconstructed from the AIDD Skeleton Git history and my development conversations, and the resulting account was reviewed against the repository history before publication.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>softwaredevelopment</category>
      <category>architecture</category>
      <category>opensource</category>
    </item>
    <item>
      <title>How Conversations With AI Slowly Became a Development Framework</title>
      <dc:creator>joyrswd</dc:creator>
      <pubDate>Sat, 29 Aug 2026 13:46:03 +0000</pubDate>
      <link>https://dev.to/joyrswd/how-conversations-with-ai-slowly-became-a-development-framework-hbb</link>
      <guid>https://dev.to/joyrswd/how-conversations-with-ai-slowly-became-a-development-framework-hbb</guid>
      <description>&lt;p&gt;I didn't start AIDD Skeleton because AI was bad at writing code.&lt;/p&gt;

&lt;p&gt;Quite the opposite.&lt;/p&gt;

&lt;p&gt;I was already using AI as a development partner.&lt;/p&gt;

&lt;p&gt;We would discuss requirements, compare approaches, investigate problems, make design decisions, implement changes, and review the results.&lt;/p&gt;

&lt;p&gt;The conversation itself worked surprisingly well.&lt;/p&gt;

&lt;p&gt;The problem was everything around the conversation.&lt;/p&gt;

&lt;p&gt;As a project continued, more and more things had to survive beyond the current chat:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;decisions we had already made,&lt;/li&gt;
&lt;li&gt;ideas we had considered but not adopted,&lt;/li&gt;
&lt;li&gt;requirements,&lt;/li&gt;
&lt;li&gt;design,&lt;/li&gt;
&lt;li&gt;implementation,&lt;/li&gt;
&lt;li&gt;experiments,&lt;/li&gt;
&lt;li&gt;reference material,&lt;/li&gt;
&lt;li&gt;environment configuration,&lt;/li&gt;
&lt;li&gt;verification results,&lt;/li&gt;
&lt;li&gt;and the current state of the project.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If all of that was handled casually, the repository could become just as chaotic as the conversation history I was trying not to depend on.&lt;/p&gt;

&lt;p&gt;So the original idea was fairly modest:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;I wanted a predictable format where a developer and an AI agent could keep building through conversation without slowly turning the project into a mess.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That was the beginning of AIDD Skeleton.&lt;/p&gt;




&lt;h2&gt;
  
  
  It started as four places
&lt;/h2&gt;

&lt;p&gt;Before creating the public repository, my first rough structure was very simple:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;docs/
etc/
prototypes/
src/
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The idea was mostly about separating responsibilities.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;docs/&lt;/code&gt; held the formal project documentation.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;etc/&lt;/code&gt; held development and execution environment configuration.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;prototypes/&lt;/code&gt; held temporary experiments and proofs of concept.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;src/&lt;/code&gt; held the formal implementation.&lt;/p&gt;

&lt;p&gt;At that point, I was still thinking in fairly familiar repository terms.&lt;/p&gt;

&lt;p&gt;Documentation goes here.&lt;/p&gt;

&lt;p&gt;Source code goes there.&lt;/p&gt;

&lt;p&gt;Experiments should not be confused with production code.&lt;/p&gt;

&lt;p&gt;Environment configuration should have its own place.&lt;/p&gt;

&lt;p&gt;The important part was not the names themselves.&lt;/p&gt;

&lt;p&gt;It was the idea that an AI agent should not create new top-level structures simply because they were convenient for the task immediately in front of it.&lt;/p&gt;

&lt;p&gt;Before creating something, it should first ask:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;What responsibility does this belong to?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That was the first boundary I wanted the repository to provide.&lt;/p&gt;




&lt;h2&gt;
  
  
  Reference material turned out to be a different kind of information
&lt;/h2&gt;

&lt;p&gt;The four-way split quickly exposed another category.&lt;/p&gt;

&lt;p&gt;Projects often contain material that matters, but is not itself a project decision:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;documents supplied by a user,&lt;/li&gt;
&lt;li&gt;sample data,&lt;/li&gt;
&lt;li&gt;screenshots or designs,&lt;/li&gt;
&lt;li&gt;external specifications,&lt;/li&gt;
&lt;li&gt;PDFs,&lt;/li&gt;
&lt;li&gt;information from another system.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Putting those materials beside formal project documentation made their status ambiguous.&lt;/p&gt;

&lt;p&gt;A supplied specification can influence a requirement without automatically becoming the requirement.&lt;/p&gt;

&lt;p&gt;A sample file can be evidence without becoming part of the implementation.&lt;/p&gt;

&lt;p&gt;So I added a separate area:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;references/
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The structure became:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;docs/
etc/
prototypes/
references/
src/
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That distinction was small, but important.&lt;/p&gt;

&lt;p&gt;I wanted the repository to distinguish between:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;information the project received&lt;/p&gt;
&lt;/blockquote&gt;

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

&lt;blockquote&gt;
&lt;p&gt;information the project had actually adopted.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  &lt;code&gt;docs/&lt;/code&gt; and &lt;code&gt;src/&lt;/code&gt; described file types better than responsibilities
&lt;/h2&gt;

&lt;p&gt;The next problem was naming.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;docs/&lt;/code&gt; sounds like a place for documents.&lt;/p&gt;

&lt;p&gt;But what I wanted to manage there was not "documents" as a file type.&lt;/p&gt;

&lt;p&gt;It was the project's adopted knowledge:&lt;/p&gt;

&lt;p&gt;requirements, design, testing expectations, project state, and other information that the implementation was supposed to follow.&lt;/p&gt;

&lt;p&gt;Likewise, &lt;code&gt;src/&lt;/code&gt; sounded narrower than what I meant.&lt;/p&gt;

&lt;p&gt;The formal output of a project could include implementation, tests, generated artifacts, packages, applications, or other deliverables.&lt;/p&gt;

&lt;p&gt;So I changed the names:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;docs/ → plans/
src/  → products/
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The structure became:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;plans/
etc/
prototypes/
references/
products/
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;By the time I created the public AIDD Skeleton repository on July 29, 2026, this was already the model I was using.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Reference:&lt;br&gt;&lt;br&gt;
&lt;a href="https://github.com/joyrswd/AIDDSkeleton/commit/40347eab5e2d849801d74abc091e9b725da0b1eb" rel="noopener noreferrer"&gt;Initial English AIDD skeleton — July 29, 2026&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;This was the point where the repository started moving away from classification by file type and toward classification by responsibility.&lt;/p&gt;

&lt;p&gt;A &lt;code&gt;src/&lt;/code&gt; directory could still exist.&lt;/p&gt;

&lt;p&gt;A &lt;code&gt;tests/&lt;/code&gt; directory could still exist.&lt;/p&gt;

&lt;p&gt;They just belonged inside the area responsible for formal project outputs.&lt;/p&gt;




&lt;h2&gt;
  
  
  The first public version was still mostly about places
&lt;/h2&gt;

&lt;p&gt;At that point, the public repository had five top-level areas:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;plans/
etc/
prototypes/
references/
products/
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Each had a different responsibility.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;plans/&lt;/code&gt; was for adopted project documentation and sources of truth.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;etc/&lt;/code&gt; was for execution-environment configuration.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;prototypes/&lt;/code&gt; was for temporary experiments.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;references/&lt;/code&gt; was for externally supplied material.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;products/&lt;/code&gt; was for formal implementation and other project outputs.&lt;/p&gt;

&lt;p&gt;This may look like a directory convention, but the motivation was more defensive than aesthetic.&lt;/p&gt;

&lt;p&gt;AI agents are very good at solving the problem directly in front of them.&lt;/p&gt;

&lt;p&gt;A framework expects &lt;code&gt;src/&lt;/code&gt;?&lt;/p&gt;

&lt;p&gt;Create &lt;code&gt;src/&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;A tool wants &lt;code&gt;scripts/&lt;/code&gt;?&lt;/p&gt;

&lt;p&gt;Create &lt;code&gt;scripts/&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;A new service looks independent?&lt;/p&gt;

&lt;p&gt;Create another top-level directory.&lt;/p&gt;

&lt;p&gt;Each individual decision can be perfectly reasonable.&lt;/p&gt;

&lt;p&gt;The repository as a whole can still gradually lose any coherent ownership model.&lt;/p&gt;

&lt;p&gt;So the rule was intentionally strict:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Before creating something, classify what responsibility it serves.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;If something did not fit anywhere, the first response should not automatically be to invent a sixth category.&lt;/p&gt;

&lt;p&gt;Maybe the classification itself needed to be reconsidered.&lt;/p&gt;

&lt;p&gt;A few hours after the public repository was created, I also simplified the README around an intentionally minimal workflow:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Clone the repository.&lt;/li&gt;
&lt;li&gt;Open it in an AI development environment.&lt;/li&gt;
&lt;li&gt;Send the first message.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The conversation could begin normally.&lt;/p&gt;

&lt;p&gt;The difference was that the project underneath it already had a shared structure for the developer and the agent.&lt;/p&gt;

&lt;p&gt;At this stage, I thought the main problem was organization.&lt;/p&gt;

&lt;p&gt;That assumption was challenged almost immediately.&lt;/p&gt;




&lt;h2&gt;
  
  
  Documentation could become part of the problem
&lt;/h2&gt;

&lt;p&gt;One of the first things I added was traceability.&lt;/p&gt;

&lt;p&gt;If requirements, design, implementation, and verification were related, it seemed useful to record those relationships.&lt;/p&gt;

&lt;p&gt;But a single global traceability document had an obvious failure mode.&lt;/p&gt;

&lt;p&gt;More requirements.&lt;/p&gt;

&lt;p&gt;More implementation units.&lt;/p&gt;

&lt;p&gt;More tests.&lt;/p&gt;

&lt;p&gt;More identifiers.&lt;/p&gt;

&lt;p&gt;More relationships.&lt;/p&gt;

&lt;p&gt;More history.&lt;/p&gt;

&lt;p&gt;The document intended to make the project easier to understand could eventually become another source of complexity.&lt;/p&gt;

&lt;p&gt;So one of the first public changes was specifically about preventing &lt;code&gt;TRACEABILITY.md&lt;/code&gt; from growing without bound.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Reference:&lt;br&gt;&lt;br&gt;
&lt;a href="https://github.com/joyrswd/AIDDSkeleton/commit/9be3f708b7cff30d42ffefe927cf4b0f1e2850a9" rel="noopener noreferrer"&gt;Prevent TRACEABILITY.md from growing without bound&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;This introduced an important constraint very early:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;More documentation does not automatically create more order.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Documentation itself needs boundaries.&lt;/p&gt;




&lt;h2&gt;
  
  
  The repository also needed rules for distrusting its own documentation
&lt;/h2&gt;

&lt;p&gt;Another early problem appeared when documentation and implementation disagreed.&lt;/p&gt;

&lt;p&gt;Suppose the requirements say one thing, the design says another, and the implementation behaves differently again.&lt;/p&gt;

&lt;p&gt;A tempting response is:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;The code doesn't match the documentation. Fix the code.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;But that assumes the documentation is correct.&lt;/p&gt;

&lt;p&gt;I did not want an AI agent to silently repair implementation against an outdated, incomplete, or internally inconsistent document.&lt;/p&gt;

&lt;p&gt;So I added an explicit ordering:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Check whether the relevant source of truth is complete, current, and internally consistent.&lt;/li&gt;
&lt;li&gt;Check whether the implementation conforms to that validated source.&lt;/li&gt;
&lt;li&gt;Check whether verification actually demonstrates that conformity.&lt;/li&gt;
&lt;/ol&gt;

&lt;blockquote&gt;
&lt;p&gt;Reference:&lt;br&gt;&lt;br&gt;
&lt;a href="https://github.com/joyrswd/AIDDSkeleton/commit/cee2f15a6a910cb881f5569e1a779dcf8cda6c8c" rel="noopener noreferrer"&gt;Review sources of truth before implementation&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That was an important change in what I thought the repository needed to do.&lt;/p&gt;

&lt;p&gt;Folders alone were not enough.&lt;/p&gt;

&lt;p&gt;The agent also needed rules for deciding what information it was allowed to trust.&lt;/p&gt;




&lt;h2&gt;
  
  
  &lt;code&gt;prototypes/&lt;/code&gt; turned out to be too small an idea
&lt;/h2&gt;

&lt;p&gt;The next structural change came from the way conversations actually produced intermediate work.&lt;/p&gt;

&lt;p&gt;Originally, &lt;code&gt;prototypes/&lt;/code&gt; was intended for things like:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;proofs of concept,&lt;/li&gt;
&lt;li&gt;technical spikes,&lt;/li&gt;
&lt;li&gt;UI experiments,&lt;/li&gt;
&lt;li&gt;alternative implementations used to answer a question.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That seemed reasonable.&lt;/p&gt;

&lt;p&gt;But AI-assisted development produced many useful intermediate artifacts that were not prototypes.&lt;/p&gt;

&lt;p&gt;An investigation.&lt;/p&gt;

&lt;p&gt;A comparison.&lt;/p&gt;

&lt;p&gt;A design draft.&lt;/p&gt;

&lt;p&gt;An implementation plan.&lt;/p&gt;

&lt;p&gt;A transformed copy of supplied material.&lt;/p&gt;

&lt;p&gt;Temporary analysis.&lt;/p&gt;

&lt;p&gt;Context needed to continue the work in another conversation.&lt;/p&gt;

&lt;p&gt;These things were useful, but they were not formal project knowledge.&lt;/p&gt;

&lt;p&gt;Putting them into &lt;code&gt;plans/&lt;/code&gt; created a much more dangerous ambiguity:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;an unfinished thought could start looking like an adopted decision simply because it lived beside the real sources of truth.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;So &lt;code&gt;prototypes/&lt;/code&gt; became &lt;code&gt;workbench/&lt;/code&gt;.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;prototypes/
    ↓
workbench/
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;Reference:&lt;br&gt;&lt;br&gt;
&lt;a href="https://github.com/joyrswd/AIDDSkeleton/commit/61c71d311ae0247b0453569d999f9f0f1ce36ac7" rel="noopener noreferrer"&gt;Replace prototypes with a project workbench&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The distinction became roughly:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;plans/       adopted project knowledge
workbench/   work that is still being investigated, prepared, or evaluated
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;A prototype could live in the workbench.&lt;/p&gt;

&lt;p&gt;So could an investigation.&lt;/p&gt;

&lt;p&gt;So could a candidate design.&lt;/p&gt;

&lt;p&gt;So could temporary context for continuing work later.&lt;/p&gt;

&lt;p&gt;The important rule was:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Something did not become authoritative merely because an AI had written it down.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  The structure at the time of the first article
&lt;/h2&gt;

&lt;p&gt;By the time I wrote about AIDD Skeleton in early August 2026, the top-level structure had become:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;plans/
products/
references/
workbench/
etc/
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The names had changed from the earliest sketch, but the underlying separation was becoming clearer.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;formal project knowledge    → plans/
formal project outputs      → products/
supplied source material    → references/
intermediate project work   → workbench/
execution environment       → etc/
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The repository was not trying to replace familiar structures such as &lt;code&gt;src/&lt;/code&gt;, &lt;code&gt;tests/&lt;/code&gt;, or application directories.&lt;/p&gt;

&lt;p&gt;It was trying to put those structures inside a clearer ownership model.&lt;/p&gt;

&lt;p&gt;The question was no longer simply:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;What kind of file is this?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;It was becoming:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;What responsibility does this information have?&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  Verification needed its own boundary too
&lt;/h2&gt;

&lt;p&gt;Another rule I wanted from the beginning was a strict separation between implementation and verification.&lt;/p&gt;

&lt;p&gt;Creating a file does not prove that the program works.&lt;/p&gt;

&lt;p&gt;Passing a syntax check does not prove that a feature works.&lt;/p&gt;

&lt;p&gt;Passing a unit test does not prove behavior that the test never exercised.&lt;/p&gt;

&lt;p&gt;So completion reports were expected to separate things such as:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Changes:
- Implemented the expense registration API
- Added input validation
- Added unit tests

Verification:
- Unit tests passed
- Static analysis passed

Not verified:
- Behavior against a production-like database
- Concurrent use by multiple users
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The important rule was simple:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Do not claim a broader result than the available evidence demonstrates.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That rule was tightened during the same early development period.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Reference:&lt;br&gt;&lt;br&gt;
&lt;a href="https://github.com/joyrswd/AIDDSkeleton/commit/8e009cb22cbe188a536e391b6269016d554d2826" rel="noopener noreferrer"&gt;Tighten verification evidence scope&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;This mattered because AI-generated completion summaries can sound much more certain than the underlying verification actually justifies.&lt;/p&gt;

&lt;p&gt;I wanted that boundary to exist in the repository rather than depending on the wording of a particular conversation.&lt;/p&gt;




&lt;h2&gt;
  
  
  Turning it into a repository template
&lt;/h2&gt;

&lt;p&gt;The initial workflow was deliberately simple.&lt;/p&gt;

&lt;p&gt;The goal was not to require a large setup prompt or a special orchestration system.&lt;/p&gt;

&lt;p&gt;A developer could create a repository from the template, open it in an AI development environment, and begin the conversation normally.&lt;/p&gt;

&lt;p&gt;The repository itself supplied the shared structure and working rules.&lt;/p&gt;

&lt;p&gt;On August 7, 2026, I updated the README to make GitHub Repository Template usage the primary path.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Reference:&lt;br&gt;&lt;br&gt;
&lt;a href="https://github.com/joyrswd/AIDDSkeleton/commit/0034e7008888f800a561f730da059c0c630f3431" rel="noopener noreferrer"&gt;Make template usage the primary README path&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The basic idea remained the same:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;The conversation should not have to carry the entire project.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Requirements, design, implementation, experiments, supplied material, environment configuration, and verification all needed places and boundaries that could survive the current session.&lt;/p&gt;




&lt;h2&gt;
  
  
  What AIDD Skeleton was trying to solve at this stage
&lt;/h2&gt;

&lt;p&gt;The early version of AIDD Skeleton was still fairly small in concept.&lt;/p&gt;

&lt;p&gt;It was not an attempt to automate every part of software development.&lt;/p&gt;

&lt;p&gt;It was an attempt to establish a few durable boundaries:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;adopted project knowledge should be distinguishable from work in progress,&lt;/li&gt;
&lt;li&gt;external material should be distinguishable from adopted requirements,&lt;/li&gt;
&lt;li&gt;formal implementation should be distinguishable from experiments,&lt;/li&gt;
&lt;li&gt;implementation should be distinguishable from verification,&lt;/li&gt;
&lt;li&gt;AI working rules should live with the repository rather than only in conversation history.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The directory names changed several times while I was figuring out those boundaries.&lt;/p&gt;

&lt;p&gt;The progression was roughly:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;docs        → plans
src         → products
prototypes  → workbench
references  → added as a separate responsibility
etc         → retained
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The important part was not the final names.&lt;/p&gt;

&lt;p&gt;It was the shift from asking:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Where should I put this file?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;to asking:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;What responsibility does this information have?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That was the point where what began as a repository layout started to feel more like a development framework.&lt;/p&gt;




&lt;p&gt;AIDD Skeleton:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/joyrswd/AIDDSkeleton" rel="noopener noreferrer"&gt;https://github.com/joyrswd/AIDDSkeleton&lt;/a&gt;&lt;/p&gt;




&lt;p&gt;AI disclosure: This article was written with AI assistance. The narrative was reconstructed from the AIDD Skeleton Git history and my development conversations, and the resulting account was reviewed against the repository history before publication.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>architecture</category>
      <category>llm</category>
      <category>softwaredevelopment</category>
    </item>
  </channel>
</rss>
