<?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>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>
