<?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: juan gonzalez</title>
    <description>The latest articles on DEV Community by juan gonzalez (@taiwildlab_79c1fbf3cc5).</description>
    <link>https://dev.to/taiwildlab_79c1fbf3cc5</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%2F3873318%2F2704d37e-e97c-4543-bcd1-92bd95e0e87a.png</url>
      <title>DEV Community: juan gonzalez</title>
      <link>https://dev.to/taiwildlab_79c1fbf3cc5</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/taiwildlab_79c1fbf3cc5"/>
    <language>en</language>
    <item>
      <title>The Cost of Trusting the Wrong Claim in AI Systems</title>
      <dc:creator>juan gonzalez</dc:creator>
      <pubDate>Sun, 04 Oct 2026 08:04:26 +0000</pubDate>
      <link>https://dev.to/taiwildlab_79c1fbf3cc5/the-cost-of-trusting-the-wrong-claim-in-ai-systems-4mo8</link>
      <guid>https://dev.to/taiwildlab_79c1fbf3cc5/the-cost-of-trusting-the-wrong-claim-in-ai-systems-4mo8</guid>
      <description></description>
    </item>
    <item>
      <title># Don’t Trust the Agent’s “Done”: Verify the System State</title>
      <dc:creator>juan gonzalez</dc:creator>
      <pubDate>Thu, 01 Oct 2026 15:15:07 +0000</pubDate>
      <link>https://dev.to/taiwildlab_79c1fbf3cc5/-dont-trust-the-agents-done-verify-the-system-state-50ob</link>
      <guid>https://dev.to/taiwildlab_79c1fbf3cc5/-dont-trust-the-agents-done-verify-the-system-state-50ob</guid>
      <description>&lt;p&gt;AI agents are increasingly allowed to do real work.&lt;br&gt;
They deploy applications.&lt;br&gt;
They restart services.&lt;br&gt;
They write to databases.&lt;br&gt;
They call APIs.&lt;br&gt;
They trigger automation chains.&lt;br&gt;
And when they finish, they usually return something like:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“Done.”&lt;br&gt;
The problem is that &lt;strong&gt;a successful tool call is not necessarily proof that the expected real-world state exists&lt;/strong&gt;.&lt;br&gt;
That distinction becomes increasingly important as AI systems receive more execution authority.&lt;/p&gt;
&lt;h2&gt;
  
  
  Execution and verification are different jobs
&lt;/h2&gt;

&lt;p&gt;Suppose an agent performs a deployment.&lt;br&gt;
The agent reports:&lt;br&gt;
&lt;/p&gt;


&lt;/blockquote&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Deployment successful.
Version 4.7.2 is running.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;There are several things that could have happened:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;the deployment command returned exit code 0;&lt;/li&gt;
&lt;li&gt;an API accepted the request;&lt;/li&gt;
&lt;li&gt;the orchestration layer reported success;&lt;/li&gt;
&lt;li&gt;the agent interpreted the response correctly.
But the claim we actually care about may be:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Production is currently serving version 4.7.2.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Those are not the same statement.&lt;br&gt;
The first group describes execution events.&lt;br&gt;
The second describes the resulting system state.&lt;br&gt;
A system should not automatically be allowed to prove the second merely by reporting the first.&lt;/p&gt;
&lt;h2&gt;
  
  
  Treat the agent’s result as a claim
&lt;/h2&gt;

&lt;p&gt;This is the model I use in SCC Runner:&lt;br&gt;
&lt;/p&gt;

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

Authority
↓
Evidence
↓
Verdict
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The agent says:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;The service is running.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That becomes a claim.&lt;br&gt;
Now we ask:&lt;br&gt;
&lt;strong&gt;What source has authority over that property?&lt;/strong&gt;&lt;br&gt;
For a systemd service, that might be the service mnager.&lt;br&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;ActiveState=active
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;For a database operation, the database itself may be the authority.&lt;br&gt;
For a deployment, the runtime environment may be more relevant than the deployment tool that initiated the change.&lt;br&gt;
For an external transaction, the external API or ledger may be the relevant authority.&lt;br&gt;
The important idea is simple:&lt;br&gt;
&lt;strong&gt;Evidence should come from a source capable of observing the property being claimed.&lt;/strong&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  Why another LLM is not enough
&lt;/h2&gt;

