<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0" xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd" xmlns:googleplay="http://www.google.com/schemas/play-podcasts/1.0"><channel><title><![CDATA[The Age of More]]></title><description><![CDATA[Agents, taste, and what not to automate.]]></description><link>https://theageofmore.substack.com</link><image><url>https://substackcdn.com/image/fetch/$s_!hrTM!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff013ad33-6aad-4619-a87f-8d62fb1ec09d_1024x1024.png</url><title>The Age of More</title><link>https://theageofmore.substack.com</link></image><generator>Substack</generator><lastBuildDate>Sun, 19 Jul 2026 10:39:21 GMT</lastBuildDate><atom:link href="https://theageofmore.substack.com/feed" rel="self" type="application/rss+xml"/><copyright><![CDATA[Marty McEnroe]]></copyright><language><![CDATA[en]]></language><webMaster><![CDATA[theageofmore@substack.com]]></webMaster><itunes:owner><itunes:email><![CDATA[theageofmore@substack.com]]></itunes:email><itunes:name><![CDATA[Marty McEnroe]]></itunes:name></itunes:owner><itunes:author><![CDATA[Marty McEnroe]]></itunes:author><googleplay:owner><![CDATA[theageofmore@substack.com]]></googleplay:owner><googleplay:email><![CDATA[theageofmore@substack.com]]></googleplay:email><googleplay:author><![CDATA[Marty McEnroe]]></googleplay:author><itunes:block><![CDATA[Yes]]></itunes:block><item><title><![CDATA[12 Bugs in 12 Minutes]]></title><description><![CDATA[What Happens When You Ask an AI to Audit Its Own Error Handling]]></description><link>https://theageofmore.substack.com/p/12-bugs-in-12-minutes</link><guid isPermaLink="false">https://theageofmore.substack.com/p/12-bugs-in-12-minutes</guid><dc:creator><![CDATA[Marty McEnroe]]></dc:creator><pubDate>Thu, 16 Jul 2026 21:23:20 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!kLN7!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F523bdf90-a4d8-45bd-94f3-8d5a1e5536c0_1408x768.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!kLN7!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F523bdf90-a4d8-45bd-94f3-8d5a1e5536c0_1408x768.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!kLN7!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F523bdf90-a4d8-45bd-94f3-8d5a1e5536c0_1408x768.jpeg 424w, https://substackcdn.com/image/fetch/$s_!kLN7!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F523bdf90-a4d8-45bd-94f3-8d5a1e5536c0_1408x768.jpeg 848w, https://substackcdn.com/image/fetch/$s_!kLN7!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F523bdf90-a4d8-45bd-94f3-8d5a1e5536c0_1408x768.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!kLN7!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F523bdf90-a4d8-45bd-94f3-8d5a1e5536c0_1408x768.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!kLN7!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F523bdf90-a4d8-45bd-94f3-8d5a1e5536c0_1408x768.jpeg" width="1408" height="768" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/523bdf90-a4d8-45bd-94f3-8d5a1e5536c0_1408x768.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:768,&quot;width&quot;:1408,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:897347,&quot;alt&quot;:&quot;A Sherlock Holmes figure in a steampunk observation balloon aims a telescope-mounted laser at buried land mines in a dirt road, targeting brackets locked on each mine, while a column of Napoleonic soldiers marches toward the minefield.&quot;,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://theageofmore.substack.com/i/207345866?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F523bdf90-a4d8-45bd-94f3-8d5a1e5536c0_1408x768.jpeg&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="A Sherlock Holmes figure in a steampunk observation balloon aims a telescope-mounted laser at buried land mines in a dirt road, targeting brackets locked on each mine, while a column of Napoleonic soldiers marches toward the minefield." title="A Sherlock Holmes figure in a steampunk observation balloon aims a telescope-mounted laser at buried land mines in a dirt road, targeting brackets locked on each mine, while a column of Napoleonic soldiers marches toward the minefield." srcset="https://substackcdn.com/image/fetch/$s_!kLN7!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F523bdf90-a4d8-45bd-94f3-8d5a1e5536c0_1408x768.jpeg 424w, https://substackcdn.com/image/fetch/$s_!kLN7!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F523bdf90-a4d8-45bd-94f3-8d5a1e5536c0_1408x768.jpeg 848w, https://substackcdn.com/image/fetch/$s_!kLN7!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F523bdf90-a4d8-45bd-94f3-8d5a1e5536c0_1408x768.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!kLN7!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F523bdf90-a4d8-45bd-94f3-8d5a1e5536c0_1408x768.jpeg 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>I asked Claude to audit the error handling in a system built by the multi-agent <a href="https://github.com/martymcenroe/AssemblyZero/wiki">AssemblyZero</a>. The audit filed 12 issues in 12 minutes. None of them were the kind of bugs you find with a linter.</p><p>The email pipeline had been running for three days. 121 conversations. 286 messages. Five send paths. Two clouds. Everything appeared healthy.</p><p>Then I asked the AI that had helped build it one question, a very simple prompt:</p><p><strong>&#8220;What happens when things go wrong?&#8221;</strong></p><p>Not &#8220;find bugs in this function.&#8221; Not &#8220;review this pull request.&#8221; Not code review: failure mode analysis.</p><p>Twelve minutes later, I had 12 issues. They clustered into four patterns.</p><h2>The System</h2><p>I built Hermes, an autonomous email agent to engage inbound recruiter and consulting outreach, scoring each opportunity by rate, location, and position match and answering in my voice. You can read the design notes and decision records in the public <a href="https://github.com/martymcenroe/HermesWiki">HermesWiki</a>.</p><p>Before Hermes fully engages with an inbound thread, it asks the sender to do one small thing: star a GitHub repository. In the first half of 2026, much of the inbound opportunity email is automated (recruiter bots working the job boards), and a bot can&#8217;t review a portfolio and click a star. A human who actually looked at my work can. The star is a liveness check: thirty seconds of proof that there&#8217;s a real person.</p><p>Mail reaches Hermes two ways: sent directly to its own addresses, or forwarded from my personal Gmail by an Apps Script. The architecture splits across Cloudflare (email ingress, database, dashboard) and AWS (SQS queue, Lambda for AI inference, SES for outbound email).</p><p>The critical path, taking the forwarded road:</p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!mM8z!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F33b67171-f2a9-4872-8d86-3c70308b4d9f_2200x432.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!mM8z!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F33b67171-f2a9-4872-8d86-3c70308b4d9f_2200x432.png 424w, https://substackcdn.com/image/fetch/$s_!mM8z!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F33b67171-f2a9-4872-8d86-3c70308b4d9f_2200x432.png 848w, https://substackcdn.com/image/fetch/$s_!mM8z!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F33b67171-f2a9-4872-8d86-3c70308b4d9f_2200x432.png 1272w, https://substackcdn.com/image/fetch/$s_!mM8z!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F33b67171-f2a9-4872-8d86-3c70308b4d9f_2200x432.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!mM8z!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F33b67171-f2a9-4872-8d86-3c70308b4d9f_2200x432.png" width="1456" height="286" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/33b67171-f2a9-4872-8d86-3c70308b4d9f_2200x432.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:286,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:33612,&quot;alt&quot;:&quot;Flowchart of the nine-hop critical path: recruiter sends email, Apps Script forwards it, Worker records it, SQS queues the job, Lambda with Haiku classifies intent, Lambda with Sonnet generates the reply, SES sends it, Lambda calls back to the Worker, and the Worker updates D1.&quot;,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://theageofmore.substack.com/i/207345866?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F33b67171-f2a9-4872-8d86-3c70308b4d9f_2200x432.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Flowchart of the nine-hop critical path: recruiter sends email, Apps Script forwards it, Worker records it, SQS queues the job, Lambda with Haiku classifies intent, Lambda with Sonnet generates the reply, SES sends it, Lambda calls back to the Worker, and the Worker updates D1." title="Flowchart of the nine-hop critical path: recruiter sends email, Apps Script forwards it, Worker records it, SQS queues the job, Lambda with Haiku classifies intent, Lambda with Sonnet generates the reply, SES sends it, Lambda calls back to the Worker, and the Worker updates D1." srcset="https://substackcdn.com/image/fetch/$s_!mM8z!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F33b67171-f2a9-4872-8d86-3c70308b4d9f_2200x432.png 424w, https://substackcdn.com/image/fetch/$s_!mM8z!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F33b67171-f2a9-4872-8d86-3c70308b4d9f_2200x432.png 848w, https://substackcdn.com/image/fetch/$s_!mM8z!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F33b67171-f2a9-4872-8d86-3c70308b4d9f_2200x432.png 1272w, https://substackcdn.com/image/fetch/$s_!mM8z!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F33b67171-f2a9-4872-8d86-3c70308b4d9f_2200x432.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><p>That&#8217;s nine hops across two clouds. Every hop can fail. And because this pipeline is the front door for ThriveTech.ai, a silent failure here isn&#8217;t just a dropped packet: it&#8217;s a burned bridge with a client or a lost contract. The question is: what happens when it does?</p><h2>Pattern 1: Missing Idempotency</h2><p>The first two bugs were the scariest because they&#8217;re silent.</p><p><strong>Bug #1: Callback failure = silent data loss.</strong> Lambda sends the email via SES (succeeds), then calls back to the Worker to record the success in D1 (fails). The recruiter got the email. The database doesn&#8217;t know. The dashboard shows the conversation as &#8220;awaiting response.&#8221; The retry cron finds it and sends the email again. The recruiter gets two identical emails. The database never catches up.</p><p><strong>Bug #2: SQS retry = duplicate sends.</strong> SQS has at-least-once delivery. If Lambda processes a message but takes too long to delete it from the queue, SQS redelivers. Lambda processes it again. The recruiter gets two responses to the same email.</p><p>Both bugs have the same root cause: no idempotency key. There&#8217;s no mechanism to detect &#8220;I&#8217;ve already processed this&#8221; or &#8220;I&#8217;ve already sent this.&#8221; The system assumes every operation happens exactly once. In distributed systems, nothing happens exactly once.</p><p>The fix: Add a <code>processing_id</code> (UUID generated by the Worker at SQS push time) that Lambda checks before processing. If the ID already exists in D1, skip. For callbacks, implement a retry queue. If the callback fails, Lambda stores the result in a DynamoDB table and a separate process retries delivery.</p><p>I grow weary, sometimes, of repeating the same mistakes. How many times have I built a first version assuming exactly-once delivery?</p><h2>Pattern 2: Incomplete Retry</h2><p>Three bugs shared a theme: the system had retry logic, but it didn&#8217;t cover every failure path.</p><p><strong>Bug #3: SQS push failure = conversation limbo.</strong> If the Worker can&#8217;t reach SQS (network blip, credential rotation), the conversation is recorded in D1 as &#8220;received&#8221; but no AI job is queued. The conversation sits in ENGAGING state forever: no response goes out, no retry fires, the recruiter waits indefinitely.</p><p><strong>Bug #4: Daily follow-up caps at 20.</strong> The follow-up cron has <code>LIMIT 20</code> to prevent mass sends. With 94 active conversations, 74 get no follow-up on any given day. The query has no ordering or pagination, so the same 20 conversations could get follow-ups every day while others are permanently neglected.</p><p><strong>Bug #5: Legacy retry overwrites AI responses.</strong> The original retry function was written before the AI pipeline existed. When it retries a failed send, it regenerates the email body from a generic template instead of re-sending the original AI-generated text. Every retry destroys the AI&#8217;s generated reply.</p><p>The pattern: retry logic that was written for smaller volumes and never updated as traffic increased.</p><h2>Pattern 3: Race Conditions</h2><p>Three bugs that only manifest under concurrent load.</p><p><strong>Bug #6: Gmail double-forward = duplicate inbound.</strong> Gmail&#8217;s Apps Script forwarding occasionally fires twice for the same email. The Worker creates two conversations for the same recruiter. Both get first-contact emails. The recruiter thinks you&#8217;re spam.</p><p><strong>Bug #7: Stale follow-up fires after reply.</strong> The daily follow-up cron runs at 8 AM CT. It queries conversations with <code>updated_at</code> &lt; 20 hours ago. If a recruiter replies at 7:55 AM, their reply is being processed by Lambda while the cron query is already running. The cron sees the old <code>updated_at</code>, queues a follow-up. Five minutes later, the recruiter gets both an AI response to their email and a follow-up nagging them. The follow-up makes no sense in context.</p><p><strong>Bug #8: Duplicate conversation creation.</strong> <code>getOrCreateConversation()</code> does SELECT then INSERT. If two emails from the same recruiter arrive within milliseconds (forwarded from two sources, or an email thread), both SELECTs return null, both INSERTs succeed, and you have two conversations for one recruiter.</p><p>The fix for all three is the same tool: unique constraints and SELECT-before-act checks. Bug #6 needs a <code>UNIQUE INDEX</code> on Message-ID. Bug #7 needs a freshness check (<code>updated_at</code> &gt; threshold at send time, not just at query time). Bug #8 needs a <code>UNIQUE INDEX</code> on sender email.</p><h2>Pattern 4: Blind Trust and Brittle Security</h2><p>Four bugs that aren&#8217;t about failure handling: they&#8217;re about what happens when you trust inputs you shouldn&#8217;t.</p><p><strong>Bug #9: No timeout on GitHub API calls.</strong> Star verification calls the GitHub API to check if a recruiter has starred the repo. No timeout is set. If GitHub is slow (or down), the Worker hangs for 30 seconds until the platform kills it. Every subsequent request to the Worker hangs too, because the event loop is blocked.</p><p><strong>Bug #10: </strong><code>updateConversation</code><strong> accepts arbitrary column names.</strong> The dashboard update endpoint takes a column name from the request and interpolates it into SQL. <code>UPDATE conversations SET ${column} = ? WHERE id = ?</code>. An attacker (or a typo) could target any column: <code>state</code>, <code>send_success</code>, <code>created_at</code>. There&#8217;s no whitelist.</p><p><strong>Bug #11: HMAC timing attack.</strong> The Lambda callback authenticates via HMAC signature. The comparison uses <code>===</code> (string equality), which short-circuits on the first mismatched character. An attacker can brute-force the secret one character at a time by measuring response times.</p><p><strong>Bug #12: Dead code path.</strong> The forwarded handler still calls <code>sendViaResend()</code>, a function from before the SES migration. Resend is supposed to be dead. But this code path is alive, uncharged, and using a different sender identity than SES.</p><p>These four share a pattern: assumptions that hold during development but fail in production. GitHub is always fast. Until it isn&#8217;t. Nobody would send a malicious column name. Until they do. String comparison is fine for auth. Until someone measures the timing. Dead code doesn&#8217;t matter. Until it runs.</p><h2>The Meta-Pattern</h2><p>Here&#8217;s what struck me about these 12 bugs. A linter would have caught none of them; a linter doesn&#8217;t know that SQS delivers at-least-once. A test suite would have caught few, because a test suite encodes the same assumptions the code does. How can you write a test for a failure you never imagined?</p><p>These are design bugs, not implementation bugs. They exist in the spaces between components. They&#8217;re the questions that didn&#8217;t get asked: &#8220;What if the callback fails?&#8221; &#8220;What if SQS delivers twice?&#8221; &#8220;What if two emails arrive simultaneously?&#8221;</p><p>Wouldn&#8217;t a good code review have caught these? Missing idempotency at a network boundary is exactly the comment a senior engineer leaves on a pull request. We&#8217;ve all sat on both sides of that review. The question isn&#8217;t whether review works. The question is what it costs.</p><p>The reviewer who knows at-least-once delivery in their bones is the most senior engineer in the room, and their hours are the most contested. A pull request gets fifteen minutes of that attention, not a day. Worse, these bugs don&#8217;t live in a pull request. They live between pull requests: a retry cron reviewed clean in version 1, silently wrong once version 2 changed what a send means. No diff contains the composition, so no diff review catches it. Some of these weren&#8217;t even bugs on review day. The follow-up cap of 20 was right when there were 20 conversations. Review approves the code in front of it, against the world as it is. The world moves on.</p><p>Failure mode analysis is also the work human attention does worst: enumeration, three questions for every external call. By the fortieth call site, the sharpest reviewer is skimming. So teams spend the deep reviews where the money is, the payment path and the auth flow, and everything else gets a look and a nod. That is not negligence. That&#8217;s an engineering budget.</p><p>What does it tell us that an AI found all 12? Not that AI is better at this than humans. I would have found them too, after one of them bit me in production. The difference is systematic enumeration. The AI methodically walked through every call, every failure mode, every recovery path. It didn&#8217;t get bored. It didn&#8217;t skip the obvious ones. What changed is not the quality of the reviewer. It&#8217;s the price of the review.</p><h2>What I Do Now</h2><p>After this experience, I run a failure mode audit on every system that crosses a network boundary. The prompt is the same simple question: &#8220;What happens when things go wrong?&#8221; That is the whole prompt. No role-play, no elaborate scaffolding, no twelve-paragraph system prompt.</p><p>The simple question outperformed any clever structure I could have dictated because it didn&#8217;t tell the model where to stop looking. Over-specify, and the AI complies; leave room, and it explores. The simpler the question, the deeper the analysis.</p><p>It takes fifteen minutes. It usually finds three to five real gaps: places where the system silently loses data, sends duplicates, or hangs.</p><p>But error handling is one question from a much longer list. Ask &#8220;what did we hardcode that we&#8217;ll regret?&#8221; and you get a different dozen issues. Ask &#8220;which assumptions stop being true as this grows?&#8221; and you get another. Ask &#8220;what would a bored attacker try first?&#8221; There are hundreds of questions in this family, one for every class of defect that ships, and until now each one cost a senior engineer&#8217;s afternoon to answer properly. Now each one costs a sentence.</p><p>The four patterns are decades older than this system: missing idempotency, incomplete retry, race conditions, and blind trust. They are the standard failure modes of anything that crosses a network, and this system had all four. I&#8217;ll gladly take the fifteen minutes to find them early.</p><p>Because without a team, the counterfactual for this system was never a staff engineer catching Bug #7 in review. It was no reviewer at all, which is how most solo-built code ships.</p><p>There is a joke you find on a developer&#8217;s t-shirt: <em>&#8220;I always test my code&#8230; in production.&#8221;</em> It gets a laugh from a very specific crowd, but the humor is a defense mechanism.</p><p>Testing in production is just another form of code review.</p><p>It is the most expensive one: it finds bugs but bills you in postmortems.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://theageofmore.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading The Age of More! Subscribe for free to receive new posts.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><p></p>]]></content:encoded></item><item><title><![CDATA[The Muses' Disclaimer: Invoke Boldly, Verify Ruthlessly]]></title><description><![CDATA[The Greeks shipped the warning label for AI twenty-seven centuries ago. We just forgot to read it.]]></description><link>https://theageofmore.substack.com/p/the-muses-disclaimer-invoke-boldly</link><guid isPermaLink="false">https://theageofmore.substack.com/p/the-muses-disclaimer-invoke-boldly</guid><dc:creator><![CDATA[Marty McEnroe]]></dc:creator><pubDate>Thu, 16 Jul 2026 05:56:19 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!lEXI!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F50731d2b-6073-4a8b-9ca9-4bc69393927f_1408x768.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!lEXI!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F50731d2b-6073-4a8b-9ca9-4bc69393927f_1408x768.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!lEXI!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F50731d2b-6073-4a8b-9ca9-4bc69393927f_1408x768.jpeg 424w, https://substackcdn.com/image/fetch/$s_!lEXI!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F50731d2b-6073-4a8b-9ca9-4bc69393927f_1408x768.jpeg 848w, https://substackcdn.com/image/fetch/$s_!lEXI!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F50731d2b-6073-4a8b-9ca9-4bc69393927f_1408x768.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!lEXI!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F50731d2b-6073-4a8b-9ca9-4bc69393927f_1408x768.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!lEXI!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F50731d2b-6073-4a8b-9ca9-4bc69393927f_1408x768.jpeg" width="1408" height="768" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/50731d2b-6073-4a8b-9ca9-4bc69393927f_1408x768.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:768,&quot;width&quot;:1408,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:963038,&quot;alt&quot;:&quot;A painterly mountainside: the nine Muses in white and violet robes offer a shepherd, Hesiod, a glowing golden laurel branch and an unrolling scroll whose text dissolves into scattered, corrupted fragments. Sheep graze below. On the right, mathematical equations hang in the air and a blind, bearded old man, Homer, sits with a staff, a stream of light flowing to his ear.&quot;,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://theageofmore.substack.com/i/207246180?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F50731d2b-6073-4a8b-9ca9-4bc69393927f_1408x768.jpeg&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="A painterly mountainside: the nine Muses in white and violet robes offer a shepherd, Hesiod, a glowing golden laurel branch and an unrolling scroll whose text dissolves into scattered, corrupted fragments. Sheep graze below. On the right, mathematical equations hang in the air and a blind, bearded old man, Homer, sits with a staff, a stream of light flowing to his ear." title="A painterly mountainside: the nine Muses in white and violet robes offer a shepherd, Hesiod, a glowing golden laurel branch and an unrolling scroll whose text dissolves into scattered, corrupted fragments. Sheep graze below. On the right, mathematical equations hang in the air and a blind, bearded old man, Homer, sits with a staff, a stream of light flowing to his ear." srcset="https://substackcdn.com/image/fetch/$s_!lEXI!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F50731d2b-6073-4a8b-9ca9-4bc69393927f_1408x768.jpeg 424w, https://substackcdn.com/image/fetch/$s_!lEXI!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F50731d2b-6073-4a8b-9ca9-4bc69393927f_1408x768.jpeg 848w, https://substackcdn.com/image/fetch/$s_!lEXI!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F50731d2b-6073-4a8b-9ca9-4bc69393927f_1408x768.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!lEXI!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F50731d2b-6073-4a8b-9ca9-4bc69393927f_1408x768.jpeg 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">The Muses offer the gift &#8212; a laurel and a scroll whose truths fray, at the edges, into beautiful falsehood. Blind Homer listens; the equations are the checking. Invoke boldly, verify ruthlessly.</figcaption></figure></div><p>The oldest surviving account of inspiration in the Western canon begins with a shepherd ambushed on a mountainside. Hesiod, tending his flock upon the slopes of Helicon, encounters the Muses&#8212;the nine daughters of Mnemosyne, which is to say, the daughters of Memory. Before granting him their divine gift, they offer the most startling disclaimer in classical literature:</p><blockquote><p>&#8220;We know how to speak many false things as though they were true; and we know, when we will, to utter true things.&#8221;</p></blockquote><p>Linger on that for a moment. The supreme source of poetic truth opens with a warning: outputs may be beautiful, plausible fabrications; truth is available, but never guaranteed. This is no mere footnote. It is the Muses&#8217; explicitly stated nature, etched into verses 27 and 28 of Greek theology&#8217;s founding poem.</p><p>Twenty-seven centuries later, we forged machines from compressed human memory. We built literal daughters of Mnemosyne, training them on the vast, accumulated text of our species, only to discover&#8212;to our apparent shock&#8212;that they, too, speak beautiful falsehoods. And, when the light strikes just right, they utter profound truths. We called this &#8220;hallucination.&#8221; We treat it as a scandal, a mere engineering defect awaiting the right patch.</p><p>The Greeks knew better. Their ancient response is the very operating manual we keep failing to write.</p><p>They did not worship the Muses with the blind terror they reserved for Zeus. They invoked them, and then they rigorously checked the meter. The invocation was genuine&#8212;the poet knew he could not summon the song alone, confessing as much in the opening breath of every epic. But no rhapsode, not even a master like the blind poet Homer, ever sang unverified. The craft itself&#8212;the scansion, the ancestral formulas, the watchful ears of an audience who knew the myths by heart&#8212;served as the filter. Inspiration tethered to verification. The divine gift, grounded by a human referee. The muse proposes; the tradition disposes.</p><p>I watched this ancient protocol run last week at industrial speed. An AI labored through the dark on an open mathematical conjecture, and its log revealed the muse-condition in perfect clarity. A checking algorithm fired hundreds of counterexamples at one of the machine&#8217;s cherished intermediate claims&#8212;many false things spoken as though true. Yet, the very pattern of those failures illuminated the hypothesis that made the final lemma sing. True things, uttered only when the grueling work of checking made them utterable.</p><p>The finished proof laid out its sources in tiers: verified texts, second-hand reliances, and finally, the most honest tier of all&#8212;ambient knowledge, its provenance unrecoverable, left deliberately uncited. Because the machine&#8217;s memory, like the Muses&#8217;, is an ocean, not a tidy bibliography.</p><p>And neither, if we are radically honest, is our own. The mathematician Tom Lindstr&#246;m captures this perfectly when he opens his treatise on mathematical analysis with a quiet, devastating confession: his most vital influences are the ones he can no longer trace. The foundational truths, he writes, are simply &#8220;just there,&#8221; the moment of first learning entirely swallowed by time. This is the human equivalent of the machine&#8217;s black box; it is the silent, ambient whisper of the Muse. We possess the knowledge, but have lost the map to its origin. Seen in this light, every acknowledgments section ever penned is merely Hesiod&#8217;s ancient disclaimer, dressed up in the polite manners of modern academia.</p><p>This, then, is the lens through which we must look. The hallucination problem is neither new nor scandalous, nor is it a software update away from vanishing. It is the permanent, indelible character of anything that speaks entirely from memory: be it god, poet, professor, or transformer. The Greeks encoded this duality into their theology because they possessed a far greater honesty about their sources of inspiration than we do today.</p><p>The ancients did not leave us a warning to flee the Muses. They left us a protocol for surviving their arrival: invoke boldly, verify ruthlessly, and never confuse the blinding light of the gift with the quiet, structural work of the checking. The civilizations that flourish alongside these new daughters of Memory will be the ones that remember both halves.</p><p>Those who only invoke will drown in a sea of beautiful falsehoods. Those who only verify will never hear the song.</p>]]></content:encoded></item><item><title><![CDATA[Why I said No to RAG]]></title><description><![CDATA[Similarity is not ground truth. Knowing the difference is the job.]]></description><link>https://theageofmore.substack.com/p/why-i-said-no-to-rag</link><guid isPermaLink="false">https://theageofmore.substack.com/p/why-i-said-no-to-rag</guid><dc:creator><![CDATA[Marty McEnroe]]></dc:creator><pubDate>Thu, 16 Jul 2026 05:18:57 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!1AmJ!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F49cd3ba6-3cf5-47d8-9c55-88f014efc0a7_1264x848.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!1AmJ!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F49cd3ba6-3cf5-47d8-9c55-88f014efc0a7_1264x848.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!1AmJ!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F49cd3ba6-3cf5-47d8-9c55-88f014efc0a7_1264x848.jpeg 424w, https://substackcdn.com/image/fetch/$s_!1AmJ!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F49cd3ba6-3cf5-47d8-9c55-88f014efc0a7_1264x848.jpeg 848w, https://substackcdn.com/image/fetch/$s_!1AmJ!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F49cd3ba6-3cf5-47d8-9c55-88f014efc0a7_1264x848.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!1AmJ!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F49cd3ba6-3cf5-47d8-9c55-88f014efc0a7_1264x848.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!1AmJ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F49cd3ba6-3cf5-47d8-9c55-88f014efc0a7_1264x848.jpeg" width="1264" height="848" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/49cd3ba6-3cf5-47d8-9c55-88f014efc0a7_1264x848.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:848,&quot;width&quot;:1264,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:864385,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://theageofmore.substack.com/i/207243971?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F49cd3ba6-3cf5-47d8-9c55-88f014efc0a7_1264x848.jpeg&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!1AmJ!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F49cd3ba6-3cf5-47d8-9c55-88f014efc0a7_1264x848.jpeg 424w, https://substackcdn.com/image/fetch/$s_!1AmJ!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F49cd3ba6-3cf5-47d8-9c55-88f014efc0a7_1264x848.jpeg 848w, https://substackcdn.com/image/fetch/$s_!1AmJ!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F49cd3ba6-3cf5-47d8-9c55-88f014efc0a7_1264x848.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!1AmJ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F49cd3ba6-3cf5-47d8-9c55-88f014efc0a7_1264x848.jpeg 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Half of 2026 is written into the ledger, and still RAG is on every job description. &#8220;Experience with retrieval-augmented generation&#8221; appears next to &#8220;LLMs&#8221; and &#8220;prompt engineering,&#8221; an assumed requirement. So when a system needs to give a language model some context it doesn&#8217;t have, the reflexive move, the one that gets you nodded through the interview, is: add RAG. Embed the corpus, stand up a vector store, retrieve the top-k chunks, stuff them in the prompt.</p><p>I built exactly that. Then I deleted it. Here&#8217;s why, and why the deleting is the part I&#8217;d put on a resume.</p><h2>The tool has a shape</h2><p>RAG is a similarity engine. That&#8217;s not a criticism; it&#8217;s a specification. You embed a corpus into a vector space, and at query time you find the passages whose vectors sit closest to your query&#8217;s. It answers exactly one question: &#8220;what, in this large pile of unstructured text, is most like what I&#8217;m asking about?&#8221; Support tickets, documentation, research papers, a sprawling wiki. RAG is the right tool when the thing you need is semantically nearby and you&#8217;d never find it by exact match.</p><p>The failure mode hides in that word: similar. RAG doesn&#8217;t return the right answer. It returns the nearest one. And for a whole class of problems, the nearest answer is a trap.</p><h2>The problem I actually had</h2><p>My system &#8212; <a href="https://github.com/martymcenroe/AssemblyZero/wiki">AssemblyZero</a>, an open-source multi-agent framework that designs and writes code &#8212; had a specific bug. Its design stage would write a low-level design that called functions that don&#8217;t exist. It would confidently reference <code>orchestrator.save_state()</code> when the real function was <code>save_orchestration_state()</code>, because the design stage couldn&#8217;t see the actual code. Interface hallucination.</p><p>I reached for an obvious fix: RAG. Index the codebase, retrieve relevant code while writing the design, ground the model in reality. I named the component the Librarian (Ook), wired up a vector store and a local embedding model, and&#8230; it never quite worked, and I got busy, and it went dormant. Months later I couldn&#8217;t even remember whether it was on.</p><p>Here&#8217;s what I&#8217;d missed. <strong>Grounding a design in a codebase is not a similarity problem. It&#8217;s a ground-truth problem.</strong></p><p>When the design needs to call into existing code, it doesn&#8217;t need something like the real function. It needs the real function: the exact name, the exact signature. And &#8220;most similar&#8221; is precisely how you retrieve <code>save_state()</code> when the truth is <code>save_orchestration_state()</code>. RAG wouldn&#8217;t have fixed the interface hallucination. On a bad day it would have fed it, handing the model a plausible, semantically-adjacent, wrong name with the false authority of &#8220;retrieved from your codebase.&#8221;</p><p>I had pointed a similarity engine at a ground-truth question. That&#8217;s my mistake, because RAG seems to be the answer to &#8220;the model needs context&#8221; in general, when it&#8217;s really the answer to a narrower question: &#8220;the model needs the most relevant context from an unstructured pile.&#8221;</p><h2>What ground truth actually needs&#59398;</h2><p>The real interface surface of a module isn&#8217;t fuzzy. It&#8217;s <code>ast.parse</code>. You read the file, extract the public classes and functions and their exact signatures, and hand those to the LLM. You don&#8217;t hand it the five nearest neighbors a similarity search returns, and you don&#8217;t hand it the whole codebase dumped into the context window. You hand it the exact interface, nothing else. No vector store. No embeddings. No gigabytes of machine-learning libraries. A few hundred lines of deterministic AST walking that returns the truth, not the neighborhood of the truth.</p><p>So I built Tiphys, the helmsman of the Argo to bring the ship in true, to steer the designer LLM true. And the quietly humiliating part: the extractors it needed already existed elsewhere in my own system. The ground-truth machinery was there the whole time; I&#8217;d just walked past it reaching for the fashionable thing.</p><h2>The retirement</h2><p>Killing RAG deleted 6,400 lines of code and an entire dependency avalanche &#8212; the vector store, the embedding model, the machine-learning and GPU libraries, a whole server stack &#8212; that had been sitting in the lockfile in service of a feature that never ran. My continuous integration, which had been quietly red for days on a dormant test nobody watched, went green the moment the wrong tool was gone.</p><p>I put the why in an architecture decision record and left the old one standing, marked superseded, because the story of what you tried and why it was wrong is worth more than the tidy pretense that you got it right the first time.</p><h2>The actual skill</h2><p>So here&#8217;s the thing the job description&#8217;s &#8220;experience with RAG&#8221; checkbox can&#8217;t capture: <strong>I don&#8217;t reach for RAG by default.</strong> When a system needs retrieval, I ask one question first: is this a similarity problem or a ground-truth problem? Similarity, and RAG is exactly right. Ground truth, and RAG is how you ship a system that is confidently, authoritatively wrong.</p><p>Reaching for the hyped tool is easy. Knowing when not to, and being willing to delete six thousand lines of your own code when the answer is &#8220;not here,&#8221; is the part that&#8217;s actually hard. And it&#8217;s the part that&#8217;s actually the job.</p><div><hr></div><p><em>AssemblyZero is open source. If you&#8217;d star a framework for what it had the sense to delete, <a href="https://github.com/martymcenroe/AssemblyZero">it&#8217;s on GitHub</a>.</em></p>]]></content:encoded></item><item><title><![CDATA[MORE: The New Way]]></title><description><![CDATA[Two little boys ask for MORE. Only one has lived to find it.]]></description><link>https://theageofmore.substack.com/p/more-the-new-way</link><guid isPermaLink="false">https://theageofmore.substack.com/p/more-the-new-way</guid><dc:creator><![CDATA[Marty McEnroe]]></dc:creator><pubDate>Mon, 13 Jul 2026 06:55:51 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!Gbbh!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb747b578-57f8-48c2-b17f-b1f18280a08e_1408x768.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Gbbh!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb747b578-57f8-48c2-b17f-b1f18280a08e_1408x768.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Gbbh!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb747b578-57f8-48c2-b17f-b1f18280a08e_1408x768.jpeg 424w, https://substackcdn.com/image/fetch/$s_!Gbbh!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb747b578-57f8-48c2-b17f-b1f18280a08e_1408x768.jpeg 848w, https://substackcdn.com/image/fetch/$s_!Gbbh!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb747b578-57f8-48c2-b17f-b1f18280a08e_1408x768.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!Gbbh!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb747b578-57f8-48c2-b17f-b1f18280a08e_1408x768.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Gbbh!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb747b578-57f8-48c2-b17f-b1f18280a08e_1408x768.jpeg" width="1408" height="768" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/b747b578-57f8-48c2-b17f-b1f18280a08e_1408x768.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:768,&quot;width&quot;:1408,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1075725,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://theageofmore.substack.com/i/206802480?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb747b578-57f8-48c2-b17f-b1f18280a08e_1408x768.jpeg&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!Gbbh!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb747b578-57f8-48c2-b17f-b1f18280a08e_1408x768.jpeg 424w, https://substackcdn.com/image/fetch/$s_!Gbbh!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb747b578-57f8-48c2-b17f-b1f18280a08e_1408x768.jpeg 848w, https://substackcdn.com/image/fetch/$s_!Gbbh!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb747b578-57f8-48c2-b17f-b1f18280a08e_1408x768.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!Gbbh!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb747b578-57f8-48c2-b17f-b1f18280a08e_1408x768.jpeg 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Oliver Twist walks the length of the workhouse hall, bowl in hand, and asks the master: &#8220;Please, sir, I want some MORE.&#8221;</p><p>Everyone remembers the scene. Why is the scene so depressing? Oliver&#8217;s <em>more</em> is a beggar&#8217;s <em>more</em>. It is a request made inside the workhouse&#8217;s own arithmetic, on the workhouse&#8217;s terms, addressed to the man holding the ladle. The most Oliver can win is a second scoop of gruel.</p><p>There is another <em>more</em>.</p><p>In June of 1944, over the Philippine Sea, an American pilot named Ziggy Neff keyed his radio and said, &#8220;Hell, this is just like an old-time turkey shoot.&#8221; Three hundred forty-six of theirs went down that day against thirty of ours. Of the four hundred and thirty carrier planes Japan flew at dawn only thirty-five were still in the air. It was the end of Japanese carrier aviation for the war, forever.</p><p>What is the take-away? We always want it to be one thing. The Hellcat. The horsepower. The radar. The pilot training. The number of planes. The number of pilots. The available fuel. The proximity fuse. It was never one thing. It was <em>everything</em>: a hundred thousand new aircraft a year, broken codes, a floating supply train, stacked until the contest changed category. That&#8217;s the other <em>more</em>. Not a bigger bowl. A different arithmetic.</p><p>You have run the old arithmetic yourself. Everyone past a certain age has. There is something of yours up on a shelf. A language. An instrument. A theorem, a book, a business. You did the math one night and the math said no. Not enough evenings. Not enough years. Not the right letters after your name. So up it went, and you told yourself the word every workhouse teaches: <em>later</em>.</p><p>The old arithmetic told me the same thing, for decades: not credentialed for this, not young enough for this, no grant, no lab, no graduate student, no department. Please, sir. The old arithmetic offers the ladle-holder&#8217;s terms, and I stood in that line longer than I care to remember.</p><p>Then the arithmetic changed. Last week a conjecture in algebraic combinatorics &#8212; posed by a working mathematician, descended from a published paper whose own proof had broken &#8212; was reconstructed, verified across 284 cases, and given a complete proof draft. Overnight. At my home desk. The token cost: four dollars and twelve cents.</p><p>The new arithmetic stacks. An AI reads the paper, the errata, and the code, and holds all of it at once. A verification engine written at ten past midnight that fires hundreds of test cases &#8212; a polybolos, the repeating ballista the Greeks built when they got tired of loading one bolt at a time. A tireless collaborator who can stack the attack on every axis.</p><p>I build the machine that stacks them, the orchestration that reads and writes and checks and holds the whole problem at once. With it, alone at a home desk, I built a study tool called Chiron that not long ago would have taken a team and a year. Then I gave the framework away, free, because the arithmetic only changes for everyone when the device is one you can take apart.</p><p>I have wanted a stack like that my whole life. Decades ago, a new age, a man on the moon. And a five-year-old boy who wanted nothing more than a blue Schwinn Stingray for his birthday. That year Dad brought home a new Pontiac. &#8220;It has posi-traction!&#8221; &#8220;Dad &#8212; is posi-traction an inherent property of the car or a mechanical device?&#8221; A long pause. A studied look at the too-serious child who&#8217;d asked. &#8220;It&#8217;s a device, son. It&#8217;s the way the gears work in the rear axle.&#8221;</p><p>I always had more questions than anyone could ever play or want to play. More questions. More ideas. More plans, more drawings, more projects. I never could move it all forward together, could never get the traction to push on every dimension at once.</p><p>Fifty-plus years of deferred desire, accumulating compound interest.</p><p>All of those obstacles are now just gunpowder, sending fireworks shooting from my mind. Finally I can push MORE, for the cost of a cheap bottle of wine from Trader Joe&#8217;s, the wine you&#8217;d drink watching television, sedating away the dreams that slipped out of reach.</p><p>The dream deferred does not dry up like a raisin in the sun. Langston Hughes asked the question; I&#8217;ve lived the answer. It accumulates interest. It gains energy. It burns, a golden thread, until it must erupt.</p><p>Two little boys asked for MORE. One got a second scoop of gruel; the other waited fifty years for the arithmetic to change.</p><p>You don&#8217;t have to wait at all. Go to the shelf. Take it down. Run the numbers again; they changed while you weren&#8217;t looking. The framework that stacks the advantage is <a href="https://github.com/martymcenroe/AssemblyZero/wiki">AssemblyZero</a>, free for hackers and academics. If you&#8217;re tired of the old arithmetic, come see how the gears work. Take that ladle, it is yours now.</p><p>MORE everything. That&#8217;s the new way.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://theageofmore.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading The Age of More! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item></channel></rss>