<?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 Whetstone]]></title><description><![CDATA[Operator notes from inside an AI-native system. Methodology, not commentary. Biweekly.]]></description><link>https://whetstone.everfen.com</link><image><url>https://substackcdn.com/image/fetch/$s_!jE-Z!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fab3b1e6e-5e05-4425-a3c0-875ba3695be7_144x144.png</url><title>The Whetstone</title><link>https://whetstone.everfen.com</link></image><generator>Substack</generator><lastBuildDate>Wed, 08 Jul 2026 09:12:56 GMT</lastBuildDate><atom:link href="https://whetstone.everfen.com/feed" rel="self" type="application/rss+xml"/><copyright><![CDATA[Mark Buntyn]]></copyright><language><![CDATA[en]]></language><webMaster><![CDATA[markbuntyn@substack.com]]></webMaster><itunes:owner><itunes:email><![CDATA[markbuntyn@substack.com]]></itunes:email><itunes:name><![CDATA[Mark Buntyn]]></itunes:name></itunes:owner><itunes:author><![CDATA[Mark Buntyn]]></itunes:author><googleplay:owner><![CDATA[markbuntyn@substack.com]]></googleplay:owner><googleplay:email><![CDATA[markbuntyn@substack.com]]></googleplay:email><googleplay:author><![CDATA[Mark Buntyn]]></googleplay:author><itunes:block><![CDATA[Yes]]></itunes:block><item><title><![CDATA[Decisions Without Alternatives Aren't Decisions]]></title><description><![CDATA[Your agent proposes something.]]></description><link>https://whetstone.everfen.com/p/decisions-without-alternatives-arent</link><guid isPermaLink="false">https://whetstone.everfen.com/p/decisions-without-alternatives-arent</guid><dc:creator><![CDATA[Mark Buntyn]]></dc:creator><pubDate>Fri, 26 Jun 2026 12:01:00 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!jE-Z!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fab3b1e6e-5e05-4425-a3c0-875ba3695be7_144x144.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Your agent proposes something. You read it, it&#8217;s sound, you accept it. It gets logged. You move on.</p><p>A month later you open the log and read the entry back. It says what you decided. It does not say what you didn&#8217;t decide, because nothing was ever not-decided &#8212; there was a proposal and there was a yes. And here is the problem that doesn&#8217;t announce itself: that entry is indistinguishable from one where you genuinely chose. Same shape, same confidence, same past tense. You cannot tell, reading it cold, whether you reasoned your way to that line or whether you absorbed it from an agent that was good at sounding right.</p><p>I think this is the most common failure I see in operator decision logs, and it&#8217;s invisible precisely because the log looks complete. Every entry has a title, a date, a rationale. What most of them don&#8217;t have is the field that does the actual work: what else was on the table, and why it lost.</p><p>I want to make the case that a decision record without its rejected alternatives is not a decision record. It&#8217;s an assertion that has put on a decision&#8217;s clothes. And the gap between those two things is the entire reason to keep a log at all.</p><blockquote><p>An assertion that has put on a decision&#8217;s clothes.</p></blockquote><h3>The field that feels optional</h3><p>If you keep any kind of decision log, you&#8217;ve met the alternatives field. It&#8217;s the one that feels like overhead. You&#8217;ve already made the call &#8212; you know what you&#8217;re doing and why &#8212; and now the template wants you to enumerate the paths you&#8217;re <em>not</em> taking, which feels like writing a book report on roads you already decided not to drive down.</p><p>So it gets skipped, or worse, it gets filled with theater. Three strawman options nobody seriously considered, each with a one-line dismissal, arranged so the choice you&#8217;d already made looks inevitable. That version is worse than an empty field, because an empty field is at least honest about having no audit trail. A field full of manufactured alternatives manufactures false confidence &#8212; it reads, later, like a real deliberation happened when it didn&#8217;t.</p><p>The skeptic&#8217;s position here is strong, and I want to state it at full strength before I disagree with it: the alternatives field is busywork. The decision is what you decided. The roads not taken are noise. Recording them is a ritual that makes you feel rigorous without making you more right, and a disciplined operator should spend that energy on the decision itself, not on a museum of rejected options. Most of the time, looking at most alternatives fields, the skeptic is correct &#8212; I&#8217;ve written the theater version, and you probably have too. The question is whether there&#8217;s a version that isn&#8217;t theater, and what makes it different.</p><h3>What a real alternatives field is for</h3><p>The difference is testable, and the test is simple: does reading the field later change what you&#8217;d do, or does it only confirm what you did?</p><p>A theater alternatives field confirms. You read it back and it tells you the choice you made was the obvious one, which you already knew, which is why reading it adds nothing. A real alternatives field does something else &#8212; it preserves a live fork. It records options that someone could actually have chosen, with the actual reason each one lost, in enough detail that a future reader (including future-you, who has forgotten everything) could pick the entry up and reconstruct not just the verdict but the <em>evaluation</em> that produced it.</p><p>That&#8217;s the load-bearing idea: active evaluation. A decision is the resolution of a live evaluation between options that were actually open to you &#8212; where you could have gone the other way and didn&#8217;t, for a reason. If there was no live evaluation &#8212; if there was a proposal and a yes &#8212; then there was no decision, and the log entry recording it as one is lying about its own provenance. The alternatives field is where the entry either tells the truth about what was evaluated or admits nothing was.</p><p>This is a narrower claim than it might sound, and the narrowness is deliberate. I am not saying every action you take is a non-decision unless you agonized over rival plans. Plenty of correct moves have no live alternative &#8212; you accept the calculation that checks out, you take the only road that&#8217;s open. Those aren&#8217;t decisions in the sense this essay cares about, and they don&#8217;t need an alternatives field, because there&#8217;s nothing for a future reader to reconstruct. The class of work this is about is narrower: the choices where a path was genuinely open, you closed it, and six months later you won&#8217;t be able to tell that you closed it on purpose unless the entry says so.</p><p>And the function this serves isn&#8217;t sentimental record-keeping. It&#8217;s that six months on, the alternatives field is the only thing in the entry that can stop you from making a mistake you can no longer see you&#8217;re making.</p><p>Let me show you the entry that taught me this.</p><h3>The decision that was about deciding</h3><p>In early June I had to anchor a roadmap.</p><p>The background, sanded down to what matters: I&#8217;d built a small adversarial-review tool &#8212; the <a href="https://whetstone.everfen.com/p/i-built-a-tribunal-so-my-ai-couldnt">cold-review shape I wrote about in the first essay</a>, a thing that fans a question out to several AI models and collects their independent verdicts. It had grown a roadmap over time. Six positions, sequenced: do this, then this, then this. The roadmap was real in the sense that I&#8217;d been operating against it for weeks. It was also, I realized when I went to write it down properly, entirely undocumented &#8212; it had only ever lived in the session-to-session handoff notes I write when I close out one working session and open the next. It had never been logged as an actual decision.</p><p>So I sat down to log it. And the obvious move &#8212; the move I almost made &#8212; was to write the six positions into the decision record as the ratified roadmap. They were the plan. I&#8217;d been following them. Logging them as decided would just be catching the record up to reality.</p><p>Here is what stopped me, and it&#8217;s the whole point of this essay. Only <em>one</em> of those six positions had ever actually been reasoned through. The first one &#8212; the foundational fix everything else depended on &#8212; I had examined, argued, grounded in a specific defect it was solving. The other five were just <em>the words that were in the handoff</em>. They&#8217;d been carried forward from session to session, narrated as &#8220;the plan,&#8221; and never once subjected to the question: is this actually the right next move, or is it just the move I wrote down once and kept copying?</p><p>If I logged all six as ratified, I would have laundered five unexamined inherited positions into the permanent record as decisions. A future reader &#8212; me, in two months, grounding some new piece of work against &#8220;the roadmap&#8221; &#8212; would have pulled those five positions out of the log and treated them as settled, reasoned, load-bearing. They&#8217;d have carried the authority of a decision while having none of the substance of one. The record would have told a confident lie, and I&#8217;d have believed it, because I&#8217;d have forgotten that I was the one who wrote it.</p><p>So the decision I actually logged did something narrower and more honest. It ratified the one position that had been examined &#8212; marked it earned, anchored to the defect it fixed. And it explicitly carried the other five as <em>inherited, not ratified</em> &#8212; named them as provisional, flagged that each one needed its own scrutiny before it could be trusted, and recorded, in the alternatives field, that the move I&#8217;d rejected was exactly this: blessing all six as canonical &#8220;merely because they were the words in the handoff.&#8221;</p><p>What the rejected-options field recorded, in plainer words than I&#8217;ll use here, was that ratifying all six would promote five positions I&#8217;d never examined into the record purely because they were the words I happened to have written down &#8212; and that doing it under the banner of &#8220;catching the record up&#8221; would make the laziest available move look like diligence. I was, in other words, using the alternatives field to record the most tempting wrong move I&#8217;d been about to make, and why it was wrong, so that future-me couldn&#8217;t quietly make it later without first reading the argument against it.</p><p>That&#8217;s the function. Not a museum of rejected options. A tripwire.</p><h3>Why the tripwire only works if it&#8217;s written</h3><p>You might reasonably say: fine, but you caught it. You didn&#8217;t need the field &#8212; you needed the judgment, and you had it. The field just recorded a catch you&#8217;d already made.</p><p>This is the part that took me longest to believe. The judgment is not durable. The catch I made in June lives in my head for about as long as the context does, which is not long. The reason I&#8217;m confident the five inherited positions won&#8217;t get silently promoted later is not that I&#8217;ll remember reasoning about them. It&#8217;s that the entry now contains, in writing, the argument against promoting them &#8212; so the next time I open it, the tripwire is on the page, not dependent on my recall. The judgment was the act of writing the field. The field is what makes the judgment survive me.</p><p>This is the same reason the theater version is worthless and the real version isn&#8217;t. A strawman alternatives field records an evaluation that never happened, so reading it later triggers nothing &#8212; there&#8217;s no live fork to fall back into, no rejected move you might re-make. A real one records a fork that was genuinely open, which means it&#8217;s a fork you could genuinely re-open by accident. The field is there to catch you the second time, when the judgment that closed it the first time is long gone.</p><p>I have one other entry that works this way, and it&#8217;s worth a sentence because it shows the pattern isn&#8217;t a one-off. When I decided <em>against</em> building a particular feature into that same tool &#8212; a &#8220;discussion mode&#8221; where the models would see each other&#8217;s answers and revise &#8212; the alternatives field didn&#8217;t just record the rejection. It preserved the two positions that had been <em>parked</em> rather than killed: the narrower versions that might still be worth building someday. Those aren&#8217;t strawmen. They&#8217;re live options I deliberately set down, recorded precisely so that future-me, reaching for &#8220;didn&#8217;t we already reject this?&#8221;, finds the more accurate answer: <em>we rejected the broad version and parked two narrow ones, here&#8217;s which is which.</em> The field carries the distinction my memory won&#8217;t.</p><p>One boundary worth stating plainly, because it&#8217;s the assumption underneath everything above. I&#8217;m describing a solo operator&#8217;s log, where the only reader is a forgetful version of yourself and the field&#8217;s whole job is to let that person reconstruct what you were thinking. A team&#8217;s log does different work &#8212; there the alternatives field is an accountability artifact, read by people who weren&#8217;t in the room and sometimes by people looking to assign blame, and it gets written defensively because of that. A regulated or audited log does different work again, answering to a standard outside the author entirely. The discipline I&#8217;m arguing for is real in those settings too, but the failure mode is not the same one, and the fix might not be either. Everything here is calibrated to the case where the author and the audience are the same person separated only by time. That&#8217;s the case most solo operators are actually in, and the one where the field most quietly gets skipped.</p><h3>The smallest change that pays you back</h3><p>Here&#8217;s what I&#8217;d actually ask you to do with this, because it&#8217;s small and the payback is out of proportion to the cost.</p><p>The next time you log a decision, before you write the rationale, write the field that doesn&#8217;t feel necessary. Not strawmen &#8212; that&#8217;s worse than nothing. Write the options that were genuinely live: the ones a reasonable version of you could have chosen. For each one, write the real reason it lost. Not the reason that makes your choice look inevitable &#8212; the actual reason, including the parts where the rejected option had a point.</p><p>Then apply the test. Read it back and ask: if I came to this entry cold in six months, would this field change what I&#8217;d do, or only confirm what I did? If it only confirms, you&#8217;ve written theater, and you can cut it without loss. If it would change something &#8212; if it would stop a future-you from re-making a move, or re-opening a fork, or promoting an inheritance into a decision &#8212; then you&#8217;ve written the only part of the entry that was ever going to earn its place.</p><p>A decision is the resolution of a live evaluation. If you didn&#8217;t record the evaluation, you didn&#8217;t record a decision &#8212; you recorded a result, and results don&#8217;t tell you whether they were ever actually chosen. Everything else in the entry is the answer. That field is the only part that remembers there was a question.</p>]]></content:encoded></item><item><title><![CDATA[Substrate Is Not a Knowledge Base]]></title><description><![CDATA[A Claude Code agent with no prior context about my system reads four entries in my decision substrate.]]></description><link>https://whetstone.everfen.com/p/substrate-is-not-a-knowledge-base</link><guid isPermaLink="false">https://whetstone.everfen.com/p/substrate-is-not-a-knowledge-base</guid><dc:creator><![CDATA[Mark Buntyn]]></dc:creator><pubDate>Fri, 12 Jun 2026 12:02:29 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!jE-Z!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fab3b1e6e-5e05-4425-a3c0-875ba3695be7_144x144.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>A Claude Code agent with no prior context about my system reads four entries in my decision substrate. It walks the references. It produces a patch to a module it has never seen, and the patch respects every architectural constraint those entries set. There is no human in the loop reminding it which commitments it can and cannot move on.</p><p>That is a routine handoff in my system. It is what I mean when I say substrate.</p><p>It is also not what most operator-AI memory systems being built in 2026 are shaped to do.</p><p>The dominant story about memory in operator-AI says the asset is the knowledge base. Embeddings index the contents, RAG retrieves the right chunks, structured markdown gives the model something to read. The narrative is that volume plus retrieval plus curation equals compounding value &#8212; every prompt you write today becomes context for every prompt you write tomorrow. The narrative is half right. It is right about why the thing matters. It is wrong about what makes it work.</p><p>What makes memory compound is not accumulation. It is the architectural choices made <em>before</em> the immediate problem requires them &#8212; choices that look like over-engineering at the moment they are made and are visible as load-bearing only six or twelve months downstream. Most operators ship a knowledge base and call it substrate. The difference is not polish and not volume; it is whether the memory layer was shaped for an agent to act on before any agent needed to.</p><div><hr></div><p>Filed on April 22, 2026, in my decision substrate: <em>&#8220;The substrate is LATENT architecture, not emergent. Latent = deliberately built, intentionally unused until the moment it pays.&#8221;</em> The entry &#8212; Memory #89 in my Rowan instance &#8212; is a correction. The framing it overturns had come from inside a working session: an agent, reasoning from a few passing comments of mine, characterized the system&#8217;s multi-agent readiness as accidental &#8212; a happy by-product of decisions made for other reasons. Plausible, and wrong. The correction names the actual shape of the work: every architectural choice that made the substrate carry forward to agents that had not yet been deployed was the <em>harder</em> option at the moment it was made, when the immediate problem did not require it.</p><p>A handful of those choices, named so you can see what they look like in practice. Decision Log entries carry an alternatives field that gets filled even when the alternatives feel obvious in the moment. The field reads like overhead at write time; at read time, six months later, the field is the only thing keeping the decision auditable for an agent that wasn&#8217;t in the room. Observations carry a suggested_prompt field &#8212; a vague-on-paths-specific-on-intent prompt that an arbitrary agent can pick up and act on. Most observation systems are write-once think-pieces; this one is structured to be picked up by a future agent that does not exist yet. Memories carry visibility flags &#8212; landmark_only, propagatable, review_needed &#8212; that govern whether the memory is specific to one venture or generalizable across them. Writing the flag correctly at creation time is harder than writing without it, and the discipline only pays when a different venture&#8217;s agent reads across. The schema is model-agnostic. The substrate does not assume which agent will read it; today it is Claude, tomorrow it might be something else, and the choice not to bake in a particular agent&#8217;s quirks is the choice that lets the substrate outlive any one model&#8217;s lifecycle.</p><p>None of these were forced by the immediate work. Each was the harder option at the time. Each compounds now.</p><p>This is what <em>building for optionality when the immediate problem doesn&#8217;t require it</em> looks like in practice. It is an uncommon form of architectural discipline, and it is the only thing I have found that reliably produces substrate rather than a knowledge base.</p><div><hr></div><p>The architecture matters because it determines what <em>handoff</em> the system mechanically supports. A knowledge base supports the handoff <em>operator reads memory to inform next prompt.</em> That is a useful handoff. It is not the same handoff as <em>future agent acts on memory without operator re-derivation.</em> The first is a retrieval problem. The second is an architectural problem.</p><p>This is not a claim that the second handoff is the one you always want. If the operator is meant to stay in the loop &#8212; if review at the moment of action is the governance you actually need &#8212; then a knowledge base is the right tool and substrate is over-built. The distinction matters for the narrower case: systems where the intended handoff is an agent acting on prior commitments without the operator there to re-derive them. That is the case I am building for, and it is the case the rest of this essay is about.</p><p>DEC-MOATN5FF in my substrate is the worked example. The decision locks a three-tier context architecture: Claude.ai projects are ephemeral landing pads for raw material; Rowan is the canonical memory layer where decisions, observations, and memories live; Sunday Tidy Up is the synthesis ritual that moves valuable content from ephemeral to canonical and keeps the canonical layer alive. It was filed on April 23, 2026, against three alternatives &#8212; keep using projects as primary containers, abandon projects entirely, treat Rowan as supplementary &#8212; each rejected with reasoning the entry preserves. The body of the entry contains one line that does the architectural work the rest of the decision rests on: <em>&#8220;All future agents &#8212; Claude Code, Cursor Composer, Codex, Fen sessions &#8212; read from Rowan as primary substrate, not from project folders.&#8221;</em></p><p>This sentence is what makes substrate substrate. It is a mechanical commitment about which surface different agents will read from. It does not say &#8220;we have good documentation.&#8221; It says where the documentation <em>lives</em> such that an arbitrary agent, with no prior context about the system, can find it and act on it. The commitment is what makes possible the Claude Code session at the top of this essay &#8212; reading four entries it had never seen and producing a patch that respected every architectural constraint without anyone explaining anything.</p><p>One caveat that matters, because the opening would otherwise overclaim: the canonical surface is necessary but not sufficient. The agent in that opening was not divining intent from raw schema. It carried instruction context &#8212; a project&#8217;s operating rules, a skill file describing how the substrate is structured &#8212; that taught it how to read what it found. Substrate assumes a reader configured to interpret it; the schema does not interpret itself. A canonical surface with no reader-side configuration is just a tidy file an agent doesn&#8217;t know how to use.</p><p>Most operator-AI memory systems in 2026 have not made this commitment. The documentation lives wherever the operator last touched it &#8212; chat logs, project folders, scratch markdown, occasional notes in a Notion page. Each surface works for the operator. None of them is the surface a different agent will reliably find. The handoff <em>future agent acts on memory without operator re-derivation</em> is unreliable by construction in this shape &#8212; not because the contents are wrong but because nothing guarantees the agent finds the canonical version, or that a canonical version exists at all. A knowledge base without an architectural commitment to which surface carries the canonical version is a knowledge base. It is not substrate.</p><div><hr></div><p>Substrate also requires curation, and this is the part of the architecture that gets shipped least often.</p><p>A second entry in my own substrate &#8212; Memory #91 &#8212; names the failure mode: <em>&#8220;Sunday Tidy Up is counter-entropy, not housekeeping.&#8221;</em> The framing matters because most operators treat memory hygiene as maintenance, something to do when there is time, optional under load. The framing is wrong. Without active curation, the associative density of a substrate degrades silently. Retrieval still returns results; the results just get less useful, less connected, less reasoned-about. The substrate that worked at seventy entries does not work the same way at five hundred, and the difference is not retrieval. It is the connective tissue &#8212; the links that tie entries to each other, that make adjacent observations visible to a future agent reading any one of them, that keep the memory layer functioning as something more than a tagged pile.</p><p>This is a discipline question, not a tooling question. Tooling helps. Tooling does not make the discipline appear. Sunday Tidy Up runs because I run it. The substrate decays the week I skip it. The decay is not visible the week it happens; it is visible eight weeks later, when a query that should return a connected set of observations returns an isolated one and I cannot reconstruct why.</p><p>A knowledge base decays too &#8212; but the cost lands somewhere different, and the difference is the point. Its contents drift out of date and the operator absorbs the rot at read-time: noticing the stale entry, working around it, re-deriving what changed. Substrate can&#8217;t lean on a human at read-time, because the reader might be an agent with no way to notice the entry has gone stale. Same entropy; substrate just can&#8217;t outsource the correction to whoever happens to know better. That is why curation is load-bearing for substrate in a way it isn&#8217;t quite for a knowledge base &#8212; not because knowledge bases don&#8217;t rot, but because someone is always standing at the knowledge base&#8217;s read-point to catch the rot, and no one is standing at the substrate&#8217;s.</p><div><hr></div><p>There is a thread of frontier work pointing at a related constraint from a different direction. Cognition&#8217;s Walden Yan published <em><a href="https://cognition.ai/blog/multi-agents-working">Multi-Agents: What&#8217;s Actually Working</a></em> on April 22, 2026. In it, he names a structural property shared by the production multi-agent setups his team deploys: <em>&#8220;multi-agent systems work best today when writes stay single-threaded and the additional agents contribute intelligence rather than actions.&#8221;</em> The pattern he names is a manager agent that splits work, child agents that execute, and a coordination layer that keeps the writes coherent. He calls it map-reduce-and-manage.</p><p>The Cognition post does not prove the substrate distinction, and I want to be careful not to borrow authority it doesn&#8217;t lend. Yan is solving a runtime-coordination problem &#8212; keeping concurrent agents from corrupting shared state inside a single task. I am solving a memory-handoff problem &#8212; keeping a future agent able to act on commitments made months earlier. The timescales differ and the mechanisms differ. What rhymes is the constraint underneath both: once more than one agent touches the same work, coherent state and a canonical surface start to matter more than raw intelligence. That is adjacent pressure from a neighboring domain, not independent proof of mine &#8212; but the rhyme is worth noticing, because it suggests the constraint is about coordination itself, not about my particular system.</p><div><hr></div><p>The strongest counter-position to everything I have said in this essay is the one held implicitly by most of the operator-AI space in 2026, and it goes like this: <em>Knowledge base with embeddings plus RAG plus structured documentation is substrate. The word is contested. The thing it points at is well-defined. Calling well-organized memory &#8220;not substrate&#8221; is gatekeeping a term that already has a working definition in the field.</em></p><p>The counter is correct that the term is contested and incorrect about what it points at.</p><p>A knowledge base with embeddings + RAG + structured documentation is genuinely useful. It supports the handoff <em>operator reads memory to inform next prompt</em> with much better fidelity than chat-log-and-scratch-markdown ever did. The retrieval is real. The compounding within an operator&#8217;s own session is real. The counter is right that calling this &#8220;not substrate&#8221; looks like gatekeeping if substrate is defined as <em>organized memory that aids retrieval.</em></p><p>It does not look like gatekeeping if substrate is defined as <em>organized memory shaped so a future agent acts on it without operator re-derivation.</em> That definition is the one this essay is defending, and the reason it matters is mechanical. The handoff a knowledge base supports is the one the operator is already in the loop for. The handoff substrate supports is the one the operator is not in the loop for. These are different problems. They require different architectural commitments. The word &#8220;substrate&#8221; deserves to point at the second handoff because that handoff is the one that compounds in a way the knowledge base does not.</p><p>A secondary counter, briefer: <em>Building for optionality you don&#8217;t need is over-engineering. YAGNI.</em> True for commodity work. Same shape as the answer from <a href="https://whetstone.everfen.com/p/i-built-a-tribunal-so-my-ai-couldnt">my last essay</a> &#8212; speed is correct for the work that doesn&#8217;t compound, and the wrong optimization for the work that does. The substrate-vs-knowledge-base distinction matters precisely for the class of work where the operator is going to be working alongside multiple agents over months and years, where the architectural commitments made today determine whether the work carries forward or has to be re-derived every six months from scratch. For that class of work, optionality you don&#8217;t need today is exactly what you build, because you will not be able to retroactively install it.</p><div><hr></div><p>The operator-level question is not whether you have a knowledge base. Most operators in 2026 either have one or are building one, and either choice is fine for the work the knowledge base supports.</p><p>The operator-level question is mechanical: <em>can a different agent, with no prior context about your system, read your memory and act on it correctly?</em></p><p>If the answer is no, you have a knowledge base. It may be a very good knowledge base. It is not substrate. The work it supports is the work you are already in the loop for, and that is a useful kind of memory to have.</p><p>If the answer is yes, you have substrate, and the price you have paid for the yes is a set of architectural commitments you made before the immediate problem required them. The alternatives field on every decision. The suggested_prompt field on every observation. The visibility flag on every memory. The model-agnostic schema. The canonical-versus-ephemeral surface commitment. The curation discipline that costs you a couple of hours every Sunday. None of these were forced by the work in front of you when you made them. Each compounds now.</p><p>I have framed this essay around the substrate I have built because that is the substrate I can write about with the substrate to show. The architectural choices are not universal; yours will be different. The discipline that produces them is the same one: build for the handoff you don&#8217;t need yet, because the handoff is what compounds, and you cannot retroactively install it.</p><p>The first time a different agent reads your memory and acts on it without you in the loop, the substrate is yours.</p>]]></content:encoded></item><item><title><![CDATA[I Built a Tribunal So My AI Couldn't Ship Without Arguing With Itself]]></title><description><![CDATA[Two isolated AIs review every proposal my agent makes before it reaches me. The friction is the architecture.]]></description><link>https://whetstone.everfen.com/p/i-built-a-tribunal-so-my-ai-couldnt</link><guid isPermaLink="false">https://whetstone.everfen.com/p/i-built-a-tribunal-so-my-ai-couldnt</guid><dc:creator><![CDATA[Mark Buntyn]]></dc:creator><pubDate>Fri, 29 May 2026 12:01:07 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!jE-Z!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fab3b1e6e-5e05-4425-a3c0-875ba3695be7_144x144.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>My AI agent &#8212; call him Fen &#8212; can&#8217;t propose a new tool to me. Not directly. He writes a specification; the spec goes to two other isolated AIs who argue with it; then all three outputs arrive at my desk and I arbitrate. I built it that way on purpose.</p><p>This is unfashionable in 2026. The market signal for agentic systems is unmistakable: minimize the loop, ship faster, let the agent execute and let the operator selectively review. The friction in my system isn&#8217;t a cost of the design. It is the design.</p><p>I locked the architecture on May 3 as Decision MOPA62HE: Tribunal v1. Two isolated read-only agents &#8212; Critic and Architect &#8212; review every proposal Fen makes for a new tool or an irreversible action. Fen sees both reviews and writes a structured response: concession, defense, hybrid, or no-contest. The whole package goes to me. Fen does not approve his own proposals. The Tribunal doesn&#8217;t authorize execution. Every verdict path ends at me, with no exceptions in v1. The cost ceiling is five dollars per review. And the line in the decision document immediately after the architecture spec is the load-bearing one: <em>the Tribunal makes Fen harder to evolve &#8212; on purpose.</em></p><p>What the decision locks is worth being precise about. It locks the topology &#8212; two isolated Managed Agents, not one agent with two prompts. It locks the authority boundary &#8212; all verdicts to me, no autonomous approval, no Tribunal bypass. It locks the access scopes &#8212; Critic and Architect get read-only access to the system, no write authority anywhere. It locks the output contract &#8212; versioned JSON schemas, no prose parsing, five sections from Critic, four from Architect, four response shapes from Fen. And it locks the friction-by-design principle itself: future relaxation of any locked element requires an explicit decision reversing this one. Silent erosion through scope creep, Tribunal bypasses, or &#8220;this one is small&#8221; exceptions is prohibited.</p><p>What the decision does <em>not</em> lock is the prompt prose. Prompts iterate as empirical artifacts after pilot data &#8212; tone tuning, role refinement, schema-conforming edits. Pattern locked, prompts iterable. That distinction is the whole point. I am not locking the verbal surface of the system. I am locking the shape of disagreement the system has to produce before I see any of it.</p><p>Tribunal v1 is one shape of this pattern. The four-vendor cold review is another. The first runs inside my system &#8212; Fen plus Critic plus Architect, internal Managed Agents gating agentic action. The second is external &#8212; Claude, ChatGPT, Gemini, Grok, one-shot, auditing a static artifact I am about to ship. They share the principle: isolated voices, written disagreement, operator arbitration. They differ in architecture, cost, latency, and what they gate. Both shapes live in the substrate this essay draws from. Tribunal v1 has been operating since May 3; verdicts are accumulating but are not yet the substrate I&#8217;m citing here. What I can cite is the pattern&#8217;s history, including the cold-review shape that has been running longer.</p><p>The pattern arrived earlier than the architecture. It had been running across two domains &#8212; <a href="https://livesworthknowing.org">livesworthknowing.org</a> and one held private &#8212; for months before May 3 &#8212; different work, same shape. Multiple isolated AI voices arguing a proposal; operator arbitrating; convergence as signal, divergence as warning. Locking it as architecture was acknowledgment of working practice, not invention. The history matters because friction-by-design is not the kind of claim you&#8217;d risk on theory. You&#8217;d risk it because the pattern survived contact with the work, repeatedly, in domains where its absence had cost you something visible.</p><p>A day after the architecture locked, Wang et al. published <a href="https://arxiv.org/abs/2605.02396">HeavySkill</a> (arXiv:2605.02396v1) &#8212; an empirical study of parallel-reasoning and sequential-deliberation that touched the same shape from a different direction. Two of its findings put empirical pressure on choices I had made on intuition. The paper finds a trade-off between iteration depth and information consistency in the deliberation phase &#8212; iterating risks corrupting the candidate-verdict surface. Tribunal v1 is single-pass for related reasons, though I had landed there on operator-load grounds before reading the paper. The paper also finds the deliberation role benefits from larger instruction-following generalists rather than narrow reasoning specialists &#8212; a finding that maps onto how Critic and Architect actually function: evaluating proposals against system context, not solving reasoning benchmarks. I wrote an addendum into the log, not as vindication, but as evidence the pattern was not merely private superstition.</p><p>Here is what I think most operators are missing in 2026, and what the rest of this essay defends. The choice is between two loops. One has a voice in it that can argue back from a position your priors did not generate. The other doesn&#8217;t. The first one is slower. It is also the only one of the two that produces judgment instead of plausible defaults &#8212; and judgment is what matters for the class of work that compounds over months and years.</p><p>The difference is not effort or output volume. The difference is whether there is a voice in your loop that argues back from a position your own priors did not generate. Without that voice, every output you produce is downstream of the priors you brought to the prompt. You can accept the output or reject it. You can read it. What you cannot reliably do is orchestrate it, because orchestration requires something to orchestrate against. The Tribunal is not the only way to build that something. It is the minimum version I trust inside my own system &#8212; isolated voices, written disagreement, and an operator who has to arbitrate instead of vibe-check.</p><p>The trap is that a one-AI loop produces output that <em>feels</em> validated. You asked a question, the model answered, you read the answer and judged it sound. That judgment is the discipline, you tell yourself. But the model you asked is operating on the priors you supplied in the prompt, and the answer you got is downstream of those priors by definition. Judging it sound is not adversarial review. It is a reading pass on a draft you essentially wrote. The signal you receive from agreement is corrupted at the source. You cannot tell whether the output is right or merely plausible, and plausibility is exactly what frontier models optimize for.</p><p>Let me make this concrete.</p><p>Last week I ran a four-vendor cold review on a naming decision for one of my ventures. The tribunal returned a verdict: <em>retire the name.</em> All four reviewed the etymology I&#8217;d supplied in the brief, all four cited the same connotation problem, all four returned the same recommendation. Three of them were emphatic.</p><p>I kept the name.</p><p>What happened next is the part of the Tribunal pattern that took me longest to understand, and the part operators have to sit with.</p><p>Cold-read testing of unprimed humans &#8212; my wife, my son, a group chain &#8212; returned readings the tribunal had not surfaced. The tribunal had been evaluating an etymology I&#8217;d supplied in the brief; in production, the name lands on phonetics and cadence, not stated etymology. The verdict was internally consistent and framing-contaminated. The signal that overrode it came from a class of evidence the tribunal could not access &#8212; and the tribunal could not access it because I had handed all four reviewers the same poisoned brief.</p><p>This is where the steel-manned skeptic gets to dismiss the whole thing, and the dismissal is half-right. The Tribunal does not remove framing risk. If every reviewer is handed the same poisoned map, convergence is not wisdom &#8212; it is synchronized error. The Tribunal makes framing risk visible only when the operator knows to look for it.</p><p>So what did the Tribunal actually do in the naming decision? It produced an artifact. The decision-log entry does not read <em>&#8220;tribunal agreed, locked the name.&#8221;</em> It reads <em>&#8220;tribunal said retire, I overrode on a stronger signal, here is exactly why.&#8221;</em> Six months from now, future-me reading that entry can reconstruct the disagreement and the override &#8212; what was argued, what was rejected, what signal won, where the framing risk lived. An operator who skipped the Tribunal cannot reconstruct any of that, because nothing was ever considered, only ratified. The verdict isn&#8217;t the value. The artifact is.</p><p>There is a discipline that goes with running the Tribunal that I have not named yet, and it matters more than the architecture: capitulation only happens on accuracy and structural issues; voice stays mine. When the tribunal flags a weak claim or a hidden assumption, I revise. When it flags a sentence that sounds like me but bothers it, I keep the sentence. The discipline is not &#8220;do what the reviewers say.&#8221; The discipline is &#8220;engage every finding in writing, then decide.&#8221;</p><p>The strongest counter-position runs like this:</p><p><em>The market signal is clear. Frontier models are racing to minimize loops, not add them. Every benchmark, every release note, every infrastructure investment in the industry is about cutting latency between intent and output. You&#8217;re paying five dollars and waiting thirty seconds for a multi-vendor review when you could just ship. You&#8217;re building artisan workflow in a world that is moving to assembly lines, and the assembly lines will win the same way they always do &#8212; by being faster and cheaper at scale. You&#8217;ve engineered a private moat around a structural disadvantage.</em></p><p>Most of it is right. The market signal toward speed is real. Frontier models are racing to minimize loops. The five-dollar tax and thirty-second wait are real costs. Where the counter goes wrong is in the metaphor itself &#8212; the assembly-line metaphor confuses what is being produced.</p><p>For commodity tasks &#8212; completion, summarization, draft emails, search reformulation &#8212; speed is correct and a Tribunal is theater. I would not run a Tribunal on a Slack reply. I do not run one on a CSV transformation. The cost-benefit collapses immediately for work where the output is judgeable against an objective standard the operator can verify in seconds.</p><p>The cost-benefit <em>inverts</em> for architectural decisions, strategic commitments, and operator-grade artifacts that compound or destroy substrate over months. For that class of work, speed is the wrong optimization. The thirty seconds I lose to a Tribunal review is not slowness. It is the entire window in which &#8220;argue back&#8221; is mechanically possible. Without it, I am not shipping architecture faster than the assembly line &#8212; I am shipping unaudited architecture, and the cost shows up six months from now as decisions I cannot reconstruct, defaults I did not consciously choose, and a substrate that has been quietly captured by a frontier model&#8217;s priors rather than my own.</p><p>The market signal toward speed is calibrated for the median use case, which is not the use case under discussion. The race to minimize loops is the right race for commodity work and the wrong race for the work that determines what your system <em>becomes</em>. The Tribunal is a posture of optionality, not friction-for-its-own-sake. You can always ship without it for the work that doesn&#8217;t justify it. You cannot retroactively install an &#8220;argue back&#8221; mechanism on decisions that have already happened.</p><div><hr></div><p></p><p>The question is not whether to use AI. AI is in your loop whether you put it there or not. The question is what sh<em>ape o</em>f loop you have built, and whether the shape carries the kind of work you intend to do with it.</p><p>If your loop is a conversation with a single model and you check the output before shipping, you have a one-AI loop. It is fast. It is appropriate for the work it was designed for. You should not believe you are orchestrating in it. You are reading.</p><p>If your loop has voices that argue from positions your priors did not generate, and an operator who arbitrates the disagreement rather than ratifying the agreement, you have a Tribunal. It is slower. It costs five dollars and thirty seconds. It produces an audit trail your future self can actually read.</p><p>I built mine on May 3 because the work I am doing will compound for years, and the cost of unaudited compounding is the only cost I cannot recover from. The friction is not a tax I am paying to feel rigorous. It is the price of being able to argue back at all.</p><p>The first time you override the verdict on a stronger signal, the practice is yours.</p>]]></content:encoded></item></channel></rss>