&lt;p&gt;One common pattern is:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Agent A performs the task
↓
Agent B reviews Agent A
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That may improve reasoning quality.&lt;br&gt;
But it does not necessarily provide independent evidence.&lt;br&gt;
If Agent A says:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“The database record exists.”&lt;br&gt;
and Agent B only reviews Agent A’s explanation, Agent B still does not know whether the record actually exists.&lt;br&gt;
Both models may be reasoning about the same self-report.&lt;br&gt;
For claims about external reality, verification needs access to the relevant external authority.&lt;br&gt;
&lt;/p&gt;


&lt;/blockquote&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Agent
↓
Claim
Database / Runtime / API / Git / Logs
↓
Evidence
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The distinction is not about which model is smarter.&lt;br&gt;
It is about &lt;strong&gt;where the evidence comes from&lt;/strong&gt;.&lt;/p&gt;
&lt;h2&gt;
  
  
  “False” and “not observable” are different states
&lt;/h2&gt;

&lt;p&gt;There is another important distinction.&lt;br&gt;
Suppose we need to verify:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Service X is running.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;But the authority cannot be reached.&lt;br&gt;
That does not prove:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Service X is stopped.
``
It means something else:
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;&lt;br&gt;
text&lt;br&gt;
NOT EVALUABLE&lt;br&gt;
AUTHORITY UNAVAILABLE&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Verification systems should preserve this distinction.
Otherwise temporary observability failures become false claims, or worse, unavailable evidence becomes accidental confirmation.
Explicit uncertainty is safer than invented certainty.
## From verification to execution gates
Once a claim can be verified reliably, the result can eventually participate in execution decisions.
Conceptually:
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;&lt;br&gt;
text&lt;br&gt;
Claim&lt;br&gt;
↓&lt;br&gt;
Authority&lt;br&gt;
↓&lt;br&gt;
Evidence&lt;br&gt;
↓&lt;br&gt;
Verdict&lt;br&gt;
↓&lt;br&gt;
PASS / BLOCK&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;For example:
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;&lt;br&gt;
text&lt;br&gt;
Claim:&lt;br&gt;
Deployment is healthy.&lt;br&gt;
Evidence:&lt;br&gt;
expected version present&lt;br&gt;
health endpoint reachable&lt;br&gt;
required instances ready&lt;br&gt;
Verdict:&lt;br&gt;
CONFIRMED&lt;br&gt;
Decision:&lt;br&gt;
PASS&lt;br&gt;
&lt;/p&gt;

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

&lt;/div&gt;

&lt;p&gt;&lt;br&gt;
text&lt;br&gt;
Claim:&lt;br&gt;
Deployment is healthy.&lt;br&gt;
Evidence:&lt;br&gt;
required state cannot be established&lt;br&gt;
Verdict:&lt;br&gt;
NOT EVALUABLE&lt;br&gt;
Decision:&lt;br&gt;
BLOCK&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;That second behavior is what makes fail-closed verification interesting.
But I would not start there.
## Start in shadow mode
A new verification system should not receive production authority immediately.
A safer adoption path is:
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;&lt;br&gt;
text&lt;br&gt;
SHADOW&lt;br&gt;
↓&lt;br&gt;
ADVISORY&lt;br&gt;
↓&lt;br&gt;
ENFORCED&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;### Shadow
Observe claims without influencing execution.
Compare the evidence with the checks humans already perform.
### Advisory
Produce evidence and verdicts.
Humans or existing systems still make the final decision.
### Enforced
Selected verification results become execution conditions.
Only after repeated observation should the verifier gain that authority.
Verification software should not ask to be trusted.
**It should demonstrate that it deserves more authority.**
## The goal is not another monitoring dashboard
Monitoring systems answer questions such as:
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;&lt;br&gt;
text&lt;br&gt;
CPU = 42%&lt;br&gt;
requests = 12,431&lt;br&gt;
error rate = 0.3%&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Those metrics can be extremely useful.
But verification asks a different question:
&amp;gt; Does the available evidence actually establish the claim required for this decision?
A log entry saying:
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;&lt;br&gt;
text&lt;br&gt;
deployment completed&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;may be useful evidence.
But it may not be sufficient evidence for:
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;&lt;br&gt;
text&lt;br&gt;
the new version is healthy in production&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;The claim determines what evidence is relevant.
## Where this becomes useful
This pattern is particularly useful for:
- AI agents with tool access;
- deployment systems;
- autonomous remediation;
- data pipelines;
- workflow automation;
- infrastructure operations;
- multi-agent systems;
- tool chains where one tool calls another tool.
The more layers between the agent and the final system state, the more dangerous it becomes to equate:
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;&lt;br&gt;
text&lt;br&gt;
tool returned success&lt;br&gt;
&lt;/p&gt;

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

&lt;/div&gt;

&lt;p&gt;&lt;br&gt;
text&lt;br&gt;
desired outcome exists&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;## The simplest useful implementation
You do not need to begin with a large verification framework.
Start with one boring claim.
For example:
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;&lt;br&gt;
text&lt;br&gt;
Claim:&lt;br&gt;
Service nginx is active.&lt;br&gt;
Authority:&lt;br&gt;
systemd&lt;br&gt;
Observed:&lt;br&gt;
ActiveState=active&lt;br&gt;
Verdict:&lt;br&gt;
CONFIRMED&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Run that verification next to your existing manual process.
Compare the results.
Repeat.
That is a much stronger foundation than beginning by giving a new system permission to block production
## Build systems that can prove what they did
As AI systems become capable of taking more actions, I think we need to separate two questions:
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;&lt;br&gt;
text&lt;br&gt;
What did the agent say happened?&lt;br&gt;
What can the system actually prove happened?&lt;/p&gt;



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

Those questions are often treated as if they were identical.
They are not.
That is the problem I am working on with SCC Runner.
The full canonical article is here:
https://taiwildlab.com/articles/scc-runner-dont-just-take-your-systems-word-for-it/
SCC Runner is currently available in **Free Early Access**:
https://scc.taiwildlab.com/signup
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

</description>
      <category>agents</category>
      <category>ai</category>
      <category>automation</category>
      <category>devops</category>
    </item>
    <item>
      <title>Why an Evolutionary System Needs Memory</title>
      <dc:creator>juan gonzalez</dc:creator>
      <pubDate>Wed, 26 Aug 2026 10:07:27 +0000</pubDate>
      <link>https://dev.to/taiwildlab_79c1fbf3cc5/why-an-evolutionary-system-needs-memory-1ldn</link>
      <guid>https://dev.to/taiwildlab_79c1fbf3cc5/why-an-evolutionary-system-needs-memory-1ldn</guid>
      <description>&lt;p&gt;I used to think an evolutionary system needed two things:&lt;br&gt;
variation and selection.&lt;br&gt;
Something changes. The system observes the result. Better variants survive.&lt;br&gt;
That sounds reasonable — until you try to build one.&lt;br&gt;
While working on an evolutionary trading system, we ran into a more basic problem:&lt;br&gt;
If the system cannot reliably remember what changed, why it changed, and what happened afterward, it cannot prove that it is improving.&lt;br&gt;
It can only prove that it is changing.&lt;br&gt;
That distinction matters.&lt;br&gt;
A system can modify parameters, promote agents, remove weak strategies, or generate new variants. From the outside, all of that looks like evolution.&lt;br&gt;
But later you may want to ask:&lt;br&gt;
Why was this agent promoted?&lt;br&gt;
What evidence justified the decision?&lt;br&gt;
What was the previous state?&lt;br&gt;
What happened after the change?&lt;br&gt;
Was the new state actually better?&lt;br&gt;
If those answers cannot be reconstructed, the system has activity, but not real evolutionary memory.&lt;br&gt;
Memory is more than storage&lt;br&gt;
More logs are not enough.&lt;br&gt;
More metrics are not enough.&lt;br&gt;
Useful evolutionary memory needs structure.&lt;br&gt;
A meaningful change should leave behind something like:&lt;br&gt;
previous state → evidence → decision → change → resulting state&lt;br&gt;
That chain gives us provenance.&lt;br&gt;
It tells us not only what the system is now, but how it got there.&lt;br&gt;
This is similar to software development.&lt;br&gt;
A source file tells you what the code looks like today.&lt;br&gt;
Git tells you how it became that way.&lt;br&gt;
An evolutionary system needs the same kind of lineage.&lt;br&gt;
Sometimes evolution means doing nothing&lt;br&gt;
There is another consequence.&lt;br&gt;
An evolutionary system should not change simply because it has permission to change.&lt;br&gt;
If no candidate satisfies the evidence threshold, the correct action may be:&lt;br&gt;
no change.&lt;br&gt;
That is not failure.&lt;br&gt;
It is discipline.&lt;br&gt;
A system that always changes produces novelty.&lt;br&gt;
A system that remembers, evaluates, and sometimes refuses to change has a chance to produce learning.&lt;br&gt;
So my original equation:&lt;br&gt;
Evolution = variation + selection&lt;br&gt;
has changed.&lt;br&gt;
I would now write:&lt;br&gt;
Evolution = variation + selection + verifiable memory&lt;br&gt;
Because without memory, selection cannot accumulate knowledge.&lt;br&gt;
And without accumulated knowledge, a system may keep changing while repeatedly rediscovering the same mistakes.&lt;br&gt;
The better question is no longer:&lt;br&gt;
Can the system change itself?&lt;br&gt;
It is:&lt;br&gt;
Can the system explain, with evidence, why its current state exists?&lt;br&gt;
If it can, then we may be getting closer to a system that actually evolves.&lt;/p&gt;

</description>
      <category>evolution</category>
      <category>provenance</category>
      <category>memory</category>
      <category>agents</category>
    </item>
    <item>
      <title>I shipped a fix. The system recovered. The fix wasn't why.</title>
      <dc:creator>juan gonzalez</dc:creator>
      <pubDate>Sat, 08 Aug 2026 19:02:51 +0000</pubDate>
      <link>https://dev.to/taiwildlab_79c1fbf3cc5/i-shipped-a-fix-the-system-recovered-the-fix-wasnt-why-jc7</link>
      <guid>https://dev.to/taiwildlab_79c1fbf3cc5/i-shipped-a-fix-the-system-recovered-the-fix-wasnt-why-jc7</guid>
      <description>&lt;p&gt;An autonomous system of mine lost access to its execution environment and went into a crash loop. I read the logs, formed a theory, wrote a commit, deployed it. It came back up. I closed the incident and moved on.&lt;/p&gt;

&lt;p&gt;A few days later I checked it properly, because not taking a system's word for itself is the work I do — and that has to include when the system is mine.&lt;/p&gt;

&lt;p&gt;Here is what the check looked like.&lt;/p&gt;

&lt;p&gt;The claim: a code change restored the system's access to its execution environment.&lt;/p&gt;

&lt;p&gt;The source that could settle it: not my commit message, and not my memory of that evening. The operational log, the provider's own error code, and the diff of what the commit actually modified.&lt;/p&gt;

&lt;p&gt;The test: compare the failure class in the log against the mechanism the commit changed. If they're the same mechanism, the claim holds. If they aren't, it can't hold, no matter how convincing the timing was.&lt;/p&gt;

&lt;p&gt;The result: the incident was an authentication failure. My commit corrected clock synchronisation — a real bug, in a different failure class entirely. The two were never connected. Something else brought the system back, most likely an environment change I made around the same time and didn't record.&lt;/p&gt;

&lt;p&gt;Verdict: FALSIFIED.&lt;/p&gt;

&lt;p&gt;The limit: I still can't show which environment variable changed. Key rotation fits the evidence. It is not demonstrated, and I'm not going to write it down as if it were. The gap is part of the finding.&lt;/p&gt;

&lt;p&gt;The shape of the reasoning&lt;/p&gt;

&lt;p&gt;The uncomfortable part isn't being wrong about a cause. It's the shape of the reasoning, because it's the shape most of us use:&lt;/p&gt;

&lt;p&gt;I deployed X. The problem stopped. Therefore X fixed it.&lt;/p&gt;

&lt;p&gt;That holds up exactly as long as nobody checks. In most systems nobody does, because there's nothing forcing the question. The incident closed. The graph went green. The next thing was already on fire.&lt;/p&gt;

&lt;p&gt;It gets worse with autonomous systems, and I think this part is under-discussed. Classic software failed loudly — an exception, a non-zero exit, a stack trace. Agents and pipelines fail quietly and keep reporting success. The path that executes and the path that reports are usually the same path. An agent says "done" because the command returned, not because the file exists. A dashboard says the traffic is human because the dashboard counts it that way.&lt;/p&gt;

&lt;p&gt;In that architecture, the absence of errors tells you nothing at all.&lt;/p&gt;

&lt;p&gt;What I do about it&lt;/p&gt;

&lt;p&gt;I take one specific claim a system makes about itself and check it against a source the system can't write to.&lt;/p&gt;

&lt;p&gt;Not an audit of the organisation. Not an implementation of the fix. One claim.&lt;/p&gt;

&lt;p&gt;Four possible verdicts: confirmed, falsified, partially confirmed, not assessable. The last one is a real outcome, not a failure of the check. If a claim can't be tested, what you've found is a hole in your observability — and a system that can't demonstrate what it claims today won't be able to demonstrate it on the day it breaks either.&lt;/p&gt;

&lt;p&gt;Three evidence levels, stated openly in every report: direct (read-only access), reproduced (you run the query, I read the output), declared (a statement, which doesn't stand on its own).&lt;/p&gt;

&lt;p&gt;Some claims I check with no access at all, because the surface is already public — response headers, DNS, what an endpoint actually returns, what a downloadable artefact actually contains.&lt;/p&gt;

&lt;p&gt;If you run one of these&lt;/p&gt;

&lt;p&gt;If you operate an agent, a RAG pipeline, or an automation, and there's one sentence about it you'd be uncomfortable defending under questioning — that sentence is the interesting one.&lt;/p&gt;

&lt;p&gt;I'm running a few of these free right now while I build the public record. You get the full report either way, including when the verdict is boring.&lt;/p&gt;

&lt;p&gt;taiwildlab.com — Juan Gonzalez, TaiwildLab&lt;/p&gt;

</description>
      <category>ai</category>
      <category>debugging</category>
      <category>devops</category>
      <category>architecture</category>
    </item>
    <item>
      <title>A Shadow Decision System Found a Semantic Boundary Bug in 14 Minutes</title>
      <dc:creator>juan gonzalez</dc:creator>
      <pubDate>Sun, 12 Jul 2026 11:18:00 +0000</pubDate>
      <link>https://dev.to/taiwildlab_79c1fbf3cc5/a-shadow-decision-system-found-a-semantic-boundary-bug-in-14-minutes-13fd</link>
      <guid>https://dev.to/taiwildlab_79c1fbf3cc5/a-shadow-decision-system-found-a-semantic-boundary-bug-in-14-minutes-13fd</guid>
      <description>&lt;p&gt;I am running an experimental autonomous trading architecture called Darwin. During an audit of its agent-ranking and sizing authorities, I built a read-only shadow producer to compare a candidate constraint system against the existing runtime behavior.&lt;/p&gt;

&lt;p&gt;The candidate had no operational authority:&lt;/p&gt;

&lt;p&gt;no position or capital writes;&lt;br&gt;
no lifecycle mutations;&lt;br&gt;
no promotions or reproduction;&lt;br&gt;
no writes to the operational sizing ledger;&lt;br&gt;
separate persistence for shadow cycles, events and comparisons.&lt;/p&gt;

&lt;p&gt;The first complete diagnostic cycle ran on July 11 at 18:22.&lt;/p&gt;

&lt;p&gt;Results:&lt;/p&gt;

&lt;p&gt;agents_evaluated: 25&lt;br&gt;
matches: 8&lt;br&gt;
mismatches: 17&lt;br&gt;
max_absolute_delta: 0.5&lt;/p&gt;

&lt;p&gt;Every mismatch had the same multiplicative shape:&lt;/p&gt;

&lt;p&gt;expected  candidate&lt;br&gt;
0.500     1.000&lt;br&gt;
0.425     0.850&lt;br&gt;
0.350     0.700&lt;br&gt;
0.275     0.550&lt;br&gt;
0.200     0.400&lt;/p&gt;

&lt;p&gt;This immediately suggested that one path applied a 0.5 constraint that the other did not.&lt;/p&gt;

&lt;p&gt;The useful design decision was persisting the composition of each resolved multiplier, not only the final values.&lt;/p&gt;

&lt;p&gt;The comparison data showed the semantic divergence:&lt;/p&gt;

&lt;p&gt;expected_sources:&lt;br&gt;
[reduce_50, anticonvergence_penalty]&lt;/p&gt;

&lt;p&gt;candidate_sources:&lt;br&gt;
[anticonvergence_penalty]&lt;/p&gt;

&lt;p&gt;The discrepancy was therefore not primarily numerical. It was a disagreement about authority.&lt;br&gt;
The legacy expected-value translator applied a 50% reduction whenever coherence was below 0.40.&lt;br&gt;
The approved architecture defined two different domains:&lt;/p&gt;

&lt;p&gt;0.30 &amp;lt;= coherence &amp;lt; 0.40&lt;br&gt;
    sizing authority&lt;br&gt;
    multiplier *= 0.5&lt;/p&gt;

&lt;p&gt;coherence &amp;lt; 0.30&lt;br&gt;
    severe lifecycle condition&lt;br&gt;
    outside sizing authority&lt;/p&gt;

&lt;p&gt;The candidate producer respected the new boundary. The dual-run oracle still encoded the legacy interpretation.&lt;br&gt;
The bug was in the expected-value mechanism, not in the candidate.&lt;br&gt;
The correction was committed at 18:36. The same condition was executed again at 18:37:&lt;/p&gt;

&lt;p&gt;agents_evaluated: 25&lt;br&gt;
matches: 25&lt;br&gt;
mismatches: 0&lt;br&gt;
max_absolute_delta: 0.0&lt;/p&gt;

&lt;p&gt;The failed cycle was retained.&lt;br&gt;
The operational databases remained unchanged, and the operational sizing ledger contained zero new events.&lt;/p&gt;

&lt;p&gt;What made the diagnosis fast?&lt;br&gt;
A shadow comparator that stores only:&lt;/p&gt;

&lt;p&gt;expected_multiplier&lt;br&gt;
candidate_multiplier&lt;br&gt;
absolute_delta&lt;/p&gt;

&lt;p&gt;can raise an alert.&lt;br&gt;
A comparator that also stores:&lt;/p&gt;

&lt;p&gt;expected_sources&lt;br&gt;
candidate_sources&lt;br&gt;
dominant_constraint&lt;br&gt;
rule_version&lt;br&gt;
input_snapshot&lt;/p&gt;

&lt;p&gt;can produce a diagnosis.&lt;br&gt;
That changes the debugging question from:&lt;br&gt;
Where did the multiplication go wrong?&lt;br&gt;
to:&lt;br&gt;
Which rule was present on one decision path and absent on the other?&lt;br&gt;
The second audit: residual authority&lt;br&gt;
After correcting the mismatch, I opened a formal 48-hour observation window.&lt;br&gt;
The population was supposed to remain fixed. Reproduction had already been disabled through:&lt;br&gt;
REPRODUCTION_ACTIVE=false&lt;br&gt;
However, an hourly cron entry still executed auto_promote.py.&lt;br&gt;
No promotion occurred during the initial observation period, but the authority to mutate agent stages remained active.&lt;br&gt;
The process was disabled, and the formal window was restarted from the first successful shadow cycle after the freeze.&lt;br&gt;
This produced a useful distinction:&lt;br&gt;
Absence of mutation is not absence of mutation authority.&lt;br&gt;
For controlled observation, capabilities matter more than labels such as “reproduction disabled” or “read-only.”&lt;br&gt;
General design principles&lt;br&gt;
From this incident, I would extract five reusable rules:&lt;br&gt;
Persist decision composition, not only resolved values.&lt;br&gt;
Treat the expected-value oracle as a hypothesis, not as truth.&lt;br&gt;
Separate permission to calculate from permission to enforce.&lt;br&gt;
Preserve failed cycles as evidence.&lt;br&gt;
Audit every component that retains authority over the observed state.&lt;/p&gt;

&lt;p&gt;The shadow did not merely detect that two functions differed.&lt;/p&gt;

&lt;p&gt;It made the semantic boundary visible.&lt;/p&gt;

</description>
      <category>agents</category>
      <category>architecture</category>
      <category>fintech</category>
      <category>testing</category>
    </item>
    <item>
      <title>La confianza no es una propiedad del agente. Es una propiedad de la arquitectura.</title>
      <dc:creator>juan gonzalez</dc:creator>
      <pubDate>Tue, 07 Jul 2026 17:31:15 +0000</pubDate>
      <link>https://dev.to/taiwildlab_79c1fbf3cc5/la-confianza-no-es-una-propiedad-del-agente-es-una-propiedad-de-la-arquitectura-142c</link>
      <guid>https://dev.to/taiwildlab_79c1fbf3cc5/la-confianza-no-es-una-propiedad-del-agente-es-una-propiedad-de-la-arquitectura-142c</guid>
      <description></description>
    </item>
    <item>
      <title>I Run 20+ Autonomous Trading Agents. Here Are the 5 Memory Failures That Almost Killed the System.</title>
      <dc:creator>juan gonzalez</dc:creator>
      <pubDate>Sat, 11 Apr 2026 10:39:29 +0000</pubDate>
      <link>https://dev.to/taiwildlab_79c1fbf3cc5/i-run-20-autonomous-trading-agents-here-are-the-5-memory-failures-that-almost-killed-the-system-718</link>
      <guid>https://dev.to/taiwildlab_79c1fbf3cc5/i-run-20-autonomous-trading-agents-here-are-the-5-memory-failures-that-almost-killed-the-system-718</guid>
      <description></description>
    </item>
  </channel>
</rss>
