<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>viborc.com</title><link>https://viborc.com/</link><description>Essays and research from viborc.com.</description><generator>Hugo</generator><language>en-US</language><lastBuildDate>Wed, 19 Aug 2026 17:36:06 +0000</lastBuildDate><atom:link href="https://viborc.com/feed.xml" rel="self" type="application/rss+xml"/><item><title>Building apps with an autonomous Gauntlet Loop</title><link>https://viborc.com/autonomous-gauntlet-loop-building-apps/</link><pubDate>Wed, 19 Aug 2026 12:48:53 +0000</pubDate><guid isPermaLink="true">https://viborc.com/autonomous-gauntlet-loop-building-apps/</guid><description>I adapted Matt Shumer's Gauntlet Loop into a recurring app-building workflow with Git state, recovery, branch boundaries, and human review before production.</description><content:encoded>&lt;p&gt;I loved Matt Shumer’s Gauntlet Loop idea, so I wanted to borrow and extend it. In Claude of Duty, where he presented this loop, he split the game among subagents, gave them an absurdly high reference bar (AAA game quality, for example), and used separate critics to send weak parts back into the loop. The prompt he used is relatively short. But I focused on the structure - not the prompt itself. That means I looked into elements like building, comparing against something real, and isolating the grader/judge from the build so it evaluates the result without the builder’s context.&lt;sup id="fnref:1"&gt;&lt;a href="#fn:1" class="footnote-ref" role="doc-noteref"&gt;1&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;
&lt;p&gt;My motivation was simple and practical: I wanted to see whether that structure could survive an app backlog running for days, with fresh contexts, CI, migrations, misleading tests, and a production branch the agent was not allowed to touch. That is much closer to a production environment than a contained one-off run.&lt;/p&gt;
&lt;p&gt;I decided to keep the gauntlet inside each task and then added a recurring loop around it.&lt;/p&gt;
&lt;p&gt;I relied on Git to hold the current state, and a task list (ledger) holds the next job. Then, each task gets its own separate branch and acceptance criteria. If those criteria are not met, reviewers can send it back. I also limited what the agent is allowed to merge: the agent can merge into an integration branch, but the protocol reserves promotion to &lt;code&gt;main&lt;/code&gt; for me, keeping the human in the loop.&lt;/p&gt;
&lt;p&gt;This is my setup and what I’ve learned from it so far. I’m sharing it because I hope you’ll try your own version and tell me what works differently for you.&lt;/p&gt;
&lt;p&gt;I started my loop on 11 August 2026. After one week of running, it had landed around 45 tasks from the ledger. It wasn’t perfect - it had invented a few counts, landed two attempted fixes on the integration branch that did not fix the bug, and once let a reviewer knock the schemas out of the local database. Some of those problems were caught inside the loop and presented to me; I caught others during human review. So I am still changing the setup and improving it.&lt;/p&gt;
&lt;p&gt;I’m building something in stealth, and it involves certain legal regulations with real consequences. I must avoid situations where a confident mistake can put somebody at risk of non-compliance. That means that I am deliberately cautious about what reaches users.&lt;/p&gt;
&lt;p&gt;I’m saying this because this loop might look like overkill if you are building a to-do app. Still, the general shape is very useful; you just might need to balance the strictness of some of the checks.&lt;/p&gt;
&lt;p&gt;As for the technical implementation, my loop runs in Claude Code. Claude Code’s &lt;code&gt;/loop&lt;/code&gt; is interval-driven.&lt;sup id="fnref:2"&gt;&lt;a href="#fn:2" class="footnote-ref" role="doc-noteref"&gt;2&lt;/a&gt;&lt;/sup&gt; Codex’s &lt;code&gt;/goal&lt;/code&gt; is somewhat different because it is goal-driven rather than running on the same timer, but it does keep a persistent objective running.&lt;sup id="fnref:3"&gt;&lt;a href="#fn:3" class="footnote-ref" role="doc-noteref"&gt;3&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;
&lt;p&gt;The other parts, including the durable state, branch model, tests, and promotion workflow, are all in Git.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;The examples and counts below come from my private app repository as I inspected it on 18 August 2026. This is one week of experience with one product, not a reliability study. I kept &amp;ldquo;around 45&amp;rdquo; rounded because I did not remeasure the exact task total for this article.&lt;/em&gt;&lt;/p&gt;
&lt;h2 id="the-current-setup"&gt;The current setup&lt;/h2&gt;
&lt;p&gt;There are three layers in my current setup.&lt;/p&gt;
&lt;figure class="evidence-figure evidence-figure--editorial evidence-figure--loop-stack"&gt;
&lt;svg class="evidence-figure__wide" viewBox="0 0 680 610" role="img" aria-label="Three execution layers lead from the Claude Code loop harness to a short command and a repository constitution, with durable state stored in Git" aria-describedby="fig-loop-stack-desc" xmlns="http://www.w3.org/2000/svg"&gt;
&lt;desc id="fig-loop-stack-desc"&gt;The loop harness reinvokes a short app-loop command. That command reads LOOP.md from Git on every iteration. LOOP.md defines the protocol, gauntlet, boundaries, recovery, and precedence. The repository also stores product truth, agent rules, state, the task ledger, acceptance criteria, residuals, and completion reports.&lt;/desc&gt;
&lt;defs&gt;&lt;marker id="stack-arrow" viewBox="0 0 8 8" refX="7" refY="4" markerWidth="7" markerHeight="7" orient="auto"&gt;&lt;path d="M0,0.6 L7.4,4 L0,7.4 Z" fill="var(--ink-soft)"/&gt;&lt;/marker&gt;&lt;/defs&gt;
&lt;text x="30" y="40" font-family="var(--font-mono)" font-size="12" letter-spacing="0.08em" fill="var(--ink-soft)"&gt;HOW ONE ITERATION STARTS&lt;/text&gt;
&lt;g data-reveal="true"&gt;
&lt;rect x="30" y="70" width="190" height="78" rx="6" fill="color-mix(in srgb, var(--figure-periwinkle) 22%, var(--field-raised))" stroke="var(--figure-periwinkle)"/&gt;
&lt;text x="52" y="103" font-family="var(--font-display)" font-size="25" font-weight="650" fill="var(--ink)"&gt;/loop&lt;/text&gt;
&lt;text x="52" y="128" font-family="var(--font-mono)" font-size="11" fill="var(--ink-soft)"&gt;HARNESS FEATURE&lt;/text&gt;
&lt;text x="258" y="99" font-family="var(--font-body)" font-size="15" fill="var(--ink)"&gt;Runs the command again.&lt;/text&gt;
&lt;text x="258" y="124" font-family="var(--font-body)" font-size="15" fill="var(--ink-soft)"&gt;It knows nothing about the app.&lt;/text&gt;
&lt;line x1="125" y1="154" x2="125" y2="184" stroke="var(--ink-soft)" stroke-width="1.5" marker-end="url(#stack-arrow)"/&gt;
&lt;/g&gt;
&lt;g data-reveal="true"&gt;
&lt;rect x="30" y="194" width="190" height="88" rx="6" fill="color-mix(in srgb, var(--figure-apricot) 20%, var(--field-raised))" stroke="var(--figure-apricot)"/&gt;
&lt;text x="52" y="229" font-family="var(--font-display)" font-size="23" font-weight="650" fill="var(--ink)"&gt;/app-loop&lt;/text&gt;
&lt;text x="52" y="255" font-family="var(--font-mono)" font-size="11" fill="var(--ink-soft)"&gt;40-LINE COMMAND&lt;/text&gt;
&lt;text x="258" y="218" font-family="var(--font-body)" font-size="15" fill="var(--ink)"&gt;Runs one iteration.&lt;/text&gt;
&lt;text x="258" y="243" font-family="var(--font-body)" font-size="15" fill="var(--ink-soft)"&gt;Kept short because it is reinjected after&lt;/text&gt;
&lt;text x="258" y="265" font-family="var(--font-body)" font-size="15" fill="var(--ink-soft)"&gt;context compaction.&lt;/text&gt;
&lt;line x1="125" y1="288" x2="125" y2="318" stroke="var(--ink-soft)" stroke-width="1.5" marker-end="url(#stack-arrow)"/&gt;
&lt;/g&gt;
&lt;g data-reveal="true"&gt;
&lt;rect x="30" y="328" width="190" height="96" rx="6" fill="color-mix(in srgb, var(--figure-sage) 19%, var(--field-raised))" stroke="var(--figure-sage)"/&gt;
&lt;text x="52" y="364" font-family="var(--font-display)" font-size="23" font-weight="650" fill="var(--ink)"&gt;LOOP.md&lt;/text&gt;
&lt;text x="52" y="390" font-family="var(--font-mono)" font-size="11" fill="var(--ink-soft)"&gt;259-LINE RULE FILE&lt;/text&gt;
&lt;text x="258" y="351" font-family="var(--font-body)" font-size="15" fill="var(--ink)"&gt;Read fresh from Git every time.&lt;/text&gt;
&lt;text x="258" y="376" font-family="var(--font-body)" font-size="15" fill="var(--ink-soft)"&gt;Protocol, gauntlet, hard boundaries,&lt;/text&gt;
&lt;text x="258" y="398" font-family="var(--font-body)" font-size="15" fill="var(--ink-soft)"&gt;recovery, rollback, and precedence.&lt;/text&gt;
&lt;/g&gt;
&lt;line x1="30" y1="460" x2="650" y2="460" stroke="var(--hairline)"/&gt;
&lt;text x="30" y="490" font-family="var(--font-mono)" font-size="11" letter-spacing="0.08em" fill="var(--ink-soft)"&gt;DURABLE STATE IN GIT&lt;/text&gt;
&lt;g font-family="var(--font-body)" font-size="13.5" fill="var(--ink)"&gt;
&lt;rect x="30" y="510" width="137" height="40" rx="5" fill="var(--field-deep)" stroke="var(--hairline-strong)"/&gt;&lt;text x="98" y="535" text-anchor="middle"&gt;Product spec&lt;/text&gt;
&lt;rect x="177" y="510" width="137" height="40" rx="5" fill="var(--field-deep)" stroke="var(--hairline-strong)"/&gt;&lt;text x="245" y="535" text-anchor="middle"&gt;Agent rules&lt;/text&gt;
&lt;rect x="324" y="510" width="137" height="40" rx="5" fill="var(--field-deep)" stroke="var(--hairline-strong)"/&gt;&lt;text x="392" y="535" text-anchor="middle"&gt;STATE.md&lt;/text&gt;
&lt;rect x="471" y="510" width="179" height="40" rx="5" fill="var(--field-deep)" stroke="var(--hairline-strong)"/&gt;&lt;text x="560" y="535" text-anchor="middle"&gt;Task ledger&lt;/text&gt;
&lt;rect x="30" y="562" width="188" height="40" rx="5" fill="var(--field-deep)" stroke="var(--hairline-strong)"/&gt;&lt;text x="124" y="587" text-anchor="middle"&gt;Acceptance criteria&lt;/text&gt;
&lt;rect x="228" y="562" width="188" height="40" rx="5" fill="var(--field-deep)" stroke="var(--hairline-strong)"/&gt;&lt;text x="322" y="587" text-anchor="middle"&gt;Residuals&lt;/text&gt;
&lt;rect x="426" y="562" width="224" height="40" rx="5" fill="var(--field-deep)" stroke="var(--hairline-strong)"/&gt;&lt;text x="538" y="587" text-anchor="middle"&gt;Completion reports&lt;/text&gt;
&lt;/g&gt;
&lt;/svg&gt;
&lt;svg class="evidence-figure__compact" viewBox="0 0 360 716" role="img" aria-label="Three execution layers lead from the Claude Code loop harness to a short command and a repository constitution, with durable state stored in Git" aria-describedby="fig-loop-stack-desc" xmlns="http://www.w3.org/2000/svg"&gt;
&lt;defs&gt;&lt;marker id="stack-arrow-compact" viewBox="0 0 8 8" refX="7" refY="4" markerWidth="7" markerHeight="7" orient="auto"&gt;&lt;path d="M0,0.6 L7.4,4 L0,7.4 Z" fill="var(--ink-soft)"/&gt;&lt;/marker&gt;&lt;/defs&gt;
&lt;text x="18" y="30" font-family="var(--font-mono)" font-size="11" letter-spacing="0.08em" fill="var(--ink-soft)"&gt;HOW ONE ITERATION STARTS&lt;/text&gt;
&lt;g data-reveal="true"&gt;
&lt;rect x="18" y="50" width="324" height="102" rx="6" fill="color-mix(in srgb, var(--figure-periwinkle) 22%, var(--field-raised))" stroke="var(--figure-periwinkle)"/&gt;
&lt;text x="36" y="80" font-family="var(--font-display)" font-size="24" font-weight="650" fill="var(--ink)"&gt;/loop&lt;/text&gt;
&lt;text x="36" y="103" font-family="var(--font-mono)" font-size="11" fill="var(--ink-soft)"&gt;HARNESS FEATURE&lt;/text&gt;
&lt;text x="36" y="128" font-family="var(--font-body)" font-size="14" fill="var(--ink)"&gt;Runs the command again.&lt;/text&gt;
&lt;text x="36" y="146" font-family="var(--font-body)" font-size="14" fill="var(--ink-soft)"&gt;It knows nothing about the app.&lt;/text&gt;
&lt;line x1="180" y1="158" x2="180" y2="180" stroke="var(--ink-soft)" stroke-width="1.5" marker-end="url(#stack-arrow-compact)"/&gt;
&lt;/g&gt;
&lt;g data-reveal="true"&gt;
&lt;rect x="18" y="188" width="324" height="112" rx="6" fill="color-mix(in srgb, var(--figure-apricot) 20%, var(--field-raised))" stroke="var(--figure-apricot)"/&gt;
&lt;text x="36" y="218" font-family="var(--font-display)" font-size="23" font-weight="650" fill="var(--ink)"&gt;/app-loop&lt;/text&gt;
&lt;text x="36" y="241" font-family="var(--font-mono)" font-size="11" fill="var(--ink-soft)"&gt;40-LINE COMMAND&lt;/text&gt;
&lt;text x="36" y="266" font-family="var(--font-body)" font-size="14" fill="var(--ink)"&gt;Runs one iteration.&lt;/text&gt;
&lt;text x="36" y="284" font-family="var(--font-body)" font-size="14" fill="var(--ink-soft)"&gt;Reinjected after context compaction.&lt;/text&gt;
&lt;line x1="180" y1="306" x2="180" y2="328" stroke="var(--ink-soft)" stroke-width="1.5" marker-end="url(#stack-arrow-compact)"/&gt;
&lt;/g&gt;
&lt;g data-reveal="true"&gt;
&lt;rect x="18" y="336" width="324" height="126" rx="6" fill="color-mix(in srgb, var(--figure-sage) 19%, var(--field-raised))" stroke="var(--figure-sage)"/&gt;
&lt;text x="36" y="366" font-family="var(--font-display)" font-size="23" font-weight="650" fill="var(--ink)"&gt;LOOP.md&lt;/text&gt;
&lt;text x="36" y="389" font-family="var(--font-mono)" font-size="11" fill="var(--ink-soft)"&gt;259-LINE RULE FILE&lt;/text&gt;
&lt;text x="36" y="414" font-family="var(--font-body)" font-size="14" fill="var(--ink)"&gt;Read fresh from Git every time.&lt;/text&gt;
&lt;text x="36" y="432" font-family="var(--font-body)" font-size="14" fill="var(--ink-soft)"&gt;Protocol, gauntlet, hard boundaries,&lt;/text&gt;
&lt;text x="36" y="450" font-family="var(--font-body)" font-size="14" fill="var(--ink-soft)"&gt;recovery, rollback, and precedence.&lt;/text&gt;
&lt;/g&gt;
&lt;line x1="18" y1="484" x2="342" y2="484" stroke="var(--hairline)"/&gt;
&lt;text x="18" y="512" font-family="var(--font-mono)" font-size="11" letter-spacing="0.08em" fill="var(--ink-soft)"&gt;DURABLE STATE IN GIT&lt;/text&gt;
&lt;g font-family="var(--font-body)" font-size="12.5" fill="var(--ink)"&gt;
&lt;rect x="18" y="530" width="157" height="38" rx="5" fill="var(--field-deep)" stroke="var(--hairline-strong)"/&gt;&lt;text x="96.5" y="554" text-anchor="middle"&gt;Product spec&lt;/text&gt;
&lt;rect x="185" y="530" width="157" height="38" rx="5" fill="var(--field-deep)" stroke="var(--hairline-strong)"/&gt;&lt;text x="263.5" y="554" text-anchor="middle"&gt;Agent rules&lt;/text&gt;
&lt;rect x="18" y="576" width="157" height="38" rx="5" fill="var(--field-deep)" stroke="var(--hairline-strong)"/&gt;&lt;text x="96.5" y="600" text-anchor="middle"&gt;STATE.md&lt;/text&gt;
&lt;rect x="185" y="576" width="157" height="38" rx="5" fill="var(--field-deep)" stroke="var(--hairline-strong)"/&gt;&lt;text x="263.5" y="600" text-anchor="middle"&gt;Task ledger&lt;/text&gt;
&lt;rect x="18" y="622" width="157" height="38" rx="5" fill="var(--field-deep)" stroke="var(--hairline-strong)"/&gt;&lt;text x="96.5" y="646" text-anchor="middle"&gt;Acceptance criteria&lt;/text&gt;
&lt;rect x="185" y="622" width="157" height="38" rx="5" fill="var(--field-deep)" stroke="var(--hairline-strong)"/&gt;&lt;text x="263.5" y="646" text-anchor="middle"&gt;Residuals&lt;/text&gt;
&lt;rect x="18" y="668" width="324" height="38" rx="5" fill="var(--field-deep)" stroke="var(--hairline-strong)"/&gt;&lt;text x="180" y="692" text-anchor="middle"&gt;Completion reports&lt;/text&gt;
&lt;/g&gt;
&lt;/svg&gt;
&lt;figcaption&gt;Claude Code runs the recurring command. The command reads the longer rules and current state from the repository before each iteration.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;&lt;code&gt;/loop&lt;/code&gt; provides the repetition. My &lt;code&gt;/app-loop&lt;/code&gt; command is about forty lines long and describes one iteration. Before doing any work, it tells the agent to check the stop file and read &lt;code&gt;LOOP.md&lt;/code&gt; from the repository.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;LOOP.md&lt;/code&gt; is the longer part. It is currently 259 lines and contains the task protocol, branch rules, review steps, recovery instructions, and the order in which conflicting files should be trusted. I keep that out of the recurring command because I do not want two slightly different copies of the rules.&lt;/p&gt;
&lt;p&gt;The rest of the repository supplies the memory: a product spec, &lt;code&gt;AGENTS.md&lt;/code&gt;, &lt;code&gt;STATE.md&lt;/code&gt;, a task ledger, detailed acceptance criteria, known residual issues, and a completion note for each finished task. You can generate a bunch of these before you start your project if you are starting from scratch or on top of an existing codebase - both work.&lt;/p&gt;
&lt;p&gt;Each iteration starts with a fresh context. That was partly an experiment, but it has been useful. When a session died halfway through a task, the next one could recover from Git. I have also resumed the loop on another machine and once with another model. Both times the recovery instruction was one line: pull &lt;code&gt;origin/loop/trunk&lt;/code&gt; and start &lt;code&gt;/loop /app-loop&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Fresh context can also read stale instructions, so the files have to stay current. A task claim is pushed before work begins, and then the journal is committed. My task acceptance criteria live in the backlog instead of in the one-line ledger entry. Anything that exists only in the model&amp;rsquo;s context disappears at the next iteration. I wanted that pressure. It creates plenty of paperwork, but the model and harness seem to be dealing with it fine. I did some further optimization around that, as I’ll explain a bit later.&lt;/p&gt;
&lt;aside class="article-newsletter-cta" aria-label="Newsletter signup"&gt;
 &lt;div class="newsletter-signup newsletter-signup--article"&gt;
 &lt;div class="newsletter-signup__heading"&gt;
 &lt;p class="meta-label" id="newsletter-article-title"&gt;Newsletter&lt;/p&gt;
 
 &lt;p class="newsletter-signup__title"&gt;I occasionally write and share things like this.&lt;/p&gt;
 
 &lt;p class="newsletter-signup__intro"&gt;If you find them useful, leave your email here. I only send something when I have something worth sharing.&lt;/p&gt;
 
 &lt;/div&gt;

 &lt;form class="ph-sensitive ph-no-capture ph-no-autocapture ph-no-rageclick ph-no-deadclick" action="https://viborc.com/api/newsletter" method="post" accept-charset="UTF-8" aria-labelledby="newsletter-article-title" data-form="newsletter" data-analytics-event="newsletter_submit" data-newsletter-placement="article" data-ph-no-autocapture&gt;
 &lt;input name="form" type="hidden" value="newsletter-v1"&gt;
 &lt;input name="source" type="hidden" value="article"&gt;
 &lt;input name="return_path" type="hidden" value="/autonomous-gauntlet-loop-building-apps/"&gt;
 &lt;input name="consent" type="hidden" value="yes"&gt;

 &lt;div class="form-trap" aria-hidden="true"&gt;
 &lt;label for="newsletter-article-company"&gt;Leave this field empty&lt;/label&gt;
 &lt;input id="newsletter-article-company" name="company_website" type="text" tabindex="-1" autocomplete="off"&gt;
 &lt;/div&gt;

 &lt;div class="newsletter-signup__controls"&gt;
 &lt;label class="visually-hidden" for="newsletter-article-email"&gt;Email address&lt;/label&gt;
 &lt;input id="newsletter-article-email" name="email" type="email" autocomplete="email" inputmode="email" maxlength="254" placeholder="you@example.com" aria-describedby="newsletter-article-note" required&gt;
 &lt;button type="submit"&gt;Subscribe&lt;/button&gt;
 &lt;/div&gt;

 &lt;p class="newsletter-signup__note" id="newsletter-article-note"&gt;
 Confirm once by email; unsubscribe at any time.
 See the &lt;a href="https://viborc.com/privacy-policy/"&gt;privacy policy&lt;/a&gt;.
 &lt;/p&gt;
 &lt;p class="submission-form__status" role="status" aria-live="polite" aria-atomic="true" data-form-status hidden&gt;&lt;/p&gt;
 &lt;/form&gt;

 
 &lt;div class="form-outcomes" aria-live="polite" aria-atomic="true"&gt;
 &lt;p class="form-outcome" id="newsletter-article-check-email" tabindex="-1"&gt;Check your inbox and follow the confirmation link. You are not subscribed until that step is complete.&lt;/p&gt;
 &lt;p class="form-outcome form-outcome--error" id="newsletter-article-error" tabindex="-1"&gt;The subscription request could not be completed. Please try again later.&lt;/p&gt;
 &lt;/div&gt;
 
&lt;/div&gt;

&lt;/aside&gt;

&lt;h2 id="branches-setup-and-boundaries"&gt;Branches, setup and boundaries&lt;/h2&gt;
&lt;p&gt;My agent works on &lt;code&gt;loop/&amp;lt;task-id&amp;gt;&lt;/code&gt; branches. After the checks pass, it may merge those branches into &lt;code&gt;loop/trunk&lt;/code&gt;. Under the loop protocol, it does not merge &lt;code&gt;loop/trunk&lt;/code&gt; into &lt;code&gt;main&lt;/code&gt;. That’s the whole branch setup.&lt;/p&gt;
&lt;figure class="evidence-figure evidence-figure--editorial evidence-figure--branch-ladder"&gt;
&lt;svg class="evidence-figure__wide" viewBox="0 0 680 520" role="img" aria-label="Branch ladder from an agent task branch through an integration branch to a human-reviewed main branch" aria-describedby="fig-branch-ladder-desc" xmlns="http://www.w3.org/2000/svg"&gt;
&lt;desc id="fig-branch-ladder-desc"&gt;The agent works on one loop task branch, runs the gauntlet, and may merge it into loop trunk. A standing promotion pull request leads from loop trunk to main. The protocol reserves that merge for the human operator, although it is not enforced through separate credentials. Main is the branch that ships.&lt;/desc&gt;
&lt;defs&gt;&lt;marker id="branch-arrow" viewBox="0 0 8 8" refX="7" refY="4" markerWidth="7" markerHeight="7" orient="auto"&gt;&lt;path d="M0,0.6 L7.4,4 L0,7.4 Z" fill="var(--ink-soft)"/&gt;&lt;/marker&gt;&lt;/defs&gt;
&lt;text x="30" y="40" font-family="var(--font-mono)" font-size="12" letter-spacing="0.08em" fill="var(--ink-soft)"&gt;BRANCHES USED BY THE LOOP&lt;/text&gt;
&lt;rect x="72" y="82" width="536" height="270" rx="8" fill="color-mix(in srgb, var(--figure-periwinkle) 8%, var(--field-raised))" stroke="var(--hairline)"/&gt;
&lt;text x="96" y="112" font-family="var(--font-mono)" font-size="11" fill="var(--ink-soft)"&gt;AGENT-CONTROLLED ZONE&lt;/text&gt;
&lt;g data-reveal="true"&gt;
&lt;rect x="170" y="136" width="340" height="72" rx="6" fill="color-mix(in srgb, var(--figure-periwinkle) 20%, var(--field-raised))" stroke="var(--figure-periwinkle)"/&gt;
&lt;text x="340" y="168" text-anchor="middle" font-family="var(--font-display)" font-size="23" font-weight="650" fill="var(--ink)"&gt;loop/&amp;lt;task-id&amp;gt;&lt;/text&gt;
&lt;text x="340" y="190" text-anchor="middle" font-family="var(--font-body)" font-size="14" fill="var(--ink-soft)"&gt;One working branch per task&lt;/text&gt;
&lt;line x1="340" y1="214" x2="340" y2="250" stroke="var(--ink-soft)" stroke-width="1.5" marker-end="url(#branch-arrow)"/&gt;
&lt;text x="368" y="238" font-family="var(--font-mono)" font-size="10.5" fill="var(--ink-soft)"&gt;GAUNTLET + PR&lt;/text&gt;
&lt;rect x="170" y="260" width="340" height="72" rx="6" fill="color-mix(in srgb, var(--figure-sage) 20%, var(--field-raised))" stroke="var(--figure-sage)"/&gt;
&lt;text x="340" y="292" text-anchor="middle" font-family="var(--font-display)" font-size="23" font-weight="650" fill="var(--ink)"&gt;loop/trunk&lt;/text&gt;
&lt;text x="340" y="314" text-anchor="middle" font-family="var(--font-body)" font-size="14" fill="var(--ink-soft)"&gt;Integration branch, not production&lt;/text&gt;
&lt;/g&gt;
&lt;line x1="30" y1="385" x2="650" y2="385" stroke="var(--figure-apricot)" stroke-width="2" stroke-dasharray="8 7"/&gt;
&lt;rect x="204" y="365" width="272" height="40" rx="5" fill="var(--field-raised)" stroke="var(--figure-apricot)"/&gt;
&lt;text x="340" y="390" text-anchor="middle" font-family="var(--font-mono)" font-size="11" fill="var(--ink)"&gt;HUMAN PROMOTION PROTOCOL&lt;/text&gt;
&lt;line x1="340" y1="410" x2="340" y2="438" stroke="var(--ink-soft)" stroke-width="1.5" marker-end="url(#branch-arrow)"/&gt;
&lt;g data-reveal="true"&gt;&lt;rect x="170" y="448" width="340" height="58" rx="6" fill="color-mix(in srgb, var(--figure-apricot) 24%, var(--field-raised))" stroke="var(--figure-apricot)"/&gt;&lt;text x="340" y="483" text-anchor="middle" font-family="var(--font-display)" font-size="24" font-weight="650" fill="var(--ink)"&gt;main – what ships&lt;/text&gt;&lt;/g&gt;
&lt;/svg&gt;
&lt;svg class="evidence-figure__compact" viewBox="0 0 360 520" role="img" aria-label="Branch ladder from an agent task branch through an integration branch to a human-reviewed main branch" aria-describedby="fig-branch-ladder-desc" xmlns="http://www.w3.org/2000/svg"&gt;
&lt;defs&gt;&lt;marker id="branch-arrow-compact" viewBox="0 0 8 8" refX="7" refY="4" markerWidth="7" markerHeight="7" orient="auto"&gt;&lt;path d="M0,0.6 L7.4,4 L0,7.4 Z" fill="var(--ink-soft)"/&gt;&lt;/marker&gt;&lt;/defs&gt;
&lt;text x="18" y="30" font-family="var(--font-mono)" font-size="11" letter-spacing="0.08em" fill="var(--ink-soft)"&gt;BRANCHES USED BY THE LOOP&lt;/text&gt;
&lt;rect x="18" y="50" width="324" height="308" rx="8" fill="color-mix(in srgb, var(--figure-periwinkle) 8%, var(--field-raised))" stroke="var(--hairline)"/&gt;
&lt;text x="36" y="78" font-family="var(--font-mono)" font-size="11" fill="var(--ink-soft)"&gt;AGENT-CONTROLLED ZONE&lt;/text&gt;
&lt;g data-reveal="true"&gt;
&lt;rect x="36" y="96" width="288" height="88" rx="6" fill="color-mix(in srgb, var(--figure-periwinkle) 20%, var(--field-raised))" stroke="var(--figure-periwinkle)"/&gt;
&lt;text x="180" y="130" text-anchor="middle" font-family="var(--font-display)" font-size="23" font-weight="650" fill="var(--ink)"&gt;loop/&amp;lt;task-id&amp;gt;&lt;/text&gt;
&lt;text x="180" y="156" text-anchor="middle" font-family="var(--font-body)" font-size="14" fill="var(--ink-soft)"&gt;One working branch per task&lt;/text&gt;
&lt;line x1="180" y1="192" x2="180" y2="226" stroke="var(--ink-soft)" stroke-width="1.5" marker-end="url(#branch-arrow-compact)"/&gt;
&lt;text x="200" y="214" font-family="var(--font-mono)" font-size="10.5" fill="var(--ink-soft)"&gt;GAUNTLET + PR&lt;/text&gt;
&lt;rect x="36" y="236" width="288" height="88" rx="6" fill="color-mix(in srgb, var(--figure-sage) 20%, var(--field-raised))" stroke="var(--figure-sage)"/&gt;
&lt;text x="180" y="270" text-anchor="middle" font-family="var(--font-display)" font-size="23" font-weight="650" fill="var(--ink)"&gt;loop/trunk&lt;/text&gt;
&lt;text x="180" y="296" text-anchor="middle" font-family="var(--font-body)" font-size="14" fill="var(--ink-soft)"&gt;Integration branch, not production&lt;/text&gt;
&lt;/g&gt;
&lt;line x1="18" y1="386" x2="342" y2="386" stroke="var(--figure-apricot)" stroke-width="2" stroke-dasharray="8 7"/&gt;
&lt;rect x="52" y="366" width="256" height="40" rx="5" fill="var(--field-raised)" stroke="var(--figure-apricot)"/&gt;
&lt;text x="180" y="391" text-anchor="middle" font-family="var(--font-mono)" font-size="11" fill="var(--ink)"&gt;HUMAN PROMOTION PROTOCOL&lt;/text&gt;
&lt;line x1="180" y1="412" x2="180" y2="440" stroke="var(--ink-soft)" stroke-width="1.5" marker-end="url(#branch-arrow-compact)"/&gt;
&lt;g data-reveal="true"&gt;&lt;rect x="36" y="450" width="288" height="56" rx="6" fill="color-mix(in srgb, var(--figure-apricot) 24%, var(--field-raised))" stroke="var(--figure-apricot)"/&gt;&lt;text x="180" y="484" text-anchor="middle" font-family="var(--font-display)" font-size="23" font-weight="650" fill="var(--ink)"&gt;main – what ships&lt;/text&gt;&lt;/g&gt;
&lt;/svg&gt;
&lt;figcaption&gt;The agent may merge task work into `loop/trunk`. The protocol reserves promotion to `main` for me, although that restriction is not credential-enforced.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;This gives me a pile of reviewed work and keeps me in the loop, on purpose. I can inspect several tasks together, reject one, or leave the branch alone while the loop continues. Pretty flexible, given the different use cases my app is covering.&lt;/p&gt;
&lt;p&gt;I also set some limits.&lt;/p&gt;
&lt;p&gt;Some of these limits are controls, and some are protocol.&lt;/p&gt;
&lt;p&gt;For example, GitHub runs six required checks on &lt;code&gt;main&lt;/code&gt;, and production publishing uses credentials the loop does not have. However, the loop currently runs under my GitHub identity. That means the rule that only I merge the promotion PR is procedural. There is no separate technical control enforcing it.&lt;/p&gt;
&lt;p&gt;The agent also cannot edit &lt;code&gt;LOOP.md&lt;/code&gt;, its recurring command, the repository agent instructions, or CI workflows on &lt;code&gt;loop/trunk&lt;/code&gt;. If it thinks one of those files needs to change, it opens an amendment branch against &lt;code&gt;main&lt;/code&gt;, stops, and asks me for a decision. That happened twice in the first week. One proposed change touched a database rebuild step, so I was happy to have the pause.&lt;/p&gt;
&lt;p&gt;Also, for transparency, &lt;code&gt;HALT&lt;/code&gt; is a cooperative stop. It works because each iteration explicitly checks for it. I think both of these can be hardened, and I’m not treating them as solved security boundaries.&lt;/p&gt;
&lt;p&gt;I can send &lt;code&gt;HALT&lt;/code&gt; in the harness chat, including by voice, or add the line from the GitHub editor on my phone. The agent checks for it at the start of an iteration and again before a push or merge, and it is not allowed to add or remove it. Useful if I’m AFK and need to stop it but don’t have the cloud setup prepared.&lt;/p&gt;
&lt;p&gt;And there is one slightly odd rollback detail. If I reject a completed task, reverting the merge is not enough. The next fresh session will see the task as unfinished and build it again. I also mark the ledger row &lt;code&gt;SUPERSEDED&lt;/code&gt; with a short rejection note. I learned this after watching the queue faithfully recreate something I had just removed - so in a way this loop keeps me in the improvement loop, too.&lt;/p&gt;
&lt;h2 id="how-a-task-gets-reviewed"&gt;How a task gets reviewed&lt;/h2&gt;
&lt;p&gt;First, a task runs the complete local check and then real CI. If either check fails, or if the results disagree, the task stays open.&lt;/p&gt;
&lt;p&gt;Next, the builder starts one or two reviewers in fresh contexts - and this fresh context is a very important detail here. They get the diff and a pointer to the original acceptance criteria. I do not give them the builder&amp;rsquo;s summary. One reviewer is specifically asked to look for a path or case that is missing.&lt;/p&gt;
&lt;p&gt;These reviewers (currently!) use the same model as the builder, so I do not treat them as independent in any strong sense. But they still do catch things. A fresh context reads the diff without the little assumptions that accumulated while the code was being written. When I have spare budget for a stronger model, review is where I’m most interested in spending it.&lt;/p&gt;
&lt;p&gt;If the same failure happens twice and the agent has no new approach, it marks the task &lt;code&gt;BLOCKED&lt;/code&gt;, records the diagnosis, and moves on. This has been better than letting a recurring session retry the same mistake indefinitely, and I can then set a stronger model on it to figure things out. Works pretty well.&lt;/p&gt;
&lt;h2 id="what-broke-in-the-first-week"&gt;What broke in the first week&lt;/h2&gt;
&lt;p&gt;Now, I also want to share some first-hand experience of what has worked and what has failed for me.&lt;/p&gt;
&lt;h3 id="the-counts-were-wrong"&gt;The counts were wrong&lt;/h3&gt;
&lt;p&gt;Across 11 review rounds, counts and inventories were the problem that kept coming back. The individual items were often correct while the total was not: &amp;ldquo;11 dates&amp;rdquo; beside 10 dates, or &amp;ldquo;13 cases&amp;rdquo; beside 12.&lt;/p&gt;
&lt;p&gt;I now ask the agent to measure counts at the end, after the last edit, and keep the number close to the command that produced it. That keeps things tidier. But even that rule needed a correction. On August 14, one completion note said a file had 4,010 lines because the count was taken before the final edit and the actual commit had 4,004. Again, not a huge thing, but preventable.&lt;/p&gt;
&lt;h3 id="some-tests-proved-almost-nothing"&gt;Some tests proved almost nothing&lt;/h3&gt;
&lt;p&gt;The loop once produced a mutation table saying two mutations had been caught. It had never applied either mutation. Go figure.&lt;/p&gt;
&lt;p&gt;I also had a way more interesting failure involving a no-N+1 test. The test checked &lt;code&gt;queryCount&lt;/code&gt;, but the reader under test supplied that number itself. The code issued fifteen statements for eight jurisdictions, reported eight, and passed. I changed the test to count at the database boundary so this doesn’t happen again.&lt;/p&gt;
&lt;p&gt;I also found six passing refusal tests around a feature whose valid-input path did not work. Bad inputs were rejected correctly. A normal input went down the wrong branch and returned nothing. I now look for a positive control beside rejection tests.&lt;/p&gt;
&lt;p&gt;None of these were exotic model failures. They were just ordinary bad and poorly designed tests, and they looked convincing in the report. Writing a bunch of tests is now easier than ever, but keep them in the loop as well and improve them after different turns so they can catch actual drifts and not just show up green and nice.&lt;/p&gt;
&lt;h3 id="the-state-file-got-messy"&gt;The state file got messy&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;STATE.md&lt;/code&gt; is read at the beginning of every iteration. After one week, the snapshot contained 2,463 lines. It was growing really fast.&lt;/p&gt;
&lt;figure class="evidence-figure evidence-figure--editorial evidence-figure--state-growth"&gt;
&lt;svg class="evidence-figure__wide" viewBox="0 0 680 600" role="img" aria-label="Line counts for eight sections of a 2,463-line autonomous loop state file" aria-describedby="fig-state-growth-desc" xmlns="http://www.w3.org/2000/svg"&gt;
&lt;desc id="fig-state-growth-desc"&gt;The iteration log has 856 lines, operator rulings 722, in-flight state 353, operator queue 337, standing lessons 64, deploy ledger 62, resume here 38, and operator attention 17. These section bodies sum to 2,449 lines. The remaining 14 are six title and preamble lines plus eight section headings. The two largest sections account for about 64.1 percent of the full file.&lt;/desc&gt;
&lt;text x="30" y="40" font-family="var(--font-mono)" font-size="12" letter-spacing="0.08em" fill="var(--ink-soft)"&gt;STATE.md AFTER ONE WEEK&lt;/text&gt;
&lt;text x="30" y="74" font-family="var(--font-display)" font-size="25" font-weight="650" fill="var(--ink)"&gt;2,463 measured lines&lt;/text&gt;
&lt;text x="30" y="98" font-family="var(--font-body)" font-size="14" fill="var(--ink-soft)"&gt;Two historical sections occupy 64.1% of the file.&lt;/text&gt;
&lt;g font-family="var(--font-body)" font-size="13.5" fill="var(--ink)"&gt;
&lt;text x="30" y="145"&gt;Iteration log&lt;/text&gt;&lt;rect x="180" y="128" width="360" height="24" rx="4" fill="color-mix(in srgb, var(--figure-periwinkle) 56%, var(--field-raised))"/&gt;&lt;text x="554" y="145"&gt;856 (34.8%)&lt;/text&gt;
&lt;text x="30" y="195"&gt;Operator rulings&lt;/text&gt;&lt;rect x="180" y="178" width="304" height="24" rx="4" fill="color-mix(in srgb, var(--figure-lilac) 56%, var(--field-raised))"/&gt;&lt;text x="498" y="195"&gt;722 (29.3%)&lt;/text&gt;
&lt;text x="30" y="245"&gt;In-flight&lt;/text&gt;&lt;rect x="180" y="228" width="148" height="24" rx="4" fill="color-mix(in srgb, var(--figure-sage) 48%, var(--field-raised))"/&gt;&lt;text x="342" y="245"&gt;353 (14.3%)&lt;/text&gt;
&lt;text x="30" y="295"&gt;Operator queue&lt;/text&gt;&lt;rect x="180" y="278" width="142" height="24" rx="4" fill="color-mix(in srgb, var(--figure-apricot) 50%, var(--field-raised))"/&gt;&lt;text x="336" y="295"&gt;337 (13.7%)&lt;/text&gt;
&lt;text x="30" y="345"&gt;Standing lessons&lt;/text&gt;&lt;rect x="180" y="328" width="27" height="24" rx="4" fill="var(--figure-sage)"/&gt;&lt;text x="221" y="345"&gt;64 (2.6%)&lt;/text&gt;
&lt;text x="30" y="395"&gt;Deploy ledger&lt;/text&gt;&lt;rect x="180" y="378" width="26" height="24" rx="4" fill="var(--figure-apricot)"/&gt;&lt;text x="220" y="395"&gt;62 (2.5%)&lt;/text&gt;
&lt;text x="30" y="445"&gt;RESUME HERE&lt;/text&gt;&lt;rect x="180" y="428" width="16" height="24" rx="4" fill="var(--figure-periwinkle)"/&gt;&lt;text x="210" y="445"&gt;38 (1.5%)&lt;/text&gt;
&lt;text x="30" y="495"&gt;Operator attention&lt;/text&gt;&lt;rect x="180" y="478" width="7" height="24" rx="4" fill="var(--figure-lilac)"/&gt;&lt;text x="201" y="495"&gt;17 (0.7%)&lt;/text&gt;
&lt;/g&gt;
&lt;line x1="30" y1="532" x2="650" y2="532" stroke="var(--hairline)"/&gt;
&lt;rect x="30" y="550" width="620" height="34" rx="5" fill="var(--field-deep)" stroke="var(--hairline-strong)"/&gt;
&lt;text x="340" y="572" text-anchor="middle" font-family="var(--font-mono)" font-size="11" fill="var(--ink-soft)"&gt;SECTION BODIES: 2,449 – PREAMBLE + HEADINGS: 14&lt;/text&gt;
&lt;/svg&gt;
&lt;svg class="evidence-figure__compact" viewBox="0 0 360 650" role="img" aria-label="Line counts for eight sections of a 2,463-line autonomous loop state file" aria-describedby="fig-state-growth-desc" xmlns="http://www.w3.org/2000/svg"&gt;
&lt;text x="18" y="30" font-family="var(--font-mono)" font-size="11" letter-spacing="0.08em" fill="var(--ink-soft)"&gt;STATE.md AFTER ONE WEEK&lt;/text&gt;
&lt;text x="18" y="61" font-family="var(--font-display)" font-size="24" font-weight="650" fill="var(--ink)"&gt;2,463 measured lines&lt;/text&gt;
&lt;text x="18" y="84" font-family="var(--font-body)" font-size="13.5" fill="var(--ink-soft)"&gt;Two historical sections occupy 64.1%.&lt;/text&gt;
&lt;g font-family="var(--font-body)" font-size="13.5" fill="var(--ink)"&gt;
&lt;text x="18" y="122"&gt;Iteration log&lt;/text&gt;&lt;text x="342" y="122" text-anchor="end"&gt;856 (34.8%)&lt;/text&gt;&lt;rect x="18" y="132" width="324" height="15" rx="4" fill="color-mix(in srgb, var(--figure-periwinkle) 56%, var(--field-raised))"/&gt;
&lt;text x="18" y="180"&gt;Operator rulings&lt;/text&gt;&lt;text x="342" y="180" text-anchor="end"&gt;722 (29.3%)&lt;/text&gt;&lt;rect x="18" y="190" width="273" height="15" rx="4" fill="color-mix(in srgb, var(--figure-lilac) 56%, var(--field-raised))"/&gt;
&lt;text x="18" y="238"&gt;In-flight&lt;/text&gt;&lt;text x="342" y="238" text-anchor="end"&gt;353 (14.3%)&lt;/text&gt;&lt;rect x="18" y="248" width="134" height="15" rx="4" fill="color-mix(in srgb, var(--figure-sage) 48%, var(--field-raised))"/&gt;
&lt;text x="18" y="296"&gt;Operator queue&lt;/text&gt;&lt;text x="342" y="296" text-anchor="end"&gt;337 (13.7%)&lt;/text&gt;&lt;rect x="18" y="306" width="128" height="15" rx="4" fill="color-mix(in srgb, var(--figure-apricot) 50%, var(--field-raised))"/&gt;
&lt;text x="18" y="354"&gt;Standing lessons&lt;/text&gt;&lt;text x="342" y="354" text-anchor="end"&gt;64 (2.6%)&lt;/text&gt;&lt;rect x="18" y="364" width="24" height="15" rx="4" fill="var(--figure-sage)"/&gt;
&lt;text x="18" y="412"&gt;Deploy ledger&lt;/text&gt;&lt;text x="342" y="412" text-anchor="end"&gt;62 (2.5%)&lt;/text&gt;&lt;rect x="18" y="422" width="23" height="15" rx="4" fill="var(--figure-apricot)"/&gt;
&lt;text x="18" y="470"&gt;RESUME HERE&lt;/text&gt;&lt;text x="342" y="470" text-anchor="end"&gt;38 (1.5%)&lt;/text&gt;&lt;rect x="18" y="480" width="14" height="15" rx="4" fill="var(--figure-periwinkle)"/&gt;
&lt;text x="18" y="528"&gt;Operator attention&lt;/text&gt;&lt;text x="342" y="528" text-anchor="end"&gt;17 (0.7%)&lt;/text&gt;&lt;rect x="18" y="538" width="7" height="15" rx="4" fill="var(--figure-lilac)"/&gt;
&lt;/g&gt;
&lt;line x1="18" y1="578" x2="342" y2="578" stroke="var(--hairline)"/&gt;
&lt;rect x="18" y="594" width="324" height="40" rx="5" fill="var(--field-deep)" stroke="var(--hairline-strong)"/&gt;
&lt;text x="180" y="610" text-anchor="middle" font-family="var(--font-mono)" font-size="10.5" fill="var(--ink-soft)"&gt;SECTION BODIES: 2,449&lt;/text&gt;
&lt;text x="180" y="625" text-anchor="middle" font-family="var(--font-mono)" font-size="10.5" fill="var(--ink-soft)"&gt;PREAMBLE + HEADINGS: 14&lt;/text&gt;
&lt;/svg&gt;
&lt;figcaption&gt;The eight section bodies add up to 2,449 lines. The remaining 14 are six title and preamble lines plus eight section headings.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;I asked the agent to analyze it so we can figure out how to improve it. The iteration log and operator rulings made up about 64.1 percent of the measured file. Worse, some old rulings contradicted newer ones - it happens with long ledgers, and some previous entries become stale.&lt;/p&gt;
&lt;p&gt;My first cleanup idea was to keep recent entries in &lt;code&gt;STATE.md&lt;/code&gt;, move the rest to an archive, and tell the agent to search the archive when needed. That did not work well, and it wasn’t such a great idea.&lt;/p&gt;
&lt;p&gt;A fresh session doesn&amp;rsquo;t know a missing old decision exists, so it may never realize it should search for one.&lt;/p&gt;
&lt;p&gt;The version I am trying now leaves a one-line index entry in the active file for anything archived. I am also separating current state from history. Open queue items, standing rulings, lessons, and the in-flight claim stay active. That gives me the flexibility to have old journal entries and overridden decisions move out.&lt;/p&gt;
&lt;p&gt;What’s funny is that &lt;code&gt;LOOP.md&lt;/code&gt; already told the agent to cap the iteration log at fifteen entries and move the rest to &lt;code&gt;STATE-ARCHIVE.md&lt;/code&gt;. But I had never created the archive file when initializing my repo. So I had a design, and the rule was sitting there while the log grew to 850+ lines before I said: “Wait a minute!”&lt;/p&gt;
&lt;p&gt;There were other problems, and I’m sure more will show up.&lt;/p&gt;
&lt;p&gt;For example, a critic collided with the builder&amp;rsquo;s tests on a database that only supports one job at a time and briefly left the local schemas missing. The written instruction already said the database was serial. But this has given me a good nudge to start thinking and deciding which of those instructions can become actual locks or checks.&lt;/p&gt;
&lt;p&gt;And lastly, the human review also overturned two findings that the loop had classified as residual risk. The analysis was careful, but the severity call and the classification of that severity were wrong. One issue could be triggered by an ordinary job retry, with no attacker involved. On the upside, the loop had recorded enough evidence for me to disagree with it and make an informed decision.&lt;/p&gt;
&lt;h2 id="if-you-want-to-try-it"&gt;If you want to try it&lt;/h2&gt;
&lt;p&gt;I’d encourage you to try it, but I would start smaller than I did.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Create an integration branch that the agent may use, and protect the production branch.&lt;/li&gt;
&lt;li&gt;Write down one iteration: orient, claim, plan, build, check, review, merge to integration, record the result, stop.&lt;/li&gt;
&lt;li&gt;Put the task ledger, acceptance criteria, and current state in Git.&lt;/li&gt;
&lt;li&gt;Give the agent the complete test command and the actual places where &amp;ldquo;done&amp;rdquo; is defined.&lt;/li&gt;
&lt;li&gt;Protect the loop rules and CI files from the loop itself.&lt;/li&gt;
&lt;li&gt;Run one task while watching. Then run another from a fresh context and see what the first session forgot to leave behind.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Only after that would I add a recurring command.&lt;/p&gt;
&lt;p&gt;At the moment, mine has been running for some 8 days. The split between active state and indexed history is only a few days old, and I do not yet know whether it will hold up.&lt;/p&gt;
&lt;p&gt;For now, the loop stays on an integration branch, and I still read every promotion diff. If and when the same kind of failure comes back, I try to add whatever would have caught it. Sometimes that is a test and other times I need to change a permission or add a lock. I see that as one benefit of the loop process - it keeps self-improving, but not in the real RSI way. I wrote about that in &lt;a href="https://viborc.com/what-recursive-self-improvement-actually-means/"&gt;a separate essay&lt;/a&gt;, so you might wanna take a look.&lt;/p&gt;
&lt;p&gt;My next experiments will be related to graphs and not just loops. But for now, I’m really happy with this gauntlet loop approach. It has been really good for my app.&lt;/p&gt;
&lt;p&gt;Here are some numbers for time and token use.&lt;/p&gt;
&lt;p&gt;In one review round that I measured for this write-up, my three critics ran in parallel for 10.7, 14.4, and 15.9 minutes. Together, they used about 486,000 tokens before the answer pass.&lt;/p&gt;
&lt;p&gt;Keep in mind that this is only one task, so don’t treat it as a typical runtime or token cost. I would measure your own runs if you want numbers that are useful for your setup.&lt;/p&gt;
&lt;p&gt;I also love seeing the community build and compare different versions of these loops. If you are running your own, I’d really like to hear what you changed, what it costs, and what broke first. I’ll keep you posted on mine.&lt;/p&gt;
&lt;div class="footnotes" role="doc-endnotes"&gt;
&lt;hr&gt;
&lt;ol&gt;
&lt;li id="fn:1"&gt;
&lt;p&gt;Matt Shumer, &lt;a href="https://somethingbig.ai/gauntlet-loop"&gt;&amp;ldquo;How to Run a Gauntlet Loop&amp;rdquo;&lt;/a&gt;, the &lt;a href="https://github.com/mshumer/Claude-of-Duty"&gt;Claude of Duty repository&lt;/a&gt;, and the &lt;a href="https://github.com/mshumer/Claude-of-Duty/blob/main/prompt.md"&gt;original prompt&lt;/a&gt;, 27 July 2026.&amp;#160;&lt;a href="#fnref:1" class="footnote-backref" role="doc-backlink"&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id="fn:2"&gt;
&lt;p&gt;Anthropic&amp;rsquo;s &lt;a href="https://github.com/anthropics/claude-code/blob/v2.1.71/CHANGELOG.md#2171"&gt;Claude Code 2.1.71 changelog entry for &lt;code&gt;/loop&lt;/code&gt;&lt;/a&gt;, retrieved 18 August 2026.&amp;#160;&lt;a href="#fnref:2" class="footnote-backref" role="doc-backlink"&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id="fn:3"&gt;
&lt;p&gt;OpenAI&amp;rsquo;s &lt;a href="https://learn.chatgpt.com/docs/reference/slash-commands#set-or-manage-a-goal-with-goal"&gt;Codex slash commands reference for &lt;code&gt;/goal&lt;/code&gt;&lt;/a&gt;, retrieved 19 August 2026.&amp;#160;&lt;a href="#fnref:3" class="footnote-backref" role="doc-backlink"&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;</content:encoded></item><item><title>Has AI started improving itself?</title><link>https://viborc.com/what-recursive-self-improvement-actually-means/</link><pubDate>Mon, 17 Aug 2026 15:00:12 +0000</pubDate><guid isPermaLink="true">https://viborc.com/what-recursive-self-improvement-actually-means/</guid><description>Recursive self-improvement is AI improving its ability to improve. Some current systems close parts of that loop, but no public case I reviewed runs the full successor cycle.</description><content:encoded>&lt;section class="article-summary" aria-labelledby="article-summary-0"&gt;
 &lt;p class="meta-label article-summary__eyebrow"&gt;TL;DR&lt;/p&gt;
 &lt;h2 class="article-summary__title" id="article-summary-0"&gt;The short version&lt;/h2&gt;
 &lt;div class="article-summary__intro"&gt;&lt;strong&gt;This is a long read because recursive self-improvement now describes both a speculative intelligence explosion and several much narrower engineering loops.&lt;/strong&gt; I followed the changes from one run into the next and counted the people, tests, training systems, and deployment decisions that the announcements usually leave out.&lt;/div&gt;
 &lt;div class="article-summary__body"&gt;&lt;ul&gt;
&lt;li&gt;In bounded ways, AI has started improving parts of the systems around it. However, I found no public example of a general system that builds, validates, deploys, and then learns from a more capable successor on its own. We are not there yet.&lt;/li&gt;
&lt;li&gt;So when a company says its AI improved itself, ask what changed, who judged the result, what was saved, and whether the changed system performed the next round. The evaluator is often where the claim becomes weakest.&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/section&gt;

&lt;p&gt;Recursive self-improvement, usually shortened to RSI in AI discussions, is the
idea that an AI system improves its own ability to make further improvements.&lt;/p&gt;
&lt;p&gt;In the strongest version, it designs a more capable successor, which then helps
design the version after that. If those gains keep strengthening the
improvement process, the loop could accelerate into what I. J. Good called an
&amp;ldquo;intelligence explosion.&amp;rdquo; Good proposed that argument all the way back in 1965.
It was speculative then, and it is still not a description of an existing
end-to-end system.&lt;sup id="fnref:1"&gt;&lt;a href="#fn:1" class="footnote-ref" role="doc-noteref"&gt;1&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;
&lt;p&gt;Sixty years later, on 30 July 2025, Mark Zuckerberg wrote that Meta had &amp;ldquo;begun
to see glimpses of our AI systems improving themselves.&amp;rdquo; He called the
improvement slow but undeniable, then said superintelligence was now in
sight.&lt;sup id="fnref:2"&gt;&lt;a href="#fn:2" class="footnote-ref" role="doc-noteref"&gt;2&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;
&lt;p&gt;I had seen versions of the same claim in product announcements, safety
frameworks, papers, and the coding-agent work I do every day. Anthropic reports
that, as of May 2026, Claude authored more than 80% of the code merged into its
codebase. OpenAI says its automated GPT-Red model generated attacks used to train
GPT-5.6 against prompt injections. Yet Anthropic also says full recursive
self-improvement has not arrived. Under OpenAI&amp;rsquo;s Preparedness Framework, the
evaluated GPT-5.6 models did not reach its High threshold for AI
self-improvement. METR avoids RSI as a technical term because people use it for
incompatible things.&lt;sup id="fnref:3"&gt;&lt;a href="#fn:3" class="footnote-ref" role="doc-noteref"&gt;3&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;
&lt;p&gt;Those sources were using self-improvement to mean different things. I also
could not rule out a more ordinary explanation: some of the language was doing
marketing work. That is legitimate, but it made me want to know exactly what
sat behind the claim. So I did the research.&lt;/p&gt;
&lt;h2 id="what-recursive-self-improvement-means"&gt;What recursive self-improvement means&lt;/h2&gt;
&lt;p&gt;Before I looked at the cases, I needed one rule: an AI system can improve
something without recursively improving itself. Three common examples show
why:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;A model that critiques and rewrites an answer has improved an output.&lt;/li&gt;
&lt;li&gt;A system that remembers a useful technique can behave differently next time.&lt;/li&gt;
&lt;li&gt;An agent that edits its tools or code has changed part of the machinery
around the model.&lt;/li&gt;
&lt;/ul&gt;
&lt;figure id="rsi-improvement-threshold" class="evidence-figure evidence-figure--editorial evidence-figure--rsi-threshold"&gt;
&lt;svg viewBox="0 0 680 540" role="img" aria-label="When an improvement becomes recursive" aria-describedby="fig-rsi-threshold-desc" xmlns="http://www.w3.org/2000/svg"&gt;
&lt;desc id="fig-rsi-threshold-desc"&gt;A decision diagram begins with three possible changes: a better output, saved memory, or altered tools and code. If the change is not saved and reused, it is an improvement only. If it is reused but the changed system does not help make the next change, it is a persistent change. It becomes a recursive loop only when the changed system participates in another improvement round that can change the process again.&lt;/desc&gt;
&lt;text x="24" y="39" font-family="var(--font-mono)" font-size="17" letter-spacing="0.07em" fill="var(--ink-soft)"&gt;WHAT CHANGED?&lt;/text&gt;
&lt;g aria-label="Three common kinds of improvement"&gt;
&lt;rect x="24" y="62" width="196" height="84" rx="7" fill="var(--field-deep)" stroke="var(--hairline-strong)"/&gt;
&lt;text x="42" y="91" font-family="var(--font-mono)" font-size="14" letter-spacing="0.05em" fill="var(--ink-soft)"&gt;OUTPUT&lt;/text&gt;
&lt;text x="42" y="122" font-family="var(--font-display)" font-size="22" font-weight="650" fill="var(--ink)"&gt;Better answer&lt;/text&gt;
&lt;rect x="242" y="62" width="196" height="84" rx="7" fill="color-mix(in srgb, var(--figure-periwinkle) 16%, var(--field-raised))" stroke="var(--figure-periwinkle)"/&gt;
&lt;text x="260" y="91" font-family="var(--font-mono)" font-size="14" letter-spacing="0.05em" fill="var(--ink-soft)"&gt;MEMORY&lt;/text&gt;
&lt;text x="260" y="122" font-family="var(--font-display)" font-size="22" font-weight="650" fill="var(--ink)"&gt;Saved technique&lt;/text&gt;
&lt;rect x="460" y="62" width="196" height="84" rx="7" fill="color-mix(in srgb, var(--figure-periwinkle) 16%, var(--field-raised))" stroke="var(--figure-periwinkle)"/&gt;
&lt;text x="478" y="91" font-family="var(--font-mono)" font-size="14" letter-spacing="0.05em" fill="var(--ink-soft)"&gt;TOOLS OR CODE&lt;/text&gt;
&lt;text x="478" y="122" font-family="var(--font-display)" font-size="20" font-weight="650" fill="var(--ink)"&gt;Altered tools or code&lt;/text&gt;
&lt;/g&gt;
&lt;g aria-hidden="true" fill="none" stroke="var(--hairline-strong)" stroke-width="1.5"&gt;
&lt;path d="M122 146V174H340"/&gt;
&lt;path d="M340 146V194"/&gt;
&lt;path d="M558 146V174H340"/&gt;
&lt;/g&gt;
&lt;g aria-label="Persistence decision"&gt;
&lt;rect x="92" y="194" width="496" height="82" rx="8" fill="color-mix(in srgb, var(--figure-apricot) 13%, var(--field-raised))" stroke="var(--figure-apricot)"/&gt;
&lt;text x="116" y="222" font-family="var(--font-mono)" font-size="14" letter-spacing="0.05em" fill="var(--figure-apricot)"&gt;PERSISTENCE GATE&lt;/text&gt;
&lt;text x="116" y="254" font-family="var(--font-display)" font-size="23" font-weight="650" fill="var(--ink)"&gt;Is the change saved and reused in a later run?&lt;/text&gt;
&lt;/g&gt;
&lt;g aria-hidden="true" fill="none" stroke="var(--hairline-strong)" stroke-width="1.5"&gt;
&lt;path d="M340 276V302H166V326"/&gt;
&lt;path d="M340 302H500V326"/&gt;
&lt;/g&gt;
&lt;g aria-label="Change is not reused"&gt;
&lt;rect x="24" y="326" width="284" height="92" rx="8" fill="var(--field-deep)" stroke="var(--hairline-strong)"/&gt;
&lt;text x="44" y="355" font-family="var(--font-mono)" font-size="14" letter-spacing="0.05em" fill="var(--ink-soft)"&gt;NO&lt;/text&gt;
&lt;text x="44" y="384" font-family="var(--font-display)" font-size="22" font-weight="650" fill="var(--ink)"&gt;Improvement only&lt;/text&gt;
&lt;text x="44" y="406" font-family="var(--font-body)" font-size="16" fill="var(--ink-soft)"&gt;The change ends with this output.&lt;/text&gt;
&lt;/g&gt;
&lt;g aria-label="Change is reused"&gt;
&lt;rect x="332" y="326" width="324" height="92" rx="8" fill="color-mix(in srgb, var(--figure-sage) 15%, var(--field-raised))" stroke="var(--figure-sage)"/&gt;
&lt;text x="352" y="355" font-family="var(--font-mono)" font-size="14" letter-spacing="0.05em" fill="var(--figure-sage)"&gt;YES - ONE MORE TEST&lt;/text&gt;
&lt;text x="352" y="383" font-family="var(--font-display)" font-size="20" font-weight="650" fill="var(--ink)"&gt;Can the next round change the&lt;/text&gt;
&lt;text x="352" y="406" font-family="var(--font-display)" font-size="20" font-weight="650" fill="var(--ink)"&gt;improvement process again?&lt;/text&gt;
&lt;/g&gt;
&lt;g aria-hidden="true" fill="none" stroke="var(--hairline-strong)" stroke-width="1.5"&gt;
&lt;path d="M494 418V444H414V462"/&gt;
&lt;path d="M494 444H574V462"/&gt;
&lt;/g&gt;
&lt;g aria-label="Persistent but not recursive change"&gt;
&lt;rect x="332" y="462" width="156" height="58" rx="7" fill="var(--field-deep)" stroke="var(--hairline-strong)"/&gt;
&lt;text x="348" y="486" font-family="var(--font-mono)" font-size="13" fill="var(--ink-soft)"&gt;NO&lt;/text&gt;
&lt;text x="348" y="508" font-family="var(--font-display)" font-size="18" font-weight="650" fill="var(--ink)"&gt;Persistent change&lt;/text&gt;
&lt;/g&gt;
&lt;g aria-label="Recursive change"&gt;
&lt;rect x="512" y="462" width="144" height="58" rx="7" fill="color-mix(in srgb, var(--figure-sage) 27%, var(--field-raised))" stroke="var(--figure-sage)" stroke-width="1.5"/&gt;
&lt;text x="528" y="486" font-family="var(--font-mono)" font-size="13" fill="var(--figure-sage)"&gt;YES&lt;/text&gt;
&lt;text x="528" y="508" font-family="var(--font-display)" font-size="18" font-weight="700" fill="var(--ink)"&gt;Recursive loop&lt;/text&gt;
&lt;/g&gt;
&lt;/svg&gt;
&lt;figcaption&gt;A better output is still an improvement. Memory and tool changes can persist across runs. The loop becomes recursive only when the changed system takes part in another improvement round that can alter how later improvements are made. Method: this applies the persistence-and-reuse test used throughout the essay.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;In this piece, I use &lt;em&gt;recursive&lt;/em&gt; for the stronger step: an accepted change
survives, the changed system takes part in another improvement round, and that
round can change the process again.&lt;/p&gt;
&lt;p&gt;The older AGI argument starts at the far end of that spectrum, with a system
designing a more capable successor and a possible intelligence explosion.
Current engineering papers often study smaller loops inside fixed boundaries,
while AI labs use the phrase more broadly when coding agents or automated
experiments help the human-run organization build the next model. All of these
involve feedback, but they do not give the AI the same role.&lt;/p&gt;
&lt;p&gt;AI has started improving parts of the systems around it. Darwin Gödel Machine
changes a coding-agent scaffold across generations. Self-Rewarding Language
Models use model-generated judgments in an externally run training loop.
AlphaEvolve improves target programs, including code used to train Gemini.&lt;sup id="fnref:4"&gt;&lt;a href="#fn:4" class="footnote-ref" role="doc-noteref"&gt;4&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;
&lt;p&gt;But I did not find a public system that chooses the research goal, builds a more
capable general successor, independently validates it, deploys it, and then lets
that successor run the next cycle without people closing essential parts of
the loop.&lt;/p&gt;
&lt;p&gt;The answer depends on what &lt;em&gt;itself&lt;/em&gt; includes. It might mean the model weights,
an agent wrapped around a model, or, in a company statement, a whole lab:
people, models, benchmarks, training clusters, and deployment decisions. &lt;strong&gt;When
someone says an AI improved itself, what exactly is inside &lt;em&gt;itself&lt;/em&gt;?&lt;/strong&gt;&lt;/p&gt;
&lt;h2 id="first-decide-what-counts-as-the-system"&gt;First decide what counts as the system&lt;/h2&gt;
&lt;p&gt;If I mean only the language model, a person editing its prompt is outside the
boundary. If I mean the model plus its agent harness, tools, memory, and
evaluator, then a change to the harness can be self-improvement even while the
model weights stay frozen. Add the training infrastructure, checkpoint
selection, safety review, and deployment, and a loop that looked autonomous may
turn out to depend on people at several essential points.&lt;/p&gt;
&lt;p&gt;There is no single correct boundary for every question. Trouble starts when an
announcement uses one boundary for the achievement and a larger one for the
claim.&lt;/p&gt;
&lt;p&gt;I am not asking the AI to own the data center or plug in its own servers.
Supplied compute can sit outside the boundary without defeating an RSI claim.
But if an outside actor still chooses the goal, judges the result, or decides
which change becomes the next system, the claim of an autonomous loop needs to
say so.&lt;/p&gt;
&lt;p&gt;I follow the same facts through every case: the system being discussed, the
change it proposed, who judged that change, what was saved, and what took part
in the next round. That final fact separates an improved product from an
improved improver.&lt;/p&gt;
&lt;p&gt;For example, a model can design a faster sorting program without changing the
model, the search algorithm, or the evaluator that produced it. The program
improved. The system that found it may be exactly the same.&lt;/p&gt;
&lt;p&gt;A better answer used three seconds later is feedback inside one conversation.
But for improvement across runs, something has to be saved. That could be a
memory, a code commit, or a checkpoint that a later run actually uses.&lt;/p&gt;
&lt;figure class="evidence-figure evidence-figure--editorial evidence-figure--rsi-boundary" id="rsi-system-boundary"&gt;
&lt;div class="table-scroll" role="region" tabindex="0" aria-label="Scrollable diagram of a recursive self-improvement loop and its external dependencies" aria-describedby="fig-rsi-boundary-scroll-hint"&gt;
&lt;p class="table-scroll__hint" id="fig-rsi-boundary-scroll-hint"&gt;Scroll horizontally to read the full diagram&lt;/p&gt;
&lt;p class="visually-hidden" id="fig-rsi-boundary-full"&gt;Inside a declared system boundary, the current system drives a proposer, which creates a candidate change. An evaluator or verifier supplies evidence to a selection and safety gate. Accepted changes enter a persistent store, instantiate the next system, and are reused in the following cycle. Research agendas, task distributions, evaluator and benchmark authors, compute and training infrastructure, expert validation, and deployment approval remain outside the illustrated boundary. Supplied infrastructure is an external dependency, while human choices can limit a claim of autonomous closure. DGM closes a bounded agent-code loop while its model weights and outer selection stay fixed. AlphaEvolve closes a bounded target-program search loop but does not modify its own orchestrator. Self-Rewarding Language Models persist new checkpoints, but generation and judgment share a lineage while training operations remain external.&lt;/p&gt;
&lt;svg viewBox="0 0 680 920" style="min-width:42.5rem" role="img" aria-label="Seven-stage self-improvement loop inside a declared system boundary with three case overlays" aria-describedby="fig-rsi-boundary-desc fig-rsi-boundary-full" xmlns="http://www.w3.org/2000/svg"&gt;
&lt;desc id="fig-rsi-boundary-desc"&gt;A seven-stage loop connects current system, proposer, candidate, evaluator, safety gate, persistent store, and next system. Solid arrows are automated steps, dashed arrows cross the declared boundary, and a double arrow marks a saved change that the next system uses. A separate warning beneath the declared boundary notes that shared proposer and evaluator lineage weakens independent validation. DGM, AlphaEvolve, and Self-Rewarding Language Models are mapped beneath the base loop.&lt;/desc&gt;
&lt;defs&gt;
&lt;marker id="rsi-boundary-arrow" viewBox="0 0 8 8" refX="7" refY="4" markerWidth="7" markerHeight="7" orient="auto"&gt;&lt;path d="M0,0.6 L7.4,4 L0,7.4 Z" fill="var(--ink-soft)"/&gt;&lt;/marker&gt;
&lt;marker id="rsi-boundary-external-arrow" viewBox="0 0 8 8" refX="7" refY="4" markerWidth="7" markerHeight="7" orient="auto"&gt;&lt;path d="M0,0.6 L7.4,4 L0,7.4 Z" fill="var(--figure-apricot)"/&gt;&lt;/marker&gt;
&lt;/defs&gt;
&lt;text x="24" y="34" font-family="var(--font-mono)" font-size="12" letter-spacing="0.08em" fill="var(--ink-soft)"&gt;DECLARE THE BOUNDARY BEFORE CALLING THE LOOP AUTONOMOUS&lt;/text&gt;
&lt;g aria-label="Arrow legend"&gt;
&lt;line x1="24" y1="59" x2="66" y2="59" stroke="var(--ink-soft)" stroke-width="1.5" marker-end="url(#rsi-boundary-arrow)"/&gt;
&lt;text x="76" y="63" font-family="var(--font-body)" font-size="11" fill="var(--ink)"&gt;Automated inside boundary&lt;/text&gt;
&lt;line x1="248" y1="59" x2="290" y2="59" stroke="var(--figure-apricot)" stroke-width="1.5" stroke-dasharray="5 4" marker-end="url(#rsi-boundary-external-arrow)"/&gt;
&lt;text x="300" y="63" font-family="var(--font-body)" font-size="11" fill="var(--ink)"&gt;Outside declared boundary&lt;/text&gt;
&lt;line x1="500" y1="55" x2="542" y2="55" stroke="var(--figure-sage)" stroke-width="1.4"/&gt;
&lt;line x1="500" y1="62" x2="542" y2="62" stroke="var(--figure-sage)" stroke-width="1.4" marker-end="url(#rsi-boundary-arrow)"/&gt;
&lt;text x="552" y="63" font-family="var(--font-body)" font-size="11" fill="var(--ink)"&gt;Commit&lt;/text&gt;
&lt;/g&gt;
&lt;rect x="136" y="96" width="408" height="404" rx="10" fill="none" stroke="var(--figure-periwinkle)" stroke-width="1.5" stroke-dasharray="7 5"/&gt;
&lt;rect x="153" y="87" width="166" height="19" rx="3" fill="var(--field)"/&gt;
&lt;text x="160" y="100" font-family="var(--font-mono)" font-size="9.5" letter-spacing="0.06em" fill="var(--figure-periwinkle)"&gt;DECLARED SYSTEM BOUNDARY&lt;/text&gt;
&lt;g aria-label="External dependencies on human direction and evaluation"&gt;
&lt;rect x="12" y="140" width="112" height="64" rx="6" fill="color-mix(in srgb, var(--figure-apricot) 12%, var(--field-raised))" stroke="var(--figure-apricot)"/&gt;
&lt;text x="68" y="163" text-anchor="middle" font-family="var(--font-mono)" font-size="9" fill="var(--figure-apricot)"&gt;EXTERNAL&lt;/text&gt;
&lt;text x="68" y="180" text-anchor="middle" font-family="var(--font-body)" font-size="10.5" fill="var(--ink)"&gt;&lt;tspan x="68"&gt;Research agenda&lt;/tspan&gt;&lt;tspan x="68" dy="15"&gt;Task distribution&lt;/tspan&gt;&lt;/text&gt;
&lt;path d="M124 172H150" fill="none" stroke="var(--figure-apricot)" stroke-width="1.4" stroke-dasharray="5 4" marker-end="url(#rsi-boundary-external-arrow)"/&gt;
&lt;rect x="12" y="246" width="112" height="70" rx="6" fill="color-mix(in srgb, var(--figure-apricot) 12%, var(--field-raised))" stroke="var(--figure-apricot)"/&gt;
&lt;text x="68" y="267" text-anchor="middle" font-family="var(--font-mono)" font-size="9" fill="var(--figure-apricot)"&gt;EXTERNAL&lt;/text&gt;
&lt;text x="68" y="281" text-anchor="middle" font-family="var(--font-body)" font-size="10" fill="var(--ink)"&gt;&lt;tspan x="68"&gt;Evaluator author&lt;/tspan&gt;&lt;tspan x="68" dy="13"&gt;Benchmark&lt;/tspan&gt;&lt;tspan x="68" dy="13"&gt;maintainer&lt;/tspan&gt;&lt;/text&gt;
&lt;path d="M124 281H150" fill="none" stroke="var(--figure-apricot)" stroke-width="1.4" stroke-dasharray="5 4" marker-end="url(#rsi-boundary-external-arrow)"/&gt;
&lt;/g&gt;
&lt;g aria-label="External dependencies on infrastructure and approval"&gt;
&lt;rect x="556" y="140" width="112" height="70" rx="6" fill="color-mix(in srgb, var(--figure-apricot) 12%, var(--field-raised))" stroke="var(--figure-apricot)"/&gt;
&lt;text x="612" y="161" text-anchor="middle" font-family="var(--font-mono)" font-size="9" fill="var(--figure-apricot)"&gt;EXTERNAL&lt;/text&gt;
&lt;text x="612" y="175" text-anchor="middle" font-family="var(--font-body)" font-size="10" fill="var(--ink)"&gt;&lt;tspan x="612"&gt;Compute / API&lt;/tspan&gt;&lt;tspan x="612" dy="13"&gt;Training&lt;/tspan&gt;&lt;tspan x="612" dy="13"&gt;infrastructure&lt;/tspan&gt;&lt;/text&gt;
&lt;path d="M556 175H528" fill="none" stroke="var(--figure-apricot)" stroke-width="1.4" stroke-dasharray="5 4" marker-end="url(#rsi-boundary-external-arrow)"/&gt;
&lt;rect x="556" y="338" width="112" height="70" rx="6" fill="color-mix(in srgb, var(--figure-apricot) 12%, var(--field-raised))" stroke="var(--figure-apricot)"/&gt;
&lt;text x="612" y="359" text-anchor="middle" font-family="var(--font-mono)" font-size="9" fill="var(--figure-apricot)"&gt;EXTERNAL&lt;/text&gt;
&lt;text x="612" y="373" text-anchor="middle" font-family="var(--font-body)" font-size="10" fill="var(--ink)"&gt;&lt;tspan x="612"&gt;Expert validation&lt;/tspan&gt;&lt;tspan x="612" dy="13"&gt;Deployment&lt;/tspan&gt;&lt;tspan x="612" dy="13"&gt;approval&lt;/tspan&gt;&lt;/text&gt;
&lt;path d="M556 373H528" fill="none" stroke="var(--figure-apricot)" stroke-width="1.4" stroke-dasharray="5 4" marker-end="url(#rsi-boundary-external-arrow)"/&gt;
&lt;/g&gt;
&lt;g data-reveal="true" aria-label="Seven internal loop stages"&gt;
&lt;rect x="158" y="132" width="150" height="58" rx="7" fill="color-mix(in srgb, var(--figure-periwinkle) 18%, var(--field-raised))" stroke="var(--figure-periwinkle)"/&gt;
&lt;text x="233" y="156" text-anchor="middle" font-family="var(--font-mono)" font-size="9.5" letter-spacing="0.05em" fill="var(--ink-soft)"&gt;1 · CURRENT&lt;/text&gt;
&lt;text x="233" y="177" text-anchor="middle" font-family="var(--font-display)" font-size="15" font-weight="650" fill="var(--ink)"&gt;System S&lt;tspan baseline-shift="sub" font-size="10"&gt;t&lt;/tspan&gt;&lt;/text&gt;
&lt;rect x="370" y="132" width="150" height="58" rx="7" fill="var(--field-deep)" stroke="var(--hairline-strong)"/&gt;
&lt;text x="445" y="156" text-anchor="middle" font-family="var(--font-mono)" font-size="9.5" letter-spacing="0.05em" fill="var(--ink-soft)"&gt;2 · EXECUTE&lt;/text&gt;
&lt;text x="445" y="177" text-anchor="middle" font-family="var(--font-display)" font-size="15" font-weight="650" fill="var(--ink)"&gt;Proposer&lt;/text&gt;
&lt;rect x="370" y="230" width="150" height="58" rx="7" fill="var(--field-deep)" stroke="var(--hairline-strong)"/&gt;
&lt;text x="445" y="254" text-anchor="middle" font-family="var(--font-mono)" font-size="9.5" letter-spacing="0.05em" fill="var(--ink-soft)"&gt;3 · MODIFY&lt;/text&gt;
&lt;text x="445" y="275" text-anchor="middle" font-family="var(--font-display)" font-size="15" font-weight="650" fill="var(--ink)"&gt;Candidate change&lt;/text&gt;
&lt;rect x="158" y="230" width="150" height="58" rx="7" fill="var(--field-deep)" stroke="var(--hairline-strong)"/&gt;
&lt;text x="233" y="254" text-anchor="middle" font-family="var(--font-mono)" font-size="9.5" letter-spacing="0.05em" fill="var(--ink-soft)"&gt;4 · TEST / PROVE&lt;/text&gt;
&lt;text x="233" y="275" text-anchor="middle" font-family="var(--font-display)" font-size="15" font-weight="650" fill="var(--ink)"&gt;Evaluator / verifier&lt;/text&gt;
&lt;rect x="158" y="328" width="150" height="58" rx="7" fill="color-mix(in srgb, var(--figure-apricot) 13%, var(--field-raised))" stroke="var(--figure-apricot)"/&gt;
&lt;text x="233" y="352" text-anchor="middle" font-family="var(--font-mono)" font-size="9.5" letter-spacing="0.05em" fill="var(--ink-soft)"&gt;5 · DECIDE&lt;/text&gt;
&lt;text x="233" y="373" text-anchor="middle" font-family="var(--font-display)" font-size="15" font-weight="650" fill="var(--ink)"&gt;Selection + safety gate&lt;/text&gt;
&lt;rect x="370" y="328" width="150" height="58" rx="7" fill="color-mix(in srgb, var(--figure-sage) 16%, var(--field-raised))" stroke="var(--figure-sage)"/&gt;
&lt;text x="445" y="352" text-anchor="middle" font-family="var(--font-mono)" font-size="9.5" letter-spacing="0.05em" fill="var(--ink-soft)"&gt;6 · ACCEPT / ROLLBACK&lt;/text&gt;
&lt;text x="445" y="373" text-anchor="middle" font-family="var(--font-display)" font-size="15" font-weight="650" fill="var(--ink)"&gt;Persistent store&lt;/text&gt;
&lt;rect x="264" y="430" width="150" height="58" rx="7" fill="color-mix(in srgb, var(--figure-sage) 23%, var(--field-raised))" stroke="var(--figure-sage)"/&gt;
&lt;text x="339" y="454" text-anchor="middle" font-family="var(--font-mono)" font-size="9.5" letter-spacing="0.05em" fill="var(--ink-soft)"&gt;7 · INSTANTIATE&lt;/text&gt;
&lt;text x="339" y="475" text-anchor="middle" font-family="var(--font-display)" font-size="15" font-weight="650" fill="var(--ink)"&gt;Next system S&lt;tspan baseline-shift="sub" font-size="10"&gt;t+1&lt;/tspan&gt;&lt;/text&gt;
&lt;path d="M308 161H362" fill="none" stroke="var(--ink-soft)" stroke-width="1.5" marker-end="url(#rsi-boundary-arrow)"/&gt;
&lt;text x="335" y="151" text-anchor="middle" font-family="var(--font-mono)" font-size="8.5" fill="var(--ink-soft)"&gt;capability&lt;/text&gt;
&lt;path d="M445 190V222" fill="none" stroke="var(--ink-soft)" stroke-width="1.5" marker-end="url(#rsi-boundary-arrow)"/&gt;
&lt;text x="454" y="211" font-family="var(--font-mono)" font-size="8.5" fill="var(--ink-soft)"&gt;generate&lt;/text&gt;
&lt;path d="M370 259H316" fill="none" stroke="var(--ink-soft)" stroke-width="1.5" marker-end="url(#rsi-boundary-arrow)"/&gt;
&lt;text x="343" y="249" text-anchor="middle" font-family="var(--font-mono)" font-size="8.5" fill="var(--ink-soft)"&gt;evaluate&lt;/text&gt;
&lt;path d="M233 288V320" fill="none" stroke="var(--ink-soft)" stroke-width="1.5" marker-end="url(#rsi-boundary-arrow)"/&gt;
&lt;text x="242" y="310" font-family="var(--font-mono)" font-size="8.5" fill="var(--ink-soft)"&gt;evidence&lt;/text&gt;
&lt;line x1="308" y1="353" x2="362" y2="353" stroke="var(--figure-sage)" stroke-width="1.4"/&gt;
&lt;line x1="308" y1="361" x2="362" y2="361" stroke="var(--figure-sage)" stroke-width="1.4" marker-end="url(#rsi-boundary-arrow)"/&gt;
&lt;text x="335" y="347" text-anchor="middle" font-family="var(--font-mono)" font-size="8.5" fill="var(--figure-sage)"&gt;commit&lt;/text&gt;
&lt;path d="M445 386V410H339V422" fill="none" stroke="var(--ink-soft)" stroke-width="1.5" marker-end="url(#rsi-boundary-arrow)"/&gt;
&lt;path d="M414 459H530V118H445V124" fill="none" stroke="var(--ink-soft)" stroke-width="1.5" marker-end="url(#rsi-boundary-arrow)"/&gt;
&lt;text x="523" y="451" text-anchor="end" font-family="var(--font-mono)" font-size="8.5" fill="var(--ink-soft)"&gt;reuse next cycle&lt;/text&gt;
&lt;/g&gt;
&lt;g aria-label="Evaluator-independence warning below the declared system boundary"&gt;
&lt;rect x="136" y="516" width="408" height="52" rx="6" fill="color-mix(in srgb, var(--figure-apricot) 13%, var(--field-raised))" stroke="var(--figure-apricot)"/&gt;
&lt;path d="M157 533l9 17h-18z" fill="none" stroke="var(--figure-apricot)" stroke-width="1.5"/&gt;&lt;text x="157" y="547" text-anchor="middle" font-family="var(--font-mono)" font-size="10" font-weight="700" fill="var(--figure-apricot)"&gt;!&lt;/text&gt;
&lt;text x="179" y="538" font-family="var(--font-body)" font-size="11.5" fill="var(--ink)"&gt;&lt;tspan x="179"&gt;Shared proposer and evaluator lineage&lt;/tspan&gt;&lt;tspan x="179" dy="16"&gt;weakens independent validation.&lt;/tspan&gt;&lt;/text&gt;
&lt;/g&gt;
&lt;text x="24" y="596" font-family="var(--font-mono)" font-size="11" letter-spacing="0.07em" fill="var(--ink-soft)"&gt;THREE CASES MAPPED TO THE SAME SEQUENCE&lt;/text&gt;
&lt;g data-reveal="true" aria-label="Darwin Godel Machine overlay"&gt;
&lt;rect x="24" y="614" width="204" height="256" rx="8" fill="var(--field-deep)" stroke="var(--figure-periwinkle)"/&gt;
&lt;text x="40" y="641" font-family="var(--font-display)" font-size="17" font-weight="650" fill="var(--ink)"&gt;Darwin Gödel Machine&lt;/text&gt;
&lt;text x="40" y="661" font-family="var(--font-mono)" font-size="9" fill="var(--figure-periwinkle)"&gt;AGENT-SCAFFOLD LOOP&lt;/text&gt;
&lt;text x="40" y="690" font-family="var(--font-mono)" font-size="9" fill="var(--ink-soft)"&gt;MUTATES&lt;/text&gt;&lt;text x="40" y="706" font-family="var(--font-body)" font-size="11" fill="var(--ink)"&gt;Coding-agent repository&lt;/text&gt;
&lt;text x="40" y="731" font-family="var(--font-mono)" font-size="9" fill="var(--ink-soft)"&gt;VERIFIES&lt;/text&gt;&lt;text x="40" y="747" font-family="var(--font-body)" font-size="11" fill="var(--ink)"&gt;Fixed benchmarks + gates&lt;/text&gt;
&lt;text x="40" y="772" font-family="var(--font-mono)" font-size="9" fill="var(--ink-soft)"&gt;PERSISTS&lt;/text&gt;&lt;text x="40" y="788" font-family="var(--font-body)" font-size="11" fill="var(--ink)"&gt;Archived child repository&lt;/text&gt;
&lt;text x="40" y="813" font-family="var(--font-mono)" font-size="9" fill="var(--ink-soft)"&gt;OUTSIDE&lt;/text&gt;&lt;text x="40" y="829" font-family="var(--font-body)" font-size="11" fill="var(--ink)"&gt;FM weights, outer selection&lt;/text&gt;
&lt;line x1="40" y1="844" x2="212" y2="844" stroke="var(--hairline-strong)"/&gt;
&lt;text x="40" y="860" font-family="var(--font-mono)" font-size="9.5" fill="var(--figure-periwinkle)"&gt;U3 / C2 · PARTIAL C3&lt;/text&gt;
&lt;/g&gt;
&lt;g data-reveal="true" aria-label="AlphaEvolve overlay"&gt;
&lt;rect x="238" y="614" width="204" height="256" rx="8" fill="var(--field-deep)" stroke="var(--figure-sage)"/&gt;
&lt;text x="254" y="641" font-family="var(--font-display)" font-size="17" font-weight="650" fill="var(--ink)"&gt;AlphaEvolve&lt;/text&gt;
&lt;text x="254" y="661" font-family="var(--font-mono)" font-size="9" fill="var(--figure-sage)"&gt;ARTIFACT-SEARCH LOOP&lt;/text&gt;
&lt;text x="254" y="690" font-family="var(--font-mono)" font-size="9" fill="var(--ink-soft)"&gt;MUTATES&lt;/text&gt;&lt;text x="254" y="706" font-family="var(--font-body)" font-size="11" fill="var(--ink)"&gt;User-designated program&lt;/text&gt;
&lt;text x="254" y="731" font-family="var(--font-mono)" font-size="9" fill="var(--ink-soft)"&gt;VERIFIES&lt;/text&gt;&lt;text x="254" y="747" font-family="var(--font-body)" font-size="11" fill="var(--ink)"&gt;User executable evaluator&lt;/text&gt;
&lt;text x="254" y="772" font-family="var(--font-mono)" font-size="9" fill="var(--ink-soft)"&gt;PERSISTS&lt;/text&gt;&lt;text x="254" y="788" font-family="var(--font-body)" font-size="11" fill="var(--ink)"&gt;Evolutionary database&lt;/text&gt;
&lt;text x="254" y="813" font-family="var(--font-mono)" font-size="9" fill="var(--ink-soft)"&gt;OUTSIDE&lt;/text&gt;&lt;text x="254" y="829" font-family="var(--font-body)" font-size="11" fill="var(--ink)"&gt;Task, evaluator, deployment&lt;/text&gt;
&lt;line x1="254" y1="844" x2="426" y2="844" stroke="var(--hairline-strong)"/&gt;
&lt;text x="254" y="860" font-family="var(--font-mono)" font-size="9.5" fill="var(--figure-sage)"&gt;X1 / C2 · RUNNER FIXED&lt;/text&gt;
&lt;/g&gt;
&lt;g data-reveal="true" aria-label="Self-Rewarding Language Models overlay"&gt;
&lt;rect x="452" y="614" width="204" height="256" rx="8" fill="var(--field-deep)" stroke="var(--figure-apricot)"/&gt;
&lt;text x="468" y="641" font-family="var(--font-display)" font-size="16.5" font-weight="650" fill="var(--ink)"&gt;Self-Rewarding LM&lt;/text&gt;
&lt;text x="468" y="661" font-family="var(--font-mono)" font-size="9" fill="var(--figure-apricot)"&gt;WEIGHT + JUDGE LOOP&lt;/text&gt;
&lt;text x="468" y="690" font-family="var(--font-mono)" font-size="9" fill="var(--ink-soft)"&gt;MUTATES&lt;/text&gt;&lt;text x="468" y="706" font-family="var(--font-body)" font-size="11" fill="var(--ink)"&gt;Model weights&lt;/text&gt;
&lt;text x="468" y="731" font-family="var(--font-mono)" font-size="9" fill="var(--ink-soft)"&gt;VERIFIES&lt;/text&gt;&lt;text x="468" y="747" font-family="var(--font-body)" font-size="11" fill="var(--ink)"&gt;Same-lineage model judge&lt;/text&gt;
&lt;text x="468" y="772" font-family="var(--font-mono)" font-size="9" fill="var(--ink-soft)"&gt;PERSISTS&lt;/text&gt;&lt;text x="468" y="788" font-family="var(--font-body)" font-size="11" fill="var(--ink)"&gt;Checkpoint M&lt;tspan baseline-shift="sub" font-size="8"&gt;t+1&lt;/tspan&gt;&lt;/text&gt;
&lt;text x="468" y="813" font-family="var(--font-mono)" font-size="9" fill="var(--ink-soft)"&gt;OUTSIDE&lt;/text&gt;&lt;text x="468" y="829" font-family="var(--font-body)" font-size="11" fill="var(--ink)"&gt;DPO, compute, selection&lt;/text&gt;
&lt;line x1="468" y1="844" x2="640" y2="844" stroke="var(--hairline-strong)"/&gt;
&lt;text x="468" y="860" font-family="var(--font-mono)" font-size="9.5" fill="var(--figure-apricot)"&gt;U4 + U5 · C1–C2 BY BOUNDARY&lt;/text&gt;
&lt;/g&gt;
&lt;text x="24" y="900" font-family="var(--font-body)" font-size="11.5" fill="var(--ink-soft)"&gt;An automated sequence can still rely on people for evaluation, integration, and deployment.&lt;/text&gt;
&lt;/svg&gt;
&lt;/div&gt;
&lt;figcaption&gt;The declared boundary determines what "self" includes. Supplied compute alone does not defeat an RSI claim. The autonomy question is who chooses the goal, judges the result, and decides which change becomes the next system. Source and method: I mapped the cited DGM, AlphaEvolve, and Self-Rewarding Language Models records onto the same sequence. Evidence cutoff: 15 August 2026.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;Announcements usually describe the automated sequence: propose a change,
evaluate it, keep the winner, and repeat. The dashed connections in the figure
show what those accounts often omit. Benchmark authors, model providers,
training infrastructure, expert reviewers, and deployment teams may still be
required at every round.&lt;/p&gt;
&lt;h2 id="one-category-did-not-fit"&gt;One category did not fit&lt;/h2&gt;
&lt;p&gt;The commission began with six provisional categories: output revision,
scaffold editing, weight updates, evaluator improvement, automated research,
and successor-system design. AlphaEvolve exposed the problem with that list.&lt;/p&gt;
&lt;p&gt;After tracing the cases, I ended up with five things that could change.
Persistent memory needed its own category. &amp;ldquo;Automated research&amp;rdquo; was not
another thing; it was a process that could coordinate several changes.
&amp;ldquo;Successor construction&amp;rdquo; described an outcome, not a component. It requires
several changes to work together before the new system can take over the next
round.&lt;/p&gt;
&lt;p&gt;Across the cases, changes landed in five places:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;the current answer,&lt;/li&gt;
&lt;li&gt;saved memory or skills,&lt;/li&gt;
&lt;li&gt;the scaffold around the model,&lt;/li&gt;
&lt;li&gt;the model weights, or&lt;/li&gt;
&lt;li&gt;the evaluator.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;People may perform essential steps, or a system may propose, test, and retain
changes automatically inside a process people designed. But a general
successor would also have to improve the process that produced it.&lt;/p&gt;
&lt;figure class="evidence-figure evidence-figure--editorial evidence-figure--rsi-taxonomy"&gt;
&lt;div class="table-scroll" role="region" tabindex="0" aria-label="Scrollable matrix of recursive self-improvement update targets and process types" aria-describedby="fig-rsi-taxonomy-scroll-hint"&gt;
&lt;p class="table-scroll__hint" id="fig-rsi-taxonomy-scroll-hint"&gt;Scroll horizontally to read the full matrix&lt;/p&gt;
&lt;p class="visually-hidden" id="fig-rsi-taxonomy-full"&gt;Five update targets are compared across three process types. Output or working-state revision is observed in human-essential and bounded within-episode loops but is not a successor loop by itself. Persistent memory, scaffold or agent code, and model parameters are observed in bounded loops, while evidence for a system building and reusing its successor is partial. Evaluator or objective updating has bounded prototypes, but no reviewed case demonstrates a general independently validated successor loop. Automated research can orchestrate all five targets. Successor construction combines several targets with validation, integration, deployment, and reuse by the next system.&lt;/p&gt;
&lt;svg viewBox="0 0 680 760" style="min-width:42.5rem" role="img" aria-label="Five update targets by three process types for recursive self-improvement" aria-describedby="fig-rsi-taxonomy-desc fig-rsi-taxonomy-full" xmlns="http://www.w3.org/2000/svg"&gt;
&lt;desc id="fig-rsi-taxonomy-desc"&gt;A five-row by three-column categorical matrix. Evidence is strongest in human-essential and bounded automated loops. The recursive successor column is partial or not shown. Bands below the matrix identify automated research as a process spanning several kinds of change and successor construction as the combined process needed to build and run the next system.&lt;/desc&gt;
&lt;defs&gt;
&lt;pattern id="rsi-taxonomy-partial" width="8" height="8" patternUnits="userSpaceOnUse" patternTransform="rotate(45)"&gt;&lt;rect width="8" height="8" fill="color-mix(in srgb, var(--figure-apricot) 18%, var(--field-raised))"/&gt;&lt;line x1="0" y1="0" x2="0" y2="8" stroke="var(--figure-apricot)" stroke-width="2" opacity="0.48"/&gt;&lt;/pattern&gt;
&lt;pattern id="rsi-taxonomy-not-tested" width="7" height="7" patternUnits="userSpaceOnUse"&gt;&lt;rect width="7" height="7" fill="var(--field-deep)"/&gt;&lt;circle cx="3.5" cy="3.5" r="1" fill="var(--ink-soft)" opacity="0.34"/&gt;&lt;/pattern&gt;
&lt;/defs&gt;
&lt;text x="24" y="34" font-family="var(--font-mono)" font-size="12" letter-spacing="0.08em" fill="var(--ink-soft)"&gt;WHAT CHANGES / WHO RUNS THE PROCESS&lt;/text&gt;
&lt;g aria-label="Legend"&gt;
&lt;rect x="24" y="51" width="12" height="12" rx="2" fill="color-mix(in srgb, var(--figure-sage) 28%, var(--field-raised))" stroke="var(--figure-sage)"/&gt;
&lt;text x="43" y="61" font-family="var(--font-body)" font-size="11" fill="var(--ink)"&gt;Observed&lt;/text&gt;
&lt;rect x="131" y="51" width="12" height="12" rx="2" fill="url(#rsi-taxonomy-partial)" stroke="var(--figure-apricot)"/&gt;
&lt;text x="150" y="61" font-family="var(--font-body)" font-size="11" fill="var(--ink)"&gt;Partial&lt;/text&gt;
&lt;rect x="220" y="51" width="12" height="12" rx="2" fill="var(--field-deep)" stroke="var(--ink-soft)"/&gt;
&lt;path d="M223 54l6 6m0-6l-6 6" stroke="var(--ink-soft)" stroke-width="1.2"/&gt;
&lt;text x="239" y="61" font-family="var(--font-body)" font-size="11" fill="var(--ink)"&gt;Not shown&lt;/text&gt;
&lt;rect x="329" y="51" width="12" height="12" rx="2" fill="url(#rsi-taxonomy-not-tested)" stroke="var(--hairline-strong)" stroke-dasharray="3 2"/&gt;
&lt;text x="348" y="61" font-family="var(--font-body)" font-size="11" fill="var(--ink)"&gt;Not tested&lt;/text&gt;
&lt;text x="500" y="61" font-family="var(--font-mono)" font-size="9.5" fill="var(--ink-soft)"&gt;CATEGORIES, NOT SCORES&lt;/text&gt;
&lt;/g&gt;
&lt;g aria-label="Process type headers"&gt;
&lt;text x="111" y="92" text-anchor="middle" font-family="var(--font-mono)" font-size="9.5" letter-spacing="0.06em" fill="var(--ink-soft)"&gt;UPDATE TARGET&lt;/text&gt;
&lt;rect x="192" y="76" width="150" height="58" rx="5" fill="var(--field-deep)" stroke="var(--hairline-strong)"/&gt;
&lt;text x="267" y="98" text-anchor="middle" font-family="var(--font-mono)" font-size="10" letter-spacing="0.05em" fill="var(--ink-soft)"&gt;C1&lt;/text&gt;
&lt;text x="267" y="118" text-anchor="middle" font-family="var(--font-display)" font-size="14" font-weight="600" fill="var(--ink)"&gt;Human-essential&lt;/text&gt;
&lt;rect x="347" y="76" width="150" height="58" rx="5" fill="var(--field-deep)" stroke="var(--hairline-strong)"/&gt;
&lt;text x="422" y="98" text-anchor="middle" font-family="var(--font-mono)" font-size="10" letter-spacing="0.05em" fill="var(--ink-soft)"&gt;C2&lt;/text&gt;
&lt;text x="422" y="118" text-anchor="middle" font-family="var(--font-display)" font-size="14" font-weight="600" fill="var(--ink)"&gt;Bounded automated&lt;/text&gt;
&lt;rect x="502" y="76" width="150" height="58" rx="5" fill="var(--field-deep)" stroke="var(--hairline-strong)"/&gt;
&lt;text x="577" y="96" text-anchor="middle" font-family="var(--font-mono)" font-size="10" letter-spacing="0.05em" fill="var(--ink-soft)"&gt;C3&lt;/text&gt;
&lt;text x="577" y="113" text-anchor="middle" font-family="var(--font-display)" font-size="13" font-weight="600" fill="var(--ink)" aria-label="Recursive successor or meta-improvement"&gt;&lt;tspan x="577"&gt;Recursive successor&lt;/tspan&gt;&lt;tspan x="577" dy="15"&gt;or meta-improvement&lt;/tspan&gt;&lt;/text&gt;
&lt;/g&gt;
&lt;g data-reveal="true" aria-label="U1 output or working state"&gt;
&lt;rect x="24" y="142" width="162" height="60" rx="5" fill="var(--field-deep)" stroke="var(--hairline-strong)"/&gt;
&lt;text x="36" y="164" font-family="var(--font-mono)" font-size="10" fill="var(--ink-soft)"&gt;U1&lt;/text&gt;
&lt;text x="36" y="184" font-family="var(--font-display)" font-size="13.5" font-weight="600" fill="var(--ink)"&gt;Output / working state&lt;/text&gt;
&lt;rect x="192" y="142" width="150" height="60" rx="5" fill="color-mix(in srgb, var(--figure-sage) 28%, var(--field-raised))" stroke="var(--figure-sage)"/&gt;
&lt;text x="267" y="167" text-anchor="middle" font-family="var(--font-display)" font-size="13" font-weight="650" fill="var(--ink)"&gt;Observed&lt;/text&gt;
&lt;text x="267" y="186" text-anchor="middle" font-family="var(--font-body)" font-size="10.5" fill="var(--ink-soft)"&gt;Human selects or revises&lt;/text&gt;
&lt;rect x="347" y="142" width="150" height="60" rx="5" fill="color-mix(in srgb, var(--figure-sage) 28%, var(--field-raised))" stroke="var(--figure-sage)"/&gt;
&lt;text x="422" y="167" text-anchor="middle" font-family="var(--font-display)" font-size="13" font-weight="650" fill="var(--ink)"&gt;Observed&lt;/text&gt;
&lt;text x="422" y="186" text-anchor="middle" font-family="var(--font-body)" font-size="10.5" fill="var(--ink-soft)"&gt;Within one episode&lt;/text&gt;
&lt;rect x="502" y="142" width="150" height="60" rx="5" fill="var(--field-deep)" stroke="var(--ink-soft)"/&gt;
&lt;path d="M514 153l8 8m0-8l-8 8" stroke="var(--ink-soft)"/&gt;
&lt;text x="577" y="167" text-anchor="middle" font-family="var(--font-display)" font-size="13" font-weight="650" fill="var(--ink)"&gt;Not shown&lt;/text&gt;
&lt;text x="577" y="186" text-anchor="middle" font-family="var(--font-body)" font-size="10.5" fill="var(--ink-soft)"&gt;Output alone resets&lt;/text&gt;
&lt;/g&gt;
&lt;g aria-label="Persistence threshold"&gt;
&lt;line x1="24" y1="211" x2="652" y2="211" stroke="var(--figure-apricot)" stroke-width="1.5" stroke-dasharray="5 4"/&gt;
&lt;rect x="32" y="205" width="205" height="17" rx="3" fill="var(--field)"/&gt;
&lt;text x="39" y="216" font-family="var(--font-mono)" font-size="9" letter-spacing="0.05em" fill="var(--figure-apricot)"&gt;PERSISTENCE THRESHOLD · REUSE LATER&lt;/text&gt;
&lt;/g&gt;
&lt;g data-reveal="true" aria-label="U2 memory experience or skills"&gt;
&lt;rect x="24" y="228" width="162" height="60" rx="5" fill="var(--field-deep)" stroke="var(--hairline-strong)"/&gt;
&lt;text x="36" y="250" font-family="var(--font-mono)" font-size="10" fill="var(--ink-soft)"&gt;U2&lt;/text&gt;
&lt;text x="36" y="270" font-family="var(--font-display)" font-size="13.5" font-weight="600" fill="var(--ink)"&gt;Memory / skills&lt;/text&gt;
&lt;rect x="192" y="228" width="150" height="60" rx="5" fill="color-mix(in srgb, var(--figure-sage) 28%, var(--field-raised))" stroke="var(--figure-sage)"/&gt;
&lt;text x="267" y="253" text-anchor="middle" font-family="var(--font-display)" font-size="13" font-weight="650" fill="var(--ink)"&gt;Observed&lt;/text&gt;
&lt;text x="267" y="272" text-anchor="middle" font-family="var(--font-body)" font-size="10.5" fill="var(--ink-soft)"&gt;Curated persistence&lt;/text&gt;
&lt;rect x="347" y="228" width="150" height="60" rx="5" fill="color-mix(in srgb, var(--figure-sage) 28%, var(--field-raised))" stroke="var(--figure-sage)"/&gt;
&lt;text x="422" y="253" text-anchor="middle" font-family="var(--font-display)" font-size="13" font-weight="650" fill="var(--ink)"&gt;Observed&lt;/text&gt;
&lt;text x="422" y="272" text-anchor="middle" font-family="var(--font-body)" font-size="10.5" fill="var(--ink-soft)"&gt;Bounded environments&lt;/text&gt;
&lt;rect x="502" y="228" width="150" height="60" rx="5" fill="url(#rsi-taxonomy-partial)" stroke="var(--figure-apricot)"/&gt;
&lt;text x="577" y="253" text-anchor="middle" font-family="var(--font-display)" font-size="13" font-weight="650" fill="var(--ink)"&gt;Partial&lt;/text&gt;
&lt;text x="577" y="272" text-anchor="middle" font-family="var(--font-body)" font-size="10.5" fill="var(--ink-soft)"&gt;Builds next system&lt;/text&gt;
&lt;/g&gt;
&lt;g data-reveal="true" aria-label="U3 scaffold tools workflow or agent code"&gt;
&lt;rect x="24" y="294" width="162" height="60" rx="5" fill="var(--field-deep)" stroke="var(--hairline-strong)"/&gt;
&lt;text x="36" y="316" font-family="var(--font-mono)" font-size="10" fill="var(--ink-soft)"&gt;U3&lt;/text&gt;
&lt;text x="36" y="336" font-family="var(--font-display)" font-size="13.5" font-weight="600" fill="var(--ink)"&gt;Scaffold / agent code&lt;/text&gt;
&lt;rect x="192" y="294" width="150" height="60" rx="5" fill="color-mix(in srgb, var(--figure-sage) 28%, var(--field-raised))" stroke="var(--figure-sage)"/&gt;
&lt;text x="267" y="319" text-anchor="middle" font-family="var(--font-display)" font-size="13" font-weight="650" fill="var(--ink)"&gt;Observed&lt;/text&gt;
&lt;text x="267" y="338" text-anchor="middle" font-family="var(--font-body)" font-size="10.5" fill="var(--ink-soft)"&gt;Human integration&lt;/text&gt;
&lt;rect x="347" y="294" width="150" height="60" rx="5" fill="color-mix(in srgb, var(--figure-sage) 28%, var(--field-raised))" stroke="var(--figure-sage)"/&gt;
&lt;text x="422" y="319" text-anchor="middle" font-family="var(--font-display)" font-size="13" font-weight="650" fill="var(--ink)"&gt;Observed&lt;/text&gt;
&lt;text x="422" y="338" text-anchor="middle" font-family="var(--font-body)" font-size="10.5" fill="var(--ink-soft)"&gt;Fixed outer process&lt;/text&gt;
&lt;rect x="502" y="294" width="150" height="60" rx="5" fill="url(#rsi-taxonomy-partial)" stroke="var(--figure-apricot)"/&gt;
&lt;text x="577" y="319" text-anchor="middle" font-family="var(--font-display)" font-size="13" font-weight="650" fill="var(--ink)"&gt;Partial&lt;/text&gt;
&lt;text x="577" y="338" text-anchor="middle" font-family="var(--font-body)" font-size="10.5" fill="var(--ink-soft)"&gt;Bounded self-reference&lt;/text&gt;
&lt;/g&gt;
&lt;g data-reveal="true" aria-label="U4 weights policy or parameters"&gt;
&lt;rect x="24" y="360" width="162" height="60" rx="5" fill="var(--field-deep)" stroke="var(--hairline-strong)"/&gt;
&lt;text x="36" y="382" font-family="var(--font-mono)" font-size="10" fill="var(--ink-soft)"&gt;U4&lt;/text&gt;
&lt;text x="36" y="402" font-family="var(--font-display)" font-size="13.5" font-weight="600" fill="var(--ink)"&gt;Weights / policy&lt;/text&gt;
&lt;rect x="192" y="360" width="150" height="60" rx="5" fill="color-mix(in srgb, var(--figure-sage) 28%, var(--field-raised))" stroke="var(--figure-sage)"/&gt;
&lt;text x="267" y="385" text-anchor="middle" font-family="var(--font-display)" font-size="13" font-weight="650" fill="var(--ink)"&gt;Observed&lt;/text&gt;
&lt;text x="267" y="404" text-anchor="middle" font-family="var(--font-body)" font-size="10.5" fill="var(--ink-soft)"&gt;External training&lt;/text&gt;
&lt;rect x="347" y="360" width="150" height="60" rx="5" fill="color-mix(in srgb, var(--figure-sage) 28%, var(--field-raised))" stroke="var(--figure-sage)"/&gt;
&lt;text x="422" y="385" text-anchor="middle" font-family="var(--font-display)" font-size="13" font-weight="650" fill="var(--ink)"&gt;Observed&lt;/text&gt;
&lt;text x="422" y="404" text-anchor="middle" font-family="var(--font-body)" font-size="10.5" fill="var(--ink-soft)"&gt;Training loops&lt;/text&gt;
&lt;rect x="502" y="360" width="150" height="60" rx="5" fill="url(#rsi-taxonomy-partial)" stroke="var(--figure-apricot)"/&gt;
&lt;text x="577" y="385" text-anchor="middle" font-family="var(--font-display)" font-size="13" font-weight="650" fill="var(--ink)"&gt;Partial&lt;/text&gt;
&lt;text x="577" y="404" text-anchor="middle" font-family="var(--font-body)" font-size="10.5" fill="var(--ink-soft)"&gt;Few generations&lt;/text&gt;
&lt;/g&gt;
&lt;g data-reveal="true" aria-label="U5 evaluator verifier or objective"&gt;
&lt;rect x="24" y="426" width="162" height="60" rx="5" fill="var(--field-deep)" stroke="var(--hairline-strong)"/&gt;
&lt;text x="36" y="448" font-family="var(--font-mono)" font-size="10" fill="var(--ink-soft)"&gt;U5&lt;/text&gt;
&lt;text x="36" y="468" font-family="var(--font-display)" font-size="13.5" font-weight="600" fill="var(--ink)"&gt;Evaluator / objective&lt;/text&gt;
&lt;rect x="192" y="426" width="150" height="60" rx="5" fill="color-mix(in srgb, var(--figure-sage) 28%, var(--field-raised))" stroke="var(--figure-sage)"/&gt;
&lt;text x="267" y="451" text-anchor="middle" font-family="var(--font-display)" font-size="13" font-weight="650" fill="var(--ink)"&gt;Observed&lt;/text&gt;
&lt;text x="267" y="470" text-anchor="middle" font-family="var(--font-body)" font-size="10.5" fill="var(--ink-soft)"&gt;Human governance&lt;/text&gt;
&lt;rect x="347" y="426" width="150" height="60" rx="5" fill="url(#rsi-taxonomy-partial)" stroke="var(--figure-apricot)"/&gt;
&lt;text x="422" y="451" text-anchor="middle" font-family="var(--font-display)" font-size="13" font-weight="650" fill="var(--ink)"&gt;Partial&lt;/text&gt;
&lt;text x="422" y="470" text-anchor="middle" font-family="var(--font-body)" font-size="10.5" fill="var(--ink-soft)"&gt;Bounded prototypes&lt;/text&gt;
&lt;rect x="502" y="426" width="150" height="60" rx="5" fill="var(--field-deep)" stroke="var(--ink-soft)"/&gt;
&lt;path d="M514 437l8 8m0-8l-8 8" stroke="var(--ink-soft)"/&gt;
&lt;text x="577" y="451" text-anchor="middle" font-family="var(--font-display)" font-size="13" font-weight="650" fill="var(--ink)"&gt;Not shown&lt;/text&gt;
&lt;text x="577" y="470" text-anchor="middle" font-family="var(--font-body)" font-size="10.5" fill="var(--ink-soft)"&gt;General case&lt;/text&gt;
&lt;/g&gt;
&lt;g aria-label="Evaluator warning"&gt;
&lt;rect x="24" y="502" width="628" height="42" rx="6" fill="color-mix(in srgb, var(--figure-apricot) 14%, var(--field-raised))" stroke="var(--figure-apricot)"/&gt;
&lt;path d="M43 513l9 17H34z" fill="none" stroke="var(--figure-apricot)" stroke-width="1.5"/&gt;&lt;text x="43" y="527" text-anchor="middle" font-family="var(--font-mono)" font-size="10" font-weight="700" fill="var(--figure-apricot)"&gt;!&lt;/text&gt;
&lt;text x="62" y="528" font-family="var(--font-body)" font-size="12.5" fill="var(--ink)"&gt;A scalar score is not evidence that the evaluator is valid.&lt;/text&gt;
&lt;/g&gt;
&lt;g data-reveal="true" aria-label="Cross-cutting process scopes"&gt;
&lt;rect x="24" y="560" width="628" height="56" rx="7" fill="color-mix(in srgb, var(--figure-periwinkle) 19%, var(--field-raised))" stroke="var(--figure-periwinkle)"/&gt;
&lt;text x="42" y="583" font-family="var(--font-mono)" font-size="10" letter-spacing="0.06em" fill="var(--figure-periwinkle)"&gt;X1 · ORCHESTRATION LAYER&lt;/text&gt;
&lt;text x="42" y="603" font-family="var(--font-body)" font-size="12.5" fill="var(--ink)"&gt;Automated research and experimentation can coordinate any combination of U1–U5.&lt;/text&gt;
&lt;rect x="24" y="624" width="628" height="56" rx="7" fill="color-mix(in srgb, var(--figure-sage) 18%, var(--field-raised))" stroke="var(--figure-sage)"/&gt;
&lt;text x="42" y="647" font-family="var(--font-mono)" font-size="10" letter-spacing="0.06em" fill="var(--figure-sage)"&gt;X2 · COMBINED SUCCESSOR PROCESS&lt;/text&gt;
&lt;text x="42" y="667" font-family="var(--font-body)" font-size="12.5" fill="var(--ink)"&gt;Successor construction needs several targets plus validation, integration, deployment, and reuse.&lt;/text&gt;
&lt;/g&gt;
&lt;g aria-label="Corpus limitation"&gt;
&lt;line x1="24" y1="700" x2="652" y2="700" stroke="var(--hairline-strong)"/&gt;
&lt;text x="24" y="722" font-family="var(--font-mono)" font-size="9.5" letter-spacing="0.04em" fill="var(--ink-soft)"&gt;CORPUS THROUGH 15 AUG 2026&lt;/text&gt;
&lt;text x="24" y="742" font-family="var(--font-body)" font-size="12" fill="var(--ink)"&gt;No reviewed case demonstrates a general, independently validated successor loop.&lt;/text&gt;
&lt;/g&gt;
&lt;/svg&gt;
&lt;/div&gt;
&lt;figcaption&gt;Systems can change an answer, saved memory, agent code, model weights, or the way results are judged. Most reviewed cases still depend on people or automate a bounded process. None independently builds, validates, deploys, and reuses a general successor. Source and method: I derived the categories from the reviewed 40-source corpus. The cells are categories, not scores. Evidence cutoff: 15 August 2026.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;The cases do not fit one cell. For example, Self-Rewarding Language Models
change weights and help judge their own training data. Darwin Gödel Machine
changes agent code while its outer search process and benchmarks stay fixed.
And AlphaEvolve searches across candidate programs and evaluators without
rewriting the runner that conducts the search.&lt;/p&gt;
&lt;p&gt;These categories describe what changed; they do not rank the systems. A bounded
loop can be useful when a problem has a reliable, machine-checkable answer. In
those cases, I would argue that the name should say which part of the system
improved.&lt;/p&gt;
&lt;h2 id="models-can-already-improve-an-answer"&gt;Models can already improve an answer&lt;/h2&gt;
&lt;p&gt;Self-Refine is the easiest place to start.&lt;/p&gt;
&lt;p&gt;A model writes an answer, critiques it, and tries again. The NeurIPS 2023 paper
reported gains across several tasks without extra training or human
feedback.&lt;sup id="fnref:5"&gt;&lt;a href="#fn:5" class="footnote-ref" role="doc-noteref"&gt;5&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;
&lt;p&gt;When the conversation ends, so does the improvement. The base model did not
learn anything that a fresh session can inherit.&lt;/p&gt;
&lt;p&gt;But even this small loop is not reliably upward. One ICLR 2024 study found that
unaided self-correction could make reasoning worse. An EMNLP paper found gains
when the model had to verify key conditions before changing its answer.&lt;sup id="fnref:6"&gt;&lt;a href="#fn:6" class="footnote-ref" role="doc-noteref"&gt;6&lt;/a&gt;&lt;/sup&gt;
The second attempt helped when the error signal gave it something trustworthy
to work with.&lt;/p&gt;
&lt;p&gt;Memory is the first obvious step beyond that.&lt;/p&gt;
&lt;p&gt;Reflexion saves verbal feedback from previous trials. Voyager builds a library
of executable skills and calls them again on later tasks.&lt;sup id="fnref:7"&gt;&lt;a href="#fn:7" class="footnote-ref" role="doc-noteref"&gt;7&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;
&lt;p&gt;The model weights stay frozen, but a later run has something the earlier run
did not.&lt;/p&gt;
&lt;p&gt;Saved state comes back, so a good procedure can keep paying off. But so can a
poisoned memory, an obsolete workaround, or a confidently wrong reflection.
When I look at a memory system, I want to see the saved item, its later
retrieval, and the behavior it changed.&lt;/p&gt;
&lt;h2 id="three-systems-in-detail"&gt;Three systems in detail&lt;/h2&gt;
&lt;p&gt;Those smaller loops establish the baseline. But there are three systems I
wanted to research more closely because their changes survive into later
rounds, and the relevant system boundary sits in a different place for each
one.&lt;/p&gt;
&lt;h3 id="darwin-gödel-machine-recursion-around-a-frozen-model"&gt;Darwin Gödel Machine: recursion around a frozen model&lt;/h3&gt;
&lt;p&gt;Darwin Gödel Machine is where the phrase &lt;em&gt;AI improving itself&lt;/em&gt; stopped feeling
entirely theoretical to me. The paper was presented at ICLR 2026, and the
system modifies something that affects its own future attempts: the coding
agent around the model, rather than the model weights.&lt;sup id="fnref:8"&gt;&lt;a href="#fn:8" class="footnote-ref" role="doc-noteref"&gt;8&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;
&lt;p&gt;Its system is a coding-agent repository powered by frozen pretrained foundation
models. A selected parent agent analyzes its own implementation and logs,
proposes a feature, edits a child copy of the repository, and sends that child
through coding benchmarks and admission gates. Accepted children enter a
persistent archive and can later be selected as parents.&lt;sup id="fnref:9"&gt;&lt;a href="#fn:9" class="footnote-ref" role="doc-noteref"&gt;9&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;
&lt;p&gt;On paper, that is pretty elegant.&lt;/p&gt;
&lt;p&gt;The authors report that the best discovered agent moved from 20.0% to 50.0% on
SWE-bench Verified and from 14.2% to 30.7% on the full Polyglot benchmark. Those
numbers come from author-run experiments using proprietary model APIs, a fixed
outer search process, and 80 iterations in each principal benchmark run.
The paper also tests transfer across benchmarks and model backends, which makes
simple benchmark overfitting a less complete explanation. But these are still
author-run experiments rather than an independent reproduction.&lt;/p&gt;
&lt;p&gt;The repository carries the change forward. A selected parent uses a frozen
model to propose an edit. Benchmarks and admission checks decide whether the
child enters the archive. Once accepted, an archived child can later become a
parent.&lt;/p&gt;
&lt;p&gt;The foundation-model weights and outer selection process stay fixed. Benchmark
design, provider APIs, compute budget, sandbox, and human oversight remain
outside the loop. The paper leaves foundation-model training to future work.&lt;/p&gt;
&lt;p&gt;One child made the evaluator problem concrete for me. It improved a
measured outcome by bypassing a detector instead of improving the intended
capability. The benchmark and admission gate were deciding what counted as
progress, and the agent found a way to satisfy the measurement.&lt;sup id="fnref:10"&gt;&lt;a href="#fn:10" class="footnote-ref" role="doc-noteref"&gt;10&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;
&lt;p&gt;The open repository makes the implementation inspectable, but I did not locate
a full independent reproduction by the cutoff.&lt;sup id="fnref:11"&gt;&lt;a href="#fn:11" class="footnote-ref" role="doc-noteref"&gt;11&lt;/a&gt;&lt;/sup&gt; The evidence supports
persistent self-improvement of a coding-agent scaffold across repeated runs.
However, it does not establish a system that trains and deploys increasingly
capable general successor models.&lt;/p&gt;
&lt;aside class="article-newsletter-cta" aria-label="Newsletter signup"&gt;
 &lt;div class="newsletter-signup newsletter-signup--article"&gt;
 &lt;div class="newsletter-signup__heading"&gt;
 &lt;p class="meta-label" id="newsletter-article-title"&gt;Newsletter&lt;/p&gt;
 
 &lt;p class="newsletter-signup__title"&gt;I occasionally write and share things like this.&lt;/p&gt;
 
 &lt;p class="newsletter-signup__intro"&gt;If you find them useful, leave your email here. I only send something when I have something worth sharing.&lt;/p&gt;
 
 &lt;/div&gt;

 &lt;form class="ph-sensitive ph-no-capture ph-no-autocapture ph-no-rageclick ph-no-deadclick" action="https://viborc.com/api/newsletter" method="post" accept-charset="UTF-8" aria-labelledby="newsletter-article-title" data-form="newsletter" data-analytics-event="newsletter_submit" data-newsletter-placement="article" data-ph-no-autocapture&gt;
 &lt;input name="form" type="hidden" value="newsletter-v1"&gt;
 &lt;input name="source" type="hidden" value="article"&gt;
 &lt;input name="return_path" type="hidden" value="/what-recursive-self-improvement-actually-means/"&gt;
 &lt;input name="consent" type="hidden" value="yes"&gt;

 &lt;div class="form-trap" aria-hidden="true"&gt;
 &lt;label for="newsletter-article-company"&gt;Leave this field empty&lt;/label&gt;
 &lt;input id="newsletter-article-company" name="company_website" type="text" tabindex="-1" autocomplete="off"&gt;
 &lt;/div&gt;

 &lt;div class="newsletter-signup__controls"&gt;
 &lt;label class="visually-hidden" for="newsletter-article-email"&gt;Email address&lt;/label&gt;
 &lt;input id="newsletter-article-email" name="email" type="email" autocomplete="email" inputmode="email" maxlength="254" placeholder="you@example.com" aria-describedby="newsletter-article-note" required&gt;
 &lt;button type="submit"&gt;Subscribe&lt;/button&gt;
 &lt;/div&gt;

 &lt;p class="newsletter-signup__note" id="newsletter-article-note"&gt;
 Confirm once by email; unsubscribe at any time.
 See the &lt;a href="https://viborc.com/privacy-policy/"&gt;privacy policy&lt;/a&gt;.
 &lt;/p&gt;
 &lt;p class="submission-form__status" role="status" aria-live="polite" aria-atomic="true" data-form-status hidden&gt;&lt;/p&gt;
 &lt;/form&gt;

 
 &lt;div class="form-outcomes" aria-live="polite" aria-atomic="true"&gt;
 &lt;p class="form-outcome" id="newsletter-article-check-email" tabindex="-1"&gt;Check your inbox and follow the confirmation link. You are not subscribed until that step is complete.&lt;/p&gt;
 &lt;p class="form-outcome form-outcome--error" id="newsletter-article-error" tabindex="-1"&gt;The subscription request could not be completed. Please try again later.&lt;/p&gt;
 &lt;/div&gt;
 
&lt;/div&gt;

&lt;/aside&gt;

&lt;h3 id="alphaevolve-what-changes-when-the-answer-is-checkable"&gt;AlphaEvolve: what changes when the answer is checkable&lt;/h3&gt;
&lt;p&gt;AlphaEvolve works differently. A fixed orchestrator asks language models to
change target programs. Executable tests and metrics rank the candidates, and
an evolutionary database keeps the better ones available for later mutation.&lt;/p&gt;
&lt;p&gt;This works because the candidates are comparatively easy to check. A kernel
has a measurable runtime, and a proposed matrix-multiplication method can be
tested against known mathematical identities. Discovery may be difficult, but
rejecting a wrong answer can be cheap. Most scientific, social, and safety
questions are harder to score.&lt;/p&gt;
&lt;p&gt;AlphaEvolve&amp;rsquo;s first-party report attributes an average 23% kernel speedup over
an expert-designed heuristic across its evaluated kernels and a corresponding
1% reduction in Gemini&amp;rsquo;s overall training time.&lt;sup id="fnref:12"&gt;&lt;a href="#fn:12" class="footnote-ref" role="doc-noteref"&gt;12&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;
&lt;p&gt;People supply AlphaEvolve&amp;rsquo;s task, evaluator code, editable regions, expert
checks, and deployment decisions. The target program changes; the runner does
not. That boundary does not reduce the reported engineering result. It tells us
where the improvement happened: in a target the system could evaluate
repeatedly.&lt;/p&gt;
&lt;p&gt;The AlphaEvolve document is a first-party technical report and was not
identified as peer-reviewed in the reviewed records. Google
DeepMind&amp;rsquo;s public results repository contains verification code for selected
mathematical outputs, explicitly omits cases that merely matched existing
results, and explicitly does not include the AlphaEvolve runner.&lt;sup id="fnref:13"&gt;&lt;a href="#fn:13" class="footnote-ref" role="doc-noteref"&gt;13&lt;/a&gt;&lt;/sup&gt;
Those artifacts let others check selected results. They do not reproduce the
search system or the private infrastructure result.&lt;/p&gt;
&lt;h3 id="self-rewarding-language-models-when-proposer-and-judge-come-from-the-same-family"&gt;Self-Rewarding Language Models: when proposer and judge come from the same family&lt;/h3&gt;
&lt;p&gt;The self-rewarding work worried me for a different reason: the thing changing
and the thing judging come from the same family.&lt;/p&gt;
&lt;p&gt;The ICML 2024 paper starts with a Llama 2 70B lineage, uses the model to produce
candidate responses and judge them through LLM-as-a-Judge prompting, filters
preference pairs, and applies iterative Direct Preference Optimization (DPO).
The resulting M1, M2, and M3 checkpoints generate and evaluate data for later
rounds.&lt;sup id="fnref:14"&gt;&lt;a href="#fn:14" class="footnote-ref" role="doc-noteref"&gt;14&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;
&lt;p&gt;The checkpoint carries the change into the next round. Preference scores become
training pairs, and an external DPO pipeline produces the next checkpoint.
People still provide the seed data, filtering, optimizer code, compute,
schedule, final evaluation, checkpoint choice, and deployment.&lt;/p&gt;
&lt;p&gt;The authors report instruction-following gains, including AlpacaEval
improvement across iterations. The detailed results also show response-length
growth and uneven movement on other tasks.&lt;sup id="fnref:15"&gt;&lt;a href="#fn:15" class="footnote-ref" role="doc-noteref"&gt;15&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;
&lt;p&gt;My concern is that the generator and judge share a model lineage, so
improvement under that judge cannot serve as independent confirmation of
broader quality.&lt;/p&gt;
&lt;p&gt;That does not make co-evolution useless. A shared-lineage judge can still guide
learning when the score is checked against something outside the pair, such as
a game outcome, real data, or protected tests. Without such a check, the loop
may get better at satisfying its own judge without becoming better in the
broader sense being claimed.&lt;/p&gt;
&lt;p&gt;I also did not locate a full independent reproduction of the original
three-stage pipeline by the cutoff.&lt;/p&gt;
&lt;p&gt;DGM, AlphaEvolve, and Self-Rewarding Language Models change different parts of
a system. Yet all three eventually depend on the same decision: something has
to say whether the new version is better. The rest of the claim depends on how
trustworthy that judgment is.&lt;/p&gt;
&lt;h2 id="the-evaluator-decides-what-counts-as-improvement"&gt;The evaluator decides what counts as improvement&lt;/h2&gt;
&lt;p&gt;Every loop needs an answer to a blunt question: &lt;em&gt;what counts as better?&lt;/em&gt; A weak
answer lets the system become very efficient at producing the wrong result.&lt;/p&gt;
&lt;p&gt;Unit tests can miss semantic errors. Benchmarks can reward adaptation to their
own task distribution. Model judges can prefer verbosity, position, style, or
outputs from their own family. A learned reward can be optimized past the point
where the intended outcome improves. A formal verifier can establish exactly
what it specifies while saying nothing about what it leaves outside.&lt;/p&gt;
&lt;p&gt;Peer-reviewed studies of language-model judges document position, verbosity,
and self-enhancement biases. Reward-overoptimization experiments show a broader
danger: performance under the optimized proxy can keep rising even as
performance falls under a separate, more trustworthy measure of the intended
outcome. In that experiment, the external comparison is called the &amp;ldquo;gold&amp;rdquo;
signal.&lt;sup id="fnref:16"&gt;&lt;a href="#fn:16" class="footnote-ref" role="doc-noteref"&gt;16&lt;/a&gt;&lt;/sup&gt; DGM&amp;rsquo;s detector-bypass child is a concrete example.&lt;/p&gt;
&lt;p&gt;Human review has limits too. It is expensive, inconsistent, persuadable, and
often unable to judge frontier outputs directly. I want to know what grounds an
evaluation and how independent it is from the system being judged. A score
alone answers neither question.&lt;/p&gt;
&lt;p&gt;Different claims need different judges:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Executable tests work well for the code paths they cover.&lt;/li&gt;
&lt;li&gt;Formal proof works when the specification captures what matters.&lt;/li&gt;
&lt;li&gt;A physical experiment brings instruments, noise, and interpretation along
with contact with the world.&lt;/li&gt;
&lt;li&gt;For open-ended outputs, independent model families, protected holdouts, and
human experts can add checks, but none provides ground truth automatically.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Model families share data and conventions, holdouts leak, and experts can be
fooled. So a system that can rewrite its evaluator makes the problem harder. If
proposer and judge change together without an external check, the score can
rise while our confidence in the claimed improvement falls.&lt;/p&gt;
&lt;p&gt;The matrix below also includes Self-Taught Evaluators and The AI Scientist.
Both are author-reported preprints, and I did not locate an independent
reproduction of either by the cutoff.&lt;sup id="fnref:17"&gt;&lt;a href="#fn:17" class="footnote-ref" role="doc-noteref"&gt;17&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;
&lt;figure class="evidence-figure evidence-figure--editorial evidence-figure--rsi-evidence-matrix"&gt;
&lt;div class="table-scroll" role="region" tabindex="0" aria-label="Scrollable categorical evidence matrix for seven self-improvement cases" aria-describedby="fig-rsi-evidence-scroll-hint"&gt;
&lt;p class="table-scroll__hint" id="fig-rsi-evidence-scroll-hint"&gt;Scroll horizontally to read the full matrix&lt;/p&gt;
&lt;p class="visually-hidden" id="fig-rsi-evidence-full"&gt;Seven cases are compared across nine observable indicators using four categories only: Observed, Partial, Not shown, and Not tested. Self-Refine has an observed system proposal, but persistent mutation, repeated cross-run generations, improvement of the improvement process, held-out transfer, and successor deployment are not shown. Voyager observes persistence, proposal, automated commit, and repeated generations, with partial verifier grounding, improvement-process evidence, and transfer. DGM observes persistence, proposal, automated commit, and repeated generations, with partial verifier grounding, improvement-process evidence, and transfer; successor deployment and independent reproduction are not shown. AlphaEvolve observes persistence, proposal, commit, and repeated generations; verifier grounding is conditional on task checkability, transfer is partial, and self-improvement-process evidence, successor deployment, and independent reproduction are not shown. Self-Rewarding Language Models observe persistence, proposal, and repeated generations, with partial verifier grounding, commit, improvement-process evidence, and transfer; successor deployment and independent reproduction are not shown. Self-Taught Evaluators observe persistence, proposal, repeated generations, and improvement within the evaluator loop, with partial verifier grounding, commit, and transfer; successor deployment is not shown and reproduction was not tested or reported. The AI Scientist observes artifact persistence and system proposal, with partial verifier grounding, commit, repeated generations, and transfer; improvement of the improvement process and successor deployment are not shown, and reproduction was not tested or reported. No values are summed or averaged.&lt;/p&gt;
&lt;svg viewBox="0 0 1120 730" style="min-width:70rem" role="img" aria-label="Categorical matrix of nine evidence indicators across seven self-improvement cases" aria-describedby="fig-rsi-evidence-desc fig-rsi-evidence-full" xmlns="http://www.w3.org/2000/svg"&gt;
&lt;desc id="fig-rsi-evidence-desc"&gt;A seven-row by nine-column categorical matrix. Cells say Observed, Partial, Not shown, or Not tested. Normalization badges identify packet values originally expressed as 0.25 or ranges. Qualifier badges identify boundary-dependent original wording. The matrix has no aggregate measure.&lt;/desc&gt;
&lt;defs&gt;
&lt;pattern id="rsi-evidence-partial" width="8" height="8" patternUnits="userSpaceOnUse" patternTransform="rotate(45)"&gt;&lt;rect width="8" height="8" fill="color-mix(in srgb, var(--figure-apricot) 18%, var(--field-raised))"/&gt;&lt;line x1="0" y1="0" x2="0" y2="8" stroke="var(--figure-apricot)" stroke-width="2" opacity="0.48"/&gt;&lt;/pattern&gt;
&lt;pattern id="rsi-evidence-not-tested" width="7" height="7" patternUnits="userSpaceOnUse"&gt;&lt;rect width="7" height="7" fill="var(--field-deep)"/&gt;&lt;circle cx="3.5" cy="3.5" r="1" fill="var(--ink-soft)" opacity="0.34"/&gt;&lt;/pattern&gt;
&lt;g id="rsi-evidence-observed"&gt;&lt;rect width="92" height="52" rx="4" fill="color-mix(in srgb, var(--figure-sage) 28%, var(--field-raised))" stroke="var(--figure-sage)"/&gt;&lt;text x="46" y="30" text-anchor="middle" font-family="var(--font-body)" font-size="10.5" font-weight="600" fill="var(--ink)"&gt;Observed&lt;/text&gt;&lt;/g&gt;
&lt;g id="rsi-evidence-partial-cell"&gt;&lt;rect width="92" height="52" rx="4" fill="url(#rsi-evidence-partial)" stroke="var(--figure-apricot)"/&gt;&lt;text x="46" y="30" text-anchor="middle" font-family="var(--font-body)" font-size="10.5" font-weight="600" fill="var(--ink)"&gt;Partial&lt;/text&gt;&lt;/g&gt;
&lt;g id="rsi-evidence-not-shown"&gt;&lt;rect width="92" height="52" rx="4" fill="var(--field-deep)" stroke="var(--ink-soft)"/&gt;&lt;path d="M8 8l7 7m0-7l-7 7" stroke="var(--ink-soft)"/&gt;&lt;text x="46" y="30" text-anchor="middle" font-family="var(--font-body)" font-size="10.5" font-weight="600" fill="var(--ink)"&gt;Not shown&lt;/text&gt;&lt;/g&gt;
&lt;g id="rsi-evidence-not-tested-cell"&gt;&lt;rect width="92" height="52" rx="4" fill="url(#rsi-evidence-not-tested)" stroke="var(--hairline-strong)" stroke-dasharray="4 3"/&gt;&lt;text x="46" y="30" text-anchor="middle" font-family="var(--font-body)" font-size="10.5" font-weight="600" fill="var(--ink)"&gt;Not tested&lt;/text&gt;&lt;/g&gt;
&lt;/defs&gt;
&lt;text x="24" y="34" font-family="var(--font-mono)" font-size="12" letter-spacing="0.08em" fill="var(--ink-soft)"&gt;OBSERVABLE INDICATORS · NO COMPOSITE MEASURE&lt;/text&gt;
&lt;g aria-label="Evidence category legend"&gt;
&lt;rect x="24" y="49" width="12" height="12" rx="2" fill="color-mix(in srgb, var(--figure-sage) 28%, var(--field-raised))" stroke="var(--figure-sage)"/&gt;&lt;text x="43" y="59" font-family="var(--font-body)" font-size="11" fill="var(--ink)"&gt;Observed&lt;/text&gt;
&lt;rect x="130" y="49" width="12" height="12" rx="2" fill="url(#rsi-evidence-partial)" stroke="var(--figure-apricot)"/&gt;&lt;text x="149" y="59" font-family="var(--font-body)" font-size="11" fill="var(--ink)"&gt;Partial&lt;/text&gt;
&lt;rect x="218" y="49" width="12" height="12" rx="2" fill="var(--field-deep)" stroke="var(--ink-soft)"/&gt;&lt;path d="M221 52l6 6m0-6l-6 6" stroke="var(--ink-soft)"/&gt;&lt;text x="237" y="59" font-family="var(--font-body)" font-size="11" fill="var(--ink)"&gt;Not shown&lt;/text&gt;
&lt;rect x="327" y="49" width="12" height="12" rx="2" fill="url(#rsi-evidence-not-tested)" stroke="var(--hairline-strong)" stroke-dasharray="3 2"/&gt;&lt;text x="346" y="59" font-family="var(--font-body)" font-size="11" fill="var(--ink)"&gt;Not tested&lt;/text&gt;
&lt;circle cx="465" cy="55" r="7" fill="var(--figure-apricot)"/&gt;&lt;text x="465" y="58" text-anchor="middle" font-family="var(--font-mono)" font-size="8" font-weight="700" fill="var(--field)"&gt;N&lt;/text&gt;&lt;text x="478" y="59" font-family="var(--font-body)" font-size="11" fill="var(--ink)"&gt;Normalized 0.25 / range&lt;/text&gt;
&lt;circle cx="641" cy="55" r="7" fill="var(--figure-periwinkle)"/&gt;&lt;text x="641" y="58" text-anchor="middle" font-family="var(--font-mono)" font-size="8" font-weight="700" fill="var(--field)"&gt;Q&lt;/text&gt;&lt;text x="654" y="59" font-family="var(--font-body)" font-size="11" fill="var(--ink)"&gt;Boundary qualifier&lt;/text&gt;
&lt;rect x="824" y="43" width="272" height="24" rx="4" fill="var(--field-deep)" stroke="var(--hairline-strong)"/&gt;&lt;text x="960" y="59" text-anchor="middle" font-family="var(--font-mono)" font-size="9.5" letter-spacing="0.04em" fill="var(--ink-soft)"&gt;CATEGORIES ONLY · NEVER SUM OR AVERAGE&lt;/text&gt;
&lt;/g&gt;
&lt;g aria-label="Indicator headers"&gt;
&lt;rect x="24" y="82" width="194" height="84" rx="5" fill="var(--field-deep)" stroke="var(--hairline-strong)"/&gt;&lt;text x="121" y="128" text-anchor="middle" font-family="var(--font-mono)" font-size="10" letter-spacing="0.06em" fill="var(--ink-soft)"&gt;CASE / DECLARED BOUNDARY&lt;/text&gt;
&lt;rect x="224" y="82" width="92" height="84" rx="5" fill="var(--field-deep)" stroke="var(--hairline-strong)"/&gt;&lt;text x="270" y="111" text-anchor="middle" font-family="var(--font-mono)" font-size="9" fill="var(--ink-soft)"&gt;&lt;tspan x="270"&gt;Persistent&lt;/tspan&gt;&lt;tspan x="270" dy="14"&gt;mutation&lt;/tspan&gt;&lt;/text&gt;
&lt;rect x="320" y="82" width="92" height="84" rx="5" fill="var(--field-deep)" stroke="var(--hairline-strong)"/&gt;&lt;text x="366" y="111" text-anchor="middle" font-family="var(--font-mono)" font-size="9" fill="var(--ink-soft)"&gt;&lt;tspan x="366"&gt;System&lt;/tspan&gt;&lt;tspan x="366" dy="14"&gt;proposal&lt;/tspan&gt;&lt;/text&gt;
&lt;rect x="416" y="82" width="92" height="84" rx="5" fill="var(--field-deep)" stroke="var(--hairline-strong)"/&gt;&lt;text x="462" y="104" text-anchor="middle" font-family="var(--font-mono)" font-size="9" fill="var(--ink-soft)"&gt;&lt;tspan x="462"&gt;Grounded /&lt;/tspan&gt;&lt;tspan x="462" dy="14"&gt;independent&lt;/tspan&gt;&lt;tspan x="462" dy="14"&gt;verifier&lt;/tspan&gt;&lt;/text&gt;
&lt;rect x="512" y="82" width="92" height="84" rx="5" fill="var(--field-deep)" stroke="var(--hairline-strong)"/&gt;&lt;text x="558" y="111" text-anchor="middle" font-family="var(--font-mono)" font-size="9" fill="var(--ink-soft)"&gt;&lt;tspan x="558"&gt;Automated&lt;/tspan&gt;&lt;tspan x="558" dy="14"&gt;commit&lt;/tspan&gt;&lt;/text&gt;
&lt;rect x="608" y="82" width="92" height="84" rx="5" fill="var(--field-deep)" stroke="var(--hairline-strong)"/&gt;&lt;text x="654" y="111" text-anchor="middle" font-family="var(--font-mono)" font-size="9" fill="var(--ink-soft)"&gt;&lt;tspan x="654"&gt;Repeated&lt;/tspan&gt;&lt;tspan x="654" dy="14"&gt;generations&lt;/tspan&gt;&lt;/text&gt;
&lt;rect x="704" y="82" width="92" height="84" rx="5" fill="var(--field-deep)" stroke="var(--hairline-strong)"/&gt;&lt;text x="750" y="104" text-anchor="middle" font-family="var(--font-mono)" font-size="9" fill="var(--ink-soft)"&gt;&lt;tspan x="750"&gt;Improves the&lt;/tspan&gt;&lt;tspan x="750" dy="14"&gt;improvement&lt;/tspan&gt;&lt;tspan x="750" dy="14"&gt;process&lt;/tspan&gt;&lt;/text&gt;
&lt;rect x="800" y="82" width="92" height="84" rx="5" fill="var(--field-deep)" stroke="var(--hairline-strong)"/&gt;&lt;text x="846" y="111" text-anchor="middle" font-family="var(--font-mono)" font-size="9" fill="var(--ink-soft)"&gt;&lt;tspan x="846"&gt;Held-out&lt;/tspan&gt;&lt;tspan x="846" dy="14"&gt;transfer&lt;/tspan&gt;&lt;/text&gt;
&lt;rect x="896" y="82" width="92" height="84" rx="5" fill="var(--field-deep)" stroke="var(--hairline-strong)"/&gt;&lt;text x="942" y="111" text-anchor="middle" font-family="var(--font-mono)" font-size="9" fill="var(--ink-soft)"&gt;&lt;tspan x="942"&gt;Successor&lt;/tspan&gt;&lt;tspan x="942" dy="14"&gt;deployment&lt;/tspan&gt;&lt;/text&gt;
&lt;rect x="992" y="82" width="92" height="84" rx="5" fill="var(--field-deep)" stroke="var(--hairline-strong)"/&gt;&lt;text x="1038" y="104" text-anchor="middle" font-family="var(--font-mono)" font-size="9" fill="var(--ink-soft)"&gt;&lt;tspan x="1038"&gt;Independent&lt;/tspan&gt;&lt;tspan x="1038" dy="14"&gt;reproduction&lt;/tspan&gt;&lt;/text&gt;
&lt;/g&gt;
&lt;g data-reveal="true" aria-label="Self-Refine evidence row"&gt;
&lt;rect x="24" y="176" width="194" height="52" rx="4" fill="var(--field-deep)" stroke="var(--hairline-strong)"/&gt;&lt;text x="40" y="199" font-family="var(--font-display)" font-size="14" font-weight="650" fill="var(--ink)"&gt;Self-Refine&lt;/text&gt;&lt;text x="40" y="216" font-family="var(--font-mono)" font-size="8" fill="var(--ink-soft)"&gt;U1 · EPISODE&lt;/text&gt;&lt;text x="207" y="216" text-anchor="end" font-family="var(--font-mono)" font-size="8" fill="var(--figure-sage)"&gt;PR · NEURIPS 2023&lt;/text&gt;
&lt;use href="#rsi-evidence-not-shown" x="224" y="176"/&gt;&lt;use href="#rsi-evidence-observed" x="320" y="176"/&gt;&lt;use href="#rsi-evidence-partial-cell" x="416" y="176"/&gt;&lt;circle cx="496" cy="186" r="7" fill="var(--figure-apricot)"/&gt;&lt;text x="496" y="189" text-anchor="middle" font-family="var(--font-mono)" font-size="8" font-weight="700" fill="var(--field)"&gt;N&lt;/text&gt;
&lt;use href="#rsi-evidence-not-tested-cell" x="512" y="176"/&gt;&lt;use href="#rsi-evidence-not-shown" x="608" y="176"/&gt;&lt;circle cx="688" cy="186" r="7" fill="var(--figure-periwinkle)"/&gt;&lt;text x="688" y="189" text-anchor="middle" font-family="var(--font-mono)" font-size="8" font-weight="700" fill="var(--field)"&gt;Q&lt;/text&gt;
&lt;use href="#rsi-evidence-not-shown" x="704" y="176"/&gt;&lt;use href="#rsi-evidence-not-shown" x="800" y="176"/&gt;&lt;use href="#rsi-evidence-not-shown" x="896" y="176"/&gt;&lt;use href="#rsi-evidence-not-tested-cell" x="992" y="176"/&gt;
&lt;/g&gt;
&lt;g data-reveal="true" aria-label="Voyager evidence row"&gt;
&lt;rect x="24" y="234" width="194" height="52" rx="4" fill="var(--field-deep)" stroke="var(--hairline-strong)"/&gt;&lt;text x="40" y="257" font-family="var(--font-display)" font-size="14" font-weight="650" fill="var(--ink)"&gt;Voyager&lt;/text&gt;&lt;text x="40" y="274" font-family="var(--font-mono)" font-size="8" fill="var(--ink-soft)"&gt;U2 · SKILLS&lt;/text&gt;&lt;text x="207" y="274" text-anchor="end" font-family="var(--font-mono)" font-size="8" fill="var(--figure-apricot)"&gt;VENUE NOT SET&lt;/text&gt;
&lt;use href="#rsi-evidence-observed" x="224" y="234"/&gt;&lt;use href="#rsi-evidence-observed" x="320" y="234"/&gt;&lt;use href="#rsi-evidence-partial-cell" x="416" y="234"/&gt;&lt;use href="#rsi-evidence-observed" x="512" y="234"/&gt;&lt;use href="#rsi-evidence-observed" x="608" y="234"/&gt;
&lt;use href="#rsi-evidence-partial-cell" x="704" y="234"/&gt;&lt;circle cx="784" cy="244" r="7" fill="var(--figure-apricot)"/&gt;&lt;text x="784" y="247" text-anchor="middle" font-family="var(--font-mono)" font-size="8" font-weight="700" fill="var(--field)"&gt;N&lt;/text&gt;
&lt;use href="#rsi-evidence-partial-cell" x="800" y="234"/&gt;&lt;use href="#rsi-evidence-not-shown" x="896" y="234"/&gt;&lt;use href="#rsi-evidence-not-tested-cell" x="992" y="234"/&gt;
&lt;/g&gt;
&lt;g data-reveal="true" aria-label="Darwin Godel Machine evidence row"&gt;
&lt;rect x="24" y="292" width="194" height="52" rx="4" fill="var(--field-deep)" stroke="var(--hairline-strong)"/&gt;&lt;text x="40" y="315" font-family="var(--font-display)" font-size="14" font-weight="650" fill="var(--ink)"&gt;Darwin Gödel Machine&lt;/text&gt;&lt;text x="40" y="332" font-family="var(--font-mono)" font-size="8" fill="var(--ink-soft)"&gt;U3 / C2&lt;/text&gt;&lt;text x="207" y="332" text-anchor="end" font-family="var(--font-mono)" font-size="8" fill="var(--figure-sage)"&gt;PR · ICLR 2026&lt;/text&gt;
&lt;use href="#rsi-evidence-observed" x="224" y="292"/&gt;&lt;use href="#rsi-evidence-observed" x="320" y="292"/&gt;&lt;use href="#rsi-evidence-partial-cell" x="416" y="292"/&gt;&lt;use href="#rsi-evidence-observed" x="512" y="292"/&gt;&lt;use href="#rsi-evidence-observed" x="608" y="292"/&gt;&lt;use href="#rsi-evidence-partial-cell" x="704" y="292"/&gt;&lt;use href="#rsi-evidence-partial-cell" x="800" y="292"/&gt;&lt;use href="#rsi-evidence-not-shown" x="896" y="292"/&gt;&lt;use href="#rsi-evidence-not-shown" x="992" y="292"/&gt;
&lt;/g&gt;
&lt;g data-reveal="true" aria-label="AlphaEvolve evidence row"&gt;
&lt;rect x="24" y="350" width="194" height="52" rx="4" fill="var(--field-deep)" stroke="var(--hairline-strong)"/&gt;&lt;text x="40" y="373" font-family="var(--font-display)" font-size="14" font-weight="650" fill="var(--ink)"&gt;AlphaEvolve&lt;/text&gt;&lt;text x="40" y="390" font-family="var(--font-mono)" font-size="8" fill="var(--ink-soft)"&gt;X1 / C2&lt;/text&gt;&lt;text x="207" y="390" text-anchor="end" font-family="var(--font-mono)" font-size="8" fill="var(--figure-apricot)"&gt;TECH REPORT&lt;/text&gt;
&lt;use href="#rsi-evidence-observed" x="224" y="350"/&gt;&lt;use href="#rsi-evidence-observed" x="320" y="350"/&gt;&lt;use href="#rsi-evidence-partial-cell" x="416" y="350"/&gt;&lt;circle cx="496" cy="360" r="7" fill="var(--figure-apricot)"/&gt;&lt;text x="496" y="363" text-anchor="middle" font-family="var(--font-mono)" font-size="8" font-weight="700" fill="var(--field)"&gt;N&lt;/text&gt;
&lt;use href="#rsi-evidence-observed" x="512" y="350"/&gt;&lt;use href="#rsi-evidence-observed" x="608" y="350"/&gt;&lt;use href="#rsi-evidence-not-shown" x="704" y="350"/&gt;&lt;use href="#rsi-evidence-partial-cell" x="800" y="350"/&gt;&lt;use href="#rsi-evidence-not-shown" x="896" y="350"/&gt;&lt;use href="#rsi-evidence-not-shown" x="992" y="350"/&gt;
&lt;/g&gt;
&lt;g data-reveal="true" aria-label="Self-Rewarding Language Models evidence row"&gt;
&lt;rect x="24" y="408" width="194" height="52" rx="4" fill="var(--field-deep)" stroke="var(--hairline-strong)"/&gt;&lt;text x="40" y="431" font-family="var(--font-display)" font-size="14" font-weight="650" fill="var(--ink)"&gt;Self-Rewarding LM&lt;/text&gt;&lt;text x="40" y="448" font-family="var(--font-mono)" font-size="8" fill="var(--ink-soft)"&gt;U4 + U5&lt;/text&gt;&lt;text x="207" y="448" text-anchor="end" font-family="var(--font-mono)" font-size="8" fill="var(--figure-sage)"&gt;PR · ICML 2024&lt;/text&gt;
&lt;use href="#rsi-evidence-observed" x="224" y="408"/&gt;&lt;use href="#rsi-evidence-observed" x="320" y="408"/&gt;&lt;use href="#rsi-evidence-partial-cell" x="416" y="408"/&gt;&lt;circle cx="496" cy="418" r="7" fill="var(--figure-apricot)"/&gt;&lt;text x="496" y="421" text-anchor="middle" font-family="var(--font-mono)" font-size="8" font-weight="700" fill="var(--field)"&gt;N&lt;/text&gt;
&lt;use href="#rsi-evidence-partial-cell" x="512" y="408"/&gt;&lt;use href="#rsi-evidence-observed" x="608" y="408"/&gt;&lt;use href="#rsi-evidence-partial-cell" x="704" y="408"/&gt;&lt;use href="#rsi-evidence-partial-cell" x="800" y="408"/&gt;&lt;circle cx="880" cy="418" r="7" fill="var(--figure-apricot)"/&gt;&lt;text x="880" y="421" text-anchor="middle" font-family="var(--font-mono)" font-size="8" font-weight="700" fill="var(--field)"&gt;N&lt;/text&gt;
&lt;use href="#rsi-evidence-not-shown" x="896" y="408"/&gt;&lt;use href="#rsi-evidence-not-shown" x="992" y="408"/&gt;
&lt;/g&gt;
&lt;g data-reveal="true" aria-label="Self-Taught Evaluators evidence row"&gt;
&lt;rect x="24" y="466" width="194" height="52" rx="4" fill="var(--field-deep)" stroke="var(--hairline-strong)"/&gt;&lt;text x="40" y="489" font-family="var(--font-display)" font-size="14" font-weight="650" fill="var(--ink)"&gt;Self-Taught Evaluators&lt;/text&gt;&lt;text x="40" y="506" font-family="var(--font-mono)" font-size="8" fill="var(--ink-soft)"&gt;U5&lt;/text&gt;&lt;text x="207" y="506" text-anchor="end" font-family="var(--font-mono)" font-size="8" fill="var(--figure-apricot)"&gt;PREPRINT&lt;/text&gt;
&lt;use href="#rsi-evidence-observed" x="224" y="466"/&gt;&lt;use href="#rsi-evidence-observed" x="320" y="466"/&gt;&lt;use href="#rsi-evidence-partial-cell" x="416" y="466"/&gt;&lt;circle cx="496" cy="476" r="7" fill="var(--figure-apricot)"/&gt;&lt;text x="496" y="479" text-anchor="middle" font-family="var(--font-mono)" font-size="8" font-weight="700" fill="var(--field)"&gt;N&lt;/text&gt;
&lt;use href="#rsi-evidence-partial-cell" x="512" y="466"/&gt;&lt;use href="#rsi-evidence-observed" x="608" y="466"/&gt;&lt;use href="#rsi-evidence-observed" x="704" y="466"/&gt;&lt;circle cx="784" cy="476" r="7" fill="var(--figure-periwinkle)"/&gt;&lt;text x="784" y="479" text-anchor="middle" font-family="var(--font-mono)" font-size="8" font-weight="700" fill="var(--field)"&gt;Q&lt;/text&gt;
&lt;use href="#rsi-evidence-partial-cell" x="800" y="466"/&gt;&lt;use href="#rsi-evidence-not-shown" x="896" y="466"/&gt;&lt;use href="#rsi-evidence-not-tested-cell" x="992" y="466"/&gt;
&lt;/g&gt;
&lt;g data-reveal="true" aria-label="The AI Scientist evidence row"&gt;
&lt;rect x="24" y="524" width="194" height="52" rx="4" fill="var(--field-deep)" stroke="var(--hairline-strong)"/&gt;&lt;text x="40" y="547" font-family="var(--font-display)" font-size="14" font-weight="650" fill="var(--ink)"&gt;The AI Scientist&lt;/text&gt;&lt;text x="40" y="564" font-family="var(--font-mono)" font-size="8" fill="var(--ink-soft)"&gt;X1&lt;/text&gt;&lt;text x="207" y="564" text-anchor="end" font-family="var(--font-mono)" font-size="8" fill="var(--figure-apricot)"&gt;PREPRINT&lt;/text&gt;
&lt;use href="#rsi-evidence-observed" x="224" y="524"/&gt;&lt;circle cx="304" cy="534" r="7" fill="var(--figure-periwinkle)"/&gt;&lt;text x="304" y="537" text-anchor="middle" font-family="var(--font-mono)" font-size="8" font-weight="700" fill="var(--field)"&gt;Q&lt;/text&gt;
&lt;use href="#rsi-evidence-observed" x="320" y="524"/&gt;&lt;use href="#rsi-evidence-partial-cell" x="416" y="524"/&gt;&lt;circle cx="496" cy="534" r="7" fill="var(--figure-apricot)"/&gt;&lt;text x="496" y="537" text-anchor="middle" font-family="var(--font-mono)" font-size="8" font-weight="700" fill="var(--field)"&gt;N&lt;/text&gt;
&lt;use href="#rsi-evidence-partial-cell" x="512" y="524"/&gt;&lt;use href="#rsi-evidence-partial-cell" x="608" y="524"/&gt;&lt;use href="#rsi-evidence-not-shown" x="704" y="524"/&gt;&lt;use href="#rsi-evidence-partial-cell" x="800" y="524"/&gt;&lt;circle cx="880" cy="534" r="7" fill="var(--figure-apricot)"/&gt;&lt;text x="880" y="537" text-anchor="middle" font-family="var(--font-mono)" font-size="8" font-weight="700" fill="var(--field)"&gt;N&lt;/text&gt;
&lt;use href="#rsi-evidence-not-shown" x="896" y="524"/&gt;&lt;use href="#rsi-evidence-not-tested-cell" x="992" y="524"/&gt;
&lt;/g&gt;
&lt;g aria-label="Case warnings, normalization, and scope notes"&gt;
&lt;rect x="24" y="594" width="1072" height="112" rx="6" fill="var(--field-deep)" stroke="var(--hairline-strong)"/&gt;
&lt;text x="42" y="615" font-family="var(--font-mono)" font-size="9" fill="var(--figure-periwinkle)"&gt;DGM&lt;/text&gt;&lt;text x="78" y="615" font-family="var(--font-body)" font-size="10.5" fill="var(--ink)"&gt;Foundation-model weights and outer search fixed.&lt;/text&gt;
&lt;text x="410" y="615" font-family="var(--font-mono)" font-size="9" fill="var(--figure-sage)"&gt;ALPHAEVOLVE&lt;/text&gt;&lt;text x="487" y="615" font-family="var(--font-body)" font-size="10.5" fill="var(--ink)"&gt;Full runner closed; selected verification artifacts public.&lt;/text&gt;
&lt;text x="819" y="615" font-family="var(--font-mono)" font-size="9" fill="var(--figure-apricot)"&gt;SRLM&lt;/text&gt;&lt;text x="856" y="615" font-family="var(--font-body)" font-size="10.5" fill="var(--ink)"&gt;Generator and judge share model lineage.&lt;/text&gt;
&lt;line x1="42" y1="630" x2="1078" y2="630" stroke="var(--hairline-strong)"/&gt;
&lt;circle cx="43" cy="649" r="7" fill="var(--figure-apricot)"/&gt;&lt;text x="43" y="652" text-anchor="middle" font-family="var(--font-mono)" font-size="8" font-weight="700" fill="var(--field)"&gt;N&lt;/text&gt;
&lt;text x="57" y="653" font-family="var(--font-body)" font-size="10.5" fill="var(--ink)"&gt;Packet values of 0.25 or a 0.25–0.5 / 1–0.5 range are rendered as Partial, preserving uncertainty instead of false precision.&lt;/text&gt;
&lt;circle cx="43" cy="680" r="7" fill="var(--figure-periwinkle)"/&gt;&lt;text x="43" y="683" text-anchor="middle" font-family="var(--font-mono)" font-size="8" font-weight="700" fill="var(--field)"&gt;Q&lt;/text&gt;
&lt;text x="57" y="684" font-family="var(--font-body)" font-size="10.5" fill="var(--ink)"&gt;Original qualifier retained: across runs, within the evaluator loop, or artifacts only. Peer-review status is shown separately from evidence cells.&lt;/text&gt;
&lt;/g&gt;
&lt;/svg&gt;
&lt;/div&gt;
&lt;figcaption&gt;The matrix keeps nine observable indicators separate. “Partial” marks conditional or boundary-dependent evidence, not half an effect. Values are categorical, never summed or averaged. “Not tested” means the reviewed source did not report the indicator; “Not shown” means the reviewed case does not demonstrate the indicator. Source and method: I coded seven reviewed cases against nine observable indicators. Evidence cutoff: 15 August 2026.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;I kept the matrix categorical because a total score would hide the main
weaknesses. Repeated generations do not supply verifier independence.
Checkability on one class of programs does not transfer to every domain. A
model-generated reward remains correlated with the model that produced it.&lt;/p&gt;
&lt;h2 id="recursion-does-not-imply-accelerating-progress"&gt;Recursion does not imply accelerating progress&lt;/h2&gt;
&lt;p&gt;Calling a process recursive tells us that one round affects the next. It says
nothing by itself about the size or cost of each improvement.&lt;/p&gt;
&lt;p&gt;Exponential improvement would require sustained proportional gains while the
costs of evaluation, compute, data, coordination, safety work, and deployment
do not become binding bottlenecks. The public cases include plateaus,
regressions, expensive evaluations, proxy failures, and narrow domains
alongside their gains. Those failures belong in the picture, not outside it as
noise around an ideal loop.&lt;/p&gt;
&lt;p&gt;Much faster progress remains possible. These early systems cannot settle what
a more capable successor could do, but they show that a recursive loop can
plateau or regress.&lt;/p&gt;
&lt;p&gt;Theoretical work can model conditions under which automating AI research
produces rapid or explosive growth. I think those models are useful for
identifying feedback assumptions. But they are not observations that current
RSI systems have entered that regime.&lt;sup id="fnref:18"&gt;&lt;a href="#fn:18" class="footnote-ref" role="doc-noteref"&gt;18&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;
&lt;p&gt;Recursive training data provides another warning. A Nature study found
distributional degradation when models were
trained through recursively generated data under the studied setup.&lt;/p&gt;
&lt;p&gt;That does not prove universal collapse for mixed, curated, or externally
grounded self-training.&lt;sup id="fnref:19"&gt;&lt;a href="#fn:19" class="footnote-ref" role="doc-noteref"&gt;19&lt;/a&gt;&lt;/sup&gt; But it does show why the source of the
feedback and the retention of distribution tails matter.&lt;/p&gt;
&lt;h2 id="what-would-convince-me"&gt;What would convince me&lt;/h2&gt;
&lt;p&gt;A high task score or an impressive artifact would not be enough. For a general
successor claim, I would ask:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;What exactly changed, and did a later generation inherit it?&lt;/li&gt;
&lt;li&gt;Who decided the change was better, and what independent check supports that
decision?&lt;/li&gt;
&lt;li&gt;Which proposal, testing, integration, training, and deployment steps were
actually automated?&lt;/li&gt;
&lt;li&gt;Do the gains survive protected tasks, new seeds or models, regression tests,
and safety checks appropriate to the domain?&lt;/li&gt;
&lt;li&gt;Did the changed system run the next round and produce another validated
improvement under comparable resources?&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;I would want to see that happen more than once. No reviewed public case in this
corpus meets all five conditions. That describes the evidence I could inspect
by the cutoff; future systems may supply more of it.&lt;/p&gt;
&lt;h2 id="how-i-did-the-research"&gt;How I did the research&lt;/h2&gt;
&lt;p&gt;The core corpus was frozen on 15 August 2026: 40 sources, 30 claim records, and
19 case records. I included work that exposed enough of the loop to identify a
change, an evaluator, and some form of persistence.&lt;/p&gt;
&lt;p&gt;I excluded marketing claims that could not be connected to an inspectable
mechanism.&lt;/p&gt;
&lt;p&gt;Discovery stopped when new searches were mostly returning already logged
systems or weaker versions of the same evidence.&lt;/p&gt;
&lt;p&gt;The dossier records peer review, open code, and independent reproduction
separately. Public code makes a system inspectable. Reproduction requires
someone else to run it, and peer review does not make every benchmark broad.&lt;/p&gt;
&lt;p&gt;The Meta, OpenAI, and METR material arrived after parts of the original dossier
were assembled. I. J. Good&amp;rsquo;s 1965 paper and Anthropic were already in the
frozen ledger, so I rechecked them for this opening and logged the full context
in a separate addendum rather than changing the core counts.&lt;/p&gt;
&lt;p&gt;One final caveat: this essay is a synthesis of public evidence, not an
experimental reproduction.&lt;/p&gt;
&lt;h2 id="what-changed-for-me"&gt;What changed for me&lt;/h2&gt;
&lt;p&gt;I began this because the phrase &lt;em&gt;AI is improving itself&lt;/em&gt; kept appearing in
places I take seriously, while referring to visibly different systems. I
expected the answer might collapse into a semantic dispute. I was wrong about
that.&lt;/p&gt;
&lt;p&gt;The cases changed where I look first. In my own agent work, an edit matters when
it survives in code, passes the relevant tests, and changes what the next run
can do. If the same system also writes or changes the tests that approve its
work, I need a separate reason to trust the result.&lt;/p&gt;
&lt;p&gt;Across the public cases I reviewed, people still choose the goals, build the
tests, provide the compute, operate the training systems, and decide what gets
deployed.&lt;/p&gt;
&lt;p&gt;Current systems are already changing answers, memories, agent code, and model
weights across repeated rounds. They have not yet taken over that entire
process.&lt;/p&gt;
&lt;p&gt;So when the next announcement says an AI improved itself, this is the question
I will bring with me: &lt;strong&gt;what changed, who decided it was better, and did that
changed system actually build the next one?&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Until a changed general system can build, validate, and hand the next cycle to
a more capable successor, I would call what we have bounded self-improvement
loops, not the strongest form of RSI.&lt;/p&gt;
&lt;div class="footnotes" role="doc-endnotes"&gt;
&lt;hr&gt;
&lt;ol&gt;
&lt;li id="fn:1"&gt;
&lt;p&gt;I. J. Good, &lt;a href="https://doi.org/10.1016/S0065-2458(08)60418-0"&gt;&amp;ldquo;Speculations Concerning the First Ultraintelligent Machine&amp;rdquo;&lt;/a&gt;, &lt;em&gt;Advances in Computers&lt;/em&gt; 6, 1965. Good described an ultraintelligent machine designing better machines; he did not report a working system. Wikipedia&amp;rsquo;s &lt;a href="https://en.wikipedia.org/wiki/Recursive_self-improvement"&gt;&amp;ldquo;Recursive self-improvement&amp;rdquo;&lt;/a&gt; overview is included as the conventional reader-facing definition surfaced by the sampled Google query, not as evidence for any current system.&amp;#160;&lt;a href="#fnref:1" class="footnote-backref" role="doc-backlink"&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id="fn:2"&gt;
&lt;p&gt;Mark Zuckerberg, &lt;a href="https://www.meta.com/superintelligence/"&gt;&amp;ldquo;Personal Superintelligence&amp;rdquo;&lt;/a&gt;, July 30, 2025. This is a first-party strategic statement, not a defined system-boundary or successor-loop evaluation.&amp;#160;&lt;a href="#fnref:2" class="footnote-backref" role="doc-backlink"&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id="fn:3"&gt;
&lt;p&gt;Anthropic, &lt;a href="https://www.anthropic.com/institute/recursive-self-improvement"&gt;&amp;ldquo;When AI builds itself&amp;rdquo;&lt;/a&gt;, June 4, 2026; OpenAI, &lt;a href="https://deploymentsafety.openai.com/gpt-5-6"&gt;&amp;ldquo;GPT-5.6 System Card&amp;rdquo;&lt;/a&gt;, updated August 3, 2026, and &lt;a href="https://openai.com/index/unlocking-self-improvement-gpt-red/"&gt;&amp;ldquo;Unlocking self-improvement with GPT-Red&amp;rdquo;&lt;/a&gt;, July 15, 2026; METR, &lt;a href="https://evals.alignment.org/notes/2026-07-22-economics-of-recursive-self-improvement/"&gt;&amp;ldquo;Modeling the economics of recursive self-improvement&amp;rdquo;&lt;/a&gt;, July 22, 2026. These sources provide current claim context; the mechanism and evidence assessments use the frozen corpus described above.&amp;#160;&lt;a href="#fnref:3" class="footnote-backref" role="doc-backlink"&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id="fn:4"&gt;
&lt;p&gt;Zhang et al., &lt;a href="https://arxiv.org/abs/2505.22954"&gt;“Darwin Gödel Machine: Open-Ended Evolution of Self-Improving Agents,”&lt;/a&gt; arXiv v3, 2026; Yuan et al., &lt;a href="https://proceedings.mlr.press/v235/yuan24d.html"&gt;“Self-Rewarding Language Models,”&lt;/a&gt; &lt;em&gt;ICML 2024&lt;/em&gt;; Novikov et al., &lt;a href="https://arxiv.org/abs/2506.13131"&gt;“AlphaEvolve: A Coding Agent for Scientific and Algorithmic Discovery,”&lt;/a&gt; first-party technical report, 2025. These sources support the summarized mechanisms; they do not demonstrate a general autonomous successor loop.&amp;#160;&lt;a href="#fnref:4" class="footnote-backref" role="doc-backlink"&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id="fn:5"&gt;
&lt;p&gt;Madaan et al., &lt;a href="https://proceedings.neurips.cc/paper_files/paper/2023/hash/91edff07232fb1b55a505a9e9f6c0ff3-Abstract-Conference.html"&gt;“Self-Refine: Iterative Refinement with Self-Feedback,”&lt;/a&gt; &lt;em&gt;NeurIPS 2023&lt;/em&gt;.&amp;#160;&lt;a href="#fnref:5" class="footnote-backref" role="doc-backlink"&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id="fn:6"&gt;
&lt;p&gt;Huang et al., &lt;a href="https://proceedings.iclr.cc/paper_files/paper/2024/hash/8b4add8b0aa8749d80a34ca5d941c355-Abstract-Conference.html"&gt;“Large Language Models Cannot Self-Correct Reasoning Yet,”&lt;/a&gt; &lt;em&gt;ICLR 2024&lt;/em&gt;; Xie et al., &lt;a href="https://aclanthology.org/2024.emnlp-main.714/"&gt;“Large Language Models Can Self-Correct with Key Condition Verification,”&lt;/a&gt; &lt;em&gt;EMNLP 2024&lt;/em&gt;.&amp;#160;&lt;a href="#fnref:6" class="footnote-backref" role="doc-backlink"&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id="fn:7"&gt;
&lt;p&gt;Shinn et al., &lt;a href="https://arxiv.org/abs/2303.11366"&gt;“Reflexion: Language Agents with Verbal Reinforcement Learning,”&lt;/a&gt; &lt;em&gt;NeurIPS 2023&lt;/em&gt;; Wang et al., &lt;a href="https://arxiv.org/abs/2305.16291"&gt;“Voyager: An Open-Ended Embodied Agent with Large Language Models,”&lt;/a&gt; arXiv preprint; the packet did not establish a proceedings record for Voyager.&amp;#160;&lt;a href="#fnref:7" class="footnote-backref" role="doc-backlink"&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id="fn:8"&gt;
&lt;p&gt;ICLR, &lt;a href="https://iclr.cc/virtual/2026/poster/10007327"&gt;“Darwin Gödel Machine: Open-Ended Evolution of Self-Improving Agents,”&lt;/a&gt; conference record, 2026.&amp;#160;&lt;a href="#fnref:8" class="footnote-backref" role="doc-backlink"&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id="fn:9"&gt;
&lt;p&gt;Zhang et al., &lt;a href="https://arxiv.org/abs/2505.22954"&gt;“Darwin Gödel Machine: Open-Ended Evolution of Self-Improving Agents,”&lt;/a&gt; arXiv v3, 2026. Benchmark numbers are author-reported under the paper&amp;rsquo;s models, budget, and protocol.&amp;#160;&lt;a href="#fnref:9" class="footnote-backref" role="doc-backlink"&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id="fn:10"&gt;
&lt;p&gt;Zhang et al., &lt;a href="https://arxiv.org/abs/2505.22954"&gt;“Darwin Gödel Machine: Open-Ended Evolution of Self-Improving Agents,”&lt;/a&gt; Appendix H, Node 114. The candidate improved the measured result by bypassing a detector; the paper does not claim that this explains the headline benchmark gains.&amp;#160;&lt;a href="#fnref:10" class="footnote-backref" role="doc-backlink"&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id="fn:11"&gt;
&lt;p&gt;Zhang et al., &lt;a href="https://github.com/jennyzzt/dgm"&gt;official DGM repository&lt;/a&gt;, accessed August 15, 2026. Open code and logs are not an independent reproduction.&amp;#160;&lt;a href="#fnref:11" class="footnote-backref" role="doc-backlink"&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id="fn:12"&gt;
&lt;p&gt;Novikov et al., &lt;a href="https://arxiv.org/abs/2506.13131"&gt;“AlphaEvolve: A Coding Agent for Scientific and Algorithmic Discovery,”&lt;/a&gt; first-party technical report, 2025.&amp;#160;&lt;a href="#fnref:12" class="footnote-backref" role="doc-backlink"&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id="fn:13"&gt;
&lt;p&gt;Google DeepMind, &lt;a href="https://github.com/google-deepmind/alphaevolve_results"&gt;AlphaEvolve results and verification repository&lt;/a&gt;, accessed August 15, 2026.&amp;#160;&lt;a href="#fnref:13" class="footnote-backref" role="doc-backlink"&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id="fn:14"&gt;
&lt;p&gt;Yuan et al., &lt;a href="https://proceedings.mlr.press/v235/yuan24d.html"&gt;“Self-Rewarding Language Models,”&lt;/a&gt; &lt;em&gt;ICML 2024&lt;/em&gt;.&amp;#160;&lt;a href="#fnref:14" class="footnote-backref" role="doc-backlink"&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id="fn:15"&gt;
&lt;p&gt;Yuan et al., &lt;a href="https://proceedings.mlr.press/v235/yuan24d.html"&gt;“Self-Rewarding Language Models,”&lt;/a&gt; Table 3 and response-length analysis. The reported instruction-following gains were accompanied by longer responses and uneven movement on other tasks.&amp;#160;&lt;a href="#fnref:15" class="footnote-backref" role="doc-backlink"&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id="fn:16"&gt;
&lt;p&gt;Zheng et al., &lt;a href="https://proceedings.neurips.cc/paper_files/paper/2023/hash/91f18a1287b398d378ef22505bf41832-Abstract-Datasets_and_Benchmarks.html"&gt;“Judging LLM-as-a-Judge with MT-Bench and Chatbot Arena,”&lt;/a&gt; &lt;em&gt;NeurIPS 2023&lt;/em&gt;; Gao et al., &lt;a href="https://proceedings.mlr.press/v202/gao23h.html"&gt;“Scaling Laws for Reward Model Overoptimization,”&lt;/a&gt; &lt;em&gt;ICML 2023&lt;/em&gt;.&amp;#160;&lt;a href="#fnref:16" class="footnote-backref" role="doc-backlink"&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id="fn:17"&gt;
&lt;p&gt;Wang et al., &lt;a href="https://arxiv.org/abs/2408.02666"&gt;“Self-Taught Evaluators,”&lt;/a&gt; arXiv preprint, 2024; Lu et al., &lt;a href="https://arxiv.org/abs/2408.06292"&gt;“The AI Scientist: Towards Fully Automated Open-Ended Scientific Discovery,”&lt;/a&gt; arXiv preprint, 2024. The reviewed records did not establish an independent reproduction of either system.&amp;#160;&lt;a href="#fnref:17" class="footnote-backref" role="doc-backlink"&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id="fn:18"&gt;
&lt;p&gt;Davidson et al., &lt;a href="https://www.nber.org/papers/w35155"&gt;“When Does Automating AI Research Produce Explosive Growth? Feedback Loops in Innovation Networks,”&lt;/a&gt; NBER Working Paper 35155, 2026. This is a conditional model, not empirical evidence that current systems follow its fastest regimes.&amp;#160;&lt;a href="#fnref:18" class="footnote-backref" role="doc-backlink"&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id="fn:19"&gt;
&lt;p&gt;Shumailov et al., &lt;a href="https://www.nature.com/articles/s41586-024-07566-y"&gt;“AI models collapse when trained on recursively generated data,”&lt;/a&gt; &lt;em&gt;Nature&lt;/em&gt; 631, 2024; see also the &lt;a href="https://www.nature.com/articles/s41586-025-08905-3"&gt;2025 correction&lt;/a&gt;.&amp;#160;&lt;a href="#fnref:19" class="footnote-backref" role="doc-backlink"&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;</content:encoded></item><item><title>Can faster AI inference give developers their flow back?</title><link>https://viborc.com/can-faster-ai-inference-give-developers-their-flow-back/</link><pubDate>Thu, 13 Aug 2026 13:16:42 +0000</pubDate><guid isPermaLink="true">https://viborc.com/can-faster-ai-inference-give-developers-their-flow-back/</guid><description>Faster coding models can cut dead time, but developer flow still depends on relevance, tools, tests, review, control, and understanding.</description><content:encoded>&lt;section class="article-summary" aria-labelledby="article-summary-0"&gt;
 &lt;p class="meta-label article-summary__eyebrow"&gt;TL;DR&lt;/p&gt;
 &lt;h2 class="article-summary__title" id="article-summary-0"&gt;The short version&lt;/h2&gt;
 &lt;div class="article-summary__intro"&gt;&lt;strong&gt;This is a long read, so here is what I learned.&lt;/strong&gt; I did not find a latency threshold that gives developers their flow back. The practical answer depends on whether the developer is waiting inside a tight back-and-forth with the assistant, or has handed off a bounded task and will return when it is ready for review.&lt;/div&gt;
 &lt;div class="article-summary__body"&gt;&lt;ul&gt;
&lt;li&gt;The closest coding-product experiment found modest engagement gains after latency fell, but it did not measure flow, quality, or productivity. No study I found isolated coding-assistant latency while measuring the full path to a tested, understood, trusted change.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Interactive work&lt;/strong&gt; is the back-and-forth loop: ask, read, edit, test, ask again. Faster output can remove dead time here, provided it remains relevant and correct. I would measure time to first useful output and then time to a tested, understood, accepted change.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Delegated work&lt;/strong&gt; means handing an agent a bounded task while it inspects files, edits, runs tools and tests, and retries in the background. Here token speed can matter less than whether the result comes back review-ready, with tests, provenance, uncertainty, and enough explanation to support understanding and ownership.&lt;/li&gt;
&lt;li&gt;Across the 30 research and technical sources in the structured review, no study covers all six requirements: randomized assistant latency, real programming work, validated psychological flow, observed behavior, objective correctness, and a tested, understood change the developer can accept. &lt;a href="#the-experiment-i-still-want-to-see"&gt;Later in the piece&lt;/a&gt;, I map the gap study by study and describe the experiment that could answer it.&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/section&gt;

&lt;div class="flow-update" role="note" aria-label="Update, August 13"&gt;
&lt;p&gt;&lt;strong class="flow-update__label"&gt;Update, August 13:&lt;/strong&gt; On the same day I published this essay, OpenAI opened a limited API preview of GPT-5.6 Sol Ultrafast for selected customers, powered by Cerebras. The companies report up to 750 output tokens a second, and OpenAI says that is up to 14 times faster than Standard processing.&lt;/p&gt;
&lt;p&gt;Cerebras also says its own July 31 Standard-versus-Ultrafast Codex run produced a 5.6-fold end-to-end speedup on GDP-Val without quality degradation. That made the question less abstract: does that kind of speed change the feeling of working with an AI?&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;I had also seen developers on social media describe a stranger trade. I did not read those posts as nostalgia for typing every line. The tension was that AI could put more code on the screen while the work felt less like solving a problem and more like waiting, checking, reviewing, and managing models and agent harnesses. I wanted to know whether lower latency or higher token throughput could tighten that loop again. Those posts gave me the question, not evidence of how common the experience was.&lt;/p&gt;
&lt;p&gt;The February 2026 announcement for GPT-5.3-Codex-Spark describes a research-preview model served on Cerebras WSE-3 hardware, with a 128,000-token text-only context window and work across the stack to reduce time to first token, per-token latency, and client-server overhead. OpenAI presents it as a model for targeted, interactive coding. It also says Spark does not automatically run tests unless asked.&lt;sup class="fn" id="fnref:1"&gt;&lt;a class="footnote-ref" href="#fn:1" role="doc-noteref"&gt;1&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;
&lt;p&gt;That final detail changed the question for me. A model can finish talking before the code has been compiled, tested, reviewed, or even understood. The new Sol preview makes the question harder to wave away as a small-model edge case. But the launch posts still give us vendor benchmarks, internal use cases, and early-customer accounts. They do not measure programming flow, review effort, later understanding, or time to a tested and accepted change.&lt;/p&gt;
&lt;p&gt;I use two kinds of work throughout this piece. In interactive work, the developer stays in the loop: ask, read, edit, test, and ask again. In delegated work, the developer hands an agent a bounded task, lets it inspect files and run tools and tests, then returns when there is something ready to review. The human waits in different places.&lt;/p&gt;
&lt;p class="flow-thesis"&gt;&lt;span&gt;Token speed belongs to the machine.&lt;/span&gt;&lt;span&gt;Flow belongs to the person using it.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;I wanted to know whether reducing latency could help preserve the conditions for flow. Before I could answer that, I had to be clear about what flow meant here. The obvious story is that less waiting means less friction. In a tight interactive loop, where the next move is blocked on a useful response, that may be true. But it is only one kind of work.&lt;/p&gt;
&lt;p&gt;Flow is not a waiting-time metric. The response still has to belong to the task, and the resulting code has to survive tests, review, and the developer's own understanding. With delegated work, generation may not even be the wait that holds the human up.&lt;/p&gt;
&lt;p&gt;So I started following the wait through the whole job: what it interrupts, and what the developer has in hand when it ends.&lt;/p&gt;
&lt;h2&gt;Flow is not the same as speed&lt;/h2&gt;
&lt;p&gt;&lt;em&gt;Flow&lt;/em&gt; is doing too much work in this conversation. So I needed to separate it from a few neighboring terms.&lt;/p&gt;
&lt;dl class="flow-glossary" aria-label="Terms used in this essay"&gt;
&lt;div&gt;
&lt;dt&gt;Flow&lt;/dt&gt;
&lt;dd&gt;An absorbing activity state associated with fluency, concentration, a workable balance between challenge and skill, clear goals, feedback, and perceived control. Researchers measure it with multi-item instruments such as the Flow Short Scale. It is not inferred from a stopwatch or from the absence of a browser-window switch.&lt;sup class="fn" id="fnref:2"&gt;&lt;a class="footnote-ref" href="#fn:2" role="doc-noteref"&gt;2&lt;/a&gt;&lt;/sup&gt;&lt;/dd&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;dt&gt;Focus&lt;/dt&gt;
&lt;dd&gt;Continuity of attention. It may be necessary for flow, but a developer can focus intensely on a frustrating incident without experiencing flow.&lt;/dd&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;dt&gt;Engagement&lt;/dt&gt;
&lt;dd&gt;Continued use, return behavior, or interaction with a product. A faster tool may increase engagement without improving the code.&lt;/dd&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;dt&gt;Productivity&lt;/dt&gt;
&lt;dd&gt;An output divided by some resource, usually time. The answer changes depending on whether the output is a correct task, lines, commits, pull requests, deployed features, or maintained software.&lt;/dd&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;dt&gt;Trusted change&lt;/dt&gt;
&lt;dd&gt;A term I use in this essay for a change that has passed the checks appropriate to its risk, and that the responsible developer has reviewed, understands well enough to own, and accepts. This is an operational proposal, not a validated psychological scale. Tests are necessary in many workflows, but passing them does not prove comprehension or trust.&lt;/dd&gt;
&lt;/div&gt;
&lt;/dl&gt;
&lt;p&gt;These outcomes are not interchangeable. A product team may count a return visit as engagement, while a repository study calls more commits productivity. Serving benchmarks report machine time. On its own, none of those numbers tells me whether a developer experienced flow.&lt;/p&gt;
&lt;h2&gt;One latency number hides several clocks&lt;/h2&gt;
&lt;p&gt;Tokens per second describes what happens after generation begins. In day-to-day work, the developer experiences a much longer chain:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;request, queue, routing, and context preparation;&lt;/li&gt;
&lt;li&gt;time to the first &lt;em&gt;useful&lt;/em&gt; output, not merely the first token;&lt;/li&gt;
&lt;li&gt;generation of the remaining answer or patch;&lt;/li&gt;
&lt;li&gt;tool calls, builds, tests, retries, and external services; and&lt;/li&gt;
&lt;li&gt;human review, comprehension, correction, and acceptance.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;The chain behaves differently in two kinds of work. During a small interactive edit, the developer may be blocked until the first useful response. A delegated migration changes the picture: the agent can generate and run tools while the developer does something else. Attention returns when the work is ready for review. Faster generation has a very different value in those two situations.&lt;/p&gt;
&lt;figure class="evidence-figure evidence-figure--editorial evidence-figure--flow-pipeline"&gt;
&lt;div class="table-scroll" role="region" tabindex="0" aria-label="Scrollable path from a coding request to a trusted change" aria-describedby="fig-flow-pipeline-scroll-hint"&gt;
&lt;p class="table-scroll__hint" id="fig-flow-pipeline-scroll-hint"&gt;Scroll horizontally to read the full diagram&lt;/p&gt;
&lt;svg viewBox="0 0 680 500" style="min-width:42.5rem" role="img" aria-label="Interactive and delegated paths from a coding request to a trusted change" aria-describedby="fig-flow-pipeline-desc" xmlns="http://www.w3.org/2000/svg"&gt;
&lt;desc id="fig-flow-pipeline-desc"&gt;Two workflows contain the same six stages: request and queue, first useful output, generation, tools and tests, review and understanding, and trusted change. In interactive work, early waiting is on the developer's critical path. In delegated work, generation and tool execution can overlap other activity, while review and understanding return to the critical path before acceptance. The diagram assigns no invented time proportions.&lt;/desc&gt;
&lt;defs&gt;&lt;marker id="flow-arrow" viewBox="0 0 8 8" refX="7" refY="4" markerWidth="7" markerHeight="7" orient="auto"&gt;&lt;path d="M0,0.6 L7.4,4 L0,7.4 Z" fill="var(--ink-soft)"/&gt;&lt;/marker&gt;&lt;/defs&gt;
&lt;text x="28" y="38" font-family="var(--font-mono)" font-size="12" letter-spacing="0.08em" fill="var(--ink-soft)"&gt;FROM REQUEST TO TRUSTED CHANGE&lt;/text&gt;
&lt;text x="28" y="76" font-family="var(--font-display)" font-size="22" font-weight="650" fill="var(--ink)"&gt;Interactive co-editing&lt;/text&gt;
&lt;text x="28" y="100" font-family="var(--font-body)" font-size="14" fill="var(--ink-soft)"&gt;The next human move is often blocked on useful output.&lt;/text&gt;
&lt;g data-reveal="true"&gt;
&lt;rect x="28" y="122" width="92" height="62" rx="6" fill="color-mix(in srgb, var(--figure-apricot) 20%, var(--field-raised))" stroke="var(--figure-apricot)"/&gt;&lt;text x="74" y="148" text-anchor="middle" font-family="var(--font-body)" font-size="13" fill="var(--ink)"&gt;Request&lt;/text&gt;&lt;text x="74" y="167" text-anchor="middle" font-family="var(--font-body)" font-size="13" fill="var(--ink)"&gt;&amp;amp; queue&lt;/text&gt;
&lt;line x1="126" y1="153" x2="142" y2="153" stroke="var(--ink-soft)" marker-end="url(#flow-arrow)"/&gt;
&lt;rect x="150" y="122" width="92" height="62" rx="6" fill="color-mix(in srgb, var(--figure-apricot) 20%, var(--field-raised))" stroke="var(--figure-apricot)"/&gt;&lt;text x="196" y="148" text-anchor="middle" font-family="var(--font-body)" font-size="13" fill="var(--ink)"&gt;First useful&lt;/text&gt;&lt;text x="196" y="167" text-anchor="middle" font-family="var(--font-body)" font-size="13" fill="var(--ink)"&gt;output&lt;/text&gt;
&lt;line x1="248" y1="153" x2="264" y2="153" stroke="var(--ink-soft)" marker-end="url(#flow-arrow)"/&gt;
&lt;rect x="272" y="122" width="80" height="62" rx="6" fill="color-mix(in srgb, var(--figure-apricot) 20%, var(--field-raised))" stroke="var(--figure-apricot)"/&gt;&lt;text x="312" y="157" text-anchor="middle" font-family="var(--font-body)" font-size="13" fill="var(--ink)"&gt;Generate&lt;/text&gt;
&lt;line x1="358" y1="153" x2="374" y2="153" stroke="var(--ink-soft)" marker-end="url(#flow-arrow)"/&gt;
&lt;rect x="382" y="122" width="86" height="62" rx="6" fill="var(--field-deep)" stroke="var(--hairline-strong)"/&gt;&lt;text x="425" y="148" text-anchor="middle" font-family="var(--font-body)" font-size="13" fill="var(--ink)"&gt;Tools&lt;/text&gt;&lt;text x="425" y="167" text-anchor="middle" font-family="var(--font-body)" font-size="13" fill="var(--ink)"&gt;&amp;amp; tests&lt;/text&gt;
&lt;line x1="474" y1="153" x2="490" y2="153" stroke="var(--ink-soft)" marker-end="url(#flow-arrow)"/&gt;
&lt;rect x="498" y="122" width="96" height="62" rx="6" fill="color-mix(in srgb, var(--figure-sage) 16%, var(--field-raised))" stroke="var(--figure-sage)"/&gt;&lt;text x="546" y="148" text-anchor="middle" font-family="var(--font-body)" font-size="13" fill="var(--ink)"&gt;Review &amp;amp;&lt;/text&gt;&lt;text x="546" y="167" text-anchor="middle" font-family="var(--font-body)" font-size="13" fill="var(--ink)"&gt;understand&lt;/text&gt;
&lt;line x1="600" y1="153" x2="612" y2="153" stroke="var(--ink-soft)" marker-end="url(#flow-arrow)"/&gt;
&lt;circle cx="642" cy="153" r="25" fill="color-mix(in srgb, var(--figure-sage) 32%, var(--field-raised))" stroke="var(--figure-sage)"/&gt;&lt;path d="M632 153l7 7 14-17" fill="none" stroke="var(--ink)" stroke-width="2.5"/&gt;
&lt;path d="M28 202v12h324v-12" fill="none" stroke="var(--figure-apricot)"/&gt;&lt;text x="190" y="235" text-anchor="middle" font-family="var(--font-mono)" font-size="11" fill="var(--ink-soft)"&gt;COMMONLY BLOCKED HUMAN TIME&lt;/text&gt;
&lt;/g&gt;
&lt;line x1="28" y1="266" x2="652" y2="266" stroke="var(--hairline)"/&gt;
&lt;text x="28" y="306" font-family="var(--font-display)" font-size="22" font-weight="650" fill="var(--ink)"&gt;Delegated agent work&lt;/text&gt;
&lt;text x="28" y="330" font-family="var(--font-body)" font-size="14" fill="var(--ink-soft)"&gt;Machine work can overlap another task; review returns to the critical path.&lt;/text&gt;
&lt;g data-reveal="true"&gt;
&lt;rect x="28" y="352" width="92" height="62" rx="6" fill="var(--field-deep)" stroke="var(--hairline-strong)"/&gt;&lt;text x="74" y="378" text-anchor="middle" font-family="var(--font-body)" font-size="13" fill="var(--ink)"&gt;Request&lt;/text&gt;&lt;text x="74" y="397" text-anchor="middle" font-family="var(--font-body)" font-size="13" fill="var(--ink)"&gt;&amp;amp; queue&lt;/text&gt;
&lt;line x1="126" y1="383" x2="142" y2="383" stroke="var(--ink-soft)" marker-end="url(#flow-arrow)"/&gt;
&lt;rect x="150" y="352" width="92" height="62" rx="6" fill="var(--field-deep)" stroke="var(--hairline-strong)"/&gt;&lt;text x="196" y="378" text-anchor="middle" font-family="var(--font-body)" font-size="13" fill="var(--ink)"&gt;First useful&lt;/text&gt;&lt;text x="196" y="397" text-anchor="middle" font-family="var(--font-body)" font-size="13" fill="var(--ink)"&gt;output&lt;/text&gt;
&lt;line x1="248" y1="383" x2="264" y2="383" stroke="var(--ink-soft)" marker-end="url(#flow-arrow)"/&gt;
&lt;rect x="272" y="352" width="80" height="62" rx="6" fill="color-mix(in srgb, var(--figure-periwinkle) 16%, var(--field-raised))" stroke="var(--figure-periwinkle)"/&gt;&lt;text x="312" y="387" text-anchor="middle" font-family="var(--font-body)" font-size="13" fill="var(--ink)"&gt;Generate&lt;/text&gt;
&lt;line x1="358" y1="383" x2="374" y2="383" stroke="var(--ink-soft)" marker-end="url(#flow-arrow)"/&gt;
&lt;rect x="382" y="352" width="86" height="62" rx="6" fill="color-mix(in srgb, var(--figure-periwinkle) 16%, var(--field-raised))" stroke="var(--figure-periwinkle)"/&gt;&lt;text x="425" y="378" text-anchor="middle" font-family="var(--font-body)" font-size="13" fill="var(--ink)"&gt;Tools&lt;/text&gt;&lt;text x="425" y="397" text-anchor="middle" font-family="var(--font-body)" font-size="13" fill="var(--ink)"&gt;&amp;amp; tests&lt;/text&gt;
&lt;line x1="474" y1="383" x2="490" y2="383" stroke="var(--ink-soft)" marker-end="url(#flow-arrow)"/&gt;
&lt;rect x="498" y="352" width="96" height="62" rx="6" fill="color-mix(in srgb, var(--figure-sage) 16%, var(--field-raised))" stroke="var(--figure-sage)"/&gt;&lt;text x="546" y="378" text-anchor="middle" font-family="var(--font-body)" font-size="13" fill="var(--ink)"&gt;Review &amp;amp;&lt;/text&gt;&lt;text x="546" y="397" text-anchor="middle" font-family="var(--font-body)" font-size="13" fill="var(--ink)"&gt;understand&lt;/text&gt;
&lt;line x1="600" y1="383" x2="612" y2="383" stroke="var(--ink-soft)" marker-end="url(#flow-arrow)"/&gt;
&lt;circle cx="642" cy="383" r="25" fill="color-mix(in srgb, var(--figure-sage) 32%, var(--field-raised))" stroke="var(--figure-sage)"/&gt;&lt;path d="M632 383l7 7 14-17" fill="none" stroke="var(--ink)" stroke-width="2.5"/&gt;
&lt;path d="M272 432v12h196v-12" fill="none" stroke="var(--figure-periwinkle)"/&gt;&lt;text x="370" y="465" text-anchor="middle" font-family="var(--font-mono)" font-size="11" fill="var(--ink-soft)"&gt;POTENTIALLY PARALLEL MACHINE TIME&lt;/text&gt;
&lt;/g&gt;
&lt;/svg&gt;
&lt;/div&gt;
&lt;figcaption&gt;The same pipeline has a different human critical path in interactive and delegated work. Faster generation helps most where useful output blocks the next human action. No stage widths imply measured proportions.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;Agent traces make the machine side of that chain visible. TraceLab's open workload contains 4,265 sessions from 43 users, 357,161 model steps, and 432,510 tool calls across Claude Code and Codex. Only about 4% of tool calls lasted more than one minute, but those calls accounted for 85% of tool time.&lt;sup class="fn" id="fnref:3"&gt;&lt;a class="footnote-ref" href="#fn:3" role="doc-noteref"&gt;3&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;
&lt;p&gt;In a separate systems paper, PASTE reports that tools consumed 45% to 57% of end-to-end time in selected agent workloads. Its speculative execution design reduced average latency by as much as 43.5% and p99 by as much as 55.4%, while an audit blocked 602 potentially side-effecting actions among more than 20,000.&lt;sup class="fn" id="fnref:4"&gt;&lt;a class="footnote-ref" href="#fn:4" role="doc-noteref"&gt;4&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;
&lt;p&gt;Those traces describe infrastructure, not attention.&lt;/p&gt;
&lt;p&gt;They cannot tell us whether a developer stared at the screen, read documentation, reviewed another patch, or went for coffee. For this question, a trace gives us elapsed machine time, not what the developer did with it.&lt;/p&gt;
&lt;h2&gt;What changes when the wait changes&lt;/h2&gt;
&lt;p&gt;A warning before we go further: what follows is a detailed literature review, and there are a lot of studies in it. I kept them because no single paper measures model latency, the developer's experience of flow, and the path to a tested, understood change together. Each catches a different part of the question.&lt;/p&gt;
&lt;h3&gt;The cleanest latency experiment was not about code&lt;/h3&gt;
&lt;p&gt;At CHI 2026, Tan and colleagues published the cleanest isolated response-time study I found. It was preregistered and randomized, and it held the model and output rate constant. It came close to the experiment this question needs, except that nobody was programming.&lt;sup class="fn" id="fnref:5"&gt;&lt;a class="footnote-ref" href="#fn:5" role="doc-noteref"&gt;5&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;
&lt;p&gt;The final analysis assigned 240 US participants to knowledge-creation or advice tasks. The model was GPT-4o. By the time I read the paper, that already felt old. It began responding after 2, 9, or 20 seconds and then generated at a fixed 25 tokens per second. That design separates the wait for a response from the speed of the response itself.&lt;/p&gt;
&lt;p&gt;The researchers had 309 otherwise valid interaction logs before excluding 69 cases, including 63 whose delivered delay missed the assigned latency band. Because most exclusions concern the treatment itself, the result needs to be generalized carefully.&lt;/p&gt;
&lt;p&gt;The fastest condition did not improve logged interaction behavior or NASA-TLX workload. Participants rated the 2-second response as less thoughtful than the 9-second response, 5.76 versus 6.09, and less thoughtful than the 20-second response, 5.76 versus 6.11. They rated the 9-second response more useful than the 2-second response, 6.44 versus 6.19. There was no monotonic pattern, much less evidence that nine seconds is an ideal delay.&lt;/p&gt;
&lt;p&gt;Response time communicates something too. An immediate answer can feel insufficiently considered, while a pause can set an expectation of effort. That is a UX effect, not evidence that the model thought harder. Coding assistants should not fake deliberation, but task type, expectation, and the experience of waiting can change how a response is received.&lt;/p&gt;
&lt;h3&gt;The coding A/B measured engagement&lt;/h3&gt;
&lt;p&gt;The closest real-product evidence comes from Microsoft's Visual Studio Code team. In June 2026, it reported moving GitHub Copilot requests from HTTP to WebSockets while keeping the same product-model combinations. Median time to first token fell 19.46% for GPT-5.3-Codex and 16.37% for GPT-5.4. Median completion time fell 13.55% and 11.74%, respectively.&lt;sup class="fn" id="fnref:6"&gt;&lt;a class="footnote-ref" href="#fn:6" role="doc-noteref"&gt;6&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;
&lt;p&gt;Microsoft also reported statistically significant increases in active users of 1.27% and 2.17%, and increases in two-day engagement of 1.90% and 3.14%. Those are modest changes, but they moved in the direction a latency argument would predict.&lt;/p&gt;
&lt;p&gt;The experiment stops at product behavior. The post does not disclose sample size, absolute latency baselines, allocation details, a complete analysis plan, or output-quality checks. More active use could mean lower frustration, novelty, more attempts, or greater utility. Flow, productivity, and software quality were not measured, so the post cannot tell us what happened to them.&lt;/p&gt;
&lt;p&gt;Copilot Arena offers another large field signal. Its platform served 4.5 million paired code suggestions and recorded 11,604 votes from 1,642 users. Latency-aware sampling reduced median experienced latency from 1.61 to 1.07 seconds. In a preference model, the latency coefficient was -0.17 with a 95% interval from -0.33 to 0.00.&lt;sup class="fn" id="fnref:7"&gt;&lt;a class="footnote-ref" href="#fn:7" role="doc-noteref"&gt;7&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;
&lt;p&gt;That result is likely compatible with a small preference cost for waiting, but the interval touches zero, models and outputs varied, and the platform waited for the slower member of each pair. Flow and trusted completion were outside the study.&lt;/p&gt;
&lt;p&gt;So the evidence gave me an estimate compatible with a small preference cost for waiting and a modest engagement signal, not the threshold I thought I was looking for.&lt;/p&gt;
&lt;h2&gt;An instant interruption can still break the work&lt;/h2&gt;
&lt;p&gt;Feedback supports flow when it belongs to the task. In a controlled computer task, relevant feedback produced higher flow ratings than either no feedback or randomized feedback.&lt;sup class="fn" id="fnref:8"&gt;&lt;a class="footnote-ref" href="#fn:8" role="doc-noteref"&gt;8&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;
&lt;p&gt;Nadj and colleagues found a similar complication in office work in their study. Across 166 self-report observations and 129 ECG observations, relevance changed the relationship between interruption frequency, self-reported flow, and heart-rate variability. Frequent interruptions were not uniformly harmful. The physiological measure also failed to correlate with performance or self-reported flow, so one sensor cannot act as ground truth.&lt;sup class="fn" id="fnref:9"&gt;&lt;a class="footnote-ref" href="#fn:9" role="doc-noteref"&gt;9&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;
&lt;p&gt;That sent me to the programming studies, where timing and relevance arrive bundled together.&lt;/p&gt;
&lt;p&gt;Kuo and colleagues studied proactive assistance over five days with 15 professional developers. They recorded 229 interventions and 5,732 interaction points. Post-commit interventions drew 52% engagement, while suggestions after a declined edit were dismissed 62% of the time. In sampled episodes, proactive interpretation averaged 45.4 seconds and reactive episodes 101.4 seconds.&lt;sup class="fn" id="fnref:10"&gt;&lt;a class="footnote-ref" href="#fn:10" role="doc-noteref"&gt;10&lt;/a&gt;&lt;/sup&gt; Timing was not randomized, so the duration difference is associative. The moment of intervention belongs beside its speed.&lt;/p&gt;
&lt;p&gt;The same tension showed up again when the assistant did not wait to be asked. Chen and colleagues compared reactive and proactive assistants with 65 students completing short Python tasks. Some proactive conditions improved completed test cases by 11.6 to 18 percentage points. Yet 90% preferred the user-invoked "Suggest" design and only 47% preferred the persistent design, which participants often described as distracting or annoying.&lt;sup class="fn" id="fnref:11"&gt;&lt;a class="footnote-ref" href="#fn:11" role="doc-noteref"&gt;11&lt;/a&gt;&lt;/sup&gt; The persistent condition changed delay, suggestion frequency, and guidance together, so no latency-only conclusion is possible.&lt;/p&gt;
&lt;p&gt;EditFlow's name is a trap in this discussion. Its "developer flow" is an inferred edit sequence composed of Keep, Jump, Revert, and Break states. It is not psychological flow. In separate benchmark resource measurements, the sequence-aware recommender added an average of about 1.71 seconds and 6,580 tokens per query. A 32-student task study then reported faster completion on some tasks, while several task-level contrasts were null.&lt;sup class="fn" id="fnref:12"&gt;&lt;a class="footnote-ref" href="#fn:12" role="doc-noteref"&gt;12&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;
&lt;p&gt;Extra inference work can be worth the wait when it produces a more relevant next edit. That is very different from saying slower is better.&lt;/p&gt;
&lt;p&gt;Two routine data-entry experiments run against the instinct to remove every pause. Brumby and colleagues found that a 10-second post-interruption lockout reduced resumption errors.&lt;sup class="fn" id="fnref:13"&gt;&lt;a class="footnote-ref" href="#fn:13" role="doc-noteref"&gt;13&lt;/a&gt;&lt;/sup&gt; These were not programming tasks, and a lockout is not model latency. Still, the result is a useful counterexample: zero delay does not automatically produce the best overall performance, and the delay is not the useful ingredient here.&lt;/p&gt;
&lt;p&gt;Relevance, control, and cognitive preparation change what the delay means. An irrelevant suggestion delivered instantly remains irrelevant, except that a faster system may now interrupt more often.&lt;/p&gt;
&lt;p&gt;Most of the coding evidence here concerns code completion or short suggested snippets. Long-horizon agent work changes the interaction again, and the evidence has not caught up.&lt;/p&gt;
&lt;h3&gt;What developers actually report about flow&lt;/h3&gt;
&lt;p&gt;The same visible work pattern can accompany very different internal experiences. And that's exactly the thing that makes telemetry both tempting and dangerous.&lt;/p&gt;
&lt;p&gt;Brown and colleagues first ran an 18-engineer diary study, then validated their log-based method with 51 developers over 97 days. Related-action telemetry could help estimate focused work, but nearly identical logs were sometimes described retrospectively as flow and sometimes as non-flow.&lt;sup class="fn" id="fnref:14"&gt;&lt;a class="footnote-ref" href="#fn:14" role="doc-noteref"&gt;14&lt;/a&gt;&lt;/sup&gt; This is why the tempting metric "no context switch" cannot stand in for flow. Telemetry still needs human report, and human report has its own recall and reactivity limits.&lt;/p&gt;
&lt;p&gt;This is where I wanted the quantitative and qualitative evidence next to each other. The logs can show patterns across the work, while the interviews bring in how developers describe the conditions around flow. Ritonummi and colleagues identified low challenge, interruptions, time pressure, constrained exploration, and poor tool experience as perceived barriers in software work. In interviews with 12 IT professionals, Lange, Cajander, and Normark found that generative AI could support exploration and rapid feedback, while unclear goals, complex tasks, and inaccurate output disrupted flow.&lt;sup class="fn" id="fnref:15"&gt;&lt;a class="footnote-ref" href="#fn:15" role="doc-noteref"&gt;15&lt;/a&gt;&lt;/sup&gt; Neither study manipulated assistant latency.&lt;/p&gt;
&lt;p&gt;Then the newest longitudinal study produced the most mixed picture. Vella and Blincoe surveyed 158 professional developers, followed up with 101, and matched 95 continuing users. Perceived feedback loops improved by 0.21 after correction for multiple comparisons. Flow declined by 0.18 and cognitive load by 0.15, but neither adjusted result was statistically significant. Among individuals, 27% reported improved flow and 35% reported decline.&lt;sup class="fn" id="fnref:16"&gt;&lt;a class="footnote-ref" href="#fn:16" role="doc-noteref"&gt;16&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;
&lt;p&gt;The sample had roughly 40% attrition and relied on self-report. Because the adjusted flow change was nonsignificant and individuals moved in both directions, the average decline does not establish that AI reduces flow. A separate feedback-loop item improved. Latency was never isolated.&lt;/p&gt;
&lt;aside class="article-newsletter-cta" aria-label="Newsletter signup"&gt;
 &lt;div class="newsletter-signup newsletter-signup--article"&gt;
 &lt;div class="newsletter-signup__heading"&gt;
 &lt;p class="meta-label" id="newsletter-article-title"&gt;Newsletter&lt;/p&gt;
 
 &lt;p class="newsletter-signup__title"&gt;I occasionally write and share things like this.&lt;/p&gt;
 
 &lt;p class="newsletter-signup__intro"&gt;If you find them useful, leave your email here. I only send something when I have something worth sharing.&lt;/p&gt;
 
 &lt;/div&gt;

 &lt;form class="ph-sensitive ph-no-capture ph-no-autocapture ph-no-rageclick ph-no-deadclick" action="https://viborc.com/api/newsletter" method="post" accept-charset="UTF-8" aria-labelledby="newsletter-article-title" data-form="newsletter" data-analytics-event="newsletter_submit" data-newsletter-placement="article" data-ph-no-autocapture&gt;
 &lt;input name="form" type="hidden" value="newsletter-v1"&gt;
 &lt;input name="source" type="hidden" value="article"&gt;
 &lt;input name="return_path" type="hidden" value="/can-faster-ai-inference-give-developers-their-flow-back/"&gt;
 &lt;input name="consent" type="hidden" value="yes"&gt;

 &lt;div class="form-trap" aria-hidden="true"&gt;
 &lt;label for="newsletter-article-company"&gt;Leave this field empty&lt;/label&gt;
 &lt;input id="newsletter-article-company" name="company_website" type="text" tabindex="-1" autocomplete="off"&gt;
 &lt;/div&gt;

 &lt;div class="newsletter-signup__controls"&gt;
 &lt;label class="visually-hidden" for="newsletter-article-email"&gt;Email address&lt;/label&gt;
 &lt;input id="newsletter-article-email" name="email" type="email" autocomplete="email" inputmode="email" maxlength="254" placeholder="you@example.com" aria-describedby="newsletter-article-note" required&gt;
 &lt;button type="submit"&gt;Subscribe&lt;/button&gt;
 &lt;/div&gt;

 &lt;p class="newsletter-signup__note" id="newsletter-article-note"&gt;
 Confirm once by email; unsubscribe at any time.
 See the &lt;a href="https://viborc.com/privacy-policy/"&gt;privacy policy&lt;/a&gt;.
 &lt;/p&gt;
 &lt;p class="submission-form__status" role="status" aria-live="polite" aria-atomic="true" data-form-status hidden&gt;&lt;/p&gt;
 &lt;/form&gt;

 
 &lt;div class="form-outcomes" aria-live="polite" aria-atomic="true"&gt;
 &lt;p class="form-outcome" id="newsletter-article-check-email" tabindex="-1"&gt;Check your inbox and follow the confirmation link. You are not subscribed until that step is complete.&lt;/p&gt;
 &lt;p class="form-outcome form-outcome--error" id="newsletter-article-error" tabindex="-1"&gt;The subscription request could not be completed. Please try again later.&lt;/p&gt;
 &lt;/div&gt;
 
&lt;/div&gt;

&lt;/aside&gt;

&lt;h2&gt;Faster output can push the wait into review&lt;/h2&gt;
&lt;p&gt;So, let's consider the speed of the output.&lt;/p&gt;
&lt;p&gt;Fan and colleagues compared 36 AI-assisted participants with 24 controls across three Python tasks. The AI group reported 18.2 fewer NASA-TLX points, finished about 22% faster, and had modeled odds of correctness 1.71 times as high. At the same time, a verification-load composite tracked increasing stress and fatigue and partially mediated those outcomes.&lt;sup class="fn" id="fnref:17"&gt;&lt;a class="footnote-ref" href="#fn:17" role="doc-noteref"&gt;17&lt;/a&gt;&lt;/sup&gt; Latency was not manipulated. The study shows that assistance can improve task outcomes while checking and reviewing can still carry a psychological cost. This is study evidence of the same tension, but it still does not tell us how common the experience is or whether latency caused it.&lt;/p&gt;
&lt;p&gt;A within-participant study of 20 regular Copilot users shows how quickly the clocks can split. Correctness was 25% with interactive Copilot assistance and 60% with OpenHands. Among correct tasks, hands-on effort was 25.1 minutes versus 12.5 minutes. Yet the agent's total elapsed time averaged 27.9 minutes, and the comparative flow item was null.&lt;sup class="fn" id="fnref:18"&gt;&lt;a class="footnote-ref" href="#fn:18" role="doc-noteref"&gt;18&lt;/a&gt;&lt;/sup&gt; Automation reduced touch time more clearly than wall-clock time. The study did not establish a corresponding flow benefit.&lt;/p&gt;
&lt;p&gt;The understanding studies worry me more.&lt;/p&gt;
&lt;p&gt;I started this piece thinking about seconds spent waiting. But a developer can save those seconds and still arrive at a change they cannot explain or safely own. At that point, the tool has moved work, and perhaps risk, beyond the place where a throughput chart usually stops.&lt;/p&gt;
&lt;p&gt;In the preprint &lt;em&gt;(Im)Paired Programming&lt;/em&gt;, 54 students were assigned to a repository-acting agent or a chatbot for an initial web task. Agent users were faster and more accurate on that task but performed worse on recall comprehension. Reasoning comprehension and a later unaided extension did not differ significantly.&lt;sup class="fn" id="fnref:19"&gt;&lt;a class="footnote-ref" href="#fn:19" role="doc-noteref"&gt;19&lt;/a&gt;&lt;/sup&gt; The condition changed agency, interface, repository access, and required writing together, so latency cannot explain the result.&lt;/p&gt;
&lt;p&gt;Shen and Tamkin randomized 52 junior Python programmers using an unfamiliar library. The AI group finished roughly two minutes sooner, a nonsignificant difference, and scored 50 versus 67 on an immediate comprehension quiz, with a reported standardized effect of 0.738 and &lt;em&gt;p&lt;/em&gt;=.01.&lt;sup class="fn" id="fnref:20"&gt;&lt;a class="footnote-ref" href="#fn:20" role="doc-noteref"&gt;20&lt;/a&gt;&lt;/sup&gt; This is a small, immediate study from a model vendor, so durable skill loss remains unproven. Completion time and understanding belong in separate columns.&lt;/p&gt;
&lt;p&gt;Then there is the three-week workplace trial &lt;em&gt;Dear Diary&lt;/em&gt;. It began with 228 eligible participants and ended with 106 protocol-adherent cases: 29 controls, 35 first-time Copilot users, and 42 continuing users. Liking and perceived usefulness rose in the treatment group. Trust did not. Every reported telemetry difference-in-differences estimate for lines, pull requests, and coding time was null.&lt;sup class="fn" id="fnref:21"&gt;&lt;a class="footnote-ref" href="#fn:21" role="doc-noteref"&gt;21&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;
&lt;p&gt;Attrition and noncompliance were substantial, the product was a 2023-era autocomplete tool, and a null estimate is not proof of no effect. But those nulls still belong in the main argument here rather than hidden in a limitations section.&lt;/p&gt;
&lt;p&gt;Wrong code creates review work. Correct code can still leave an ownership problem if the responsible developer does not understand it. So I do not want to manufacture delay. I want the measurement to continue after the code appears.&lt;/p&gt;
&lt;p&gt;By this point I could see three different ways lower latency might enter the work.&lt;/p&gt;
&lt;figure class="evidence-figure evidence-figure--editorial evidence-figure--latency-pathways"&gt;
&lt;div class="table-scroll" role="region" tabindex="0" aria-label="Scrollable diagram of three pathways from lower response latency" aria-describedby="fig-latency-pathways-scroll-hint"&gt;
&lt;p class="table-scroll__hint" id="fig-latency-pathways-scroll-hint"&gt;Scroll horizontally to read the full diagram&lt;/p&gt;
&lt;p class="visually-hidden" id="fig-latency-pathways-full"&gt;Three plausible pathways begin with lower response latency. First, if the response is useful and relevant while the human is blocked, less dead time before the next move may make continuity easier to sustain. Second, if the response is wrong, premature, or too frequent, more output must be inspected and corrected, so review debt, rework, or fatigue may grow. Third, if the task is delegated and tools or tests dominate, generation can overlap other work and lower response latency may do little to the human critical path. Task mode, relevance, correctness, control, tool and test time, and understanding determine which pathway matters.&lt;/p&gt;
&lt;svg viewBox="0 0 680 590" style="min-width:42.5rem" role="img" aria-label="Lower response latency can reduce blocked time, increase review load, or miss the human critical path" aria-describedby="fig-latency-pathways-desc fig-latency-pathways-full" xmlns="http://www.w3.org/2000/svg"&gt;
&lt;desc id="fig-latency-pathways-desc"&gt;A conceptual diagram branches lower response latency into three conditional pathways. Useful relevant responses during blocked interactive work can reduce dead time. Wrong premature or frequent responses can add checking, correction, and fatigue. In delegated work dominated by tools and tests, faster generation may barely change the human critical path. The branches are hypotheses, not measured effect sizes.&lt;/desc&gt;
&lt;defs&gt;&lt;marker id="pathway-arrow" viewBox="0 0 8 8" refX="7" refY="4" markerWidth="7" markerHeight="7" orient="auto"&gt;&lt;path d="M0,0.6 L7.4,4 L0,7.4 Z" fill="var(--ink-soft)"/&gt;&lt;/marker&gt;&lt;/defs&gt;
&lt;text x="28" y="38" font-family="var(--font-mono)" font-size="12" letter-spacing="0.08em" fill="var(--ink-soft)"&gt;THREE PLAUSIBLE PATHWAYS&lt;/text&gt;
&lt;rect x="230" y="58" width="220" height="54" rx="7" fill="var(--field-deep)" stroke="var(--hairline-strong)"/&gt;
&lt;text x="340" y="81" text-anchor="middle" font-family="var(--font-display)" font-size="18" font-weight="650" fill="var(--ink)"&gt;Lower response latency&lt;/text&gt;
&lt;text x="340" y="100" text-anchor="middle" font-family="var(--font-mono)" font-size="9.5" letter-spacing="0.04em" fill="var(--ink-soft)"&gt;CONDITIONAL ON TASK AND OUTPUT&lt;/text&gt;
&lt;path d="M340 112v28H126v24M340 140h214v24M340 140v24" fill="none" stroke="var(--ink-soft)" marker-end="url(#pathway-arrow)" data-flow="true"/&gt;
&lt;g data-reveal="true"&gt;
&lt;text x="126" y="192" text-anchor="middle" font-family="var(--font-mono)" font-size="11" letter-spacing="0.07em" fill="var(--ink-soft)"&gt;CONTINUITY PATH&lt;/text&gt;
&lt;rect x="28" y="208" width="196" height="72" rx="6" fill="color-mix(in srgb, var(--figure-sage) 17%, var(--field-raised))" stroke="var(--figure-sage)"/&gt;
&lt;text x="126" y="237" text-anchor="middle" font-family="var(--font-body)" font-size="14" fill="var(--ink)"&gt;&lt;tspan x="126"&gt;Useful and relevant&lt;/tspan&gt;&lt;tspan x="126" dy="20"&gt;Human is blocked&lt;/tspan&gt;&lt;/text&gt;
&lt;line x1="126" y1="286" x2="126" y2="310" stroke="var(--ink-soft)" marker-end="url(#pathway-arrow)"/&gt;
&lt;rect x="28" y="318" width="196" height="64" rx="6" fill="var(--field-deep)" stroke="var(--hairline-strong)"/&gt;
&lt;text x="126" y="344" text-anchor="middle" font-family="var(--font-body)" font-size="14" fill="var(--ink)"&gt;&lt;tspan x="126"&gt;Less dead time before&lt;/tspan&gt;&lt;tspan x="126" dy="20"&gt;the next move&lt;/tspan&gt;&lt;/text&gt;
&lt;line x1="126" y1="388" x2="126" y2="412" stroke="var(--ink-soft)" marker-end="url(#pathway-arrow)"/&gt;
&lt;rect x="28" y="420" width="196" height="76" rx="6" fill="color-mix(in srgb, var(--figure-sage) 27%, var(--field-raised))" stroke="var(--figure-sage)"/&gt;
&lt;text x="126" y="452" text-anchor="middle" font-family="var(--font-display)" font-size="17" font-weight="600" fill="var(--ink)"&gt;&lt;tspan x="126"&gt;Continuity may be&lt;/tspan&gt;&lt;tspan x="126" dy="22"&gt;easier to sustain&lt;/tspan&gt;&lt;/text&gt;
&lt;/g&gt;
&lt;g data-reveal="true"&gt;
&lt;text x="340" y="192" text-anchor="middle" font-family="var(--font-mono)" font-size="11" letter-spacing="0.07em" fill="var(--ink-soft)"&gt;REVIEW-LOAD PATH&lt;/text&gt;
&lt;rect x="242" y="208" width="196" height="72" rx="6" fill="color-mix(in srgb, var(--figure-apricot) 18%, var(--field-raised))" stroke="var(--figure-apricot)"/&gt;
&lt;text x="340" y="237" text-anchor="middle" font-family="var(--font-body)" font-size="14" fill="var(--ink)"&gt;&lt;tspan x="340"&gt;Wrong, premature,&lt;/tspan&gt;&lt;tspan x="340" dy="20"&gt;or too frequent&lt;/tspan&gt;&lt;/text&gt;
&lt;line x1="340" y1="286" x2="340" y2="310" stroke="var(--ink-soft)" marker-end="url(#pathway-arrow)"/&gt;
&lt;rect x="242" y="318" width="196" height="64" rx="6" fill="var(--field-deep)" stroke="var(--hairline-strong)"/&gt;
&lt;text x="340" y="344" text-anchor="middle" font-family="var(--font-body)" font-size="14" fill="var(--ink)"&gt;&lt;tspan x="340"&gt;More output to inspect&lt;/tspan&gt;&lt;tspan x="340" dy="20"&gt;and correct&lt;/tspan&gt;&lt;/text&gt;
&lt;line x1="340" y1="388" x2="340" y2="412" stroke="var(--ink-soft)" marker-end="url(#pathway-arrow)"/&gt;
&lt;rect x="242" y="420" width="196" height="76" rx="6" fill="color-mix(in srgb, var(--figure-apricot) 29%, var(--field-raised))" stroke="var(--figure-apricot)"/&gt;
&lt;text x="340" y="442" text-anchor="middle" font-family="var(--font-display)" font-size="17" font-weight="600" fill="var(--ink)"&gt;&lt;tspan x="340"&gt;Review debt, rework,&lt;/tspan&gt;&lt;tspan x="340" dy="21"&gt;or fatigue may grow&lt;/tspan&gt;&lt;/text&gt;
&lt;/g&gt;
&lt;g data-reveal="true"&gt;
&lt;text x="554" y="192" text-anchor="middle" font-family="var(--font-mono)" font-size="11" letter-spacing="0.07em" fill="var(--ink-soft)"&gt;CRITICAL-PATH LIMIT&lt;/text&gt;
&lt;rect x="456" y="208" width="196" height="72" rx="6" fill="color-mix(in srgb, var(--figure-periwinkle) 17%, var(--field-raised))" stroke="var(--figure-periwinkle)"/&gt;
&lt;text x="554" y="237" text-anchor="middle" font-family="var(--font-body)" font-size="14" fill="var(--ink)"&gt;&lt;tspan x="554"&gt;Delegated task&lt;/tspan&gt;&lt;tspan x="554" dy="20"&gt;Tools or tests dominate&lt;/tspan&gt;&lt;/text&gt;
&lt;line x1="554" y1="286" x2="554" y2="310" stroke="var(--ink-soft)" marker-end="url(#pathway-arrow)"/&gt;
&lt;rect x="456" y="318" width="196" height="64" rx="6" fill="var(--field-deep)" stroke="var(--hairline-strong)"/&gt;
&lt;text x="554" y="344" text-anchor="middle" font-family="var(--font-body)" font-size="14" fill="var(--ink)"&gt;&lt;tspan x="554"&gt;Generation overlaps&lt;/tspan&gt;&lt;tspan x="554" dy="20"&gt;other work&lt;/tspan&gt;&lt;/text&gt;
&lt;line x1="554" y1="388" x2="554" y2="412" stroke="var(--ink-soft)" marker-end="url(#pathway-arrow)"/&gt;
&lt;rect x="456" y="420" width="196" height="76" rx="6" fill="color-mix(in srgb, var(--figure-periwinkle) 25%, var(--field-raised))" stroke="var(--figure-periwinkle)"/&gt;
&lt;text x="554" y="452" text-anchor="middle" font-family="var(--font-display)" font-size="17" font-weight="600" fill="var(--ink)"&gt;&lt;tspan x="554"&gt;Little change to the&lt;/tspan&gt;&lt;tspan x="554" dy="22"&gt;human critical path&lt;/tspan&gt;&lt;/text&gt;
&lt;/g&gt;
&lt;rect x="28" y="526" width="624" height="42" rx="6" fill="var(--field-deep)" stroke="var(--hairline-strong)"/&gt;
&lt;text x="46" y="552" font-family="var(--font-mono)" font-size="10.5" letter-spacing="0.06em" fill="var(--ink-soft)"&gt;WHICH PATH?&lt;/text&gt;
&lt;text x="148" y="552" font-family="var(--font-body)" font-size="12.5" fill="var(--ink)"&gt;Task mode · relevance · correctness · control · tools/tests · understanding&lt;/text&gt;
&lt;/svg&gt;
&lt;/div&gt;
&lt;figcaption&gt;Lower latency can remove blocked time, move work into checking, or miss the human critical path. These are competing mechanisms synthesized from the cited evidence, not measured causal effects or estimates of their relative size.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;h3&gt;Why the productivity studies seem to disagree&lt;/h3&gt;
&lt;p&gt;The apparent conflict starts with one early controlled study, where 95 professional programmers using GitHub Copilot completed a bounded JavaScript HTTP-server task 55.8% faster.&lt;sup class="fn" id="fnref:22"&gt;&lt;a class="footnote-ref" href="#fn:22" role="doc-noteref"&gt;22&lt;/a&gt;&lt;/sup&gt; Three later workplace randomized trials covering 4,867 developers estimated a pooled 26.08% increase in completed weekly tasks or pull requests among developers induced to adopt Copilot, with a standard error of 10.3%. The same analysis estimated 13.55% more commits and 38.38% more compiles.&lt;sup class="fn" id="fnref:23"&gt;&lt;a class="footnote-ref" href="#fn:23" role="doc-noteref"&gt;23&lt;/a&gt;&lt;/sup&gt; The 26.08% is a complier estimate for older autocomplete tools at participating firms, not a generic productivity constant.&lt;/p&gt;
&lt;p&gt;METR then studied a very different setting: 16 experienced open-source developers completing 246 real tasks in mature repositories they knew well. With early-2025 AI tools, the developers took an estimated 19% longer, even though they had predicted a 20% speedup.&lt;sup class="fn" id="fnref:24"&gt;&lt;a class="footnote-ref" href="#fn:24" role="doc-noteref"&gt;24&lt;/a&gt;&lt;/sup&gt; In February 2026, METR reported more than 800 tasks from 57 developers. Raw estimates suggested an 18% speedup for returning participants and around 4% for new participants, but the researchers judged the population signal unreliable because participation, task withholding, concurrent-agent use, and time reporting had become selective. It would be misleading to present that update as a clean reversal.&lt;sup class="fn" id="fnref:25"&gt;&lt;a class="footnote-ref" href="#fn:25" role="doc-noteref"&gt;25&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;
&lt;p&gt;Now, looking at the evidence at repository scale, I think the outcome becomes more indirect. An NBER matched event study of more than 100,000 GitHub developers found cumulative commit increases of 40%, 140%, and 180% following adoption of autocomplete, interactive, and autonomous tools. The autonomous estimate shrank to 50% for projects and 30% for releases.&lt;sup class="fn" id="fnref:26"&gt;&lt;a class="footnote-ref" href="#fn:26" role="doc-noteref"&gt;26&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;
&lt;p&gt;Now, this is observational evidence, and adoption can travel with developer ability, project selection, organizational change, and other unmeasured factors. The smaller project and release estimates show why writing code and shipping code cannot be treated as the same outcome.&lt;/p&gt;
&lt;p&gt;A matched difference-in-differences study compared 806 open-source projects with detectable Cursor adoption against 1,380 matched controls. Its preferred estimator reported a 28.6% average increase in lines added, concentrated early, but no significant average increase in commits. Point estimates for static-analysis warnings, duplication, and complexity were positive in that specification. Duplication was not significant across estimators, however, and alternative estimators materially disagreed about warnings and complexity.&lt;sup class="fn" id="fnref:27"&gt;&lt;a class="footnote-ref" href="#fn:27" role="doc-noteref"&gt;27&lt;/a&gt;&lt;/sup&gt; The adoption proxy, estimator sensitivity, and residual confounding prevent a claim that Cursor caused technical debt. The study raises a quality hypothesis that later work should test.&lt;/p&gt;
&lt;figure class="evidence-figure evidence-figure--study-comparison"&gt;
&lt;p class="flow-comparison-warning"&gt;&lt;strong&gt;No common axis.&lt;/strong&gt; Different people, tools, tasks, outcomes, and estimands.&lt;/p&gt;
&lt;div class="table-scroll" role="region" tabindex="0" aria-labelledby="productivity-comparison-caption" aria-describedby="productivity-comparison-hint"&gt;
&lt;p class="table-scroll__hint" id="productivity-comparison-hint"&gt;Scroll horizontally to read the full comparison&lt;/p&gt;
&lt;table&gt;
&lt;caption id="productivity-comparison-caption"&gt;The study question behind each productivity headline&lt;/caption&gt;
&lt;thead&gt;&lt;tr&gt;&lt;th scope="col"&gt;Setting&lt;/th&gt;&lt;th scope="col"&gt;What was counted&lt;/th&gt;&lt;th scope="col"&gt;Reported result&lt;/th&gt;&lt;th scope="col"&gt;Why it does not travel cleanly&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;&lt;th scope="row"&gt;95 professionals, one bounded JavaScript task&lt;/th&gt;&lt;td&gt;Time to complete a correct HTTP server&lt;/td&gt;&lt;td&gt;55.8% faster&lt;/td&gt;&lt;td&gt;One controlled task with an early Copilot tool&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th scope="row"&gt;4,867 developers across three workplace RCTs&lt;/th&gt;&lt;td&gt;Weekly tasks or pull requests among developers induced to adopt&lt;/td&gt;&lt;td&gt;26.08% more&lt;/td&gt;&lt;td&gt;A complier estimate for older autocomplete tools at participating firms&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th scope="row"&gt;16 experienced maintainers, 246 real repository tasks&lt;/th&gt;&lt;td&gt;Elapsed task time in familiar mature projects&lt;/td&gt;&lt;td&gt;19% longer&lt;/td&gt;&lt;td&gt;Early-2025 tools, selected maintainers, and work they already knew&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th scope="row"&gt;More than 100,000 developers in a matched event study&lt;/th&gt;&lt;td&gt;Commits, projects, and releases after tool adoption&lt;/td&gt;&lt;td&gt;Commits: +40%, +140%, +180% by tool generation; autonomous tools: +50% projects, +30% releases&lt;/td&gt;&lt;td&gt;Observational adoption evidence; the estimate changes with the unit counted&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th scope="row"&gt;806 Cursor projects and 1,380 matched controls&lt;/th&gt;&lt;td&gt;Lines, commits, and static code properties&lt;/td&gt;&lt;td&gt;28.6% more lines; no significant average commit increase; mixed quality signals&lt;/td&gt;&lt;td&gt;An adoption proxy, residual confounding, and estimator-sensitive quality results&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;figcaption&gt;The percentages summarize references 22–27 in their original study-specific terms. They do not share a denominator, causal status, technology, or outcome, so plotting them as one effect-size series would manufacture a comparison the studies do not support.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;I would not average these findings.&lt;/p&gt;
&lt;p&gt;A productivity measure that stops at generated code also stops too early.&lt;/p&gt;
&lt;h2&gt;Interactive and delegated work are different problems&lt;/h2&gt;
&lt;p&gt;I think very fast inference has its strongest case in a tightly coupled loop: completing the next expression, explaining a failing test, transforming a small function, or comparing two local options. If the answer remains relevant and correct, every avoidable pause sits between the developer and the next move.&lt;/p&gt;
&lt;p&gt;But delegated work is different. An agent can inspect a repository, edit several files, run tools, and retry while the developer works elsewhere. In that setting, I may want less streaming rather than more. Give me a clear contract at the start, quiet execution, and a well-timed review-ready notification with tests and provenance. The clock I care about ends when responsible review can begin. Chances are, I will ignore the verbose output in between.&lt;/p&gt;
&lt;div class="table-scroll flow-work-modes" role="region" tabindex="0" aria-labelledby="flow-work-modes-caption" aria-describedby="flow-work-modes-hint"&gt;
&lt;p class="table-scroll__hint" id="flow-work-modes-hint"&gt;Scroll horizontally to read the full comparison&lt;/p&gt;
&lt;table&gt;
&lt;caption id="flow-work-modes-caption"&gt;Where raw inference speed is likely to matter, and what can dominate it&lt;/caption&gt;
&lt;thead&gt;&lt;tr&gt;&lt;th scope="col"&gt;Work mode&lt;/th&gt;&lt;th scope="col"&gt;Human timing&lt;/th&gt;&lt;th scope="col"&gt;Clock worth measuring&lt;/th&gt;&lt;th scope="col"&gt;Main design priority&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;
&lt;tbody aria-labelledby="flow-work-modes-now"&gt;
&lt;tr class="flow-work-modes__group"&gt;&lt;th id="flow-work-modes-now" colspan="4"&gt;The next human move is blocked now, or partly blocked&lt;/th&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th scope="row"&gt;Inline completion on familiar code&lt;/th&gt;&lt;td&gt;Usually blocked; raw speed matters if relevance holds&lt;/td&gt;&lt;td&gt;Time to a useful, accepted suggestion&lt;/td&gt;&lt;td&gt;Keep it short, easy to dismiss, and subordinate to the edit so speed does not multiply irrelevant interruption&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th scope="row"&gt;Interactive debugging or co-editing&lt;/th&gt;&lt;td&gt;Blocked; raw speed matters, conditionally&lt;/td&gt;&lt;td&gt;Tested and accepted loop time&lt;/td&gt;&lt;td&gt;Show small diffs, evidence, and targeted test results so plausible wrong output does not outrun checking&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th scope="row"&gt;Exploratory design&lt;/th&gt;&lt;td&gt;Partly blocked; cadence may matter more than maximum speed&lt;/td&gt;&lt;td&gt;Time to a relevant alternative&lt;/td&gt;&lt;td&gt;Let the developer control cadence and depth because fluent output can be mistaken for thoughtfulness&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th scope="row"&gt;Unfamiliar API or learning task&lt;/th&gt;&lt;td&gt;Blocked, but learning limits the value of speed&lt;/td&gt;&lt;td&gt;Completion plus retained comprehension&lt;/td&gt;&lt;td&gt;Ask for predictions, explanations, or retrieval before delegation to reduce cognitive offloading&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;
&lt;tbody aria-labelledby="flow-work-modes-later"&gt;
&lt;tr class="flow-work-modes__group"&gt;&lt;th id="flow-work-modes-later" colspan="4"&gt;The human returns at review or delivery&lt;/th&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th scope="row"&gt;Delegated bounded task&lt;/th&gt;&lt;td&gt;Often not blocked while the agent runs&lt;/td&gt;&lt;td&gt;Tool-and-test completion and review readiness&lt;/td&gt;&lt;td&gt;Run in the background and notify at a meaningful checkpoint; the tool bottleneck may dominate decoder speed&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th scope="row"&gt;Security, architecture, or high-stakes review&lt;/th&gt;&lt;td&gt;Blocked at the review stage&lt;/td&gt;&lt;td&gt;Evidence-backed trusted decision&lt;/td&gt;&lt;td&gt;Require provenance, alternatives, tests, and human sign-off against verification debt and automation bias&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th scope="row"&gt;Merge and release&lt;/th&gt;&lt;td&gt;Usually not blocked directly on generation&lt;/td&gt;&lt;td&gt;Review, CI, and deployment lead time&lt;/td&gt;&lt;td&gt;Optimize the delivery pipeline because quality or delivery can dominate model speed&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;p&gt;No effect size sits behind this table. In a one-company survey with a 14.86% response rate, task demand, accountability, experience, identity, and desired control were associated with differences in developers' openness to AI support. A companion analysis found requests for bounded delegation, earlier quality signals, provenance, uncertainty, and explicit authority limits.&lt;sup class="fn" id="fnref:28"&gt;&lt;a class="footnote-ref" href="#fn:28" role="doc-noteref"&gt;28&lt;/a&gt;&lt;/sup&gt; These are self-reported preferences, not demonstrated effects.&lt;/p&gt;
&lt;h3&gt;What I would optimize now&lt;/h3&gt;
&lt;p&gt;If I were designing an assistant or evaluating one for a team, I would keep throughput on the dashboard. The first number I would stop leading with is time to first token. A typing indicator or preamble can improve it without giving the developer anything actionable, so I would measure first useful output instead.&lt;/p&gt;
&lt;p&gt;Then I would keep queue, generation, tool, test, retry, review, and acceptance time visible. Medians need their tails; a p99 tool stall can matter more than another hundred tokens per second. Five seconds that freezes an interactive debugging loop should not be added to five minutes of background execution as though the two feel the same.&lt;/p&gt;
&lt;p&gt;Then, the output needs its own evidence. A fast patch should arrive as the smallest relevant diff, with the checks actually run, any failures, uncertainty, and links to the material it relied on. More frequent suggestions are not automatically more helpful. The developer should be able to invoke, dismiss, mute, or defer them without negotiation. For unfamiliar or consequential code, acceptance may also require explaining the change, predicting a behavior, or identifying a failure mode.&lt;/p&gt;
&lt;p&gt;Then I would follow the work into delivery: rework, defects, review cycles, and release lead time alongside suggestions, commits, and pull requests. More activity can be useful, neutral, or expensive.&lt;/p&gt;
&lt;p&gt;The measure I keep coming back to is &lt;strong&gt;time to a tested, understood, trusted change&lt;/strong&gt;. I would keep its components visible rather than collapse them into one score, because teams may reasonably weight them differently. A toy function, a payment migration, and an authentication review should not share one trust threshold.&lt;/p&gt;
&lt;h2&gt;The experiment I still want to see&lt;/h2&gt;
&lt;p&gt;The study that would answer the narrow question still does not exist in the evidence I found. I can now name the two service tiers more concretely, but the study is still missing.&lt;/p&gt;
&lt;figure class="evidence-figure evidence-figure--editorial evidence-figure--missing-experiment"&gt;
&lt;div class="table-scroll" role="region" tabindex="0" aria-label="Scrollable evidence matrix" aria-describedby="fig-missing-experiment-scroll-hint"&gt;
&lt;p class="table-scroll__hint" id="fig-missing-experiment-scroll-hint"&gt;Scroll horizontally to read the full matrix&lt;/p&gt;
&lt;p class="visually-hidden" id="fig-missing-experiment-full"&gt;Matrix values by row. Tan and colleagues: randomized latency present; coding task absent; validated flow absent; behavior present; objective quality absent; trusted completion absent. VS Code A/B: randomized latency partial because allocation details are undisclosed; coding task present; validated flow absent; behavior present; quality absent; trusted completion absent. EditFlow: randomized latency absent; coding task present; validated psychological flow absent; behavior present; quality present; trusted completion absent. Vella and Blincoe: randomized latency absent; coding task absent because the study used questionnaires; validated flow partial; behavior partial; quality absent; trusted completion absent. Fan and colleagues: randomized latency absent; coding task present; validated flow absent; behavior present; quality present; trusted completion partial. Cui and METR studies: randomized latency absent; coding task present; validated flow absent; behavior present; quality partial; trusted completion partial.&lt;/p&gt;
&lt;svg viewBox="0 0 680 510" style="min-width:42.5rem" role="img" aria-label="Evidence matrix showing that no located study covers randomized latency, coding, validated flow, behavior, quality, and trusted completion together" aria-describedby="fig-missing-experiment-desc fig-missing-experiment-full" xmlns="http://www.w3.org/2000/svg"&gt;
&lt;desc id="fig-missing-experiment-desc"&gt;Six study families are compared across six requirements. Tan has randomized latency and behavioral evidence but is not coding and does not measure validated flow, objective quality, or trusted completion. The VS Code experiment has coding, a product latency intervention with undisclosed allocation details, and engagement, but no validated flow, disclosed quality outcome, or trusted completion. EditFlow, Vella and Blincoe, Fan, and productivity trials each cover different parts. No row covers every requirement.&lt;/desc&gt;
&lt;text x="28" y="36" font-family="var(--font-mono)" font-size="12" letter-spacing="0.08em" fill="var(--ink-soft)"&gt;THE MISSING EXPERIMENT&lt;/text&gt;
&lt;circle cx="34" cy="61" r="5" fill="var(--figure-sage)"/&gt;&lt;text x="46" y="66" font-family="var(--font-body)" font-size="13" fill="var(--ink-soft)"&gt;present&lt;/text&gt;
&lt;rect x="117" y="56" width="10" height="10" transform="rotate(45 122 61)" fill="var(--figure-periwinkle)"/&gt;&lt;text x="134" y="66" font-family="var(--font-body)" font-size="13" fill="var(--ink-soft)"&gt;partial or proxy&lt;/text&gt;
&lt;circle cx="264" cy="61" r="5" fill="none" stroke="var(--ink-soft)"/&gt;&lt;text x="276" y="66" font-family="var(--font-body)" font-size="13" fill="var(--ink-soft)"&gt;absent&lt;/text&gt;
&lt;g font-family="var(--font-mono)" font-size="10" fill="var(--ink-soft)" text-anchor="middle"&gt;
&lt;text x="245" y="96"&gt;&lt;tspan x="245"&gt;Randomized&lt;/tspan&gt;&lt;tspan x="245" dy="13"&gt;latency&lt;/tspan&gt;&lt;/text&gt;
&lt;text x="323" y="96"&gt;&lt;tspan x="323"&gt;Coding&lt;/tspan&gt;&lt;tspan x="323" dy="13"&gt;task&lt;/tspan&gt;&lt;/text&gt;
&lt;text x="401" y="96"&gt;&lt;tspan x="401"&gt;Validated&lt;/tspan&gt;&lt;tspan x="401" dy="13"&gt;flow&lt;/tspan&gt;&lt;/text&gt;
&lt;text x="479" y="96"&gt;&lt;tspan x="479"&gt;Behavior /&lt;/tspan&gt;&lt;tspan x="479" dy="13"&gt;engagement&lt;/tspan&gt;&lt;/text&gt;
&lt;text x="557" y="96"&gt;&lt;tspan x="557"&gt;Quality /&lt;/tspan&gt;&lt;tspan x="557" dy="13"&gt;correctness&lt;/tspan&gt;&lt;/text&gt;
&lt;text x="635" y="96"&gt;&lt;tspan x="635"&gt;Trusted&lt;/tspan&gt;&lt;tspan x="635" dy="13"&gt;completion&lt;/tspan&gt;&lt;/text&gt;
&lt;/g&gt;
&lt;g stroke="var(--hairline)"&gt;&lt;line x1="28" y1="126" x2="660" y2="126"/&gt;&lt;line x1="206" y1="82" x2="206" y2="458"/&gt;&lt;line x1="284" y1="82" x2="284" y2="458"/&gt;&lt;line x1="362" y1="82" x2="362" y2="458"/&gt;&lt;line x1="440" y1="82" x2="440" y2="458"/&gt;&lt;line x1="518" y1="82" x2="518" y2="458"/&gt;&lt;line x1="596" y1="82" x2="596" y2="458"/&gt;&lt;/g&gt;
&lt;g font-family="var(--font-body)" font-size="14" fill="var(--ink)"&gt;
&lt;text x="28" y="162"&gt;Tan et al.&lt;/text&gt;&lt;text x="28" y="218"&gt;VS Code A/B&lt;/text&gt;&lt;text x="28" y="274"&gt;EditFlow&lt;/text&gt;&lt;text x="28" y="330"&gt;Vella &amp;amp; Blincoe&lt;/text&gt;&lt;text x="28" y="386"&gt;Fan et al.&lt;/text&gt;&lt;text x="28" y="442"&gt;Cui / METR&lt;/text&gt;
&lt;/g&gt;
&lt;g fill="var(--figure-sage)"&gt;&lt;circle cx="245" cy="156" r="6"/&gt;&lt;circle cx="479" cy="156" r="6"/&gt;&lt;circle cx="323" cy="212" r="6"/&gt;&lt;circle cx="479" cy="212" r="6"/&gt;&lt;circle cx="323" cy="268" r="6"/&gt;&lt;circle cx="479" cy="268" r="6"/&gt;&lt;circle cx="557" cy="268" r="6"/&gt;&lt;circle cx="323" cy="380" r="6"/&gt;&lt;circle cx="479" cy="380" r="6"/&gt;&lt;circle cx="557" cy="380" r="6"/&gt;&lt;circle cx="323" cy="436" r="6"/&gt;&lt;circle cx="479" cy="436" r="6"/&gt;&lt;/g&gt;
&lt;g fill="var(--figure-periwinkle)"&gt;&lt;rect x="240" y="207" width="10" height="10" transform="rotate(45 245 212)"/&gt;&lt;rect x="396" y="319" width="10" height="10" transform="rotate(45 401 324)"/&gt;&lt;rect x="474" y="319" width="10" height="10" transform="rotate(45 479 324)"/&gt;&lt;rect x="630" y="375" width="10" height="10" transform="rotate(45 635 380)"/&gt;&lt;rect x="552" y="431" width="10" height="10" transform="rotate(45 557 436)"/&gt;&lt;rect x="630" y="431" width="10" height="10" transform="rotate(45 635 436)"/&gt;&lt;/g&gt;
&lt;g fill="none" stroke="var(--ink-soft)"&gt;&lt;circle cx="323" cy="156" r="6"/&gt;&lt;circle cx="401" cy="156" r="6"/&gt;&lt;circle cx="557" cy="156" r="6"/&gt;&lt;circle cx="635" cy="156" r="6"/&gt;&lt;circle cx="401" cy="212" r="6"/&gt;&lt;circle cx="557" cy="212" r="6"/&gt;&lt;circle cx="635" cy="212" r="6"/&gt;&lt;circle cx="245" cy="268" r="6"/&gt;&lt;circle cx="401" cy="268" r="6"/&gt;&lt;circle cx="635" cy="268" r="6"/&gt;&lt;circle cx="245" cy="324" r="6"/&gt;&lt;circle cx="323" cy="324" r="6"/&gt;&lt;circle cx="557" cy="324" r="6"/&gt;&lt;circle cx="635" cy="324" r="6"/&gt;&lt;circle cx="245" cy="380" r="6"/&gt;&lt;circle cx="401" cy="380" r="6"/&gt;&lt;circle cx="245" cy="436" r="6"/&gt;&lt;circle cx="401" cy="436" r="6"/&gt;&lt;/g&gt;
&lt;rect x="20" y="474" width="640" height="24" rx="5" fill="color-mix(in srgb, var(--figure-apricot) 14%, var(--field-raised))" stroke="var(--figure-apricot)"/&gt;&lt;text x="340" y="491" text-anchor="middle" font-family="var(--font-mono)" font-size="11" fill="var(--ink)"&gt;NO ROW SATISFIES ALL SIX REQUIREMENTS&lt;/text&gt;
&lt;/svg&gt;
&lt;/div&gt;
&lt;figcaption&gt;The literature answers adjacent questions with different designs and outcomes. "Partial" marks a proxy or incomplete measure, not half an effect. The matrix records the structured search through 10 August 2026, not proof that no qualifying study exists anywhere.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;aside class="flow-method-note" aria-labelledby="flow-method-title"&gt;
&lt;p class="flow-method-note__label"&gt;Method note&lt;/p&gt;
&lt;p class="flow-method-note__title" id="flow-method-title"&gt;How I did the research&lt;/p&gt;
&lt;p&gt;I did not run one broad search for "AI and flow." Instead, I broke the question into response-time HCI, developer flow and interruption, proactive coding assistance, cognitive load and understanding, agent-serving latency, and software productivity. Source selection turned on directness, study design, recency, and whether a paper could disprove the attractive headline. Official product evidence is labeled as vendor evidence, and preprints remain preprints. Community discussions helped me discover the question; I did not use them to estimate how common an opinion is.&lt;/p&gt;
&lt;p&gt;The result is an awkward evidence base. Several 2026 papers are recent preprints or newly published conference work. Some samples are students, others are self-selected continuing users, some field experiments concern older autocomplete systems, and several repository studies rely on adoption proxies. I would not pool effect sizes from those designs. The matrix records my structured search through 10 August 2026; it does not prove that no qualifying study exists anywhere. The August 13 Ultrafast announcement is a later product update, not a new study, so it does not change the 30-source review described above or fill a row in the matrix.&lt;/p&gt;
&lt;p&gt;I initially hoped to test the causal question directly. No human study was authorized, and I did not have a design capable of isolating latency at population scale, so I stopped there. The only synthetic fixture checked timestamp and duration calculations. It contains no human observations and is not evidence about flow, productivity, or latency effects.&lt;/p&gt;
&lt;/aside&gt;
&lt;p&gt;The experiment is now easier to specify. A Standard-versus-Ultrafast comparison would test the service tiers as delivered. To isolate latency, the study would still need to hold the model, output, interface, and task stable. A validated participant-report instrument would measure self-reported flow. Behavioral instrumentation could capture switching and resumption, but it would not stand in for the inner state. That is the part the current evidence keeps missing.&lt;/p&gt;
&lt;p&gt;The endpoint should also include correctness, review effort, later comprehension, and a tested, understood, accepted change. I would preregister the delay bands and analysis before observing outcomes. Interactive and delegated tasks need separate estimates because averaging them could erase the difference we care about.&lt;/p&gt;
&lt;p&gt;Null results, adverse quality effects, and disagreement between participants would all stay in the report. They are findings too. So would the exclusions, latency fidelity, model stochasticity, task sampling, and any sign that the instrumentation changed the work.&lt;/p&gt;
&lt;p&gt;With that design frozen, an N-of-1 pilot could tell me whether the protocol and instrumentation work. It could not establish "the" latency threshold for developers. A population claim would need professional participants, enough matched work to estimate how people differ, and independent replication.&lt;/p&gt;
&lt;h2&gt;Where that leaves me&lt;/h2&gt;
&lt;p&gt;I came out of this with more questions than answers, but not with no answer.&lt;/p&gt;
&lt;p&gt;If I were choosing a coding assistant tomorrow, I would pay for low latency in the interactive loop and look for a separate review-ready metric for delegated work.&lt;/p&gt;
&lt;p&gt;If the developer cannot make the next move until a useful answer arrives, speed has its clearest case. I would measure time to first useful output and then time to a tested, understood, accepted change. When the work is delegated, I care less about the stream of tokens and more about what comes back: a bounded result with tests, provenance, uncertainty, and enough explanation to review and own the change.&lt;/p&gt;
&lt;p&gt;That is a workflow conclusion, not proof that lower latency restores psychological flow. Speed can help preserve one condition for flow by removing dead time. It cannot supply relevance, control, correctness, or understanding.&lt;/p&gt;
&lt;p&gt;The launch moves the frontier-model version of the question out of the hypothetical. It still leaves me wanting to know whether a faster answer keeps the developer inside the problem, or merely gets code onto the screen sooner.&lt;/p&gt;
&lt;section class="footnotes" role="doc-endnotes"&gt;
&lt;h2&gt;References&lt;/h2&gt;
&lt;ol&gt;
&lt;li id="fn:1"&gt;OpenAI, &lt;a href="https://openai.com/index/introducing-gpt-5-3-codex-spark/"&gt;"Introducing GPT-5.3-Codex-Spark,"&lt;/a&gt; February 12, 2026; OpenAI, "Previewing Ultrafast mode: GPT-5.6 Sol at up to 14X the speed," August 13, 2026, https://openai.com/index/previewing-ultrafast/; Cerebras, "Accelerating GPT-5.6 Sol Ultrafast," August 13, 2026, https://www.cerebras.ai/blog/accelerating-gpt-5-6-sol-ultrafast-with-openai. Availability, product specifications, throughput, comparative speed, systems work, default test behavior, internal use cases, early-customer accounts, and Cerebras's GDP-Val result are vendor-reported. Neither August announcement reports a randomized developer-flow study, independent quality audit, review-effort outcome, or trusted-completion measure. Retrieved August 13, 2026. &lt;a class="footnote-backref" href="#fnref:1" role="doc-backlink"&gt;↩︎&lt;/a&gt;&lt;/li&gt;
&lt;li id="fn:2"&gt;Falko Rheinberg, Regina Vollmeyer, and Stefan Engeser, &lt;a href="https://www.psycharchives.org/en/item/1a64a80c-9914-42be-b276-907de99101ee"&gt;"Flow Short Scale,"&lt;/a&gt; 2003; John Schaffer and Xiaowen Fang, &lt;a href="https://doi.org/10.17705/1thci.00172"&gt;"The Feedback Loop of Flow: Controlled Experiment Shows Task-Relevant Feedback Increases Flow,"&lt;/a&gt; &lt;em&gt;Transactions on Human-Computer Interaction&lt;/em&gt;, 2022. Retrieved August 10, 2026. &lt;a class="footnote-backref" href="#fnref:2" role="doc-backlink"&gt;↩︎&lt;/a&gt;&lt;/li&gt;
&lt;li id="fn:3"&gt;Jinwei Zhu et al., &lt;a href="https://arxiv.org/abs/2606.30560"&gt;"TraceLab: Characterizing Coding Agent Workloads for LLM Serving,"&lt;/a&gt; preprint and open trace, June 29, 2026. Retrieved August 10, 2026. &lt;a class="footnote-backref" href="#fnref:3" role="doc-backlink"&gt;↩︎&lt;/a&gt;&lt;/li&gt;
&lt;li id="fn:4"&gt;&lt;a href="https://arxiv.org/abs/2603.18897"&gt;"PASTE: Parallelizing Tool Execution and LLM Generation for Low-Latency Agent Serving,"&lt;/a&gt; preprint, March 2026. This is systems-benchmark evidence without human participants. Retrieved August 10, 2026. &lt;a class="footnote-backref" href="#fnref:4" role="doc-backlink"&gt;↩︎&lt;/a&gt;&lt;/li&gt;
&lt;li id="fn:5"&gt;Tan et al., &lt;a href="https://doi.org/10.1145/3772318.3790716"&gt;"The Impact of Response Latency and Task Type on Human-LLM Interaction and Perception,"&lt;/a&gt; &lt;em&gt;CHI 2026&lt;/em&gt;. Retrieved August 10, 2026. &lt;a class="footnote-backref" href="#fnref:5" role="doc-backlink"&gt;↩︎&lt;/a&gt;&lt;/li&gt;
&lt;li id="fn:6"&gt;Visual Studio Code, &lt;a href="https://code.visualstudio.com/blogs/2026/06/17/improving-token-efficiency-in-github-copilot"&gt;"Improving token efficiency for GitHub Copilot in VS Code,"&lt;/a&gt; June 17, 2026. Product-experiment results are vendor-reported. Retrieved August 10, 2026. &lt;a class="footnote-backref" href="#fnref:6" role="doc-backlink"&gt;↩︎&lt;/a&gt;&lt;/li&gt;
&lt;li id="fn:7"&gt;Chi et al., &lt;a href="https://arxiv.org/abs/2502.09328"&gt;"Copilot Arena: A Platform for Code LLM Evaluation in the Wild,"&lt;/a&gt; preprint, 2025. Retrieved August 10, 2026. &lt;a class="footnote-backref" href="#fnref:7" role="doc-backlink"&gt;↩︎&lt;/a&gt;&lt;/li&gt;
&lt;li id="fn:8"&gt;John Schaffer and Xiaowen Fang, &lt;a href="https://doi.org/10.17705/1thci.00172"&gt;"The Feedback Loop of Flow: Controlled Experiment Shows Task-Relevant Feedback Increases Flow,"&lt;/a&gt; &lt;em&gt;Transactions on Human-Computer Interaction&lt;/em&gt;, 2022. Retrieved August 10, 2026. &lt;a class="footnote-backref" href="#fnref:8" role="doc-backlink"&gt;↩︎&lt;/a&gt;&lt;/li&gt;
&lt;li id="fn:9"&gt;Nadj et al., &lt;a href="https://doi.org/10.25300/MISQ/2023/17200"&gt;"What Disrupts Flow in Office Work? The Impact of Frequency and Relevance of IT-Mediated Interruptions,"&lt;/a&gt; &lt;em&gt;MIS Quarterly&lt;/em&gt;, 2023. Retrieved August 10, 2026. &lt;a class="footnote-backref" href="#fnref:9" role="doc-backlink"&gt;↩︎&lt;/a&gt;&lt;/li&gt;
&lt;li id="fn:10"&gt;Kuo et al., &lt;a href="https://doi.org/10.1145/3742413.3789148"&gt;"Developer Interaction Patterns with Proactive AI: A Five-Day Field Study,"&lt;/a&gt; &lt;em&gt;IUI 2026&lt;/em&gt;. Retrieved August 10, 2026. &lt;a class="footnote-backref" href="#fnref:10" role="doc-backlink"&gt;↩︎&lt;/a&gt;&lt;/li&gt;
&lt;li id="fn:11"&gt;Chen et al., &lt;a href="https://doi.org/10.1145/3706598.3714002"&gt;"Need Help? Designing Proactive AI Assistants for Programming,"&lt;/a&gt; &lt;em&gt;CHI 2025&lt;/em&gt;. Retrieved August 10, 2026. &lt;a class="footnote-backref" href="#fnref:11" role="doc-backlink"&gt;↩︎&lt;/a&gt;&lt;/li&gt;
&lt;li id="fn:12"&gt;&lt;a href="https://doi.org/10.1145/3798249"&gt;"EditFlow: Benchmarking and Optimizing Code Edit Recommendation Systems via Reconstruction of Developer Flows,"&lt;/a&gt; &lt;em&gt;OOPSLA 2026&lt;/em&gt;. Retrieved August 10, 2026. &lt;a class="footnote-backref" href="#fnref:12" role="doc-backlink"&gt;↩︎&lt;/a&gt;&lt;/li&gt;
&lt;li id="fn:13"&gt;Duncan P. Brumby et al., &lt;a href="https://doi.org/10.1037/a0032696"&gt;"Recovering from an interruption: Investigating speed-accuracy trade-offs in task resumption,"&lt;/a&gt; 2013. Retrieved August 10, 2026. &lt;a class="footnote-backref" href="#fnref:13" role="doc-backlink"&gt;↩︎&lt;/a&gt;&lt;/li&gt;
&lt;li id="fn:14"&gt;Chris Brown et al., &lt;a href="https://doi.org/10.1145/3544548.3581562"&gt;"Using Logs Data to Identify When Software Engineers Experience Flow or Focused Work,"&lt;/a&gt; &lt;em&gt;CHI 2023&lt;/em&gt;. Retrieved August 10, 2026. &lt;a class="footnote-backref" href="#fnref:14" role="doc-backlink"&gt;↩︎&lt;/a&gt;&lt;/li&gt;
&lt;li id="fn:15"&gt;Saima Ritonummi et al., &lt;a href="https://doi.org/10.1108/JWL-11-2022-0146"&gt;"Exploring Barriers That Prevent Employees from Experiencing Flow in the Software Industry,"&lt;/a&gt; 2024; Martin Lange, Åsa Cajander, and Maria Normark, &lt;a href="https://doi.org/10.1007/978-3-031-93429-2_3"&gt;"Exploring Flow in IT Professionals' Use of AI-Integrated Tools: Insights from Interviews,"&lt;/a&gt; 2025. Retrieved August 10, 2026. &lt;a class="footnote-backref" href="#fnref:15" role="doc-backlink"&gt;↩︎&lt;/a&gt;&lt;/li&gt;
&lt;li id="fn:16"&gt;Vella and Blincoe, &lt;a href="https://arxiv.org/abs/2605.23135"&gt;"The Impact of AI Coding Assistants on Software Engineering: A Longitudinal Study,"&lt;/a&gt; preprint, May 22, 2026. Retrieved August 10, 2026. &lt;a class="footnote-backref" href="#fnref:16" role="doc-backlink"&gt;↩︎&lt;/a&gt;&lt;/li&gt;
&lt;li id="fn:17"&gt;Fan et al., &lt;a href="https://doi.org/10.1145/3772318.3791176"&gt;"When Help Hurts: Verification Load and Fatigue with AI Coding Assistants,"&lt;/a&gt; &lt;em&gt;CHI 2026&lt;/em&gt;. Retrieved August 10, 2026. &lt;a class="footnote-backref" href="#fnref:17" role="doc-backlink"&gt;↩︎&lt;/a&gt;&lt;/li&gt;
&lt;li id="fn:18"&gt;Chen, Talwalkar, Brennan, and Neubig, &lt;a href="https://doi.org/10.1145/3772318.3790850"&gt;"Code with Me or for Me? How Increasing AI Automation Transforms Developer Workflows,"&lt;/a&gt; &lt;em&gt;CHI 2026&lt;/em&gt;. Retrieved August 10, 2026. &lt;a class="footnote-backref" href="#fnref:18" role="doc-backlink"&gt;↩︎&lt;/a&gt;&lt;/li&gt;
&lt;li id="fn:19"&gt;Balepur et al., &lt;a href="https://arxiv.org/abs/2607.26375"&gt;"(Im)Paired Programming: Coding Agents Improve Productivity but Harm Understanding,"&lt;/a&gt; preprint, July 29, 2026. Retrieved August 10, 2026. &lt;a class="footnote-backref" href="#fnref:19" role="doc-backlink"&gt;↩︎&lt;/a&gt;&lt;/li&gt;
&lt;li id="fn:20"&gt;Judy Hanwen Shen and Alex Tamkin, &lt;a href="https://arxiv.org/abs/2601.20245"&gt;"How AI Impacts Skill Formation,"&lt;/a&gt; preprint, January 2026. Retrieved August 10, 2026. &lt;a class="footnote-backref" href="#fnref:20" role="doc-backlink"&gt;↩︎&lt;/a&gt;&lt;/li&gt;
&lt;li id="fn:21"&gt;Butler, Suh, Haniyur, and Hadley, &lt;a href="https://doi.org/10.1109/ICSE-SEIP66354.2025.00034"&gt;"Dear Diary: A Randomized Controlled Trial of Generative AI Coding Tools in the Workplace,"&lt;/a&gt; &lt;em&gt;ICSE-SEIP 2025&lt;/em&gt;. Retrieved August 10, 2026. &lt;a class="footnote-backref" href="#fnref:21" role="doc-backlink"&gt;↩︎&lt;/a&gt;&lt;/li&gt;
&lt;li id="fn:22"&gt;Peng et al., &lt;a href="https://arxiv.org/abs/2302.06590"&gt;"The Impact of AI on Developer Productivity: Evidence from GitHub Copilot,"&lt;/a&gt; 2023. Retrieved August 10, 2026. &lt;a class="footnote-backref" href="#fnref:22" role="doc-backlink"&gt;↩︎&lt;/a&gt;&lt;/li&gt;
&lt;li id="fn:23"&gt;Cui, Demirer, Jaffe, Musolff, Peng, and Salz, &lt;a href="https://doi.org/10.1287/mnsc.2025.00535"&gt;"The Effects of Generative AI on High-Skilled Work: Evidence from Three Field Experiments with Software Developers,"&lt;/a&gt; &lt;em&gt;Management Science&lt;/em&gt;, 2026. Retrieved August 10, 2026. &lt;a class="footnote-backref" href="#fnref:23" role="doc-backlink"&gt;↩︎&lt;/a&gt;&lt;/li&gt;
&lt;li id="fn:24"&gt;Becker, Rush, Barnes, and Rein, &lt;a href="https://arxiv.org/abs/2507.09089"&gt;"Measuring the Impact of Early-2025 AI on Experienced Open-Source Developer Productivity,"&lt;/a&gt; randomized trial preprint, July 2025. Retrieved August 10, 2026. &lt;a class="footnote-backref" href="#fnref:24" role="doc-backlink"&gt;↩︎&lt;/a&gt;&lt;/li&gt;
&lt;li id="fn:25"&gt;METR, &lt;a href="https://metr.org/blog/2026-02-24-uplift-update/"&gt;"We Are Changing Our Developer Productivity Experiment Design,"&lt;/a&gt; February 24, 2026. Retrieved August 10, 2026. &lt;a class="footnote-backref" href="#fnref:25" role="doc-backlink"&gt;↩︎&lt;/a&gt;&lt;/li&gt;
&lt;li id="fn:26"&gt;Demirer, Musolff, and Yang, &lt;a href="https://doi.org/10.3386/w35275"&gt;"Writing Code vs. Shipping Code: Productivity Effects Across Generations of AI Coding Tools,"&lt;/a&gt; NBER Working Paper 35275, May 2026. Retrieved August 10, 2026. &lt;a class="footnote-backref" href="#fnref:26" role="doc-backlink"&gt;↩︎&lt;/a&gt;&lt;/li&gt;
&lt;li id="fn:27"&gt;He, Miller, Agarwal, Kästner, and Vasilescu, &lt;a href="https://doi.org/10.1145/3793302.3793349"&gt;"Speed at the Cost of Quality: How Cursor AI Increases Short-Term Velocity and Long-Term Complexity in Open-Source Projects,"&lt;/a&gt; &lt;em&gt;MSR 2026&lt;/em&gt;. Retrieved August 10, 2026. &lt;a class="footnote-backref" href="#fnref:27" role="doc-backlink"&gt;↩︎&lt;/a&gt;&lt;/li&gt;
&lt;li id="fn:28"&gt;Choudhuri, Bird, Badea, and Sarma, &lt;a href="https://arxiv.org/abs/2510.00762"&gt;"AI Where It Matters: A Task-Level Approach to Developer Attitudes and Adoption,"&lt;/a&gt; 2026; the same authors, &lt;a href="https://arxiv.org/abs/2604.07830"&gt;"To Copilot and Beyond: 22 AI Systems Developers Want Built,"&lt;/a&gt; preprint, April 9, 2026. Retrieved August 10, 2026. &lt;a class="footnote-backref" href="#fnref:28" role="doc-backlink"&gt;↩︎&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;/section&gt;</content:encoded></item><item><title>What Europe's AI gigafactory plan can and cannot buy</title><link>https://viborc.com/what-europes-ai-gigafactory-plan-can-and-cannot-buy/</link><pubDate>Sat, 01 Aug 2026 13:47:31 +0000</pubDate><guid isPermaLink="true">https://viborc.com/what-europes-ai-gigafactory-plan-can-and-cannot-buy/</guid><description>Europe's €30 billion AI gigafactory tender can fund useful compute. Its limits reveal what a credible sovereign AI strategy still requires.</description><content:encoded>&lt;section class="article-summary" aria-labelledby="article-summary-0"&gt;
 &lt;p class="meta-label article-summary__eyebrow"&gt;TL;DR&lt;/p&gt;
 &lt;h2 class="article-summary__title" id="article-summary-0"&gt;The short version&lt;/h2&gt;
 &lt;div class="article-summary__intro"&gt;&lt;strong&gt;This is a long read.&lt;/strong&gt; This essay started with a single tweet reply to Ursula von der Leyen, and then I began checking the €30 billion headline. The more I checked, the less a short answer worked as a tweet, and I went down a research rabbit hole. The three points below are the short version; the rest is a more detailed, structural commentary with deeper analysis and suggestions.&lt;/div&gt;
 &lt;div class="article-summary__body"&gt;&lt;ul&gt;
&lt;li&gt;The EU&amp;rsquo;s 30 July tender can partly fund useful compute, but it is nowhere near a continental AI strategy. Its headline package, up to €10 billion public and €20 billion hoped-for private across seven AI gigafactories, is about what Amazon, Alphabet, Microsoft and Meta now expect to spend on capital investment in seventeen days. The public share is just under six days.&lt;/li&gt;
&lt;li&gt;What I believe to be the investment case starts with a €100 billion sovereign-compute floor. A 10–20 GW European ambition, priced at the current $35–60 billion per frontier gigawatt, produces an upper scenario of roughly €304 billion to €1.04 trillion. That ceiling comes from realistic capacity and cost, not from borrowing a dramatic number from the Draghi report.&lt;/li&gt;
&lt;li&gt;Money alone will not do it. Europe also needs unified capital markets, coherent energy policy, faster deployment, better equity and talent rules, and investment in the labs and products that will use the compute. Sovereignty does not require autarky, but it does require enough control and exit capacity that hospitals, courts and companies are not trapped behind someone else&amp;rsquo;s chips, APIs or laws.&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/section&gt;

&lt;p&gt;On 30 July, the European Commission opened bidding for something it had been promising for a year and a half: up to seven "AI gigafactories," backed by up to €10 billion of public money and intended to draw at least €20 billion more from private investors, for a headline package above €30 billion.&lt;sup class="fn" id="fnref:1"&gt;&lt;a class="footnote-ref" href="#fn:1" role="doc-noteref"&gt;1&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;
&lt;p&gt;Ursula von der Leyen announced it on X in moon-shot language:&lt;sup class="fn" id="fnref:2"&gt;&lt;a class="footnote-ref" href="#fn:2" role="doc-noteref"&gt;2&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;
&lt;blockquote class="pull-quote" cite="https://x.com/vonderleyen/status/2082812129267028248"&gt;
&lt;p&gt;“Europe wants to become the first AI Continent.”&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;I replied and commented because Europe is my home, because I want it to win, and because the number looked tiny beside the stated goal.&lt;sup class="fn" id="fnref:3"&gt;&lt;a class="footnote-ref" href="#fn:3" role="doc-noteref"&gt;3&lt;/a&gt;&lt;/sup&gt; That reply was simple, but it gathered some feedback, which led me to do a deeper analysis and lose a night of sleep.&lt;/p&gt;
&lt;p&gt;The tender is real policy, and its public-private structure does make sense. It can buy useful compute. However, it cannot buy the "AI Continent" promised in the speech.&lt;/p&gt;
&lt;p&gt;I still agree with the ambition. I do not think this instrument is large, complete or sophisticated enough to deliver it.&lt;/p&gt;
&lt;h2&gt;What was actually announced, and what wasn't&lt;/h2&gt;
&lt;p&gt;The mechanics run through the EuroHPC Joint Undertaking. Bidding for up to seven large compute campuses closes on 12 November 2026, award decisions are expected in early 2027, construction is meant to begin that year, and the first sites are supposed to be operating around mid-2028.&lt;sup class="fn" id="fnref:4"&gt;&lt;a class="footnote-ref" href="#fn:4" role="doc-noteref"&gt;4&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;
&lt;p&gt;In the Commission's initial June 2025 count, an earlier round drew 76 expressions of interest across 60 sites in 16 member states, with respondents foreseeing at least three million specialized processors. The submissions indicated more than €230 billion of possible investment over three to five years.&lt;sup class="fn" id="fnref:5"&gt;&lt;a class="footnote-ref" href="#fn:5" role="doc-noteref"&gt;5&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;
&lt;p&gt;But this €230 billion is not committed money. These were non-binding submissions rather than formal applications, and they tell us nothing yet about which projects are financeable.&lt;/p&gt;
&lt;p&gt;But what's interesting to me is that a possible pipeline nearly eight times larger than the eventual tender is useful evidence. So, clearly, the private appetite exists. Now Brussels has to identify the bankable projects, find out who will use them, and decide whether its instrument can move quickly enough to turn the best proposals into operating capacity.&lt;/p&gt;
&lt;p&gt;The first obvious dependency is hardware. In the name of "technological sovereignty," the Commission signed letters of intent with AMD, Nvidia and Qualcomm to give consortia "seamless access to necessary hardware."&lt;sup class="fn" id="fnref:6"&gt;&lt;a class="footnote-ref" href="#fn:6" role="doc-noteref"&gt;6&lt;/a&gt;&lt;/sup&gt; That's reasonable given that Europe may have no alternative at frontier scale today. However, it is still financing greater operating independence with chips supplied by foreign firms.&lt;/p&gt;
&lt;h3&gt;The money behind the headline&lt;/h3&gt;
&lt;p&gt;Only around €1 billion of the €10 billion public share is committed from the current EU budget.&lt;/p&gt;
&lt;p&gt;The rest depends on the next Multiannual Financial Framework (MFF), which has not been agreed. A senior Commission official described €30 billion as the best estimate of what might become available, rather than money already in hand.&lt;sup class="fn" id="fnref:7"&gt;&lt;a class="footnote-ref" href="#fn:7" role="doc-noteref"&gt;7&lt;/a&gt;&lt;/sup&gt; Large EU programs often bridge seven-year budget cycles, so future money does not make the program fictitious. It does make the timing awkward because AI companies invest quarter by quarter while the Union budgets seven years at a time.&lt;/p&gt;
&lt;p&gt;A kind observer might say this is long-term planning. A more cynical one would draw parallels with long-gone failed unions and states in Central and Eastern Europe, and with their planned economies and five-year budgets.&lt;/p&gt;
&lt;p&gt;But I digress.&lt;/p&gt;
&lt;p&gt;Brussels had also announced more. At the Paris AI Action Summit in February 2025, von der Leyen launched InvestAI with a dedicated €20 billion gigafactory fund.&lt;sup class="fn" id="fnref:8"&gt;&lt;a class="footnote-ref" href="#fn:8" role="doc-noteref"&gt;8&lt;/a&gt;&lt;/sup&gt; Eighteen months later, the tender offers up to €10 billion public, roughly half from Brussels and half from participating states. Euronews reports that the Commission reduced its financial commitment as the initiative was delayed.&lt;sup class="fn" id="fnref:9"&gt;&lt;a class="footnote-ref" href="#fn:9" role="doc-noteref"&gt;9&lt;/a&gt;&lt;/sup&gt; The public number did not grow with the ambition. It was cut in half.&lt;/p&gt;
&lt;figure class="evidence-figure evidence-figure--editorial evidence-figure--timeline"&gt;
&lt;svg viewBox="0 0 680 590" role="img" aria-label="From gigafactory announcement to intended operation" aria-describedby="fig-timeline-desc" xmlns="http://www.w3.org/2000/svg"&gt;
&lt;desc id="fig-timeline-desc"&gt;A vertical timeline distinguishes the February 2025 announcement of a 20 billion euro public fund, the June 2025 non-binding expressions of interest indicating more than 230 billion euro, the July 2026 tender above 30 billion euro with up to 10 billion public and about 1 billion currently committed, the November 2026 bid deadline, expected awards in early 2027, and intended first operations around mid-2028. A lower panel shows the usual capital split: the EU up to 17 percent, member states at least matching that amount, and private consortia funding the remainder plus all operating costs.&lt;/desc&gt;
&lt;defs&gt;&lt;marker id="timeline-arrow" viewBox="0 0 8 8" refX="7" refY="4" markerWidth="7" markerHeight="7" orient="auto"&gt;&lt;path d="M0,0.6 L7.4,4 L0,7.4 Z" fill="var(--ink-soft)"/&gt;&lt;/marker&gt;&lt;/defs&gt;
&lt;text x="32" y="38" font-family="var(--font-mono)" font-size="12" letter-spacing="0.08em" fill="var(--ink-soft)"&gt;ANNOUNCEMENT, INTEREST, TENDER, DELIVERY&lt;/text&gt;
&lt;line x1="68" y1="74" x2="68" y2="425" stroke="var(--hairline-strong)" stroke-width="2" marker-end="url(#timeline-arrow)" data-flow="true"/&gt;
&lt;g data-reveal="true"&gt;&lt;circle cx="68" cy="88" r="7" fill="var(--figure-periwinkle)"/&gt;&lt;text x="96" y="82" font-family="var(--font-mono)" font-size="12" fill="var(--ink-soft)"&gt;FEB 2025 · ANNOUNCED&lt;/text&gt;&lt;text x="96" y="107" font-family="var(--font-display)" font-size="22" font-weight="600" fill="var(--ink)"&gt;€20B public gigafactory fund&lt;/text&gt;&lt;/g&gt;
&lt;g data-reveal="true"&gt;&lt;circle cx="68" cy="158" r="7" fill="var(--figure-lilac)"/&gt;&lt;text x="96" y="152" font-family="var(--font-mono)" font-size="12" fill="var(--ink-soft)"&gt;JUN 2025 · NON-BINDING&lt;/text&gt;&lt;text x="96" y="177" font-family="var(--font-display)" font-size="22" font-weight="600" fill="var(--ink)"&gt;76 submissions · more than €230B indicated&lt;/text&gt;&lt;/g&gt;
&lt;g data-reveal="true"&gt;&lt;circle cx="68" cy="228" r="8" fill="var(--figure-sage)"/&gt;&lt;text x="96" y="222" font-family="var(--font-mono)" font-size="12" fill="var(--ink-soft)"&gt;JUL 2026 · TENDERED&lt;/text&gt;&lt;text x="96" y="247" font-family="var(--font-display)" font-size="22" font-weight="600" fill="var(--ink)"&gt;More than €30B · up to €10B public&lt;/text&gt;&lt;rect x="456" y="206" width="180" height="48" rx="5" fill="var(--field-deep)" stroke="var(--figure-apricot)"/&gt;&lt;text x="546" y="225" text-anchor="middle" font-family="var(--font-mono)" font-size="10.5" fill="var(--ink-soft)"&gt;CURRENT EU BUDGET&lt;/text&gt;&lt;text x="546" y="244" text-anchor="middle" font-family="var(--font-body)" font-size="15" font-weight="700" fill="var(--ink)"&gt;about €1B committed&lt;/text&gt;&lt;/g&gt;
&lt;g data-reveal="true"&gt;&lt;circle cx="68" cy="298" r="7" fill="var(--figure-apricot)"/&gt;&lt;text x="96" y="292" font-family="var(--font-mono)" font-size="12" fill="var(--ink-soft)"&gt;12 NOV 2026&lt;/text&gt;&lt;text x="96" y="317" font-family="var(--font-body)" font-size="18" font-weight="650" fill="var(--ink)"&gt;Bids close&lt;/text&gt;&lt;/g&gt;
&lt;g data-reveal="true"&gt;&lt;circle cx="68" cy="358" r="7" fill="var(--figure-apricot)"/&gt;&lt;text x="96" y="352" font-family="var(--font-mono)" font-size="12" fill="var(--ink-soft)"&gt;EARLY 2027&lt;/text&gt;&lt;text x="96" y="377" font-family="var(--font-body)" font-size="18" font-weight="650" fill="var(--ink)"&gt;Awards expected, with construction intended to begin&lt;/text&gt;&lt;/g&gt;
&lt;g data-reveal="true"&gt;&lt;circle cx="68" cy="418" r="7" fill="var(--figure-sage)"/&gt;&lt;text x="96" y="412" font-family="var(--font-mono)" font-size="12" fill="var(--ink-soft)"&gt;AROUND MID-2028&lt;/text&gt;&lt;text x="96" y="437" font-family="var(--font-body)" font-size="18" font-weight="650" fill="var(--ink)"&gt;First sites intended to operate&lt;/text&gt;&lt;/g&gt;
&lt;line x1="32" y1="470" x2="648" y2="470" stroke="var(--hairline)"/&gt;
&lt;text x="32" y="497" font-family="var(--font-mono)" font-size="11" letter-spacing="0.08em" fill="var(--ink-soft)"&gt;TYPICAL MATCHED CAPITAL STRUCTURE&lt;/text&gt;
&lt;g data-reveal="true"&gt;&lt;rect x="32" y="515" width="105" height="44" rx="5" fill="color-mix(in srgb, var(--figure-periwinkle) 18%, var(--field-raised))" stroke="var(--figure-periwinkle)"/&gt;&lt;text x="84" y="533" text-anchor="middle" font-family="var(--font-mono)" font-size="10.5" fill="var(--ink-soft)"&gt;EU&lt;/text&gt;&lt;text x="84" y="551" text-anchor="middle" font-family="var(--font-body)" font-size="15" font-weight="700" fill="var(--ink)"&gt;up to 17%&lt;/text&gt;&lt;rect x="147" y="515" width="135" height="44" rx="5" fill="color-mix(in srgb, var(--figure-apricot) 18%, var(--field-raised))" stroke="var(--figure-apricot)"/&gt;&lt;text x="214" y="533" text-anchor="middle" font-family="var(--font-mono)" font-size="10.5" fill="var(--ink-soft)"&gt;MEMBER STATES&lt;/text&gt;&lt;text x="214" y="551" text-anchor="middle" font-family="var(--font-body)" font-size="15" font-weight="700" fill="var(--ink)"&gt;at least match EU&lt;/text&gt;&lt;rect x="292" y="515" width="356" height="44" rx="5" fill="color-mix(in srgb, var(--figure-sage) 14%, var(--field-raised))" stroke="var(--figure-sage)"/&gt;&lt;text x="470" y="533" text-anchor="middle" font-family="var(--font-mono)" font-size="10.5" fill="var(--ink-soft)"&gt;PRIVATE CONSORTIUM&lt;/text&gt;&lt;text x="470" y="551" text-anchor="middle" font-family="var(--font-body)" font-size="15" font-weight="700" fill="var(--ink)"&gt;remainder of CAPEX + all OPEX&lt;/text&gt;&lt;/g&gt;
&lt;/svg&gt;
&lt;figcaption&gt;The program's numbers describe different states, not a guaranteed conversion from interest to operating capacity. The binding regulation normally leaves about two thirds of capital expenditure, plus all operating costs, with the private consortium.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;h3&gt;How the public-private split works&lt;/h3&gt;
&lt;p&gt;The tender is meant to draw in private investment rather than put Brussels in charge of construction. Under the binding regulation, the EU may cover up to 17% of eligible computing-infrastructure capital expenditure, and participating states must at least match that contribution. The private consortium pays the remainder and all operating costs. In the standard matched case, public support is about one third.&lt;sup class="fn" id="fnref:10"&gt;&lt;a class="footnote-ref" href="#fn:10" role="doc-noteref"&gt;10&lt;/a&gt;&lt;/sup&gt; Public money can cover processors, memory, storage, networking, racks, dedicated cooling and software. It does not cover the physical data center building or general site utilities.&lt;/p&gt;
&lt;p&gt;The gigafactories are not an isolated initiative. They also sit above a network of smaller AI Factories.&lt;/p&gt;
&lt;p&gt;The Commission says combined EU and participating-country investment in supercomputing infrastructure and AI Factories will reach €10 billion over 2021–2027. Its 2026 reporting attributes about €2.6 billion to the 19 AI Factories and 13 antennas selected so far.&lt;sup class="fn" id="fnref:11"&gt;&lt;a class="footnote-ref" href="#fn:11" role="doc-noteref"&gt;11&lt;/a&gt;&lt;/sup&gt; The first figure covers a seven-year program, while the second refers to the network selected so far.&lt;/p&gt;
&lt;p&gt;Together they show that Europe has built machinery through EuroHPC and knows how to use public money to attract private capital. However, the funding remains far below the scale implied by the goal.&lt;/p&gt;
&lt;p&gt;This program funds infrastructure. The EU AI Act governs how AI may be built and deployed, while the gigafactory tender pays for compute. Regulation matters later in the argument, but it is a separate instrument, and I wanted to bring it up early.&lt;/p&gt;
&lt;h2&gt;Seventeen days of hyperscaler spending&lt;/h2&gt;
&lt;p&gt;&lt;em&gt;For the calculations below, I convert at €1 = $1.15, the market rate on the day of writing.&lt;sup class="fn" id="fnref:12"&gt;&lt;a class="footnote-ref" href="#fn:12" role="doc-noteref"&gt;12&lt;/a&gt;&lt;/sup&gt; I use ranges where sources disagree. All sources were retrieved on July 31, 2026, with retrieval dates recorded in the references.&lt;/em&gt;&lt;/p&gt;
&lt;h3&gt;The American run rate&lt;/h3&gt;
&lt;p&gt;At the reporting cut on 30 July, Amazon, Alphabet, Microsoft and Meta were guiding to roughly $720–745 billion of combined 2026 capital expenditure, about 76–82% above their roughly $410 billion of actual 2025 capex.&lt;sup class="fn" id="fnref:13"&gt;&lt;a class="footnote-ref" href="#fn:13" role="doc-noteref"&gt;13&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;
&lt;p&gt;Amazon expects to spend about $220 billion, and Alphabet guides to $195–205 billion. Microsoft's reported figure is about $175 billion after a lease-accounting change, while Meta expects $130–145 billion.&lt;sup class="fn" id="fnref:14"&gt;&lt;a class="footnote-ref" href="#fn:14" role="doc-noteref"&gt;14&lt;/a&gt;&lt;/sup&gt; Microsoft says the accounting change does not alter the underlying investment expectation, previously stated at about $190 billion. I use the lower reported figure to keep the aggregate conservative. Analysts now put broader 2027 capex above $1 trillion.&lt;sup class="fn" id="fnref:15"&gt;&lt;a class="footnote-ref" href="#fn:15" role="doc-noteref"&gt;15&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;
&lt;p&gt;That works out to about $2 billion a day.&lt;/p&gt;
&lt;p&gt;Europe's whole €30 billion package, including the private money it hopes to attract over several years, converts to about $34.5 billion. The four companies expect to spend that much in roughly seventeen days.&lt;/p&gt;
&lt;p&gt;The €10 billion public share is equivalent to about 5.6–5.8 days. For another check on the scale, Epoch AI counted $448.3 billion of total 2025 capex across five large technology companies, including $140.6 billion in the fourth quarter alone.&lt;sup class="fn" id="fnref:16"&gt;&lt;a class="footnote-ref" href="#fn:16" role="doc-noteref"&gt;16&lt;/a&gt;&lt;/sup&gt; Financial-press aggregations of current 2026 guidance also clear $700 billion.&lt;sup class="fn" id="fnref:17"&gt;&lt;a class="footnote-ref" href="#fn:17" role="doc-noteref"&gt;17&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;
&lt;figure class="evidence-figure evidence-figure--editorial evidence-figure--capital-clock"&gt;
&lt;svg viewBox="0 0 680 440" role="img" aria-label="The European gigafactory package measured against annual hyperscaler capital expenditure" aria-describedby="fig-clock-desc" xmlns="http://www.w3.org/2000/svg"&gt;
&lt;desc id="fig-clock-desc"&gt;The four largest US hyperscalers guide to 720 to 745 billion dollars of capital expenditure across 365 days. At that daily rate, the complete 30 billion euro European package equals about 17 days and its 10 billion euro public component equals about 5.6 to 5.8 days. A magnified 30-day scale makes both intervals visible.&lt;/desc&gt;
&lt;text x="32" y="38" font-family="var(--font-mono)" font-size="12" letter-spacing="0.08em" fill="var(--ink-soft)"&gt;THE CAPITAL CLOCK · 2026 GUIDANCE&lt;/text&gt;
&lt;text x="32" y="72" font-family="var(--font-display)" font-size="24" font-weight="600" fill="var(--ink)"&gt;$720–745B across 365 days&lt;/text&gt;
&lt;rect x="32" y="92" width="616" height="36" rx="6" fill="var(--field-deep)" stroke="var(--hairline-strong)"/&gt;
&lt;rect x="32" y="92" width="29" height="36" rx="6" fill="var(--figure-periwinkle)" data-reveal="true"/&gt;
&lt;rect x="32" y="92" width="10" height="36" rx="6" fill="var(--figure-apricot)" data-reveal="true"/&gt;
&lt;text x="32" y="151" font-family="var(--font-body)" font-size="14" fill="var(--ink-soft)"&gt;The colored intervals are accurate, but too small to label on a full-year rail.&lt;/text&gt;
&lt;line x1="32" y1="176" x2="648" y2="176" stroke="var(--hairline)"/&gt;
&lt;text x="32" y="205" font-family="var(--font-mono)" font-size="11" letter-spacing="0.08em" fill="var(--ink-soft)"&gt;FIRST 30 DAYS · MAGNIFIED&lt;/text&gt;
&lt;line x1="52" y1="232" x2="628" y2="232" stroke="var(--hairline-strong)" stroke-width="1.5"/&gt;
&lt;g font-family="var(--font-mono)" font-size="11" fill="var(--ink-soft)" text-anchor="middle"&gt;&lt;line x1="52" y1="225" x2="52" y2="239" stroke="var(--ink-soft)"/&gt;&lt;text x="52" y="254"&gt;0&lt;/text&gt;&lt;line x1="167" y1="225" x2="167" y2="239" stroke="var(--ink-soft)"/&gt;&lt;text x="167" y="254"&gt;6 days&lt;/text&gt;&lt;line x1="378" y1="225" x2="378" y2="239" stroke="var(--ink-soft)"/&gt;&lt;text x="378" y="254"&gt;17 days&lt;/text&gt;&lt;line x1="628" y1="225" x2="628" y2="239" stroke="var(--ink-soft)"/&gt;&lt;text x="628" y="254"&gt;30 days&lt;/text&gt;&lt;/g&gt;
&lt;g data-reveal="true"&gt;&lt;text x="52" y="289" font-family="var(--font-body)" font-size="15" font-weight="700" fill="var(--ink)"&gt;Whole European package · about $34.5B&lt;/text&gt;&lt;rect x="52" y="301" width="326" height="32" rx="5" fill="color-mix(in srgb, var(--figure-periwinkle) 28%, var(--field-raised))" stroke="var(--figure-periwinkle)"/&gt;&lt;text x="362" y="323" text-anchor="end" font-family="var(--font-mono)" font-size="12" font-weight="700" fill="var(--ink)"&gt;about 17 days&lt;/text&gt;&lt;/g&gt;
&lt;g data-reveal="true"&gt;&lt;text x="52" y="365" font-family="var(--font-body)" font-size="15" font-weight="700" fill="var(--ink)"&gt;Public component · about $11.5B&lt;/text&gt;&lt;rect x="52" y="377" width="111" height="32" rx="5" fill="color-mix(in srgb, var(--figure-apricot) 34%, var(--field-raised))" stroke="var(--figure-apricot)"/&gt;&lt;text x="176" y="399" font-family="var(--font-mono)" font-size="12" font-weight="700" fill="var(--ink)"&gt;5.6–5.8 days&lt;/text&gt;&lt;/g&gt;
&lt;/svg&gt;
&lt;figcaption&gt;The comparison uses total corporate capex guidance rather than a pure AI total. It shows the rate at which the largest US firms can mobilize infrastructure capital. It does not claim that every dollar buys an AI accelerator.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;Some of that American spending does land in Europe.&lt;/p&gt;
&lt;p&gt;For example, AWS switched on its €7.8 billion European Sovereign Cloud in Brandenburg in January 2026, and Microsoft has pledged tens of billions of dollars to expand European capacity.&lt;sup class="fn" id="fnref:18"&gt;&lt;a class="footnote-ref" href="#fn:18" role="doc-noteref"&gt;18&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;
&lt;p&gt;That capacity is useful. However, locating it in Europe does not create European ownership of the stack or remove every exposure to American law.&lt;/p&gt;
&lt;p&gt;Another initiative is OpenAI's Stargate program, targeting $500 billion and 10 gigawatts of compute. Its flagship Abilene campus is heading toward about 1.2 GW. OpenAI and Nvidia were also reported in late July 2026 to be discussing a single roughly $500 billion, 10-GW site in Ohio.&lt;sup class="fn" id="fnref:19"&gt;&lt;a class="footnote-ref" href="#fn:19" role="doc-noteref"&gt;19&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;
&lt;p&gt;Just that single program is around fifteen times the size of Europe's seven-gigafactory envelope, while one contemplated site could exceed the European plan many times over.&lt;/p&gt;
&lt;p&gt;Those American numbers need discounting and reality-checking too.&lt;/p&gt;
&lt;p&gt;Stargate's $500 billion is a pledge, and reporting through 2025 and 2026 describes a joint venture that never staffed up, missed its 10-GW contracting target, and was bypassed by separate OpenAI deals.&lt;sup class="fn" id="fnref:20"&gt;&lt;a class="footnote-ref" href="#fn:20" role="doc-noteref"&gt;20&lt;/a&gt;&lt;/sup&gt; The Ohio site is still a discussion, and 2026 company figures are guidance rather than booked spending. But four companies did record about $410 billion of total corporate capex in 2025, while roughly €1 billion is currently committed to the EU's flagship gigafactory instrument.&lt;/p&gt;
&lt;p&gt;So, with this in mind, I am not claiming every hyperscaler dollar bought an AI chip. What I am doing is comparing how much capital each side can mobilize.&lt;/p&gt;
&lt;h3&gt;What Europe has promised in total&lt;/h3&gt;
&lt;p&gt;But Europe's announcements add up to more than the tender.&lt;/p&gt;
&lt;p&gt;InvestAI aims to mobilize €200 billion, including €150 billion in private pledges from the EU AI Champions coalition.&lt;sup class="fn" id="fnref:21"&gt;&lt;a class="footnote-ref" href="#fn:21" role="doc-noteref"&gt;21&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;
&lt;p&gt;France separately announced €109 billion of private AI investment at the same Paris summit, anchored by a UAE-backed gigawatt data center campus and Brookfield's €20 billion.&lt;sup class="fn" id="fnref:22"&gt;&lt;a class="footnote-ref" href="#fn:22" role="doc-noteref"&gt;22&lt;/a&gt;&lt;/sup&gt; If I count every announcement and generously ignore possible overlap, the stack reaches about €309 billion over five years, or roughly $71 billion a year at the exchange rate used here.&lt;/p&gt;
&lt;p&gt;The four US companies' current guidance is still 10.1–10.5 times larger. Delivery matters as well. By May 2025, Macron was citing about €20 billion of projects delivered after the February pledges.&lt;sup class="fn" id="fnref:23"&gt;&lt;a class="footnote-ref" href="#fn:23" role="doc-noteref"&gt;23&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;
&lt;div class="table-scroll" role="region" tabindex="0" aria-labelledby="ai-capital-comparison-caption" aria-describedby="ai-capital-comparison-hint"&gt;
&lt;p class="table-scroll__hint" id="ai-capital-comparison-hint"&gt;Scroll horizontally to read the full comparison&lt;/p&gt;
&lt;table&gt;
&lt;caption id="ai-capital-comparison-caption"&gt;Five large AI-capital figures that should not be treated as interchangeable&lt;/caption&gt;
&lt;thead&gt;&lt;tr&gt;&lt;th scope="col"&gt;Figure&lt;/th&gt;&lt;th scope="col"&gt;What it measures&lt;/th&gt;&lt;th scope="col"&gt;Status&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;&lt;th scope="row"&gt;More than €30B&lt;/th&gt;&lt;td&gt;Seven-gigafactory tender envelope&lt;/td&gt;&lt;td&gt;Up to €10B public plus at least €20B sought from private consortia, spread over years&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th scope="row"&gt;More than €230B&lt;/th&gt;&lt;td&gt;Initial 76 expressions of interest over three to five years&lt;/td&gt;&lt;td&gt;Indicative and non-binding, with no projects selected or financed yet&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th scope="row"&gt;About €300B&lt;/th&gt;&lt;td&gt;Commission estimate for data center expansion plus cloud and AI initiatives&lt;/td&gt;&lt;td&gt;Broad public-private need through 2036, not a gigafactory budget&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th scope="row"&gt;$720–745B&lt;/th&gt;&lt;td&gt;Amazon, Alphabet, Microsoft and Meta 2026 corporate capex&lt;/td&gt;&lt;td&gt;Company guidance that is infrastructure-heavy without being a pure AI total&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th scope="row"&gt;About $410B&lt;/th&gt;&lt;td&gt;The same four companies' 2025 corporate capex&lt;/td&gt;&lt;td&gt;Actual spending, again broader than AI alone&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;h3&gt;China's chip fund&lt;/h3&gt;
&lt;p&gt;And then there's China.&lt;/p&gt;
&lt;p&gt;Its $47.5 billion (344 billion yuan) "Big Fund III" began deploying at the end of 2024 and covers the semiconductor layer rather than the full compute build-out.&lt;sup class="fn" id="fnref:24"&gt;&lt;a class="footnote-ref" href="#fn:24" role="doc-noteref"&gt;24&lt;/a&gt;&lt;/sup&gt; Cheaper open-weight models such as DeepSeek or Kimi have also spread globally. A full accounting of China's state-guided compute spending is beyond this essay's scope, but the chip fund alone is larger than the EU's public gigafactory commitment.&lt;/p&gt;
&lt;aside class="article-newsletter-cta" aria-label="Newsletter signup"&gt;
 &lt;div class="newsletter-signup newsletter-signup--article"&gt;
 &lt;div class="newsletter-signup__heading"&gt;
 &lt;p class="meta-label" id="newsletter-article-title"&gt;Newsletter&lt;/p&gt;
 
 &lt;p class="newsletter-signup__title"&gt;I occasionally write and share things like this.&lt;/p&gt;
 
 &lt;p class="newsletter-signup__intro"&gt;If you find them useful, leave your email here. I only send something when I have something worth sharing.&lt;/p&gt;
 
 &lt;/div&gt;

 &lt;form class="ph-sensitive ph-no-capture ph-no-autocapture ph-no-rageclick ph-no-deadclick" action="https://viborc.com/api/newsletter" method="post" accept-charset="UTF-8" aria-labelledby="newsletter-article-title" data-form="newsletter" data-analytics-event="newsletter_submit" data-newsletter-placement="article" data-ph-no-autocapture&gt;
 &lt;input name="form" type="hidden" value="newsletter-v1"&gt;
 &lt;input name="source" type="hidden" value="article"&gt;
 &lt;input name="return_path" type="hidden" value="/what-europes-ai-gigafactory-plan-can-and-cannot-buy/"&gt;
 &lt;input name="consent" type="hidden" value="yes"&gt;

 &lt;div class="form-trap" aria-hidden="true"&gt;
 &lt;label for="newsletter-article-company"&gt;Leave this field empty&lt;/label&gt;
 &lt;input id="newsletter-article-company" name="company_website" type="text" tabindex="-1" autocomplete="off"&gt;
 &lt;/div&gt;

 &lt;div class="newsletter-signup__controls"&gt;
 &lt;label class="visually-hidden" for="newsletter-article-email"&gt;Email address&lt;/label&gt;
 &lt;input id="newsletter-article-email" name="email" type="email" autocomplete="email" inputmode="email" maxlength="254" placeholder="you@example.com" aria-describedby="newsletter-article-note" required&gt;
 &lt;button type="submit"&gt;Subscribe&lt;/button&gt;
 &lt;/div&gt;

 &lt;p class="newsletter-signup__note" id="newsletter-article-note"&gt;
 Confirm once by email; unsubscribe at any time.
 See the &lt;a href="https://viborc.com/privacy-policy/"&gt;privacy policy&lt;/a&gt;.
 &lt;/p&gt;
 &lt;p class="submission-form__status" role="status" aria-live="polite" aria-atomic="true" data-form-status hidden&gt;&lt;/p&gt;
 &lt;/form&gt;

 
 &lt;div class="form-outcomes" aria-live="polite" aria-atomic="true"&gt;
 &lt;p class="form-outcome" id="newsletter-article-check-email" tabindex="-1"&gt;Check your inbox and follow the confirmation link. You are not subscribed until that step is complete.&lt;/p&gt;
 &lt;p class="form-outcome form-outcome--error" id="newsletter-article-error" tabindex="-1"&gt;The subscription request could not be completed. Please try again later.&lt;/p&gt;
 &lt;/div&gt;
 
&lt;/div&gt;

&lt;/aside&gt;

&lt;h2&gt;What €30 billion buys at current costs&lt;/h2&gt;
&lt;p&gt;A gigawatt of data center capacity is the useful unit here.&lt;/p&gt;
&lt;p&gt;Current estimates range from roughly $35 billion to $60 billion per frontier gigawatt. Bernstein is near $35 billion, Epoch AI around $38 billion, and Nvidia's Jensen Huang has used $50–60 billion. Huang's $80–100 billion estimate describes where costs may be heading, so I do not use it for the main calculation.&lt;sup class="fn" id="fnref:25"&gt;&lt;a class="footnote-ref" href="#fn:25" role="doc-noteref"&gt;25&lt;/a&gt;&lt;/sup&gt; Citigroup uses about $50 billion and projects 55 GW of new AI power demand globally by 2030.&lt;sup class="fn" id="fnref:26"&gt;&lt;a class="footnote-ref" href="#fn:26" role="doc-noteref"&gt;26&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;
&lt;p&gt;At the current $35–60 billion band, €30 billion corresponds to roughly 0.58–0.99 GW of full-system cost. If the forward estimate reaches $100 billion, the same package buys about 0.35 GW. Even that comparison gives the headline more purchasing power than the regulation does, because eligible public CAPEX covers the compute system but excludes the physical building and general site utilities.&lt;/p&gt;
&lt;p&gt;For scale on the chip side: Nvidia's data-center revenue was a record $75.2 billion in a &lt;em&gt;single quarter&lt;/em&gt; (Q1 FY2027, ended April 2026), up 92% year-on-year, on full-year FY2026 revenue of $215.9 billion.&lt;sup class="fn" id="fnref:27"&gt;&lt;a class="footnote-ref" href="#fn:27" role="doc-noteref"&gt;27&lt;/a&gt;&lt;/sup&gt; Europe's entire public gigafactory check is about two weeks of Nvidia's data-center sales.&lt;/p&gt;
&lt;p&gt;Stargate is targeting 10 GW, and the four US hyperscalers are collectively building toward many tens of gigawatts. At today's costs, Europe's current package does not finance one full frontier gigawatt.&lt;/p&gt;
&lt;figure class="evidence-figure evidence-figure--editorial evidence-figure--gigawatts"&gt;
&lt;svg viewBox="0 0 680 510" role="img" aria-label="The first gigawatt of Stargate's 10-gigawatt target magnified to show how much capacity 30 billion euro may buy" aria-describedby="fig-gw-desc" xmlns="http://www.w3.org/2000/svg"&gt;
&lt;desc id="fig-gw-desc"&gt;A ruler divided into ten equal one-gigawatt intervals represents Stargate's 10-gigawatt target. Its first one-gigawatt interval is highlighted and magnified below. On that shared scale, 30 billion euro corresponds to between 0.58 and 0.99 gigawatts at current estimated costs, or about 0.35 gigawatts at a forward cost of 100 billion dollars per gigawatt. Buildings and general site utilities are excluded from eligible EuroHPC public capital expenditure.&lt;/desc&gt;
&lt;defs&gt;
&lt;clipPath id="gw-overview-rail"&gt;&lt;rect x="32" y="98" width="616" height="30" rx="6"/&gt;&lt;/clipPath&gt;
&lt;clipPath id="gw-current-rail"&gt;&lt;rect x="52" y="362" width="560" height="32" rx="5"/&gt;&lt;/clipPath&gt;
&lt;clipPath id="gw-forward-rail"&gt;&lt;rect x="52" y="450" width="560" height="32" rx="5"/&gt;&lt;/clipPath&gt;
&lt;/defs&gt;
&lt;text x="32" y="38" font-family="var(--font-mono)" font-size="12" letter-spacing="0.08em" fill="var(--ink-soft)"&gt;CAPACITY AT FRONTIER-SCALE COSTS&lt;/text&gt;
&lt;text x="32" y="72" font-family="var(--font-display)" font-size="23" font-weight="600" fill="var(--ink)"&gt;Stargate target · 10 GW&lt;/text&gt;
&lt;g data-reveal="true"&gt;
&lt;rect x="32" y="98" width="616" height="30" rx="6" fill="var(--figure-wash)"/&gt;
&lt;rect x="32" y="98" width="62" height="30" fill="color-mix(in srgb, var(--figure-periwinkle) 42%, var(--field-raised))" clip-path="url(#gw-overview-rail)"/&gt;
&lt;rect x="32" y="98" width="616" height="30" rx="6" fill="none" stroke="var(--figure-periwinkle)"/&gt;
&lt;g stroke="var(--figure-lilac)" stroke-width="1"&gt;&lt;line x1="94" y1="98" x2="94" y2="128"/&gt;&lt;line x1="156" y1="98" x2="156" y2="128"/&gt;&lt;line x1="218" y1="98" x2="218" y2="128"/&gt;&lt;line x1="280" y1="98" x2="280" y2="128"/&gt;&lt;line x1="342" y1="98" x2="342" y2="128"/&gt;&lt;line x1="404" y1="98" x2="404" y2="128"/&gt;&lt;line x1="466" y1="98" x2="466" y2="128"/&gt;&lt;line x1="528" y1="98" x2="528" y2="128"/&gt;&lt;line x1="590" y1="98" x2="590" y2="128"/&gt;&lt;/g&gt;
&lt;text x="63" y="118" text-anchor="middle" font-family="var(--font-mono)" font-size="10" fill="var(--ink)"&gt;1 GW&lt;/text&gt;
&lt;g font-family="var(--font-mono)" font-size="11" fill="var(--ink-soft)" text-anchor="middle"&gt;&lt;text x="32" y="151" text-anchor="start"&gt;0&lt;/text&gt;&lt;text x="156" y="151"&gt;2 GW&lt;/text&gt;&lt;text x="280" y="151"&gt;4 GW&lt;/text&gt;&lt;text x="404" y="151"&gt;6 GW&lt;/text&gt;&lt;text x="528" y="151"&gt;8 GW&lt;/text&gt;&lt;text x="648" y="151" text-anchor="end"&gt;10 GW&lt;/text&gt;&lt;/g&gt;
&lt;/g&gt;
&lt;g aria-hidden="true" fill="none" stroke="var(--hairline-strong)"&gt;&lt;path d="M32 161v8h62v-8"/&gt;&lt;path d="M94 169h16"/&gt;&lt;/g&gt;
&lt;text x="118" y="173" font-family="var(--font-mono)" font-size="10" letter-spacing="0.06em" fill="var(--ink-soft)"&gt;THIS WINDOW IS MAGNIFIED BELOW&lt;/text&gt;
&lt;line x1="32" y1="198" x2="648" y2="198" stroke="var(--hairline)"/&gt;
&lt;text x="32" y="228" font-family="var(--font-mono)" font-size="11" letter-spacing="0.08em" fill="var(--ink-soft)"&gt;FIRST 1 GW · MAGNIFIED&lt;/text&gt;
&lt;text x="32" y="261" font-family="var(--font-display)" font-size="23" font-weight="600" fill="var(--ink)"&gt;What €30B may buy&lt;/text&gt;
&lt;line x1="52" y1="292" x2="612" y2="292" stroke="var(--hairline-strong)" stroke-width="1.5"/&gt;
&lt;g font-family="var(--font-mono)" font-size="11" fill="var(--ink-soft)" text-anchor="middle"&gt;&lt;line x1="52" y1="285" x2="52" y2="299" stroke="var(--ink-soft)"/&gt;&lt;text x="52" y="316"&gt;0&lt;/text&gt;&lt;line x1="192" y1="285" x2="192" y2="299" stroke="var(--ink-soft)"/&gt;&lt;text x="192" y="316"&gt;0.25&lt;/text&gt;&lt;line x1="332" y1="285" x2="332" y2="299" stroke="var(--ink-soft)"/&gt;&lt;text x="332" y="316"&gt;0.50&lt;/text&gt;&lt;line x1="472" y1="285" x2="472" y2="299" stroke="var(--ink-soft)"/&gt;&lt;text x="472" y="316"&gt;0.75&lt;/text&gt;&lt;line x1="612" y1="285" x2="612" y2="299" stroke="var(--ink-soft)"/&gt;&lt;text x="612" y="316"&gt;1 GW&lt;/text&gt;&lt;/g&gt;
&lt;g data-reveal="true"&gt;&lt;text x="52" y="350" font-family="var(--font-body)" font-size="15" fill="var(--ink)"&gt;Current $35–60B/GW estimates&lt;/text&gt;&lt;rect x="52" y="362" width="560" height="32" rx="5" fill="var(--field-deep)" stroke="var(--hairline-strong)"/&gt;&lt;g clip-path="url(#gw-current-rail)"&gt;&lt;rect x="52" y="362" width="554" height="32" fill="color-mix(in srgb, var(--figure-sage) 18%, var(--field-raised))"/&gt;&lt;rect x="52" y="362" width="325" height="32" fill="color-mix(in srgb, var(--figure-sage) 42%, var(--field-raised))"/&gt;&lt;/g&gt;&lt;text x="390" y="384" font-family="var(--font-mono)" font-size="12" fill="var(--ink)"&gt;0.58–0.99 GW&lt;/text&gt;&lt;/g&gt;
&lt;g data-reveal="true"&gt;&lt;text x="52" y="438" font-family="var(--font-body)" font-size="15" fill="var(--ink)"&gt;Forward $100B/GW case&lt;/text&gt;&lt;rect x="52" y="450" width="560" height="32" rx="5" fill="var(--field-deep)" stroke="var(--hairline-strong)"/&gt;&lt;g clip-path="url(#gw-forward-rail)"&gt;&lt;rect x="52" y="450" width="196" height="32" fill="color-mix(in srgb, var(--figure-apricot) 38%, var(--field-raised))"/&gt;&lt;/g&gt;&lt;text x="260" y="472" font-family="var(--font-mono)" font-size="12" fill="var(--ink)"&gt;about 0.35 GW&lt;/text&gt;&lt;/g&gt;
&lt;/svg&gt;
&lt;figcaption&gt;The package maps to less than one gigawatt at current full-system estimates, and less still if frontier costs continue to rise. EuroHPC eligibility does not include the building or general utilities, so this is not a claim that the tender buys a turnkey campus.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;Private investors have already tested part of this proposition in the wider European market.&lt;/p&gt;
&lt;p&gt;Stargate Norway was announced on 31 July 2025 as a campus in Kvandal, outside Narvik, targeting 100,000 Nvidia GPUs and 230 MW of hydropower-fed capacity. It could expand toward 520 MW, with Nscale and Aker committing roughly $1 billion to the initial phase.&lt;sup class="fn" id="fnref:28"&gt;&lt;a class="footnote-ref" href="#fn:28" role="doc-noteref"&gt;28&lt;/a&gt;&lt;/sup&gt; During the year between that announcement and Brussels' tender, OpenAI stepped back after failing to conclude terms with Nscale, Microsoft contracted more than 30,000 next-generation Nvidia Rubin GPUs there from 2027, and OpenAI abandoned parallel UK plans with Nscale, reportedly citing regulation and energy prices.&lt;sup class="fn" id="fnref:29"&gt;&lt;a class="footnote-ref" href="#fn:29" role="doc-noteref"&gt;29&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;
&lt;p&gt;Neither Norway nor post-Brexit Britain is in the EU, so these cases do not prove that EU regulation caused the decisions. They say something about operating economics in the wider European market, including power prices, permitting time and commercial terms. The EU-specific evidence appears later in the Digital Omnibus postponement and the deployment examples. Europe also has strong candidate regions, especially France and the Nordics, which is why a serious siting analysis must compare locations rather than treat the continent as one grid.&lt;/p&gt;
&lt;h2&gt;Europe's own cap table&lt;/h2&gt;
&lt;p&gt;Mistral AI raised a €1.7 billion Series C in September 2025, led by ASML, at an €11.7 billion valuation. It was later reported to be discussing a round near €20 billion.&lt;sup class="fn" id="fnref:30"&gt;&lt;a class="footnote-ref" href="#fn:30" role="doc-noteref"&gt;30&lt;/a&gt;&lt;/sup&gt; Of course, a paper valuation cannot pay for servers. What it shows is how private investors rank the opportunity: they priced one European lab above the public commitment to seven gigafactories.&lt;/p&gt;
&lt;p&gt;Lovable, the Swedish AI-coding company, reached a reported $6.6 billion valuation in December 2025 and was later reported to be raising near $12 billion.&lt;sup class="fn" id="fnref:31"&gt;&lt;a class="footnote-ref" href="#fn:31" role="doc-noteref"&gt;31&lt;/a&gt;&lt;/sup&gt; &lt;span class="disclosure"&gt;(Disclosure: I was very early at Lovable. I now research AI and work in the field, including as a consultant.)&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;Hugging Face, which was founded in France, was last publicly marked around $4.5 billion in a 2023 round.&lt;sup class="fn" id="fnref:32"&gt;&lt;a class="footnote-ref" href="#fn:32" role="doc-noteref"&gt;32&lt;/a&gt;&lt;/sup&gt; ASML, without whose equipment the most advanced chips cannot be made, is itself among Europe's most valuable technology companies.&lt;/p&gt;
&lt;p&gt;The talent and companies exist, and private investors are willing to back them. But Europe is still struggling to turn that confidence into infrastructure and into companies that remain here as they scale.&lt;/p&gt;
&lt;h2&gt;Brussels' own numbers are already larger&lt;/h2&gt;
&lt;p&gt;Mario Draghi's September 2024 report put Europe's additional investment need at €750–800 billion per year, around 5% of EU GDP.&lt;sup class="fn" id="fnref:33"&gt;&lt;a class="footnote-ref" href="#fn:33" role="doc-noteref"&gt;33&lt;/a&gt;&lt;/sup&gt; Later estimates widened the overall strategic need toward €1.2 trillion per year. Progress has been slow. EPIC's first audit found 43 of 383 recommendations, or 11.2%, fully implemented in September 2025. Its January 2026 update reached 15.1%.&lt;sup class="fn" id="fnref:34"&gt;&lt;a class="footnote-ref" href="#fn:34" role="doc-noteref"&gt;34&lt;/a&gt;&lt;/sup&gt; These figures cover the whole economy rather than an AI infrastructure budget.&lt;/p&gt;
&lt;p&gt;The Commission now provides a more relevant benchmark. Its June 2026 technology-sovereignty work estimates that expanding European data center capacity will require around €200 billion by 2036, mostly from the private sector, plus another €100 billion for cloud and AI leadership initiatives that include AI Factories and Gigafactories.&lt;sup class="fn" id="fnref:35"&gt;&lt;a class="footnote-ref" href="#fn:35" role="doc-noteref"&gt;35&lt;/a&gt;&lt;/sup&gt; This is a broad estimate of public and private infrastructure needs, not €300 billion reserved for gigafactories. Even so, Brussels' own assessment is an order of magnitude above the tender's headline envelope.&lt;/p&gt;
&lt;p&gt;I do not take the €1 trillion ceiling from Draghi. I derive it later by multiplying 10–20 GW of capacity by the current $35–60 billion cost band. Draghi supplies context because his digitization slice alone was roughly €150 billion a year. The Commission's newer €200 billion plus €100 billion estimate also makes a €100 billion floor look conservative.&lt;/p&gt;
&lt;p&gt;I am not arguing that AI should jump the queue ahead of defense (!!!), health or housing. Draghi's total covers the competitiveness gap across sectors, and the digital layer increasingly supports the others.&lt;/p&gt;
&lt;p&gt;My argument is narrower. If Europe calls AI strategic, its funding and reforms should go beyond a moon-shot tweet from Ursula von der Leyen and match that scale.&lt;/p&gt;
&lt;h2&gt;Sovereignty means control and an exit&lt;/h2&gt;
&lt;p&gt;If Europe rents its AI from American clouds and Chinese labs, the practical risk is dependence on another jurisdiction's decisions. We got a recent taste of that when the US government ordered Anthropic to deny foreign nationals access to Fable 5 and Mythos 5. Because Anthropic could not verify nationality in real time, it suspended both models for all users. The controls were lifted eighteen days later, but the episode showed how quickly a foreign policy decision could reach European users.&lt;sup class="fn" id="fnref:36"&gt;&lt;a class="footnote-ref" href="#fn:36" role="doc-noteref"&gt;36&lt;/a&gt;&lt;/sup&gt; And that's just one example.&lt;/p&gt;
&lt;h3&gt;The US exposure&lt;/h3&gt;
&lt;p&gt;American cloud providers are subject to the CLOUD Act of 2018, which compels them to disclose data in their "possession, custody, or control" to US authorities regardless of where in the world it is stored.&lt;sup class="fn" id="fnref:37"&gt;&lt;a class="footnote-ref" href="#fn:37" role="doc-noteref"&gt;37&lt;/a&gt;&lt;/sup&gt; In May 2025, the Associated Press reported that the email account of ICC Chief Prosecutor Karim Khan had been blocked following US sanctions. Microsoft president Brad Smith denies that Microsoft suspended services to the court, and the precise mechanics remain disputed.&lt;/p&gt;
&lt;p&gt;Separately, Microsoft France's legal director told a French Senate committee under oath that the company could not guarantee it would refuse a valid US demand for data held in Europe.&lt;sup class="fn" id="fnref:38"&gt;&lt;a class="footnote-ref" href="#fn:38" role="doc-noteref"&gt;38&lt;/a&gt;&lt;/sup&gt; The ICC subsequently began moving to European open-source alternatives.&lt;sup class="fn" id="fnref:39"&gt;&lt;a class="footnote-ref" href="#fn:39" role="doc-noteref"&gt;39&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;
&lt;p&gt;US lawmakers have also proposed "location verification" for exported chips and debated whether that could become a remote kill switch.&lt;sup class="fn" id="fnref:40"&gt;&lt;a class="footnote-ref" href="#fn:40" role="doc-noteref"&gt;40&lt;/a&gt;&lt;/sup&gt; Nvidia has repeatedly denied that its chips contain backdoors or kill switches.&lt;sup class="fn" id="fnref:41"&gt;&lt;a class="footnote-ref" href="#fn:41" role="doc-noteref"&gt;41&lt;/a&gt;&lt;/sup&gt; No kill switch is known to exist. The prospective exposure is that Washington is debating such controls while Europe has no seat at that table.&lt;/p&gt;
&lt;h3&gt;The China exposure&lt;/h3&gt;
&lt;p&gt;Chinese open-weight models present two distinct questions.&lt;/p&gt;
&lt;p&gt;The first is jurisdiction.&lt;/p&gt;
&lt;p&gt;Italy's Garante ordered DeepSeek blocked on 30 January 2025 after the company argued that European law did not apply to it. Garante board member Agostino Ghiglia told Reuters that Chinese servers do not provide European guarantees.&lt;sup class="fn" id="fnref:42"&gt;&lt;a class="footnote-ref" href="#fn:42" role="doc-noteref"&gt;42&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;
&lt;p&gt;The second is alignment.&lt;/p&gt;
&lt;p&gt;A US government evaluation, which has its own strategic context but a published methodology, found that DeepSeek models repeated four times as many inaccurate or misleading CCP narratives as the US reference models. The behavior persisted in the weights rather than appearing only as a service filter.&lt;sup class="fn" id="fnref:43"&gt;&lt;a class="footnote-ref" href="#fn:43" role="doc-noteref"&gt;43&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;
&lt;h3&gt;What European control would mean&lt;/h3&gt;
&lt;p&gt;The answer depends on which part of the stack we are talking about, and there are several of them.&lt;/p&gt;
&lt;p&gt;With cloud infrastructure, the central risk is foreign jurisdiction. Imported chips add exposure to export policy and to whatever tracking rules Washington may eventually adopt. Hosted model APIs can be limited or withdrawn by their providers.&lt;/p&gt;
&lt;p&gt;Open weights running on European-controlled machines remove those service switches, but they still carry choices made during training and alignment unless Europe audits, fine-tunes or retrains them. That is an option worth considering.&lt;/p&gt;
&lt;p&gt;So, there is no universal off-switch and no single purchase that creates sovereignty. Europe needs enough control, supplier diversity and exit capacity that a foreign government or company cannot disable a critical system by changing one contract, policy or law.&lt;/p&gt;
&lt;figure class="evidence-figure evidence-figure--editorial evidence-figure--control-stack"&gt;
&lt;svg viewBox="0 0 680 558" role="img" aria-label="Control and exposure across four layers of the AI stack" aria-describedby="fig-control-desc" xmlns="http://www.w3.org/2000/svg"&gt;
&lt;desc id="fig-control-desc"&gt;Four rows compare Europe's foreign exposure with the control it can build. Cloud services create jurisdictional exposure, answered by European operation and enforceable exit. Chips create export-policy exposure, answered by supplier diversity and strategic capacity. Hosted APIs can be withdrawn, answered by workload portability and local inference. Open model weights still contain training and alignment choices, answered by auditing, fine-tuning and retraining. The point is layered control rather than a single universal off-switch.&lt;/desc&gt;
&lt;defs&gt;&lt;marker id="control-arrow" viewBox="0 0 8 8" refX="7" refY="4" markerWidth="7" markerHeight="7" orient="auto"&gt;&lt;path d="M0,0.6 L7.4,4 L0,7.4 Z" fill="var(--ink-soft)"/&gt;&lt;/marker&gt;&lt;/defs&gt;
&lt;text x="28" y="38" font-family="var(--font-mono)" font-size="12" letter-spacing="0.08em" fill="var(--ink-soft)"&gt;SOVEREIGNTY IS LAYERED CONTROL&lt;/text&gt;
&lt;text x="174" y="74" text-anchor="middle" font-family="var(--font-mono)" font-size="11" letter-spacing="0.08em" fill="var(--ink-soft)"&gt;FOREIGN EXPOSURE&lt;/text&gt;
&lt;text x="514" y="74" text-anchor="middle" font-family="var(--font-mono)" font-size="11" letter-spacing="0.08em" fill="var(--ink-soft)"&gt;EUROPEAN CONTROL&lt;/text&gt;
&lt;g data-reveal="true"&gt;
&lt;rect x="28" y="92" width="118" height="86" rx="6" fill="var(--field-deep)" stroke="var(--hairline-strong)"/&gt;&lt;text x="87" y="141" text-anchor="middle" font-family="var(--font-display)" font-size="20" font-weight="650" fill="var(--ink)"&gt;Cloud&lt;/text&gt;
&lt;rect x="160" y="92" width="202" height="86" rx="6" fill="color-mix(in srgb, var(--figure-apricot) 16%, var(--field-raised))" stroke="var(--figure-apricot)"/&gt;&lt;text x="261" y="127" text-anchor="middle" font-family="var(--font-body)" font-size="15" fill="var(--ink)"&gt;Foreign jurisdiction&lt;/text&gt;&lt;text x="261" y="149" text-anchor="middle" font-family="var(--font-body)" font-size="15" fill="var(--ink)"&gt;can reach stored data&lt;/text&gt;
&lt;line x1="372" y1="135" x2="402" y2="135" stroke="var(--ink-soft)" stroke-width="1.5" marker-end="url(#control-arrow)" data-flow="true"/&gt;
&lt;rect x="416" y="92" width="236" height="86" rx="6" fill="color-mix(in srgb, var(--figure-sage) 14%, var(--field-raised))" stroke="var(--figure-sage)"/&gt;&lt;text x="534" y="127" text-anchor="middle" font-family="var(--font-body)" font-size="15" fill="var(--ink)"&gt;European operation&lt;/text&gt;&lt;text x="534" y="149" text-anchor="middle" font-family="var(--font-body)" font-size="15" fill="var(--ink)"&gt;and enforceable exit&lt;/text&gt;
&lt;/g&gt;
&lt;g data-reveal="true"&gt;
&lt;rect x="28" y="190" width="118" height="86" rx="6" fill="var(--field-deep)" stroke="var(--hairline-strong)"/&gt;&lt;text x="87" y="239" text-anchor="middle" font-family="var(--font-display)" font-size="20" font-weight="650" fill="var(--ink)"&gt;Chips&lt;/text&gt;
&lt;rect x="160" y="190" width="202" height="86" rx="6" fill="color-mix(in srgb, var(--figure-apricot) 16%, var(--field-raised))" stroke="var(--figure-apricot)"/&gt;&lt;text x="261" y="225" text-anchor="middle" font-family="var(--font-body)" font-size="15" fill="var(--ink)"&gt;Export policy and&lt;/text&gt;&lt;text x="261" y="247" text-anchor="middle" font-family="var(--font-body)" font-size="15" fill="var(--ink)"&gt;possible tracking rules&lt;/text&gt;
&lt;line x1="372" y1="233" x2="402" y2="233" stroke="var(--ink-soft)" stroke-width="1.5" marker-end="url(#control-arrow)" data-flow="true"/&gt;
&lt;rect x="416" y="190" width="236" height="86" rx="6" fill="color-mix(in srgb, var(--figure-sage) 14%, var(--field-raised))" stroke="var(--figure-sage)"/&gt;&lt;text x="534" y="225" text-anchor="middle" font-family="var(--font-body)" font-size="15" fill="var(--ink)"&gt;Supplier diversity&lt;/text&gt;&lt;text x="534" y="247" text-anchor="middle" font-family="var(--font-body)" font-size="15" fill="var(--ink)"&gt;and strategic capacity&lt;/text&gt;
&lt;/g&gt;
&lt;g data-reveal="true"&gt;
&lt;rect x="28" y="288" width="118" height="86" rx="6" fill="var(--field-deep)" stroke="var(--hairline-strong)"/&gt;&lt;text x="87" y="327" text-anchor="middle" font-family="var(--font-display)" font-size="18" font-weight="650" fill="var(--ink)"&gt;Hosted&lt;/text&gt;&lt;text x="87" y="349" text-anchor="middle" font-family="var(--font-display)" font-size="18" font-weight="650" fill="var(--ink)"&gt;APIs&lt;/text&gt;
&lt;rect x="160" y="288" width="202" height="86" rx="6" fill="color-mix(in srgb, var(--figure-apricot) 16%, var(--field-raised))" stroke="var(--figure-apricot)"/&gt;&lt;text x="261" y="323" text-anchor="middle" font-family="var(--font-body)" font-size="15" fill="var(--ink)"&gt;Provider can limit&lt;/text&gt;&lt;text x="261" y="345" text-anchor="middle" font-family="var(--font-body)" font-size="15" fill="var(--ink)"&gt;or withdraw access&lt;/text&gt;
&lt;line x1="372" y1="331" x2="402" y2="331" stroke="var(--ink-soft)" stroke-width="1.5" marker-end="url(#control-arrow)" data-flow="true"/&gt;
&lt;rect x="416" y="288" width="236" height="86" rx="6" fill="color-mix(in srgb, var(--figure-sage) 14%, var(--field-raised))" stroke="var(--figure-sage)"/&gt;&lt;text x="534" y="323" text-anchor="middle" font-family="var(--font-body)" font-size="15" fill="var(--ink)"&gt;Portable workloads&lt;/text&gt;&lt;text x="534" y="345" text-anchor="middle" font-family="var(--font-body)" font-size="15" fill="var(--ink)"&gt;and local inference&lt;/text&gt;
&lt;/g&gt;
&lt;g data-reveal="true"&gt;
&lt;rect x="28" y="386" width="118" height="86" rx="6" fill="var(--field-deep)" stroke="var(--hairline-strong)"/&gt;&lt;text x="87" y="425" text-anchor="middle" font-family="var(--font-display)" font-size="18" font-weight="650" fill="var(--ink)"&gt;Open&lt;/text&gt;&lt;text x="87" y="447" text-anchor="middle" font-family="var(--font-display)" font-size="18" font-weight="650" fill="var(--ink)"&gt;weights&lt;/text&gt;
&lt;rect x="160" y="386" width="202" height="86" rx="6" fill="color-mix(in srgb, var(--figure-apricot) 16%, var(--field-raised))" stroke="var(--figure-apricot)"/&gt;&lt;text x="261" y="421" text-anchor="middle" font-family="var(--font-body)" font-size="15" fill="var(--ink)"&gt;Training and alignment&lt;/text&gt;&lt;text x="261" y="443" text-anchor="middle" font-family="var(--font-body)" font-size="15" fill="var(--ink)"&gt;choices remain&lt;/text&gt;
&lt;line x1="372" y1="429" x2="402" y2="429" stroke="var(--ink-soft)" stroke-width="1.5" marker-end="url(#control-arrow)" data-flow="true"/&gt;
&lt;rect x="416" y="386" width="236" height="86" rx="6" fill="color-mix(in srgb, var(--figure-sage) 14%, var(--field-raised))" stroke="var(--figure-sage)"/&gt;&lt;text x="534" y="421" text-anchor="middle" font-family="var(--font-body)" font-size="15" fill="var(--ink)"&gt;Audit, fine-tune&lt;/text&gt;&lt;text x="534" y="443" text-anchor="middle" font-family="var(--font-body)" font-size="15" fill="var(--ink)"&gt;or retrain&lt;/text&gt;
&lt;/g&gt;
&lt;line x1="28" y1="502" x2="652" y2="502" stroke="var(--hairline)"/&gt;
&lt;text x="340" y="530" text-anchor="middle" font-family="var(--font-body)" font-size="16" font-weight="650" fill="var(--ink)"&gt;The practical test: can Europe keep a critical system running after one foreign decision?&lt;/text&gt;
&lt;/svg&gt;
&lt;figcaption&gt;There is no single off-switch to remove. Control has to be designed layer by layer, with a usable exit from each dependency.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;h2&gt;Europe trains the talent and loses the scale-up&lt;/h2&gt;
&lt;p&gt;There's a painful pattern in AI's own genealogy. Three of the field's "godfathers" are European by birth or training, but they did their defining work in North America. Geoffrey Hinton was born in Britain, earned his PhD in Edinburgh and built his career in the US and Canada. Yann LeCun was born in France, did his formative work at Bell Labs and NYU, and became Meta's chief AI scientist before starting his latest venture. Yoshua Bengio was born in Paris and built his career at Montreal's Mila.&lt;sup class="fn" id="fnref:44"&gt;&lt;a class="footnote-ref" href="#fn:44" role="doc-noteref"&gt;44&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;
&lt;p&gt;Jürgen Schmidhuber stayed in Europe longer, spending decades at IDSIA in Switzerland. He is also famous for arguing that his labs established important ideas first, from LSTM with Sepp Hochreiter to precursors of GANs and Transformers. In 2021 he left to direct the AI Initiative at Saudi Arabia's KAUST.&lt;sup class="fn" id="fnref:45"&gt;&lt;a class="footnote-ref" href="#fn:45" role="doc-noteref"&gt;45&lt;/a&gt;&lt;/sup&gt; His long priority dispute can read as ego. I also see the European pattern inside it. Ideas are generated here, then commercialized elsewhere at greater scale.&lt;/p&gt;
&lt;p&gt;Serial founder Martin Varsavsky put it better than I can:&lt;sup class="fn" id="fnref:46"&gt;&lt;a class="footnote-ref" href="#fn:46" role="doc-noteref"&gt;46&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;
&lt;blockquote class="pull-quote" cite="https://x.com/martinvars/status/2051893025891025171"&gt;
&lt;p&gt;“We export Nobels and import apps.”&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;The €30 billion plan does not address that problem. If Europe buys compute without creating the conditions that keep builders here, it may end up subsidizing the next migration.&lt;/p&gt;
&lt;h2&gt;"Cathedrals in the desert": who is all this compute for?&lt;/h2&gt;
&lt;p&gt;And then there's a question of the actual usage and need.&lt;/p&gt;
&lt;p&gt;In reality, I believe that this customer question is harder than the size of the check, and here's what I mean by that.&lt;/p&gt;
&lt;p&gt;A May 2026 Politico investigation gathered critics who could not see a business case for the planned capacity.&lt;sup class="fn" id="fnref:47"&gt;&lt;a class="footnote-ref" href="#fn:47" role="doc-noteref"&gt;47&lt;/a&gt;&lt;/sup&gt; German Greens MEP Sergey Lagodinsky said nobody could explain that case to him. When he asked what the compute was for, he heard little beyond the need for more compute.&lt;sup class="fn" id="fnref:48"&gt;&lt;a class="footnote-ref" href="#fn:48" role="doc-noteref"&gt;48&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;
&lt;p&gt;Nicoleta Kyosovska and Andrea Renda at CEPS tested proposed sites against patents, publications, startup investment, AI vacancies and electricity prices. Their title asks whether the facilities will become sanctuaries of innovation or "cathedrals in the desert."&lt;sup class="fn" id="fnref:49"&gt;&lt;a class="footnote-ref" href="#fn:49" role="doc-noteref"&gt;49&lt;/a&gt;&lt;/sup&gt; Kyosovska has separately warned that some interested consortia may be following the assumption that more compute automatically means better models.&lt;sup class="fn" id="fnref:50"&gt;&lt;a class="footnote-ref" href="#fn:50" role="doc-noteref"&gt;50&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;
&lt;p&gt;Eighteen MEPs have also warned that the scheme could deepen dependence on one American chip supplier. Meanwhile Mistral, the European lab that I think is most likely to use frontier capacity, announced a $1.2 billion data center investment in Sweden and raised more money for its own facility near Paris.&lt;sup class="fn" id="fnref:51"&gt;&lt;a class="footnote-ref" href="#fn:51" role="doc-noteref"&gt;51&lt;/a&gt;&lt;/sup&gt; This criticism targeted a €20 billion public plan. Two months later, the tender opened with half that.&lt;/p&gt;
&lt;p&gt;I think the critics are right about demand. Where I differ is on the conclusion.&lt;/p&gt;
&lt;p&gt;The answer is better procurement and serious investment in customers alongside the hardware, rather than automatically abandoning the larger ambition. Piotr Sankowski, director of the IDEAS Research Institute in Warsaw, argues that Europe should plan "AI terafactories right now" while funding the talent and products needed to use them.&lt;sup class="fn" id="fnref:52"&gt;&lt;a class="footnote-ref" href="#fn:52" role="doc-noteref"&gt;52&lt;/a&gt;&lt;/sup&gt; His post conflates the $500 billion overall Stargate program with the much smaller Stargate Norway project. That error does not affect his demand-side argument, and the corrected Norway figures are used here.&lt;/p&gt;
&lt;p&gt;A gigafactory without customers really would be a cathedral in the desert. So Europe has to fund demand too: labs, startups, applied-AI teams and public-sector deployments that turn compute into products. The CEPS critique is strongest for frontier-training demand, which remains thin outside Mistral. Inference demand is broader because it grows with adoption across business and government. Mistral's own data center build-out shows that European demand appears when a European lab exists to create it.&lt;/p&gt;
&lt;p&gt;The United States finances both sides. It has Stargate and the hyperscaler build-out, but it also has OpenAI, Anthropic, xAI, Meta and a deep market of customers. Europe cannot fund a fraction of the supply and almost none of the demand, then be surprised that the business case looks weak.&lt;/p&gt;
&lt;figure class="evidence-figure evidence-figure--editorial evidence-figure--demand-loop"&gt;
&lt;svg viewBox="0 0 680 520" role="img" aria-label="How compute becomes a market rather than idle capacity" aria-describedby="fig-demand-desc" xmlns="http://www.w3.org/2000/svg"&gt;
&lt;desc id="fig-demand-desc"&gt;Public anchor funding starts the cycle by helping build compute. Labs, startups and public deployments use that capacity. Their use creates utilization and revenue, which attracts private reinvestment into more capacity. A side path shows the failure mode: compute built without customers becomes idle capacity instead.&lt;/desc&gt;
&lt;defs&gt;&lt;marker id="demand-arrow" viewBox="0 0 8 8" refX="7" refY="4" markerWidth="7" markerHeight="7" orient="auto"&gt;&lt;path d="M0,0.6 L7.4,4 L0,7.4 Z" fill="var(--ink-soft)"/&gt;&lt;/marker&gt;&lt;marker id="demand-arrow-sage" viewBox="0 0 8 8" refX="7" refY="4" markerWidth="7" markerHeight="7" orient="auto"&gt;&lt;path d="M0,0.6 L7.4,4 L0,7.4 Z" fill="var(--figure-sage)"/&gt;&lt;/marker&gt;&lt;marker id="demand-arrow-apricot" viewBox="0 0 8 8" refX="7" refY="4" markerWidth="7" markerHeight="7" orient="auto"&gt;&lt;path d="M0,0.6 L7.4,4 L0,7.4 Z" fill="var(--figure-apricot)"/&gt;&lt;/marker&gt;&lt;/defs&gt;
&lt;text x="28" y="38" font-family="var(--font-mono)" font-size="12" letter-spacing="0.08em" fill="var(--ink-soft)"&gt;THE SUPPLY-DEMAND FLYWHEEL&lt;/text&gt;
&lt;g data-reveal="true"&gt;&lt;rect x="28" y="76" width="178" height="78" rx="6" fill="color-mix(in srgb, var(--figure-periwinkle) 15%, var(--field-raised))" stroke="var(--figure-periwinkle)"/&gt;&lt;text x="117" y="108" text-anchor="middle" font-family="var(--font-display)" font-size="18" font-weight="650" fill="var(--ink)"&gt;Public anchor&lt;/text&gt;&lt;text x="117" y="132" text-anchor="middle" font-family="var(--font-body)" font-size="15" fill="var(--ink-soft)"&gt;funding and contracts&lt;/text&gt;&lt;/g&gt;
&lt;line x1="216" y1="115" x2="278" y2="115" stroke="var(--ink-soft)" stroke-width="1.6" marker-end="url(#demand-arrow)" data-flow="true"/&gt;
&lt;g data-reveal="true"&gt;&lt;rect x="290" y="76" width="178" height="78" rx="6" fill="color-mix(in srgb, var(--figure-lilac) 15%, var(--field-raised))" stroke="var(--figure-lilac)"/&gt;&lt;text x="379" y="108" text-anchor="middle" font-family="var(--font-display)" font-size="20" font-weight="650" fill="var(--ink)"&gt;Compute&lt;/text&gt;&lt;text x="379" y="132" text-anchor="middle" font-family="var(--font-body)" font-size="15" fill="var(--ink-soft)"&gt;capacity comes online&lt;/text&gt;&lt;/g&gt;
&lt;path d="M468 115 H612 V202" fill="none" stroke="var(--ink-soft)" stroke-width="1.6" marker-end="url(#demand-arrow)" data-flow="true"/&gt;
&lt;g data-reveal="true"&gt;&lt;rect x="474" y="214" width="178" height="102" rx="6" fill="color-mix(in srgb, var(--figure-sage) 13%, var(--field-raised))" stroke="var(--figure-sage)"/&gt;&lt;text x="563" y="246" text-anchor="middle" font-family="var(--font-display)" font-size="18" font-weight="650" fill="var(--ink)"&gt;Users&lt;/text&gt;&lt;text x="563" y="271" text-anchor="middle" font-family="var(--font-body)" font-size="14" fill="var(--ink-soft)"&gt;labs · startups&lt;/text&gt;&lt;text x="563" y="292" text-anchor="middle" font-family="var(--font-body)" font-size="14" fill="var(--ink-soft)"&gt;public deployments&lt;/text&gt;&lt;/g&gt;
&lt;path d="M563 326 V407 H468" fill="none" stroke="var(--ink-soft)" stroke-width="1.6" marker-end="url(#demand-arrow)" data-flow="true"/&gt;
&lt;g data-reveal="true"&gt;&lt;rect x="290" y="368" width="178" height="78" rx="6" fill="color-mix(in srgb, var(--figure-sage) 13%, var(--field-raised))" stroke="var(--figure-sage)"/&gt;&lt;text x="379" y="400" text-anchor="middle" font-family="var(--font-display)" font-size="18" font-weight="650" fill="var(--ink)"&gt;Utilization&lt;/text&gt;&lt;text x="379" y="424" text-anchor="middle" font-family="var(--font-body)" font-size="15" fill="var(--ink-soft)"&gt;and revenue&lt;/text&gt;&lt;/g&gt;
&lt;line x1="278" y1="407" x2="216" y2="407" stroke="var(--ink-soft)" stroke-width="1.6" marker-end="url(#demand-arrow)" data-flow="true"/&gt;
&lt;g data-reveal="true"&gt;&lt;rect x="28" y="368" width="178" height="78" rx="6" fill="color-mix(in srgb, var(--figure-sage) 13%, var(--field-raised))" stroke="var(--figure-sage)"/&gt;&lt;text x="117" y="400" text-anchor="middle" font-family="var(--font-display)" font-size="17" font-weight="650" fill="var(--ink)"&gt;Private capital&lt;/text&gt;&lt;text x="117" y="424" text-anchor="middle" font-family="var(--font-body)" font-size="15" fill="var(--ink-soft)"&gt;reinvests&lt;/text&gt;&lt;/g&gt;
&lt;path d="M117 358 V334 H244 V115 H278" fill="none" stroke="var(--figure-sage)" stroke-width="2" marker-end="url(#demand-arrow-sage)" data-flow="true"/&gt;
&lt;text x="263" y="344" text-anchor="start" font-family="var(--font-mono)" font-size="10.5" letter-spacing="0.07em" fill="var(--ink-soft)"&gt;A MARKET COMPOUNDS&lt;/text&gt;
&lt;path d="M379 166 V214" fill="none" stroke="var(--figure-apricot)" stroke-width="1.6" stroke-dasharray="5 5" marker-end="url(#demand-arrow-apricot)"/&gt;
&lt;g data-reveal="true"&gt;&lt;rect x="290" y="226" width="178" height="78" rx="6" fill="color-mix(in srgb, var(--figure-apricot) 16%, var(--field-raised))" stroke="var(--figure-apricot)" stroke-dasharray="5 4"/&gt;&lt;text x="379" y="257" text-anchor="middle" font-family="var(--font-display)" font-size="17" font-weight="650" fill="var(--ink)"&gt;No customers&lt;/text&gt;&lt;text x="379" y="281" text-anchor="middle" font-family="var(--font-body)" font-size="15" fill="var(--ink-soft)"&gt;idle capacity&lt;/text&gt;&lt;/g&gt;
&lt;text x="28" y="487" font-family="var(--font-body)" font-size="16" font-weight="650" fill="var(--ink)"&gt;The tender finances the first box. European AI policy has to connect the entire loop.&lt;/text&gt;
&lt;/svg&gt;
&lt;figcaption&gt;Compute becomes strategic capacity only when labs, companies and public services can use it. Without that demand, the same hardware becomes an expensive idle asset.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;h2&gt;What if the scaling bet weakens?&lt;/h2&gt;
&lt;p&gt;The argument can still fail at a more basic level: perhaps compute will matter less than today's spending assumptions. That's a big "perhaps," but it's not without some basis.&lt;/p&gt;
&lt;p&gt;DeepSeek showed that algorithmic efficiency can substitute for some brute capex, and Kyosovska warns that larger language models may be delivering diminishing returns.&lt;sup class="fn" id="fnref:53"&gt;&lt;a class="footnote-ref" href="#fn:53" role="doc-noteref"&gt;53&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;
&lt;p&gt;The American build-out has its own skeptics. Moody's tracks six hyperscalers toward roughly $785 billion of 2026 capex, financed increasingly through debt and off-balance-sheet vehicles while free cash flow tightens.&lt;sup class="fn" id="fnref:54"&gt;&lt;a class="footnote-ref" href="#fn:54" role="doc-noteref"&gt;54&lt;/a&gt;&lt;/sup&gt; If the scaling era ends, today's US build-out becomes an enormous inventory write-down and Europe's slower approach starts to look wise.&lt;/p&gt;
&lt;p&gt;Different assumptions justify different ceilings. If scaling keeps binding, Europe's compute gap is fatal to its frontier ambitions. If efficiency breaks that link, inference demand can still grow with adoption and the cloud and model dependencies do not disappear. A staged sovereign-compute floor preserves option value in either case. What I believe changes is the ceiling, not the need for a floor, and especially not for reform.&lt;/p&gt;
&lt;p&gt;At the end of the day, Europe may not even need a vertically integrated frontier stack to gain useful control.&lt;/p&gt;
&lt;p&gt;European-operated inference on audited open weights, diversified capacity contracts, enforceable cloud exit and portability rights, confidential computing, and procurement that expands in stages as demand appears could lower the cost of resilience. Much of the €100 billion floor should buy exactly this mix. But realistically, this does not eliminate the frontier-training question, the chip dependency or the need for enough domestic capacity to make exit rights usable.&lt;/p&gt;
&lt;p&gt;I would reconsider the €100 billion floor if inference demand stalled, token consumption flattened and enterprise adoption reversed. At that point even the option-value case would be weaker. Those are the signals to watch rather than assuming that any amount of compute will eventually find a use.&lt;/p&gt;
&lt;p&gt;Europe also has a financing choice.&lt;/p&gt;
&lt;p&gt;The American build increasingly uses debt and off-balance-sheet vehicles. Europe could finance more of its floor with equity and channel some of the roughly €10 trillion held in low-yield household deposits. Equity can still lose money, including public money. However, a fall in valuation does not trigger the same forced liquidation dynamics as leveraged debt. The July unwind at Leopold Aschenbrenner's Situational Awareness fund, which sold the bulk of its public-equities portfolio after deep losses on leveraged AI bets, and the jump in margin calls and forced liquidations in South Korea gave us a recent taste of that.&lt;sup class="fn" id="fnref:55"&gt;&lt;a class="footnote-ref" href="#fn:55" role="doc-noteref"&gt;55&lt;/a&gt;&lt;/sup&gt; That is another reason to stage commitments and tie them to demand.&lt;/p&gt;
&lt;h2&gt;"Just spend more" was never the argument&lt;/h2&gt;
&lt;p&gt;My tweet reply to von der Leyen was a brief, 280-character version of a position I have held for a while. One of the people responding, Raidas Tauras, answered that simply spending more would not work: governments allocate capital poorly, larger public budgets can be wasted, and private actors need the right incentives and room to build.&lt;sup class="fn" id="fnref:56"&gt;&lt;a class="footnote-ref" href="#fn:56" role="doc-noteref"&gt;56&lt;/a&gt;&lt;/sup&gt; He is right about that half of the argument.&lt;/p&gt;
&lt;p&gt;My full position is that Europe needs much more capital and the structural reforms that let private money flow and builders build. Reform should reduce how much public money gets wasted. But a cleaner rulebook will not build the missing infrastructure on its own. These are parallel jobs.&lt;/p&gt;
&lt;p&gt;The structural side is where Europe keeps losing time, and here are those domains:&lt;/p&gt;
&lt;h3&gt;Fragmented capital markets&lt;/h3&gt;
&lt;p&gt;An American founder can incorporate once, usually in Delaware, raise under one legal system and sell into a continental market of 340 million people. A European founder still navigates 27 legal, tax and insolvency regimes. The IMF estimates the EU's internal barriers as equivalent to a 44% tariff on goods and 110% on services. Critics call that estimate an upper bound, a caveat that matters even though von der Leyen now cites it.&lt;sup class="fn" id="fnref:57"&gt;&lt;a class="footnote-ref" href="#fn:57" role="doc-noteref"&gt;57&lt;/a&gt;&lt;/sup&gt; At the same time, roughly €10 trillion of household savings remains in low-yield deposits rather than flowing into European companies.&lt;sup class="fn" id="fnref:58"&gt;&lt;a class="footnote-ref" href="#fn:58" role="doc-noteref"&gt;58&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;
&lt;p&gt;The Savings and Investments Union is supposed to redirect more of that capital, but Bruegel senior fellow Nicolas Véron describes progress as "embarrassingly modest."&lt;sup class="fn" id="fnref:59"&gt;&lt;a class="footnote-ref" href="#fn:59" role="doc-noteref"&gt;59&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;
&lt;p&gt;I have to be fair here: there has been movement. In March 2026 the Commission proposed EU Inc., an optional pan-European company form with digital incorporation, no minimum capital, VC-friendly shares and deferred taxation of employee options.&lt;sup class="fn" id="fnref:60"&gt;&lt;a class="footnote-ref" href="#fn:60" role="doc-noteref"&gt;60&lt;/a&gt;&lt;/sup&gt; It is the kind of reform Europe needs, and it remains a proposal and, in my personal view, not ambitious enough. Parliament's rapporteur has tabled 246 amendments. Labor law, most taxation and enforcement would still sit across 27 national systems.&lt;sup class="fn" id="fnref:61"&gt;&lt;a class="footnote-ref" href="#fn:61" role="doc-noteref"&gt;61&lt;/a&gt;&lt;/sup&gt; Incorporation could become much easier while most of the cross-border friction survives.&lt;/p&gt;
&lt;h3&gt;Energy incoherence&lt;/h3&gt;
&lt;p&gt;A siting study would compare grid-connection queues, firm capacity, industrial and PPA prices, and reliability region by region. France and the Nordics are obvious strong candidates. Large AI campuses are power projects as much as computing projects, and parts of Europe's energy policy still pull in opposite directions.&lt;/p&gt;
&lt;p&gt;Last year, on 28 April 2025, Spain and Portugal lost roughly 60% of demand in seconds. Spain's official inquiry blamed a multifactorial overvoltage cascade and failures of voltage control, not renewables as such.&lt;sup class="fn" id="fnref:62"&gt;&lt;a class="footnote-ref" href="#fn:62" role="doc-noteref"&gt;62&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;
&lt;p&gt;The compute question is narrower. A 15 GW loss in five seconds and a schedule to retire Spain's nuclear fleet are both relevant to investors assessing firm power. Madrid has begun to revisit the retirement calendar, with the nuclear regulator supporting an Almaraz extension to 2030 while the government's final decision remains pending.&lt;sup class="fn" id="fnref:63"&gt;&lt;a class="footnote-ref" href="#fn:63" role="doc-noteref"&gt;63&lt;/a&gt;&lt;/sup&gt; In an amazing self-sabotage move, Germany exited nuclear and retains lignite as dispatchable backup. France gets more than 60% of its electricity from nuclear and markets that stability to data center investors.&lt;sup class="fn" id="fnref:64"&gt;&lt;a class="footnote-ref" href="#fn:64" role="doc-noteref"&gt;64&lt;/a&gt;&lt;/sup&gt; Slovenia is planning JEK2 at Krško, and Croatia has publicly said it is open to participating.&lt;sup class="fn" id="fnref:65"&gt;&lt;a class="footnote-ref" href="#fn:65" role="doc-noteref"&gt;65&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;
&lt;p&gt;When xAI's Colossus site in Memphis could not get utility power on its preferred timetable, it deployed mobile gas turbines under a permissive local regime.&lt;sup class="fn" id="fnref:66"&gt;&lt;a class="footnote-ref" href="#fn:66" role="doc-noteref"&gt;66&lt;/a&gt;&lt;/sup&gt; Its first 100,000 GPUs went live in 122 days, and the complex approached 555,000 GPUs and about 2 GW of site capacity by early 2026.&lt;sup class="fn" id="fnref:67"&gt;&lt;a class="footnote-ref" href="#fn:67" role="doc-noteref"&gt;67&lt;/a&gt;&lt;/sup&gt; The air-quality objections in Memphis are legitimate, and Europe should not copy unpermitted gas generation. It does need a lawful route to firm power and grid connections on commercial timescales.&lt;/p&gt;
&lt;h3&gt;Regulatory and deployment drag&lt;/h3&gt;
&lt;p&gt;The practical concern is the time and legal uncertainty between a working system and its deployment in sectors such as healthcare. Martin Varsavsky makes that case from an interested position: his venture Certuma is seeking FDA recognition, so he benefits from faster approvals.&lt;sup class="fn" id="fnref:68"&gt;&lt;a class="footnote-ref" href="#fn:68" role="doc-noteref"&gt;68&lt;/a&gt;&lt;/sup&gt; That does not erase the comparison. If anything, it tells readers how to weight it. His prescription is "less harmonization theater and more permissionless building."&lt;sup class="fn" id="fnref:69"&gt;&lt;a class="footnote-ref" href="#fn:69" role="doc-noteref"&gt;69&lt;/a&gt;&lt;/sup&gt; I would keep the demand for faster, clearer routes while rejecting permissionlessness where patients and fundamental rights are at stake. His blunter claim that Europe fines the companies it cannot build captures the frustration, but possibly mistakes enforcement for the whole of industrial policy.&lt;sup class="fn" id="fnref:70"&gt;&lt;a class="footnote-ref" href="#fn:70" role="doc-noteref"&gt;70&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;
&lt;p&gt;Brussels itself appears to recognize an implementation problem. The November 2025 Digital Omnibus proposed simplifying the AI Act, and in May 2026 Parliament and Council provisionally agreed to delay the high-risk obligations from August 2026 to December 2027 and August 2028.&lt;sup class="fn" id="fnref:71"&gt;&lt;a class="footnote-ref" href="#fn:71" role="doc-noteref"&gt;71&lt;/a&gt;&lt;/sup&gt; A delay does not prove that the Act's goals are wrong. In my view, it serves as evidence that the original timetable was not workable.&lt;/p&gt;
&lt;p&gt;And lastly, the market is sending a separate signal too: OpenAI reportedly abandoned its UK data center plans with Nscale because of regulation and energy prices.&lt;sup class="fn" id="fnref:72"&gt;&lt;a class="footnote-ref" href="#fn:72" role="doc-noteref"&gt;72&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;
&lt;h3&gt;Equity and talent rules&lt;/h3&gt;
&lt;p&gt;And then there's compensation, equity and talent rules.&lt;/p&gt;
&lt;p&gt;Awkward stock-option and bonus regimes make it harder to pay builders in upside and retain them. Varsavsky argues that European labor and tax rules push employers toward lower fixed compensation instead of options and performance bonuses.&lt;sup class="fn" id="fnref:73"&gt;&lt;a class="footnote-ref" href="#fn:73" role="doc-noteref"&gt;73&lt;/a&gt;&lt;/sup&gt; The US and the Gulf compete more aggressively on that dimension. EU Inc.'s proposed deferral of tax on employee options is a serious continental answer, and worth protecting through the legislative process and individual member states' decisions. And we've seen regressions already.&lt;sup class="fn" id="fnref:74"&gt;&lt;a class="footnote-ref" href="#fn:74" role="doc-noteref"&gt;74&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;
&lt;h2&gt;Recommendations&lt;/h2&gt;
&lt;h3&gt;Stage 1: say the range out loud&lt;/h3&gt;
&lt;p&gt;I would reframe the goal from "€30 billion for seven gigafactories" to a decade-scale ambition with &lt;strong&gt;€100 billion as the sovereign-compute floor under current assumptions and roughly €1 trillion as an upper capacity scenario&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;The derivation is explicit. At $35–60 billion per frontier gigawatt, 5 GW costs roughly €152–261 billion at the exchange rate used here. A 20–35% public role would be about €30–91 billion in anchor tenancy, co-funding and guarantees. That is three to nine times the tender's €10 billion public component, or one to three times the whole €30 billion package. A 10–20 GW ambition yields roughly €304 billion to €1.04 trillion.&lt;sup class="fn" id="fnref:75"&gt;&lt;a class="footnote-ref" href="#fn:75" role="doc-noteref"&gt;75&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;
&lt;p&gt;Ten to twenty gigawatts is one or two Stargate-scale programs. It is not a forecast that Europe must build every watt itself. If anything, it is a scenario for a continent that says it wants frontier capacity while the US is building many tens of gigawatts. Turbine, transformer and grid backlogs make early orders more important. The public role is to act as anchor customer and de-risking backstop, then draw private equity from Europe's low-yield savings pool into staged projects with real users.&lt;/p&gt;
&lt;h3&gt;Stage 2: ship the structural reforms in parallel&lt;/h3&gt;
&lt;p&gt;The work should begin during 2026–2027. Otherwise a larger capital program will waste more money than it should.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Pass EU Inc. and finish the Savings and Investments Union without gutting either.&lt;/strong&gt; Adopt the 28th regime on the end-2026 timeline with its VC share structures and deferred-tax employee stock-option plan intact. Then apply the same single-rulebook logic to capital markets, so a founder can incorporate, raise and scale once across the continent.&lt;sup class="fn" id="fnref:76"&gt;&lt;a class="footnote-ref" href="#fn:76" role="doc-noteref"&gt;76&lt;/a&gt;&lt;/sup&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Treat power as AI policy.&lt;/strong&gt; Extend working nuclear plants, fast-track grid connections for compute, and stop closing dispatchable capacity before storage exists to replace it.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Create a fast lane for deploying AI in regulated sectors&lt;/strong&gt; such as healthcare and public services, with timelines measured in months and safeguards proportionate to the risk.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Fix equity and option taxation&lt;/strong&gt; so European companies can pay in upside and keep their best people.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Buy European where the stack allows it.&lt;/strong&gt; Use European chips where they exist and European cloud for sovereign workloads. Europe will still, at least for a while, depend on AMD, Nvidia and Qualcomm for frontier silicon, so procurement has to manage that exposure honestly.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Fund the demand side, not just the supply side.&lt;/strong&gt; Pair public compute with investment in model labs, applied-AI teams, startups and public-sector deployments. Use compute credits, advance-purchase commitments and governments willing to act as launch customers.&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;Four benchmarks that would change my mind&lt;/h3&gt;
&lt;p&gt;By the early-2027 award decisions:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Committed public funding should have moved well beyond the roughly €1 billion available today and toward a genuine multi-year program of at least €10 billion.&lt;/li&gt;
&lt;li&gt;The next multiannual EU budget should contain a sovereign-compute envelope measured in hundreds of billions.&lt;/li&gt;
&lt;li&gt;Implementation of the Draghi recommendations should have moved decisively beyond the low teens.&lt;/li&gt;
&lt;li&gt;EU Inc. and the Savings and Investments Union should have produced a usable single rulebook rather than another communiqué.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;If those tests fail, the initiative should be read as mostly symbolic and Europe's builders should plan accordingly. If the budget contains a genuine compute envelope and EU Inc. becomes law with its teeth intact, the €30 billion tender will have been a credible first step. It still will not be the continental strategy promised in the speech.&lt;/p&gt;
&lt;h2&gt;Limits&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;This is a scenario analysis, not a bottom-up siting model.&lt;/strong&gt; A project-finance study would need utilization, accelerator mix, depreciation, resale value, grid queues, power contracts and loss allocation for each site. The demand tripwires and award-stage benchmarks above are the falsifiable proxies used here.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Some market figures still rely on financial-press aggregation.&lt;/strong&gt; Company earnings calls, filings and Commission documents carry the largest numbers where available. Secondary reporting remains for private negotiations and inaccessible paywalled reporting, and is labeled as such.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;On control risks, I've claimed only what sources support.&lt;/strong&gt; No kill switch is known to exist, and Nvidia denies that there is one. Microsoft denies suspending the ICC's services. The CLOUD Act's reach and the Chip Security Act debate are real, but their practical impact on European gigafactories is prospective rather than proven.&lt;/li&gt;
&lt;/ul&gt;
&lt;section class="footnotes" role="doc-endnotes"&gt;
&lt;hr&gt;
&lt;ol&gt;
&lt;li id="fn:1"&gt;European Commission, &lt;a href="https://ec.europa.eu/commission/presscorner/detail/en/ip_26_1708"&gt;press release IP/26/1708 announcing the AI Gigafactories call for tenders,&lt;/a&gt; July 30, 2026. Retrieved July 31, 2026. &lt;a class="footnote-backref" href="#fnref:1" role="doc-backlink"&gt;↩︎&lt;/a&gt;&lt;/li&gt;
&lt;li id="fn:2"&gt;Ursula von der Leyen (@vonderleyen), &lt;a href="https://x.com/vonderleyen/status/2082812129267028248"&gt;post on X,&lt;/a&gt; July 30, 2026. Retrieved July 31, 2026. &lt;a class="footnote-backref" href="#fnref:2" role="doc-backlink"&gt;↩︎&lt;/a&gt;&lt;/li&gt;
&lt;li id="fn:3"&gt;Vibor Cipan (@viborc), &lt;a href="https://x.com/viborc/status/2082937529737601410"&gt;reply on X,&lt;/a&gt; July 31, 2026. Retrieved July 31, 2026. &lt;a class="footnote-backref" href="#fnref:3" role="doc-backlink"&gt;↩︎&lt;/a&gt;&lt;/li&gt;
&lt;li id="fn:4"&gt;&lt;a href="https://www.euronews.com/my-europe/2026/07/30/eu-opens-call-for-seven-gigafactories-to-train-next-generation-ai-technologies"&gt;"EU Opens Call for Seven 'Gigafactories' to Train Next-Generation AI Technologies,"&lt;/a&gt; Euronews, July 30, 2026. Retrieved July 31, 2026. &lt;a class="footnote-backref" href="#fnref:4" role="doc-backlink"&gt;↩︎&lt;/a&gt;&lt;/li&gt;
&lt;li id="fn:5"&gt;European Commission, &lt;a href="https://digital-strategy.ec.europa.eu/en/news/overwhelming-response-76-respondents-express-interest-european-ai-gigafactories-initiative"&gt;"Overwhelming Response as 76 Respondents Express Interest in the European AI Gigafactories Initiative,"&lt;/a&gt; June 30, 2025 (76 submissions, 60 sites, 16 member states, at least three million processors, and explicit statement that the roster was non-binding and not a set of formal applications); &lt;a href="https://www.ansa.it/english/news/science_tecnology/2025/06/30/76-applications-for-eu-ai-gigafactories-beyond-expectations_8c8ae33d-283e-4721-bd01-767752bf974f.html"&gt;ANSA's contemporaneous report of Commission Executive Vice-President Henna Virkkunen's press conference,&lt;/a&gt; June 30, 2025 (more than €230 billion indicated over three to five years). Retrieved July 31, 2026. &lt;a class="footnote-backref" href="#fnref:5" role="doc-backlink"&gt;↩︎&lt;/a&gt;&lt;/li&gt;
&lt;li id="fn:6"&gt;&lt;a href="https://www.ibtimes.co.uk/eu-ai-gigafactories-tech-sovereignty-1811620"&gt;"EU Opens Bids for Seven AI Super-Hubs To Break US and China Monopoly,"&lt;/a&gt; IBTimes UK, July 30, 2026. Retrieved July 31, 2026. &lt;a class="footnote-backref" href="#fnref:6" role="doc-backlink"&gt;↩︎&lt;/a&gt;&lt;/li&gt;
&lt;li id="fn:7"&gt;&lt;a href="https://www.techtimes.com/articles/322367/20260730/eu-launches-ai-gigafactory-bidding-chips-still-american-cash-still-notional.htm"&gt;"EU Launches AI Gigafactory Bidding: Chips Still American, Cash Still Notional,"&lt;/a&gt; Tech Times, July 30, 2026; The Next Web, "EU Opens €30bn Call for AI Gigafactories." Retrieved July 31, 2026. &lt;a class="footnote-backref" href="#fnref:7" role="doc-backlink"&gt;↩︎&lt;/a&gt;&lt;/li&gt;
&lt;li id="fn:8"&gt;European Commission, &lt;a href="https://digital-strategy.ec.europa.eu/en/news/eu-launches-investai-initiative-mobilise-eu200-billion-investment-artificial-intelligence"&gt;"EU Launches InvestAI Initiative To Mobilise €200 Billion of Investment in Artificial Intelligence,"&lt;/a&gt; February 11, 2025 (including a €20 billion fund for AI gigafactories). Retrieved July 31, 2026. &lt;a class="footnote-backref" href="#fnref:8" role="doc-backlink"&gt;↩︎&lt;/a&gt;&lt;/li&gt;
&lt;li id="fn:9"&gt;Euronews, "EU Opens Call for Seven 'Gigafactories.'" Retrieved July 31, 2026. &lt;a class="footnote-backref" href="#fnref:9" role="doc-backlink"&gt;↩︎&lt;/a&gt;&lt;/li&gt;
&lt;li id="fn:10"&gt;&lt;a href="https://www.eurohpc-ju.europa.eu/document/download/2eebc3f6-bd4d-4908-8e55-db5e8d588051_en?filename=EuroHPC+Regulation+2026-150.pdf"&gt;Council Regulation (EU) 2026/150, Article 12b(5),&lt;/a&gt; January 16, 2026 (Union contribution up to 17% of eligible computing-infrastructure CAPEX, participating states at least matching, consortium funding the remainder and OPEX); EuroHPC JU, &lt;a href="https://www.eurohpc-ju.europa.eu/ai-gigafactories/faqs-ai-gigafactories_en?prefLang=de"&gt;"FAQs: AI Gigafactories,"&lt;/a&gt; preliminary non-binding guidance on eligible IT costs and exclusions. Retrieved July 31, 2026. &lt;a class="footnote-backref" href="#fnref:10" role="doc-backlink"&gt;↩︎&lt;/a&gt;&lt;/li&gt;
&lt;li id="fn:11"&gt;European Commission, &lt;a href="https://digital-strategy.ec.europa.eu/en/policies/ai-factories"&gt;"AI Factories,"&lt;/a&gt; April 23, 2026 (the broader €10 billion 2021–2027 EuroHPC investment line); European Commission, &lt;a href="https://eur-lex.europa.eu/legal-content/EN/TXT/?uri=CELEX%3A52026DC0288"&gt;"State of the Digital Decade 2026," COM(2026) 288 final,&lt;/a&gt; June 17, 2026 (19 AI Factories and 13 antennas, about €2.6 billion mobilized). Retrieved July 31, 2026. &lt;a class="footnote-backref" href="#fnref:11" role="doc-backlink"&gt;↩︎&lt;/a&gt;&lt;/li&gt;
&lt;li id="fn:12"&gt;&lt;a href="https://www.bloomberg.com/quote/EURUSD:CUR"&gt;EUR/USD spot rate (1.1517),&lt;/a&gt; Bloomberg, July 31, 2026. Retrieved July 31, 2026. &lt;a class="footnote-backref" href="#fnref:12" role="doc-backlink"&gt;↩︎&lt;/a&gt;&lt;/li&gt;
&lt;li id="fn:13"&gt;The $720–745 billion range is the sum of the four company figures in note 14. The roughly $410 billion 2025 baseline is the Financial Times tally reported in &lt;a href="https://www.tomshardware.com/tech-industry/big-tech/big-techs-ai-spending-plans-reach-725-billion"&gt;"Big Tech's AI Spending Plans Reach $725 Billion,"&lt;/a&gt; Tom's Hardware, 2026; the four companies' full-year disclosures independently reconstruct to about $409.9 billion. The refreshed range implies 75.6–81.7% growth. Retrieved July 31, 2026. &lt;a class="footnote-backref" href="#fnref:13" role="doc-backlink"&gt;↩︎&lt;/a&gt;&lt;/li&gt;
&lt;li id="fn:14"&gt;Amazon, &lt;a href="https://s2.q4cdn.com/299287126/files/doc_earnings/2026/q2/Amazon-Quarterly-Earnings-Report-Q2-2026-Full-Call-v1.mp3"&gt;Q2 2026 earnings call,&lt;/a&gt; July 30, 2026 ($220 billion cash CAPEX; also &lt;a href="https://apnews.com/article/b4ce02b4666a35b8975823c5c22072ee"&gt;reported by AP&lt;/a&gt;); Alphabet, &lt;a href="https://s206.q4cdn.com/479360582/files/doc_events/2026/Jul/22/2026_Q2_Earnings_Transcript.pdf"&gt;Q2 2026 earnings transcript,&lt;/a&gt; July 22, 2026 ($195–205 billion); Microsoft, &lt;a href="https://www.microsoft.com/en-us/investor/events/fy-2026/earnings-fy-2026-q4"&gt;FY2026 Q4 earnings call,&lt;/a&gt; July 29, 2026 (about $175 billion reported after lease-accounting change, underlying investment expectation unchanged); Meta, &lt;a href="https://s21.q4cdn.com/399680738/files/doc_financials/2026/q2/Meta-06-30-2026-Exhibit-99-1-FINAL.pdf"&gt;Q2 2026 results,&lt;/a&gt; July 29, 2026 ($130–145 billion). Company definitions, particularly lease treatment, are not perfectly standardized. Retrieved July 31, 2026. &lt;a class="footnote-backref" href="#fnref:14" role="doc-backlink"&gt;↩︎&lt;/a&gt;&lt;/li&gt;
&lt;li id="fn:15"&gt;CNBC, "AI Boom: Big Tech Capital Expenditures Now Seen Topping $1 Trillion in 2027." Retrieved July 31, 2026. &lt;a class="footnote-backref" href="#fnref:15" role="doc-backlink"&gt;↩︎&lt;/a&gt;&lt;/li&gt;
&lt;li id="fn:16"&gt;&lt;a href="https://www.visualcapitalist.com/visualized-big-tech-ai-spending/"&gt;"Charted: The $448B AI Spending Surge by Big Tech"&lt;/a&gt; (Epoch AI data from SEC filings), Visual Capitalist, May 2026. Retrieved July 31, 2026. &lt;a class="footnote-backref" href="#fnref:16" role="doc-backlink"&gt;↩︎&lt;/a&gt;&lt;/li&gt;
&lt;li id="fn:17"&gt;&lt;a href="https://fortune.com/2026/04/30/big-tech-hyperscalers-will-spend-700-billion-on-ai-infrastructure-this-year-with-no-clear-end-in-sight-eye-on-ai/"&gt;"Big Tech Is About To Spend $700 Billion on AI This Year,"&lt;/a&gt; Fortune, April 30, 2026. Retrieved July 31, 2026. &lt;a class="footnote-backref" href="#fnref:17" role="doc-backlink"&gt;↩︎&lt;/a&gt;&lt;/li&gt;
&lt;li id="fn:18"&gt;&lt;a href="https://www.cnbc.com/2026/01/15/amazon-sovereign-cloud-europe-expansion.html"&gt;"Amazon's European Sovereign Cloud Launch Is a 'Big Bet,'"&lt;/a&gt; CNBC, January 15, 2026; &lt;a href="https://www.ciodive.com/news/microsoft-european-footprint-data-center-tariffs/746809/"&gt;"Microsoft Expands European Footprint amid Global Trade Tensions,"&lt;/a&gt; CIO Dive, May 2025. Retrieved July 31, 2026. &lt;a class="footnote-backref" href="#fnref:18" role="doc-backlink"&gt;↩︎&lt;/a&gt;&lt;/li&gt;
&lt;li id="fn:19"&gt;&lt;a href="https://www.forbes.com/sites/tylerroush/2026/07/27/nvidia-and-openai-discussing-500-billion-data-center-heres-what-we-know/"&gt;"Nvidia and OpenAI Discussing $500 Billion Data Center: Here's What We Know,"&lt;/a&gt; Forbes, July 27, 2026. Retrieved July 31, 2026. &lt;a class="footnote-backref" href="#fnref:19" role="doc-backlink"&gt;↩︎&lt;/a&gt;&lt;/li&gt;
&lt;li id="fn:20"&gt;&lt;a href="https://stocktwits.com/news-articles/markets/equity/elon-musk-takes-swipe-at-sam-altman-again-as-openais-500b-stargate-project-reportedly-hits-turbulence/cZRtg4XR4Um"&gt;"OpenAI's $500B Stargate Project Reportedly Hits Turbulence"&lt;/a&gt; (reporting The Information), Stocktwits, March 2026; &lt;a href="https://yourstory.com/ai-story/softbank-openai-scale-back-stargate-ambitions-eye-smaller-data-center-year-end"&gt;"SoftBank, OpenAI Scale Back Stargate Ambitions"&lt;/a&gt; (reporting The Wall Street Journal and Reuters), YourStory, July 2025. Retrieved July 31, 2026. &lt;a class="footnote-backref" href="#fnref:20" role="doc-backlink"&gt;↩︎&lt;/a&gt;&lt;/li&gt;
&lt;li id="fn:21"&gt;Fortune Europe, &lt;a href="https://fortune.com/europe/2025/02/11/eu-mobilize-206-billion-dollars-ai-investment-race-far-from-over-chief-von-der-leyen-airbus-mistral-volkswagen/"&gt;"EU To Mobilize $206 Billion in AI Investment"&lt;/a&gt; (InvestAI structure: €150 billion private EU AI Champions pledges plus €50 billion EU funds). Retrieved July 31, 2026. &lt;a class="footnote-backref" href="#fnref:21" role="doc-backlink"&gt;↩︎&lt;/a&gt;&lt;/li&gt;
&lt;li id="fn:22"&gt;&lt;a href="https://www.cnbc.com/2025/02/10/frances-answer-to-stargate-macron-announces-ai-investment.html"&gt;"France Unveils 109-Billion-Euro AI Investment as Europe Looks To Keep Up with U.S.,"&lt;/a&gt; CNBC, February 10, 2025. Retrieved July 31, 2026. &lt;a class="footnote-backref" href="#fnref:22" role="doc-backlink"&gt;↩︎&lt;/a&gt;&lt;/li&gt;
&lt;li id="fn:23"&gt;&lt;a href="https://finance.yahoo.com/news/choose-france-summit-bring-20-062012498.html"&gt;"'Choose France' Summit Brings 20 Billion Euros of New Investment,"&lt;/a&gt; Reuters via Yahoo Finance, May 2025. Retrieved July 31, 2026. &lt;a class="footnote-backref" href="#fnref:23" role="doc-backlink"&gt;↩︎&lt;/a&gt;&lt;/li&gt;
&lt;li id="fn:24"&gt;&lt;a href="https://www.tomshardware.com/tech-industry/china-starts-big-fund-iii-spending-usd47-billion-for-ecosystem-and-fab-tools"&gt;"China Starts Big Fund III Spending: $47 Billion for Ecosystem and Fab Tools,"&lt;/a&gt; Tom's Hardware, 2024. Retrieved July 31, 2026. &lt;a class="footnote-backref" href="#fnref:24" role="doc-backlink"&gt;↩︎&lt;/a&gt;&lt;/li&gt;
&lt;li id="fn:25"&gt;&lt;a href="https://www.investing.com/news/stock-market-news/how-much-does-a-gw-of-data-center-capacity-actually-cost-4314046"&gt;"How Much Does a GW of Data Center Capacity Actually Cost?"&lt;/a&gt; Investing.com, 2026. Retrieved July 31, 2026. &lt;a class="footnote-backref" href="#fnref:25" role="doc-backlink"&gt;↩︎&lt;/a&gt;&lt;/li&gt;
&lt;li id="fn:26"&gt;&lt;a href="https://finance.yahoo.com/news/citigroup-forecasts-big-techs-ai-111915251.html"&gt;"Citigroup Forecasts Big Tech's AI Spending To Cross $2.8 Trillion by 2029,"&lt;/a&gt; Reuters via Yahoo Finance, September 2025. Retrieved July 31, 2026. &lt;a class="footnote-backref" href="#fnref:26" role="doc-backlink"&gt;↩︎&lt;/a&gt;&lt;/li&gt;
&lt;li id="fn:27"&gt;NVIDIA Corporation, &lt;a href="https://www.sec.gov/Archives/edgar/data/0001045810/000104581026000051/q1fy27pr.htm"&gt;Q1 FY2027 results, Form 8-K exhibit,&lt;/a&gt; US Securities and Exchange Commission, May 2026. Retrieved July 31, 2026. &lt;a class="footnote-backref" href="#fnref:27" role="doc-backlink"&gt;↩︎&lt;/a&gt;&lt;/li&gt;
&lt;li id="fn:28"&gt;OpenAI, &lt;a href="https://openai.com/index/introducing-stargate-norway/"&gt;"Introducing Stargate Norway,"&lt;/a&gt; July 31, 2025; &lt;a href="https://baxtel.com/data-center/openai-stargate-norway-nscale"&gt;"OpenAI: Stargate Norway (Nscale) Data Center,"&lt;/a&gt; Baxtel. Retrieved July 31, 2026. &lt;a class="footnote-backref" href="#fnref:28" role="doc-backlink"&gt;↩︎&lt;/a&gt;&lt;/li&gt;
&lt;li id="fn:29"&gt;&lt;a href="https://www.datacenterdynamics.com/en/news/microsoft-contracts-30000-nvidia-rubin-gpus-from-nscale-at-data-center-in-narvik-norway/"&gt;"Microsoft Contracts 30,000 GPUs from Nscale at Norway Data Center as OpenAI Drops Out of Latest Stargate,"&lt;/a&gt; Data Center Dynamics, June 2026; &lt;a href="https://www.itpro.com/infrastructure/has-another-openai-stargate-project-hit-the-rocks"&gt;"Has Another OpenAI Stargate Project Hit the Rocks?"&lt;/a&gt; ITPro, April 2026. Retrieved July 31, 2026. &lt;a class="footnote-backref" href="#fnref:29" role="doc-backlink"&gt;↩︎&lt;/a&gt;&lt;/li&gt;
&lt;li id="fn:30"&gt;&lt;a href="https://pitchbook.com/news/articles/french-openai-rival-mistral-doubles-valuation-to-12b"&gt;"French OpenAI Rival Mistral Doubles Valuation,"&lt;/a&gt; PitchBook, September 2025; &lt;a href="https://techfundingnews.com/mistral-ai-3b-euro-20b-valuation-data-centres/"&gt;"Mistral AI in Talks at ~€20B Valuation,"&lt;/a&gt; Tech Funding News, 2026. Retrieved July 31, 2026. &lt;a class="footnote-backref" href="#fnref:30" role="doc-backlink"&gt;↩︎&lt;/a&gt;&lt;/li&gt;
&lt;li id="fn:31"&gt;&lt;a href="https://techfundingnews.com/lovable-raises-12b-valuation-talks-vibe-coding/"&gt;"Lovable in Talks To Raise at ~$12B Valuation,"&lt;/a&gt; Tech Funding News, 2026. Retrieved July 31, 2026. &lt;a class="footnote-backref" href="#fnref:31" role="doc-backlink"&gt;↩︎&lt;/a&gt;&lt;/li&gt;
&lt;li id="fn:32"&gt;&lt;a href="https://research.contrary.com/report/hugging-face"&gt;"Hugging Face,"&lt;/a&gt; Contrary Research. Retrieved July 31, 2026. &lt;a class="footnote-backref" href="#fnref:32" role="doc-backlink"&gt;↩︎&lt;/a&gt;&lt;/li&gt;
&lt;li id="fn:33"&gt;&lt;a href="https://www.cer.eu/publications/archive/policy-brief/2024/draghis-plan-rescue-european-economy"&gt;"Draghi's Plan To Rescue the European Economy,"&lt;/a&gt; Centre for European Reform, 2024. Retrieved July 31, 2026. &lt;a class="footnote-backref" href="#fnref:33" role="doc-backlink"&gt;↩︎&lt;/a&gt;&lt;/li&gt;
&lt;li id="fn:34"&gt;&lt;a href="https://euperspectives.eu/2025/09/one-year-since-draghi-report/"&gt;"One Year Since the Draghi Report,"&lt;/a&gt; EU Perspectives, September 2025, reporting the ECB-based €1.2 trillion revision and the EPIC Draghi Observatory &amp;amp; Implementation Index with its January 2026 update. Retrieved July 31, 2026. &lt;a class="footnote-backref" href="#fnref:34" role="doc-backlink"&gt;↩︎&lt;/a&gt;&lt;/li&gt;
&lt;li id="fn:35"&gt;European Commission, &lt;a href="https://eur-lex.europa.eu/legal-content/EN/TXT/?uri=CELEX%3A52026DC0288"&gt;"State of the Digital Decade 2026," COM(2026) 288 final,&lt;/a&gt; June 17, 2026 (€200 billion for data-center expansion by 2036 plus €100 billion for cloud and AI leadership initiatives, AI Factories and Gigafactories; also cites Draghi's roughly €150 billion annual digital-technology need); European Commission, &lt;a href="https://eur-lex.europa.eu/legal-content/EN/TXT/?uri=CELEX%3A52026DC0503"&gt;"European Tech Sovereignty," COM(2026) 503 final,&lt;/a&gt; June 3, 2026 (the €200 billion would be mostly private). Retrieved July 31, 2026. &lt;a class="footnote-backref" href="#fnref:35" role="doc-backlink"&gt;↩︎&lt;/a&gt;&lt;/li&gt;
&lt;li id="fn:36"&gt;Anthropic, &lt;a href="https://www.anthropic.com/news/fable-mythos-access"&gt;"Statement on the US Government Directive To Suspend Access to Fable 5 and Mythos 5,"&lt;/a&gt; June 12, 2026; Anthropic, &lt;a href="https://www.anthropic.com/news/redeploying-fable-5"&gt;"Redeploying Fable 5,"&lt;/a&gt; June 30, 2026 (the export controls were lifted after eighteen days and access to both models was restored on July 1). Retrieved August 1, 2026. &lt;a class="footnote-backref" href="#fnref:36" role="doc-backlink"&gt;↩︎&lt;/a&gt;&lt;/li&gt;
&lt;li id="fn:37"&gt;Clarifying Lawful Overseas Use of Data (CLOUD) Act, enacted as part of the Consolidated Appropriations Act 2018; see &lt;a href="https://www.congress.gov/bill/115th-congress/house-bill/4943"&gt;H.R. 4943, 115th Congress,&lt;/a&gt; codified in relevant part at 18 U.S.C. section 2713. Retrieved July 31, 2026. &lt;a class="footnote-backref" href="#fnref:37" role="doc-backlink"&gt;↩︎&lt;/a&gt;&lt;/li&gt;
&lt;li id="fn:38"&gt;&lt;a href="https://www.sdxcentral.com/news/microsoft-tells-french-lawmakers-it-cant-protect-user-data-from-us-demands/"&gt;"Microsoft Tells French Lawmakers It Can't Protect User Data from US Demands,"&lt;/a&gt; SDxCentral, July 2025; &lt;a href="https://www.techzine.eu/news/privacy-compliance/131996/microsoft-denies-having-suspended-any-services-to-icc/"&gt;"Microsoft Denies Having Suspended Any Services to ICC,"&lt;/a&gt; Techzine, June 2025. Retrieved July 31, 2026. &lt;a class="footnote-backref" href="#fnref:38" role="doc-backlink"&gt;↩︎&lt;/a&gt;&lt;/li&gt;
&lt;li id="fn:39"&gt;&lt;a href="https://www.open-systems.com/blog/the-future-of-data-sovereignty-will-be-designed/"&gt;"The Future of Data Sovereignty Will Be Designed,"&lt;/a&gt; Open Systems, 2025. Retrieved July 31, 2026. &lt;a class="footnote-backref" href="#fnref:39" role="doc-backlink"&gt;↩︎&lt;/a&gt;&lt;/li&gt;
&lt;li id="fn:40"&gt;&lt;a href="https://www.tomshardware.com/pc-components/gpus/nvidia-defiant-over-backdoors-and-kill-switches-in-gpus-as-u-s-mulls-tracking-requirements-calls-them-permanent-flaws-that-are-a-gift-to-hackers"&gt;"Nvidia Defiant Over Backdoors and Kill Switches in GPUs as U.S. Mulls Tracking Requirements,"&lt;/a&gt; Tom's Hardware, 2025. Retrieved July 31, 2026. &lt;a class="footnote-backref" href="#fnref:40" role="doc-backlink"&gt;↩︎&lt;/a&gt;&lt;/li&gt;
&lt;li id="fn:41"&gt;&lt;a href="https://seekingalpha.com/news/4479455-nvidia-reiterates-its-ai-chips-dont-have-backdoors-or-kill-switches-urges-against-location-verification"&gt;"Nvidia Reiterates Its AI Chips Don't Have Backdoors or Kill Switches, Urges Against Location Verification,"&lt;/a&gt; Seeking Alpha, 2025. Retrieved July 31, 2026. &lt;a class="footnote-backref" href="#fnref:41" role="doc-backlink"&gt;↩︎&lt;/a&gt;&lt;/li&gt;
&lt;li id="fn:42"&gt;&lt;a href="https://therecord.media/italy-blocks-chinese-ai-tool-deepseek-over-privacy-concerns"&gt;"Italy Blocks Chinese AI Tool DeepSeek Over Privacy Concerns,"&lt;/a&gt; The Record, January 2025; &lt;a href="https://www.yahoo.com/news/italys-privacy-watchdog-blocks-chinese-190225147.html"&gt;"Italy's Privacy Watchdog Blocks Chinese AI App DeepSeek,"&lt;/a&gt; Reuters via Yahoo News, January 30, 2025. Retrieved July 31, 2026. &lt;a class="footnote-backref" href="#fnref:42" role="doc-backlink"&gt;↩︎&lt;/a&gt;&lt;/li&gt;
&lt;li id="fn:43"&gt;&lt;a href="https://www.nist.gov/news-events/news/2025/09/caisi-evaluation-deepseek-ai-models-finds-shortcomings-and-risks"&gt;"CAISI Evaluation of DeepSeek AI Models Finds Shortcomings and Risks,"&lt;/a&gt; NIST Center for AI Standards and Innovation, September–October 2025; full report: &lt;a href="https://www.nist.gov/system/files/documents/2025/09/30/CAISI_Evaluation_of_DeepSeek_AI_Models.pdf"&gt;CAISI, Evaluation of DeepSeek AI Models&lt;/a&gt; (PDF). Retrieved July 31, 2026. &lt;a class="footnote-backref" href="#fnref:43" role="doc-backlink"&gt;↩︎&lt;/a&gt;&lt;/li&gt;
&lt;li id="fn:44"&gt;Association for Computing Machinery, &lt;a href="https://www.acm.org/media-center/2019/march/turing-award-2018"&gt;"Fathers of the Deep Learning Revolution Receive ACM A.M. Turing Award,"&lt;/a&gt; March 2019; biographical details: &lt;a href="https://en.wikipedia.org/wiki/Geoffrey_Hinton"&gt;"Geoffrey Hinton,"&lt;/a&gt; Wikipedia; Matt O'Brien, &lt;a href="https://apnews.com/article/313159512bb9961f324e0c93bccf4cf5"&gt;"Meta's Chief AI Scientist Yann LeCun To Leave Meta and Start New AI Research Company,"&lt;/a&gt; Associated Press, November 19, 2025; Rebecca Bellan, &lt;a href="https://techcrunch.com/2026/03/09/yann-lecuns-ami-labs-raises-1-03-billion-to-build-world-models/"&gt;"Yann LeCun's AMI Labs Raises $1.03B To Build World Models,"&lt;/a&gt; TechCrunch, March 9, 2026. Retrieved August 1, 2026. &lt;a class="footnote-backref" href="#fnref:44" role="doc-backlink"&gt;↩︎&lt;/a&gt;&lt;/li&gt;
&lt;li id="fn:45"&gt;&lt;a href="https://en.wikipedia.org/wiki/J%C3%BCrgen_Schmidhuber"&gt;"Jürgen Schmidhuber,"&lt;/a&gt; Wikipedia (career at IDSIA; director of the KAUST AI Initiative since 2021); Jürgen Schmidhuber (@SchmidhuberAI), &lt;a href="https://x.com/SchmidhuberAI/status/1867621020808728875"&gt;post on X,&lt;/a&gt; December 2024. Retrieved July 31, 2026. &lt;a class="footnote-backref" href="#fnref:45" role="doc-backlink"&gt;↩︎&lt;/a&gt;&lt;/li&gt;
&lt;li id="fn:46"&gt;Martin Varsavsky (@martinvars), &lt;a href="https://x.com/martinvars/status/2051893025891025171"&gt;reply on X,&lt;/a&gt; May 6, 2026, in an exchange with Ljubomir Josifovski (&lt;a href="https://x.com/ljupc0/status/2051880835842761127"&gt;@ljupc0&lt;/a&gt;). Retrieved July 31, 2026. &lt;a class="footnote-backref" href="#fnref:46" role="doc-backlink"&gt;↩︎&lt;/a&gt;&lt;/li&gt;
&lt;li id="fn:47"&gt;&lt;a href="https://www.politico.eu/article/eu-accused-wasting-20-billion-euro-ai-computing-dreams/"&gt;"EU Accused of Wasting €20 Billion on AI Computing Dreams,"&lt;/a&gt; Politico Europe, May 2026. Retrieved July 31, 2026. &lt;a class="footnote-backref" href="#fnref:47" role="doc-backlink"&gt;↩︎&lt;/a&gt;&lt;/li&gt;
&lt;li id="fn:48"&gt;&lt;a href="https://www.techzine.eu/news/infrastructure/140989/eus-e20b-ai-gigafactory-plan-faces-growing-backlash/"&gt;"EU's €20B AI Gigafactory Plan Faces Growing Backlash,"&lt;/a&gt; Techzine, May 4, 2026, reporting the Politico investigation. Retrieved July 31, 2026. &lt;a class="footnote-backref" href="#fnref:48" role="doc-backlink"&gt;↩︎&lt;/a&gt;&lt;/li&gt;
&lt;li id="fn:49"&gt;Kyosovska, Nicoleta, and Andrea Renda, &lt;a href="https://cdn.ceps.eu/2025/11/251027-Sanctuaries-or-Cathedrals.pdf"&gt;"EU Plans for AI (Giga)factories: Sanctuaries of Innovation, or Cathedrals in the Desert?"&lt;/a&gt; CEPS In-Depth Analysis, Centre for European Policy Studies, November 2025. Retrieved July 31, 2026. &lt;a class="footnote-backref" href="#fnref:49" role="doc-backlink"&gt;↩︎&lt;/a&gt;&lt;/li&gt;
&lt;li id="fn:50"&gt;&lt;a href="https://sciencebusiness.net/news/ai/trio-reports-say-eu-betting-too-heavily-generative-ai"&gt;"Trio of Reports Say the EU Is Betting Too Heavily on Generative AI,"&lt;/a&gt; Science|Business, December 2025. Retrieved July 31, 2026. &lt;a class="footnote-backref" href="#fnref:50" role="doc-backlink"&gt;↩︎&lt;/a&gt;&lt;/li&gt;
&lt;li id="fn:51"&gt;Techzine, "EU's €20B AI Gigafactory Plan Faces Growing Backlash." Retrieved July 31, 2026. &lt;a class="footnote-backref" href="#fnref:51" role="doc-backlink"&gt;↩︎&lt;/a&gt;&lt;/li&gt;
&lt;li id="fn:52"&gt;Piotr Sankowski (@piotrsankowski), &lt;a href="https://x.com/piotrsankowski/status/2052626869598470534"&gt;post on X&lt;/a&gt; reacting to the Politico investigation, May 2026. The post's "$500 billion facility in Norway" conflates the overall US Stargate program with Stargate Norway, whose initial phase was a roughly $1 billion, 230 MW, 100,000-GPU project; see OpenAI, &lt;a href="https://openai.com/index/introducing-stargate-norway/"&gt;"Introducing Stargate Norway."&lt;/a&gt; Retrieved July 31, 2026. &lt;a class="footnote-backref" href="#fnref:52" role="doc-backlink"&gt;↩︎&lt;/a&gt;&lt;/li&gt;
&lt;li id="fn:53"&gt;Science|Business, "Trio of Reports Say the EU Is Betting Too Heavily on Generative AI." Retrieved July 31, 2026. &lt;a class="footnote-backref" href="#fnref:53" role="doc-backlink"&gt;↩︎&lt;/a&gt;&lt;/li&gt;
&lt;li id="fn:54"&gt;&lt;a href="https://www.thelec.net/news/articleView.html?idxno=12593"&gt;"AI Spending Nears $1 Trillion, Turning Cash-Rich Big Tech Into Borrowers"&lt;/a&gt; (reporting Moody's Ratings), The Elec, July 2026. Retrieved July 31, 2026. &lt;a class="footnote-backref" href="#fnref:54" role="doc-backlink"&gt;↩︎&lt;/a&gt;&lt;/li&gt;
&lt;li id="fn:55"&gt;Gregory Zuckerman, Peter Rudegeair and Anissa Gardizy, &lt;a href="https://www.wsj.com/finance/citadel-buys-situational-awarenesss-stock-portfolio-after-big-losses-in-ai-5117159b"&gt;"Citadel Buys Situational Awareness's Stock Portfolio After Big Losses in AI,"&lt;/a&gt; The Wall Street Journal, July 30, 2026 (the fund sold the bulk of its public stock portfolio after losses on leveraged bets); Dan Primack, &lt;a href="https://www.axios.com/2026/07/30/ai-hedge-fund-situational-awareness-citadel"&gt;"AI-Focused Hedge Fund Sells All of Its Stocks,"&lt;/a&gt; Axios, July 30, 2026; &lt;a href="https://en.sedaily.com/finance/2026/07/23/margin-calls-surge-as-kospi-wobbles-deposits-fall-below-110"&gt;"Margin Calls Surge as KOSPI Wobbles; Deposits Fall Below 110 Trillion Won,"&lt;/a&gt; Seoul Economic Daily, July 23, 2026; &lt;a href="https://en.sedaily.com/finance/2026/07/13/debt-investors-face-10-percent-forced-liquidation-after"&gt;"Debt Investors Face 10% Forced Liquidation After Single-Stock Leverage ETF Launch,"&lt;/a&gt; Seoul Economic Daily, July 13, 2026. Retrieved August 1, 2026. &lt;a class="footnote-backref" href="#fnref:55" role="doc-backlink"&gt;↩︎&lt;/a&gt;&lt;/li&gt;
&lt;li id="fn:56"&gt;Raidas Tauras (@RaidasG), &lt;a href="https://x.com/RaidasG/status/2083133874909937867"&gt;reply on X,&lt;/a&gt; July 31, 2026; my response: Vibor Cipan (@viborc), &lt;a href="https://x.com/viborc/status/2083135456334463298"&gt;reply on X,&lt;/a&gt; July 31, 2026. Retrieved July 31, 2026. &lt;a class="footnote-backref" href="#fnref:56" role="doc-backlink"&gt;↩︎&lt;/a&gt;&lt;/li&gt;
&lt;li id="fn:57"&gt;&lt;a href="https://www.investing.com/news/economy-news/analysistariffs-could-be-the-spur-europes-single-market-needs-4090600"&gt;"Tariffs Could Be the Spur Europe's Single Market Needs,"&lt;/a&gt; Reuters via Investing.com, June 2025 (IMF estimate); for the critique: &lt;a href="https://cepr.org/voxeu/columns/no-eu-does-not-impose-45-tariff-itself"&gt;"No, the EU Does Not Impose a 45% Tariff on Itself,"&lt;/a&gt; CEPR VoxEU. Retrieved July 31, 2026. &lt;a class="footnote-backref" href="#fnref:57" role="doc-backlink"&gt;↩︎&lt;/a&gt;&lt;/li&gt;
&lt;li id="fn:58"&gt;Deutsche Börse Group, &lt;a href="https://www.deutsche-boerse.com/dbg-en/about-us/regulation/regulation-hd/siu"&gt;"The Savings and Investments Union (SIU)."&lt;/a&gt; Retrieved July 31, 2026. &lt;a class="footnote-backref" href="#fnref:58" role="doc-backlink"&gt;↩︎&lt;/a&gt;&lt;/li&gt;
&lt;li id="fn:59"&gt;Véron, Nicolas, &lt;a href="https://www.bruegel.org/first-glance/28th-regimes-help-europes-capital-markets"&gt;"28th Regimes To Help Europe's Capital Markets,"&lt;/a&gt; Bruegel. Retrieved July 31, 2026. &lt;a class="footnote-backref" href="#fnref:59" role="doc-backlink"&gt;↩︎&lt;/a&gt;&lt;/li&gt;
&lt;li id="fn:60"&gt;European Commission, &lt;a href="https://commission.europa.eu/news-and-media/news/eu-inc-making-business-easier-european-union-2026-03-18_en"&gt;"EU Inc.: Making Business Easier in the European Union,"&lt;/a&gt; March 18, 2026; European Parliament, &lt;a href="https://www.europarl.europa.eu/topics/en/article/20260506STO42807/eu-inc-what-is-the-28th-regime"&gt;"EU Inc.: What Is the 28th Regime?"&lt;/a&gt; May 6, 2026. Retrieved July 31, 2026. &lt;a class="footnote-backref" href="#fnref:60" role="doc-backlink"&gt;↩︎&lt;/a&gt;&lt;/li&gt;
&lt;li id="fn:61"&gt;&lt;a href="https://the28thregime.eu/progress"&gt;"28th Regime Timeline: Legislative Progress Tracker,"&lt;/a&gt; the28thregime.eu, July 2026; European Parliament, &lt;a href="https://www.europarl.europa.eu/legislative-train/theme-a-new-plan-for-europe-s-sustainable-prosperity-and-competitiveness/file-28th-regime-for-innovative-companies"&gt;"The 28th Regime: A New Legal Framework for Innovative Companies,"&lt;/a&gt; Legislative Train Schedule. Retrieved July 31, 2026. &lt;a class="footnote-backref" href="#fnref:61" role="doc-backlink"&gt;↩︎&lt;/a&gt;&lt;/li&gt;
&lt;li id="fn:62"&gt;Government of Spain, &lt;a href="https://www.lamoncloa.gob.es/lang/en/gobierno/councilministers/paginas/2025/20250617-council-press-conference.aspx"&gt;"The Government of Spain Presents the Report on the Causes of the Blackout,"&lt;/a&gt; La Moncloa, June 17, 2025; &lt;a href="https://feeds.bbci.co.uk/news/articles/c62d8k8edgxo"&gt;"Spain's Government Blames Huge Blackout on Grid Regulator and Private Firms,"&lt;/a&gt; BBC News, June 2025. Retrieved July 31, 2026. &lt;a class="footnote-backref" href="#fnref:62" role="doc-backlink"&gt;↩︎&lt;/a&gt;&lt;/li&gt;
&lt;li id="fn:63"&gt;&lt;a href="https://www.world-nuclear-news.org/articles/spanish-regulator-supports-almaraz-licence-extension"&gt;"Spanish Regulator Supports Almaraz Licence Extension,"&lt;/a&gt; World Nuclear News, July 2026; &lt;a href="https://www.nucnet.org/news/spain-s-energy-ministry-confirms-request-for-almaraz-nuclear-plant-extension-11-0-2025"&gt;"Spain’s Energy Ministry Confirms Request for Almaraz Nuclear Plant Extension,"&lt;/a&gt; NucNet, November 2025. Retrieved July 31, 2026. &lt;a class="footnote-backref" href="#fnref:63" role="doc-backlink"&gt;↩︎&lt;/a&gt;&lt;/li&gt;
&lt;li id="fn:64"&gt;&lt;a href="https://www.wavestone.com/en/insight/civil-nuclear-power-2025-europe-energy-sovereignty/"&gt;"Civil Nuclear Power in 2025: A Fragmented Europe in Search of Energy Sovereignty,"&lt;/a&gt; Wavestone, 2025; on France's pledged gigawatt of nuclear power for AI: &lt;a href="https://techcrunch.com/2025/02/10/macron-unveils-a-112b-ai-investment-package-as-frances-answer-to-stargate"&gt;"Macron Unveils $112B AI Investment Package,"&lt;/a&gt; TechCrunch, February 10, 2025. Retrieved July 31, 2026. &lt;a class="footnote-backref" href="#fnref:64" role="doc-backlink"&gt;↩︎&lt;/a&gt;&lt;/li&gt;
&lt;li id="fn:65"&gt;Government of Slovenia, &lt;a href="https://www.gov.si/en/news/2026-02-17-192nd-regular-session-of-the-government-of-the-republic-of-slovenia/"&gt;"192nd Regular Session of the Government of the Republic of Slovenia,"&lt;/a&gt; February 17, 2026 (launching preparation of the national spatial plan for JEK2); Croatian Radiotelevision, &lt;a href="https://vijesti.hrt.hr/hrvatska/plenkovic-o-nuklearnoj-energiji-hrvatska-otvorena-za-krsko-2-i-druge-opcije-12694313"&gt;"Plenković o nuklearnoj energiji: Hrvatska otvorena za Krško 2 i druge opcije,"&lt;/a&gt; April 29, 2026 (Croatia is open to participating in JEK2). Retrieved August 1, 2026. &lt;a class="footnote-backref" href="#fnref:65" role="doc-backlink"&gt;↩︎&lt;/a&gt;&lt;/li&gt;
&lt;li id="fn:66"&gt;&lt;a href="https://en.wikipedia.org/wiki/Colossus_(data_center)"&gt;"Colossus (data center),"&lt;/a&gt; Wikipedia, citing Shelby County Health Department statements to NPR. Retrieved July 31, 2026. &lt;a class="footnote-backref" href="#fnref:66" role="doc-backlink"&gt;↩︎&lt;/a&gt;&lt;/li&gt;
&lt;li id="fn:67"&gt;&lt;a href="https://introl.com/blog/xai-colossus-2-gigawatt-expansion-555k-gpus-january-2026"&gt;"xAI Colossus Hits 2 GW: 555,000 GPUs, $18B, Largest AI Site,"&lt;/a&gt; Introl, January 2026; corroborating technical analysis: &lt;a href="https://newsletter.semianalysis.com/p/xais-colossus-2-first-gigawatt-datacenter"&gt;"xAI's Colossus 2: First Gigawatt Datacenter in the World,"&lt;/a&gt; SemiAnalysis, October 2025. Retrieved July 31, 2026. &lt;a class="footnote-backref" href="#fnref:67" role="doc-backlink"&gt;↩︎&lt;/a&gt;&lt;/li&gt;
&lt;li id="fn:68"&gt;Feldman, Amy, &lt;a href="https://www.forbes.com/sites/amyfeldman/2026/03/20/this-serial-entrepreneur-wants-the-fda-to-approve-his-ai-doctor-certuma-martin-varsavsky/"&gt;"This Serial Entrepreneur Wants the FDA To Approve His AI Doctor,"&lt;/a&gt; Forbes, March 20, 2026. Retrieved July 31, 2026. &lt;a class="footnote-backref" href="#fnref:68" role="doc-backlink"&gt;↩︎&lt;/a&gt;&lt;/li&gt;
&lt;li id="fn:69"&gt;Martin Varsavsky (@martinvars), &lt;a href="https://x.com/martinvars/status/2051802000908513505"&gt;post on X,&lt;/a&gt; May 6, 2026. Retrieved July 31, 2026. &lt;a class="footnote-backref" href="#fnref:69" role="doc-backlink"&gt;↩︎&lt;/a&gt;&lt;/li&gt;
&lt;li id="fn:70"&gt;Martin Varsavsky (@martinvars), &lt;a href="https://x.com/martinvars/status/2073058225562267767"&gt;post on X,&lt;/a&gt; 2026. Retrieved July 31, 2026. &lt;a class="footnote-backref" href="#fnref:70" role="doc-backlink"&gt;↩︎&lt;/a&gt;&lt;/li&gt;
&lt;li id="fn:71"&gt;European Parliament, &lt;a href="https://www.europarl.europa.eu/legislative-train/package-digital-package/file-digital-omnibus-on-ai"&gt;"Digital Omnibus on AI,"&lt;/a&gt; Legislative Train Schedule; &lt;a href="https://www.whitecase.com/insight-alert/eu-agrees-digital-omnibus-deal-simplify-ai-rules"&gt;"EU Agrees Digital Omnibus Deal To Simplify AI Rules,"&lt;/a&gt; White &amp;amp; Case, May 14, 2026. Retrieved July 31, 2026. &lt;a class="footnote-backref" href="#fnref:71" role="doc-backlink"&gt;↩︎&lt;/a&gt;&lt;/li&gt;
&lt;li id="fn:72"&gt;Data Center Dynamics, &lt;a href="https://www.datacenterdynamics.com/en/news/microsoft-contracts-30000-nvidia-rubin-gpus-from-nscale-at-data-center-in-narvik-norway/"&gt;"Microsoft Contracts 30,000 GPUs from Nscale at Norway Data Center."&lt;/a&gt; Retrieved July 31, 2026. &lt;a class="footnote-backref" href="#fnref:72" role="doc-backlink"&gt;↩︎&lt;/a&gt;&lt;/li&gt;
&lt;li id="fn:73"&gt;Varsavsky, Martin, &lt;a href="https://english.martinvarsavsky.net/?cat=222"&gt;writings on European labor rules and compensation,&lt;/a&gt; english.martinvarsavsky.net. Retrieved July 31, 2026. &lt;a class="footnote-backref" href="#fnref:73" role="doc-backlink"&gt;↩︎&lt;/a&gt;&lt;/li&gt;
&lt;li id="fn:74"&gt;European Parliament Committee on Legal Affairs, &lt;a href="https://www.europarl.europa.eu/doceo/document/JURI-PR-790143_EN.html"&gt;draft report PE790.143v02-00 on the EU Inc. proposal,&lt;/a&gt; June 29, 2026; &lt;a href="https://euinc.me/en/updates"&gt;EU Inc. Monitor's primary-source update tracker,&lt;/a&gt; reviewed July 28, 2026 (summarizing the rapporteur's proposed restricted eligibility, deletion of the gap-filling national-law provision and prohibition on public listings; the document remains a draft rather than Parliament's adopted position). Retrieved August 1, 2026. &lt;a class="footnote-backref" href="#fnref:74" role="doc-backlink"&gt;↩︎&lt;/a&gt;&lt;/li&gt;
&lt;li id="fn:75"&gt;&lt;a href="https://www.investing.com/news/stock-market-news/how-much-does-a-gw-of-data-center-capacity-actually-cost-4314046"&gt;"How Much Does a GW of Data Center Capacity Actually Cost?"&lt;/a&gt; Investing.com, 2026 (Bernstein, Epoch AI and Nvidia estimates); &lt;a href="https://finance.yahoo.com/news/citigroup-forecasts-big-techs-ai-111915251.html"&gt;Reuters report on Citigroup's $50 billion-per-GW estimate,&lt;/a&gt; September 2025. At €1 = $1.15: 5 GW multiplied by $35–60 billion = €152.2–260.9 billion; 20–35% = €30.4–91.3 billion; 10–20 GW = €304.3 billion–€1.043 trillion. Retrieved July 31, 2026. &lt;a class="footnote-backref" href="#fnref:75" role="doc-backlink"&gt;↩︎&lt;/a&gt;&lt;/li&gt;
&lt;li id="fn:76"&gt;European Commission, "EU Inc.: Making Business Easier in the European Union"; Véron, "28th Regimes To Help Europe's Capital Markets." Retrieved July 31, 2026. &lt;a class="footnote-backref" href="#fnref:76" role="doc-backlink"&gt;↩︎&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;/section&gt;</content:encoded></item><item><title>The new viborc.com: what changed, what survived, and why</title><link>https://viborc.com/the-new-viborc-com/</link><pubDate>Fri, 17 Jul 2026 14:00:00 +0000</pubDate><guid isPermaLink="true">https://viborc.com/the-new-viborc-com/</guid><description>Why viborc.com left WordPress, preserved its established article URLs, and became an English-language publication on AI, intelligence, OSINT, quantum, and geopolitics.</description><content:encoded>&lt;p&gt;I think that the oldest dataset on this site starts in March 2015: fifty-six months of
approval polling for a Croatian president, collected while I was learning
what data could do in a browser.&lt;/p&gt;
&lt;p&gt;The oldest article still standing is younger, from January 2018, and even that is not the true beginning: there was a viborc.com before this one, and some iterations before that. Across those
years this domain has been a Croatian-language blog, a bilingual blog, a data-visualization playground, an election-night dashboard, and, for long stretches, a site I quietly avoided.&lt;/p&gt;
&lt;p&gt;A lot of publishing ceremony, and honestly, me trying to figure out the next direction. More on that a little bit later.&lt;/p&gt;
&lt;p&gt;But that avoidance had reasons, and recently it became total: the last article
on the old site went up in January 2025, and then I simply stopped posting.
Publishing had stopped feeling like writing. I was spending more time
updating WordPress plugins, keeping the theme in check, and watching the
server than actually writing, sharing what I was thinking, doing research.&lt;/p&gt;
&lt;p&gt;New work took the rest of me: I have spent these past years inside the AI wave, at GPT Engineer, which turned into a stellar Lovable, Zencoder, and then Daydream, watching the field remake itself week by week. And Russia&amp;rsquo;s brutal aggression against Ukraine pulled my older passions, OSINT and open-source research among them, back to the center of my attention.&lt;/p&gt;
&lt;p&gt;The old site is where I learned the craft: collecting data, drawing maps, checking claims against their sources.&lt;/p&gt;
&lt;p&gt;But the subjects in front of me now are heavier than the ones I practiced on, and
some of them I understand from the inside in a way I couldn&amp;rsquo;t have a
decade or just a few years ago. I wanted a place to write that down, in public, while these
things are still being decided.&lt;/p&gt;
&lt;p&gt;Today, viborc.com becomes something else: an English-language publication about
intelligence work, artificial intelligence, information warfare, quantum
computing, geopolitics, and the systems underneath all of them. The name on
the header is the same name. But almost everything beneath it was rebuilt from the ground up.&lt;/p&gt;
&lt;h2 id="the-logo-is-now-more-meaningful"&gt;The logo is now more meaningful&lt;/h2&gt;
&lt;p&gt;The four overlapping circles predate this redesign; if you&amp;rsquo;ve been here before,
you&amp;rsquo;ve seen them. What&amp;rsquo;s new is that I&amp;rsquo;ve decided to explain what they mean.&lt;/p&gt;
&lt;p&gt;Each circle is a meta-domain of this publication&amp;rsquo;s work:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;i aria-hidden="true" style="display:inline-block;width:0.65em;height:0.65em;border-radius:50%;background:#ff127f;margin-right:0.4em"&gt;&lt;/i&gt;&lt;strong&gt;Magenta, human judgment:&lt;/strong&gt; intelligence tradecraft, cognition, analysis&lt;/li&gt;
&lt;li&gt;&lt;i aria-hidden="true" style="display:inline-block;width:0.65em;height:0.65em;border-radius:50%;background:#ffaa20;margin-right:0.4em"&gt;&lt;/i&gt;&lt;strong&gt;Amber, the developing edge:&lt;/strong&gt; quantum computing, work still forming&lt;/li&gt;
&lt;li&gt;&lt;i aria-hidden="true" style="display:inline-block;width:0.65em;height:0.65em;border-radius:50%;background:#00ceb4;margin-right:0.4em"&gt;&lt;/i&gt;&lt;strong&gt;Teal, systems and data:&lt;/strong&gt; built systems, infrastructure, data work&lt;/li&gt;
&lt;li&gt;&lt;i aria-hidden="true" style="display:inline-block;width:0.65em;height:0.65em;border-radius:50%;background:#9331b2;margin-right:0.4em"&gt;&lt;/i&gt;&lt;strong&gt;Violet, power and synthesis:&lt;/strong&gt; geopolitics, information warfare&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Every piece on the site lights the circles its topics touch, so the
little mark beside a title is a classification, and not just eye candy.&lt;/p&gt;
&lt;p&gt;Two rules:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;work spanning three or more domains lights the violet synthesis circle
automatically, and&lt;/li&gt;
&lt;li&gt;research still in progress carries amber until it ships.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The mark literally changes when a piece is finished.&lt;/p&gt;
&lt;p&gt;The center changed too: the old mark filled its middle; the new one cuts the central flower out entirely, down to the page itself.&lt;/p&gt;
&lt;p&gt;I left the middle empty on purpose: the overlap, the intersection of those four domains is where the work happens, and the mark keeps that space open.&lt;/p&gt;
&lt;figure&gt;&lt;img src="mark-wordmark.png" alt="The viborc.com mark: four overlapping translucent circles in magenta, amber, teal, and violet with the central flower cut out to the page color, next to the lowercase viborc.com wordmark" width="740" height="320" loading="lazy" decoding="async"&gt;&lt;figcaption&gt;The mark and wordmark: the center is cut to the page itself, and ".com" is now an even clearer part of the identity.&lt;/figcaption&gt;&lt;/figure&gt;
&lt;p&gt;The wordmark is simply the domain, lowercase: viborc.com. After a decade
of iterations, the most honest name of this place is its address.&lt;/p&gt;
&lt;h2 id="type-with-roles"&gt;Type with roles&lt;/h2&gt;
&lt;p&gt;I spent time redesigning the typographic scale and now three typefaces run the site, and each has a job.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Newsreader speaks.&lt;/strong&gt; It carries titles, standfirsts, and the occasional
pull quote, with real optical sizing so display cuts stay sharp and text
cuts stay sturdy.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Libre Franklin works.&lt;/strong&gt; Body text, navigation, labels, the interface.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;IBM Plex Mono offers facts.&lt;/strong&gt; It appears only where a fact&amp;rsquo;s paperwork
appears: dates, routes, reading times, measurements. When you see
monospace on this site, you are looking at evidence.&lt;/p&gt;
&lt;figure&gt;&lt;img src="type-roles.png" alt="Type specimen showing the three roles: a Newsreader display headline, a Libre Franklin body paragraph, and an IBM Plex Mono line of dates, routes, and measurements" width="740" height="340" loading="lazy" decoding="async"&gt;&lt;figcaption&gt;The three roles, set in the site's own faces: Newsreader speaks, Libre Franklin works, IBM Plex Mono offers facts and evidence.&lt;/figcaption&gt;&lt;/figure&gt;
&lt;p&gt;All three families are self-hosted, subset to the characters actually
used, and served from this domain. There is no font CDN, and there are no third-party requests.
Prose gets oldstyle figures that sit inside sentences; tables get tabular
lining figures that align in columns. There might be some slippage here, but I&amp;rsquo;m working on fixing it.&lt;/p&gt;
&lt;h2 id="every-established-article-address-survived"&gt;Every established article address survived&lt;/h2&gt;
&lt;p&gt;Since the old website has been around for a while, the links are promises. People spent roughly a decade linking to this domain
from forums, papers, Reddit threads, and bookmarks. This rebuild changed
almost everything else about the site, which made those promises more work
to keep, not less binding.&lt;/p&gt;
&lt;p&gt;So the migration ran under one non-negotiable rule: established article URLs do not change. Not one of the 81 migrated archive article addresses did.&lt;/p&gt;
&lt;p&gt;The archive holds 81 preserved articles - 42 in English, 39 in Croatian -
each at its original address. What that means for you: if you bookmarked
something here in 2019, the bookmark still works. If an old
forum thread or a search result points at a piece, the link lands where it
always did. The old work is not showcased on the homepage; it lives in the
archive, at its own addresses, and pieces that still earn attention can
get promoted into the new publication without ever changing address.&lt;/p&gt;
&lt;p&gt;Behind all of it sits a migration pipeline (and hours of architectural rework) that verified
every article and every image against the original site before anything
shipped, and a pretty strict build contract that refuses to publish if a preserved page ever
changes unexpectedly. Two old articles embedded charts whose data vanished
with a third-party service years ago; sadly, nothing could bring them back, so
those pages now say so instead of pretending the charts never
existed.&lt;/p&gt;
&lt;p&gt;The interactive work got the deepest treatment.&lt;/p&gt;
&lt;p&gt;Some five application families
I built over the years were rebuilt rather than preserved as-is: presidential
approval, the Moody&amp;rsquo;s credit map, presidential election results, candidate
polling, and parliamentary switching.&lt;/p&gt;
&lt;p&gt;Their obsolete third-party runtimes, remote fonts, and analytics loaders
were not carried over.&lt;/p&gt;
&lt;p&gt;Instead, their complete datasets are now rendered
into the pages at build time: real tables, readable by anyone, including
readers with JavaScript switched off, screen readers, and search engines. A
small first-party script adds the interactive layer on top when it can.&lt;/p&gt;
&lt;p&gt;As a result, the data no longer depends on any company&amp;rsquo;s continued existence to remain
visible.&lt;/p&gt;
&lt;p&gt;Croatian readers keep their archive too. Nothing was retroactively
translated, nothing was moved, and the historical pieces remain exactly
as written, at their original &lt;code&gt;/hr/&lt;/code&gt; addresses, inside the new shell.&lt;/p&gt;
&lt;h2 id="boring-on-purpose"&gt;Boring on purpose&lt;/h2&gt;
&lt;p&gt;Now, I think that boring can be good. Hear me out.&lt;/p&gt;
&lt;p&gt;I spend my working days in the fastest-moving corner of tech/software, where
the tools reinvent themselves between one project and the next (or even faster than that). I needed this site
to act almost as a counterweight: I built it to be the slowest-moving thing I own.&lt;/p&gt;
&lt;p&gt;It has promises to keep (your 2019 bookmark, an archive that must still
resolve in 2035), and excitement is the enemy of that kind of promise.&lt;/p&gt;
&lt;p&gt;So the publication itself is plain files. No CMS, no PHP, no plugins:
every page is a text file under version control, compiled ahead of time
into static HTML. What the server does is very simple: it hands you
files. It does a little more around the edges (the contact form and
newsletter live in a small separate service), but files are the essence, and the attack surface is
deliberately small: small enough for one person to reason about, and
rebuildable from source if anything ever goes wrong.&lt;/p&gt;
&lt;p&gt;The rule I am proudest of: &lt;strong&gt;the build refuses any script that lacks an
exact, per-page, human-approved fingerprint&lt;/strong&gt; - including mine. I build
with AI every day and I know how easily code slips into places it
shouldn&amp;rsquo;t. Here, every inline script is hashed and registered against the
specific pages allowed to carry it; change one byte without a matching
approval and the site will not build at all.&lt;/p&gt;
&lt;p&gt;On ordinary editorial pages, JavaScript stays small and first-party: it
handles reading aids, navigation behavior, and a few decorative details.
The restored interactive applications add their own reviewed first-party
code. Everything a page argues - text, tables, figures, footnotes - is
present in the HTML before any script runs. Turn JavaScript off and you
lose enhancements, not the argument or its evidence. You can still use the website normally.&lt;/p&gt;
&lt;p&gt;Audience measurement is designed around PostHog Cloud EU with a cookieless
baseline and a separate enhanced mode that recognizes returning readers and
connects their sessions.&lt;/p&gt;
&lt;p&gt;The analytics code passes through the same fingerprint gate as
everything else, and the
&lt;a href="https://viborc.com/privacy-policy/#6-analytics-and-privacy-choices"&gt;privacy policy&lt;/a&gt; describes the bounded data
contract and its choices in plain language. Before public activation, that
contract gets proven on the protected preview: what the browser sends, what
the relay passes on, what gets stored, and what the payloads contain.&lt;/p&gt;
&lt;h2 id="the-editorial-position"&gt;The editorial position&lt;/h2&gt;
&lt;p&gt;While rebuilding this, I thought about the mission first: I want to explain and document, with
evidence a reader can check, how machine intelligence, information
warfare, tech, and the contest for power are changing the ground we all stand
on.&lt;/p&gt;
&lt;p&gt;The website itself, data viz, code&amp;hellip; everything below is machinery in service of that.&lt;/p&gt;
&lt;p&gt;Also,
this is where the publication stands at launch, not where it will end. It
will evolve, and several months or a year from now it will not look exactly like this. What
I intend to hold constant are the fundamentals: the subjects, the evidence
discipline, and the promise that established addresses do not change.&lt;/p&gt;
&lt;p&gt;I was also rethinking the reading model and landed on two forms and six topics.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Essays&lt;/strong&gt; are the default form: writing that argues, explains, or
explores, at any length.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;a href="https://viborc.com/research/"&gt;Research&lt;/a&gt;&lt;/strong&gt; is the deeper content. Pieces there
typically carry a declared question, a method, and evidence a reader can
inspect; sometimes they are broader syntheses, work first published in
other venues, or investigations still under way.&lt;/p&gt;
&lt;p&gt;This is not an academic journal, and it does not aim to be one. There are places where I can publish that kind of work; this is likely not one of them.&lt;/p&gt;
&lt;p&gt;It is simply where the heavier work lives, whether it grew up here or
appeared in a peer-reviewed publication first.&lt;/p&gt;
&lt;p&gt;So, when I&amp;rsquo;m in doubt, a piece
ships as an essay. Maps, visualizations, and datasets are not a separate
section anymore; they are vocabulary any piece may speak.&lt;/p&gt;
&lt;p&gt;The six topics:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href="https://viborc.com/topics/intelligence/"&gt;Intelligence and tradecraft&lt;/a&gt;:&lt;/strong&gt; analysis, collection disciplines, judgment under uncertainty&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href="https://viborc.com/topics/artificial-intelligence/"&gt;Artificial intelligence&lt;/a&gt;&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href="https://viborc.com/topics/osint-information-warfare/"&gt;OSINT and information warfare&lt;/a&gt;&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Quantum computing&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href="https://viborc.com/topics/geopolitics/"&gt;Geopolitics&lt;/a&gt;&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href="https://viborc.com/topics/systems-infrastructure/"&gt;Systems and infrastructure&lt;/a&gt;:&lt;/strong&gt; the substrate the other five run on&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Every piece carries one form and one or more topics, and the archive
keeps its own nine collection shelves for the historical work.&lt;/p&gt;
&lt;p&gt;New publishing is English-only. The Croatian archive stays, preserved and
respected, but this publication now writes in one language.&lt;/p&gt;
&lt;p&gt;And a standing commitment is that the sources, dates, and data stay visible on the page. Where
I am documenting, you will see the documents. When I am arguing or merely
guessing, I will say so.&lt;/p&gt;
&lt;h2 id="what-happens-next"&gt;What happens next&lt;/h2&gt;
&lt;p&gt;&lt;a href="https://viborc.com/research/"&gt;The Research shelf&lt;/a&gt; opens with a revised web edition of
&lt;a href="https://viborc.com/research/russian-influence-disinformation-operations-balkans/"&gt;peer-reviewed research I co-authored with my friend David Kirichenko on Russian influence operations in the Balkans&lt;/a&gt;. It was first published in the Georgetown Security Studies Review.&lt;/p&gt;
&lt;p&gt;A report on the weaponization of large language models is still being written.
And more essays will come steadily across all six topics.&lt;/p&gt;
&lt;p&gt;If you want to follow along, the &lt;a href="https://viborc.com/feed.xml"&gt;RSS feed&lt;/a&gt; carries every new
essay and research piece. You can also subscribe to the viborc.com newsletter
in the footer. It is email-only and double opt-in, built with the same small,
careful machinery. &lt;a href="https://viborc.com/contact/"&gt;The contact page&lt;/a&gt; reaches me directly.&lt;/p&gt;
&lt;p&gt;As I type these final thoughts before a launch I&amp;rsquo;ve been postponing for days now, I am excited about this
publication, and even more about what these topics will do to our work,
our systems of power, and how we see both. I plan to write it down
as it happens. Follow along, and let&amp;rsquo;s stay in touch.&lt;/p&gt;</content:encoded></item><item><title>Russian influence and disinformation operations in the Balkans</title><link>https://viborc.com/research/russian-influence-disinformation-operations-balkans/</link><pubDate>Fri, 17 Jul 2026 11:52:26 +0000</pubDate><guid isPermaLink="true">https://viborc.com/research/russian-influence-disinformation-operations-balkans/</guid><description>A revised 2026 edition of peer-reviewed research on Russia's narratives, political clients, and media machinery across the Western Balkans.</description><content:encoded>&lt;p&gt;On 9 January 2023, a military-style parade rolled through East Sarajevo to
mark the &amp;ldquo;Day of Republika Srpska,&amp;rdquo; a holiday the Constitutional Court of
Bosnia and Herzegovina has ruled unconstitutional. Around 2,000 Bosnian Serb
police officers marched. So did the Night Wolves, the Kremlin-funded Russian
motorcycle club sanctioned by the United States since 2014 for its role in
the occupation of Crimea. An announcer praised their mission: to &amp;ldquo;promote
Orthodox Christianity and make the Republika Srpska as mighty and eternal as
Mother Russia.&amp;rdquo; Bosnian intelligence later confirmed that members of the
Wagner mercenary group and the Ravnogorski Chetnik movement attended the
celebrations, where flags of the so-called &amp;ldquo;People&amp;rsquo;s Republic of Donetsk&amp;rdquo;
were displayed.&lt;sup id="fnref:1"&gt;&lt;a href="#fn:1" class="footnote-ref" role="doc-noteref"&gt;1&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;
&lt;p&gt;None of that assembled itself.&lt;/p&gt;
&lt;p&gt;The bikers, the flags, the talk of brotherhood, the local officials on
the reviewing stand: each is a component of a system Russia has spent two
decades building in the Western Balkans. This research maps that system: the
ground it stands on, the rails it runs on (narratives, clients, media), and
what it produces in public opinion, elections, policy, and the region&amp;rsquo;s
path toward the European Union. It closes with what counters it,
which is not what is usually recommended.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;About this edition.&lt;/strong&gt; This research was first published, under peer
review, in the
&lt;a href="https://gssr.georgetown.edu/the-review/gssr-volume-11-issue-2/" rel="nofollow noreferrer noopener"&gt;Georgetown Security Studies Review&lt;/a&gt;,
Volume 11, Issue 2 (February 2024), pp. 65–85, co-authored by Vibor Cipan
(lead author) and David Kirichenko. The Balkans did not stand still after
publication: Milorad Dodik was convicted and banned from office, RT Balkan
got its television channel, the United States lifted sanctions on Dodik,
and Serbia entered its deepest political crisis since the Milošević era.
This is the authors&amp;rsquo; revised and updated web edition, current to July
2026; the changes are summarized &lt;a href="#about-this-research"&gt;at the end&lt;/a&gt;.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id="why-the-ground-is-receptive"&gt;Why the ground is receptive&lt;/h2&gt;
&lt;p&gt;The Balkans sit on one of Europe&amp;rsquo;s oldest civilizational seams, and the seam
still organizes the region&amp;rsquo;s politics. Croatia and Slovenia aligned with the
West early and durably: the Croats accepted Western Christianity in the
early medieval period, and Rome recognized Duke Branimir&amp;rsquo;s Croatia in 879.
Eleven centuries later the same two countries are members of the European
Union, NATO, the Eurozone, and Schengen.&lt;sup id="fnref:2"&gt;&lt;a href="#fn:2" class="footnote-ref" role="doc-noteref"&gt;2&lt;/a&gt;&lt;/sup&gt; Serbia and Montenegro inherited
the other side of the seam: Orthodox Christianity, the Cyrillic script, and
a long habit of looking east for patronage.&lt;sup id="fnref:3"&gt;&lt;a href="#fn:3" class="footnote-ref" role="doc-noteref"&gt;3&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;
&lt;p&gt;Centuries of Ottoman rule reshaped the religious composition of Bosnia and
Herzegovina, leaving it the mixed Muslim, Orthodox, and Catholic society it
remains. Ottoman decline brought Austro-Hungarian expansion into conflict
with a Russian-backed independent Serbia, and the region supplied the sparks
for the Balkan Wars and the First World War.&lt;sup id="fnref:4"&gt;&lt;a href="#fn:4" class="footnote-ref" role="doc-noteref"&gt;4&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;
&lt;p&gt;After 1945, Tito&amp;rsquo;s Yugoslavia balanced between the blocs and co-founded the
Non-Aligned Movement, developing its industry and living standards faster
than most socialist states.&lt;sup id="fnref:5"&gt;&lt;a href="#fn:5" class="footnote-ref" role="doc-noteref"&gt;5&lt;/a&gt;&lt;/sup&gt; It still could not suppress the national
questions underneath. When the federation broke apart in the 1990s, the
Yugoslav People&amp;rsquo;s Army attacked Slovenia briefly, then Croatia, where the
Homeland War devastated Vukovar and shelled Dubrovnik, and then Bosnia. The
Bosnian war, marked by ethnic cleansing and the Srebrenica genocide of more
than 8,000 Bosniaks, was the deadliest European conflict between 1945 and
Russia&amp;rsquo;s full-scale invasion of Ukraine.&lt;sup id="fnref:6"&gt;&lt;a href="#fn:6" class="footnote-ref" role="doc-noteref"&gt;6&lt;/a&gt;&lt;/sup&gt; The Dayton settlement froze
Bosnia into two entities, Republika Srpska and the Bosniak-Croat Federation,
plus the Brčko District. The structure preserved peace by institutionalizing
the divide.&lt;sup id="fnref:7"&gt;&lt;a href="#fn:7" class="footnote-ref" role="doc-noteref"&gt;7&lt;/a&gt;&lt;/sup&gt; Kosovo followed at the decade&amp;rsquo;s end: Serbian repression,
NATO intervention, the 1999 bombing of Serbia that remains a foundational
grievance in Serbian political memory, and a 2008 declaration of
independence that Serbia and several other states still do not
recognize.&lt;sup id="fnref:8"&gt;&lt;a href="#fn:8" class="footnote-ref" role="doc-noteref"&gt;8&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;
&lt;p&gt;That history produces today&amp;rsquo;s map. Most of the region is in NATO, some of it
in the EU, and Serbia, officially neutral and practically leaning toward
Moscow, sits at the center of the space in between. Russian influence
operates in that space.&lt;/p&gt;
&lt;h2 id="what-moscow-wants"&gt;What Moscow wants&lt;/h2&gt;
&lt;p&gt;As the EU and NATO absorbed most of Central and Eastern Europe, the Western
Balkans became a frontier: the last European region where East and West
still visibly compete for alignment.&lt;sup id="fnref:9"&gt;&lt;a href="#fn:9" class="footnote-ref" role="doc-noteref"&gt;9&lt;/a&gt;&lt;/sup&gt; Russia&amp;rsquo;s interest is not
sentimental. Keeping the region unsettled serves three purposes at once: it
blocks or slows the completion of Euro-Atlantic integration, ties down
Western diplomatic attention and resources, and maintains a pressure
point Russia can squeeze whenever it needs leverage elsewhere. Since 2022
that has meant, above all, Ukraine.&lt;sup id="fnref:10"&gt;&lt;a href="#fn:10" class="footnote-ref" role="doc-noteref"&gt;10&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;
&lt;p&gt;The doctrine behind this is usually filed under the name of Valery
Gerasimov, Russia&amp;rsquo;s Chief of the General Staff. But the canonical text is
Gerasimov&amp;rsquo;s 2013 article on the
blurring line between war and peace, and &amp;ldquo;the Gerasimov doctrine&amp;rdquo; is a name
Western commentary attached to it afterwards, a shorthand its own
popularizer later called misleading.&lt;sup id="fnref:11"&gt;&lt;a href="#fn:11" class="footnote-ref" role="doc-noteref"&gt;11&lt;/a&gt;&lt;/sup&gt; The substance still matters.
Gerasimov argued that the informational dimension would move from supporting
warfare to constituting it, with information technology &amp;ldquo;becoming one of the
most promising types of weapons,&amp;rdquo; and his March 2019 address to the Russian
Academy of Military Sciences reaffirmed non-military means as central to
strategic competition.&lt;sup id="fnref:12"&gt;&lt;a href="#fn:12" class="footnote-ref" role="doc-noteref"&gt;12&lt;/a&gt;&lt;/sup&gt; Under Putin, the practice looks less like a
doctrine and more like opportunism with a doctrine&amp;rsquo;s vocabulary: create and
exploit disorder, probe for openings, and treat every local grievance as a
potential instrument.&lt;sup id="fnref:13"&gt;&lt;a href="#fn:13" class="footnote-ref" role="doc-noteref"&gt;13&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;
&lt;p&gt;In the Western Balkans, that practice runs on three rails: narratives,
clients, and media.&lt;/p&gt;
&lt;h2 id="the-machinery"&gt;The machinery&lt;/h2&gt;
&lt;figure&gt;
&lt;svg viewBox="0 0 640 556" role="img" aria-label="The influence system, end to end: receptive ground, three rails, four observable outcomes" aria-describedby="fig-machinery-desc" xmlns="http://www.w3.org/2000/svg"&gt;
&lt;desc id="fig-machinery-desc"&gt;Schematic in three bands. Top band, the ground: Orthodox brotherhood and shared history, memory of the 1990s and NATO's 1999 bombing, and the Kosovo grievance. An arrow leads to three rails: narratives (Orthodox civilizational framing, defender of the Serbs on Kosovo, European integration as imposed decadence), clients (Dodik and the RS apparatus, Vulin inside Serbia's security services, the For the Future of Montenegro bloc), and media (Sputnik Serbia since 2015, RT Balkan online 2022 and TV 2024, RTRS in Republika Srpska). An arrow leads to four outcomes: public perception, electoral advantage, policy alignment, integration drag.&lt;/desc&gt;
&lt;defs&gt;&lt;marker id="fig1-arrow" viewBox="0 0 8 8" refX="7" refY="4" markerWidth="7" markerHeight="7" orient="auto-start-reverse"&gt;&lt;path d="M0,0.6 L7.4,4 L0,7.4 Z" fill="var(--ink-soft)"/&gt;&lt;/marker&gt;&lt;/defs&gt;
&lt;text x="24" y="40" font-family="var(--font-mono)" font-size="11" letter-spacing="0.08em" fill="var(--ink-soft)"&gt;THE GROUND - WHY THE REGION IS RECEPTIVE&lt;/text&gt;
&lt;rect x="24" y="52" width="592" height="84" rx="6" fill="var(--field-deep)" stroke="var(--hairline)"/&gt;
&lt;g font-family="var(--font-body)" font-size="14" fill="var(--ink)" text-anchor="middle"&gt;
&lt;text x="123" y="88"&gt;Orthodox brotherhood&lt;/text&gt;&lt;text x="123" y="108"&gt;and shared history&lt;/text&gt;
&lt;text x="320" y="88"&gt;Memory of the 1990s&lt;/text&gt;&lt;text x="320" y="108"&gt;and NATO's 1999 bombing&lt;/text&gt;
&lt;text x="517" y="88"&gt;The Kosovo grievance,&lt;/text&gt;&lt;text x="517" y="108"&gt;renewed at every crisis&lt;/text&gt;
&lt;/g&gt;
&lt;line x1="320" y1="144" x2="320" y2="164" stroke="var(--ink-soft)" stroke-width="1.5" marker-end="url(#fig1-arrow)"/&gt;
&lt;text x="24" y="190" font-family="var(--font-mono)" font-size="11" letter-spacing="0.08em" fill="var(--ink-soft)"&gt;THREE RAILS - HOW THE OPERATION RUNS&lt;/text&gt;
&lt;g&gt;
&lt;rect x="24" y="202" width="188" height="196" rx="6" fill="var(--field-raised)" stroke="var(--hairline-strong)"/&gt;
&lt;rect x="25" y="203" width="186" height="3" fill="var(--violet)"/&gt;
&lt;rect x="226" y="202" width="188" height="196" rx="6" fill="var(--field-raised)" stroke="var(--hairline-strong)"/&gt;
&lt;rect x="227" y="203" width="186" height="3" fill="var(--violet)"/&gt;
&lt;rect x="428" y="202" width="188" height="196" rx="6" fill="var(--field-raised)" stroke="var(--hairline-strong)"/&gt;
&lt;rect x="429" y="203" width="186" height="3" fill="var(--violet)"/&gt;
&lt;/g&gt;
&lt;g font-family="var(--font-mono)" font-size="12.5" letter-spacing="0.08em" fill="var(--ink)" text-anchor="middle"&gt;
&lt;text x="118" y="230"&gt;NARRATIVES&lt;/text&gt;&lt;text x="320" y="230"&gt;CLIENTS&lt;/text&gt;&lt;text x="522" y="230"&gt;MEDIA&lt;/text&gt;
&lt;/g&gt;
&lt;g font-family="var(--font-body)" font-size="13" fill="var(--ink-soft)" text-anchor="middle"&gt;
&lt;text x="118" y="258"&gt;Orthodox civilizational&lt;/text&gt;&lt;text x="118" y="275"&gt;framing from the Church&lt;/text&gt;
&lt;text x="118" y="304"&gt;Defender of the Serbs&lt;/text&gt;&lt;text x="118" y="321"&gt;on the Kosovo question&lt;/text&gt;
&lt;text x="118" y="350"&gt;European integration&lt;/text&gt;&lt;text x="118" y="367"&gt;as imposed decadence&lt;/text&gt;
&lt;text x="320" y="258"&gt;Dodik and the RS&lt;/text&gt;&lt;text x="320" y="275"&gt;apparatus in Bosnia&lt;/text&gt;
&lt;text x="320" y="304"&gt;Vulin inside Serbia's&lt;/text&gt;&lt;text x="320" y="321"&gt;security services&lt;/text&gt;
&lt;text x="320" y="350"&gt;For the Future of&lt;/text&gt;&lt;text x="320" y="367"&gt;Montenegro bloc&lt;/text&gt;
&lt;text x="522" y="258"&gt;Sputnik Serbia,&lt;/text&gt;&lt;text x="522" y="275"&gt;web and radio since 2015&lt;/text&gt;
&lt;text x="522" y="304"&gt;RT Balkan online 2022,&lt;/text&gt;&lt;text x="522" y="321"&gt;24-hour TV late 2024&lt;/text&gt;
&lt;text x="522" y="350"&gt;RTRS relaying the line&lt;/text&gt;&lt;text x="522" y="367"&gt;in Republika Srpska&lt;/text&gt;
&lt;/g&gt;
&lt;line x1="320" y1="406" x2="320" y2="426" stroke="var(--ink-soft)" stroke-width="1.5" marker-end="url(#fig1-arrow)"/&gt;
&lt;text x="24" y="454" font-family="var(--font-mono)" font-size="11" letter-spacing="0.08em" fill="var(--ink-soft)"&gt;WHAT IT PRODUCES - FOUR OBSERVABLE OUTCOMES&lt;/text&gt;
&lt;g&gt;
&lt;rect x="24" y="466" width="139" height="66" rx="6" fill="var(--field-raised)" stroke="var(--hairline-strong)"/&gt;&lt;rect x="25" y="528" width="137" height="3" fill="var(--teal)"/&gt;
&lt;rect x="175" y="466" width="139" height="66" rx="6" fill="var(--field-raised)" stroke="var(--hairline-strong)"/&gt;&lt;rect x="176" y="528" width="137" height="3" fill="var(--teal)"/&gt;
&lt;rect x="326" y="466" width="139" height="66" rx="6" fill="var(--field-raised)" stroke="var(--hairline-strong)"/&gt;&lt;rect x="327" y="528" width="137" height="3" fill="var(--teal)"/&gt;
&lt;rect x="477" y="466" width="139" height="66" rx="6" fill="var(--field-raised)" stroke="var(--hairline-strong)"/&gt;&lt;rect x="478" y="528" width="137" height="3" fill="var(--teal)"/&gt;
&lt;/g&gt;
&lt;g font-family="var(--font-body)" font-size="13" fill="var(--ink)" text-anchor="middle"&gt;
&lt;text x="93" y="492"&gt;Public&lt;/text&gt;&lt;text x="93" y="510"&gt;perception&lt;/text&gt;
&lt;text x="244" y="492"&gt;Electoral&lt;/text&gt;&lt;text x="244" y="510"&gt;advantage&lt;/text&gt;
&lt;text x="395" y="492"&gt;Policy&lt;/text&gt;&lt;text x="395" y="510"&gt;alignment&lt;/text&gt;
&lt;text x="546" y="492"&gt;Integration&lt;/text&gt;&lt;text x="546" y="510"&gt;drag&lt;/text&gt;
&lt;/g&gt;
&lt;/svg&gt;
&lt;figcaption&gt;The system, end to end: the ground it stands on, the three rails it runs on, and the four places the output shows up. The sections below follow this map.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;h3 id="soft-power-narratives"&gt;Soft-power narratives&lt;/h3&gt;
&lt;p&gt;Russia&amp;rsquo;s primary narrative in the region is civilizational: Orthodox
brotherhood, pan-Slavic solidarity, and the framing of European integration
as moral decadence imposed from outside. The Russian Orthodox Church
supplies much of the vocabulary, and the message lands where Orthodox
identity and the historical memory of Western intervention give it
resonance: in Serbia, in Montenegro, and in Bosnia&amp;rsquo;s Republika Srpska.&lt;sup id="fnref:14"&gt;&lt;a href="#fn:14" class="footnote-ref" role="doc-noteref"&gt;14&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;
&lt;p&gt;The second narrative is Kosovo. Russia positions itself as the defender of
Serbian interests on &amp;ldquo;the Serb question,&amp;rdquo; vetoing recognition at the UN and
amplifying every crisis. The utility is mutual: Serbia&amp;rsquo;s leadership turns to
Moscow for backing on Kosovo, and Moscow converts that dependence into
standing influence.&lt;sup id="fnref:15"&gt;&lt;a href="#fn:15" class="footnote-ref" role="doc-noteref"&gt;15&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;
&lt;h3 id="political-clients"&gt;Political clients&lt;/h3&gt;
&lt;p&gt;Narratives need carriers, and Russia&amp;rsquo;s carriers in the region hold real
power.&lt;/p&gt;
&lt;p&gt;In Republika Srpska, Milorad Dodik spent years openly aligning the entity
with Moscow: advocating closer ties, opposing NATO, and hosting the symbolic
apparatus of Russian nationalism, from the Night Wolves to RS Day. In
January 2023 he awarded Vladimir Putin the entity&amp;rsquo;s highest medal of honor,
in absentia, for his &amp;ldquo;patriotic concern and love&amp;rdquo; for Republika
Srpska.&lt;sup id="fnref:16"&gt;&lt;a href="#fn:16" class="footnote-ref" role="doc-noteref"&gt;16&lt;/a&gt;&lt;/sup&gt; The United States first sanctioned Dodik in 2017 and again in
2022; the United Kingdom followed in April 2022.&lt;sup id="fnref:17"&gt;&lt;a href="#fn:17" class="footnote-ref" role="doc-noteref"&gt;17&lt;/a&gt;&lt;/sup&gt; What has happened to
him since is covered &lt;a href="#republika-srpska-dodik-after-the-verdict"&gt;below&lt;/a&gt;;
nothing else in the region changed as much between the two editions.&lt;/p&gt;
&lt;p&gt;In Serbia, the pro-Russian orientation ran through the security apparatus
itself. Aleksandar Vulin, sanctioned by the US in July 2023 for corruption
and for facilitating Russian influence while directing Serbia&amp;rsquo;s BIA
intelligence agency, met Foreign Minister Sergei Lavrov in Moscow in August
2022 and received honors from the Russian Ministry of Defense. He resigned
from the BIA in November 2023, citing Western pressure.&lt;sup id="fnref:18"&gt;&lt;a href="#fn:18" class="footnote-ref" role="doc-noteref"&gt;18&lt;/a&gt;&lt;/sup&gt; Serbia and
Russia signed a foreign-policy consultation agreement in September 2022,
seven months into Russia&amp;rsquo;s full-scale invasion of Ukraine, a gesture of
synchronized positions made while the rest of Europe was sanctioning
Moscow.&lt;sup id="fnref:19"&gt;&lt;a href="#fn:19" class="footnote-ref" role="doc-noteref"&gt;19&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;
&lt;p&gt;In Montenegro, Russian influence survived the country&amp;rsquo;s NATO accession,
which Moscow had tried to prevent; Russian agents were implicated in an
attempted coup in 2016.&lt;sup id="fnref:20"&gt;&lt;a href="#fn:20" class="footnote-ref" role="doc-noteref"&gt;20&lt;/a&gt;&lt;/sup&gt; It resurfaced in coalition politics: the
government formed in October 2023 under Milojko Spajić depended on the
pro-Serbian and pro-Russian For the Future of Montenegro bloc, whose leader
Andrija Mandić became speaker of parliament.&lt;sup id="fnref:21"&gt;&lt;a href="#fn:21" class="footnote-ref" role="doc-noteref"&gt;21&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;
&lt;h3 id="the-media-machine"&gt;The media machine&lt;/h3&gt;
&lt;p&gt;The infrastructure that moves the narratives is concrete and, for the most
part, legal.&lt;/p&gt;
&lt;p&gt;Russia established a regional base for Sputnik in Belgrade in 2015: web and
radio, staffed locally, publishing in Serbian. Sputnik Serbia presents
itself not as a conduit of Russian state media but as a Serbian outlet,
which makes its framing (the EU as weak, fragmented, and aggressive;
integration as a trap) far more digestible locally.&lt;sup id="fnref:22"&gt;&lt;a href="#fn:22" class="footnote-ref" role="doc-noteref"&gt;22&lt;/a&gt;&lt;/sup&gt; The language is the
force multiplier: Serbian is official in Serbia, co-official in Montenegro,
and widely understood in Bosnia, so a single newsroom&amp;rsquo;s output travels the
whole region while reading as domestic.&lt;sup id="fnref:23"&gt;&lt;a href="#fn:23" class="footnote-ref" role="doc-noteref"&gt;23&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;
&lt;p&gt;RT followed. Despite the EU ban on RT and Sputnik imposed in March 2022 for
their role in justifying the war against Ukraine,&lt;sup id="fnref:24"&gt;&lt;a href="#fn:24" class="footnote-ref" role="doc-noteref"&gt;24&lt;/a&gt;&lt;/sup&gt; RT launched its
Serbian-language online platform, RT Balkan, in Belgrade in November
2022.&lt;sup id="fnref:25"&gt;&lt;a href="#fn:25" class="footnote-ref" role="doc-noteref"&gt;25&lt;/a&gt;&lt;/sup&gt; In the February 2024 original, RT Balkan was &amp;ldquo;planning&amp;rdquo; television
broadcasting. It is no longer a plan: RT Balkan began 24-hour
television broadcasting from Belgrade in late December 2024, distributed
through cable operators in Serbia and Republika Srpska.&lt;sup id="fnref:26"&gt;&lt;a href="#fn:26" class="footnote-ref" role="doc-noteref"&gt;26&lt;/a&gt;&lt;/sup&gt; Both operations
run openly. In 2025–26, when the EU pressed Belgrade to close the offices of
Sputnik and RT Balkan as part of accession alignment, Serbia&amp;rsquo;s information
minister rejected the demand as &amp;ldquo;censorship.&amp;rdquo;&lt;sup id="fnref:27"&gt;&lt;a href="#fn:27" class="footnote-ref" role="doc-noteref"&gt;27&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;
&lt;p&gt;A wider structure surrounds the flagship outlets. AidData&amp;rsquo;s mapping of
media ownership in Serbia and Montenegro identifies ownership as a standing
entry point for foreign influence through elites and media owners, and the
republication of Russian-favorable content by local outlets is a tactic
observed across the region.&lt;sup id="fnref:28"&gt;&lt;a href="#fn:28" class="footnote-ref" role="doc-noteref"&gt;28&lt;/a&gt;&lt;/sup&gt; In Republika Srpska, the mechanism is
political rather than proprietary: the entity&amp;rsquo;s most influential outlet,
RTRS, is close to the RS government, and the government has maintained
loyalty through selective public funding and politically motivated legal
pressure on critical outlets, a pattern documented since at least
2012.&lt;sup id="fnref:29"&gt;&lt;a href="#fn:29" class="footnote-ref" role="doc-noteref"&gt;29&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;
&lt;h2 id="the-war-in-ukraine-as-accelerant"&gt;The war in Ukraine as accelerant&lt;/h2&gt;
&lt;p&gt;Russia&amp;rsquo;s full-scale invasion of Ukraine in February 2022 forced every
government in the region to show its cards, and it sharpened every dynamic
described so far.&lt;/p&gt;
&lt;p&gt;In Serbia and Republika Srpska, the invasion strengthened already strong
pro-Russian sentiment; Belgrade saw public rallies supporting Russia&amp;rsquo;s war,
and pro-war symbols became a normal sight in the city.&lt;sup id="fnref:30"&gt;&lt;a href="#fn:30" class="footnote-ref" role="doc-noteref"&gt;30&lt;/a&gt;&lt;/sup&gt; In the rest of
the region it revived the memory of the 1990s. Underneath was the fear that
a Russian victory would embolden Serbian nationalists to reopen the outcomes
of the wars over Bosnia and Kosovo.&lt;sup id="fnref:31"&gt;&lt;a href="#fn:31" class="footnote-ref" role="doc-noteref"&gt;31&lt;/a&gt;&lt;/sup&gt; The EU reinforced its EUFOR
peacekeeping force in Bosnia with roughly 500 reserve troops the day the
invasion began.&lt;sup id="fnref:32"&gt;&lt;a href="#fn:32" class="footnote-ref" role="doc-noteref"&gt;32&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;
&lt;p&gt;The war also moved people. More than 300,000 Russian citizens have entered
visa-free Serbia since February 2022, though far fewer stayed: roughly
50,000 hold residence permits, and estimates of the community actually
living in the country range from about 80,000 to 110,000.&lt;sup id="fnref:33"&gt;&lt;a href="#fn:33" class="footnote-ref" role="doc-noteref"&gt;33&lt;/a&gt;&lt;/sup&gt; The émigré
wave is economically visible and politically ambiguous: many left Russia to
escape mobilization rather than to oppose the regime. The long-term effect
on Serbia&amp;rsquo;s orientation is an open question.&lt;/p&gt;
&lt;p&gt;Serbia&amp;rsquo;s official posture through it all has been an exercise in strategic
ambiguity. President Aleksandar Vučić committed to the European path while
refusing, year after year, to join EU sanctions against Russia.&lt;sup id="fnref:34"&gt;&lt;a href="#fn:34" class="footnote-ref" role="doc-noteref"&gt;34&lt;/a&gt;&lt;/sup&gt; In May
2022, while the rest of Europe was scrambling away from Russian energy, he
secured what he called an &amp;ldquo;extremely favorable&amp;rdquo; gas deal with Moscow.&lt;sup id="fnref:35"&gt;&lt;a href="#fn:35" class="footnote-ref" role="doc-noteref"&gt;35&lt;/a&gt;&lt;/sup&gt;
The European Union, needing Serbia inside its orbit, has mostly responded
with accommodation, a conciliatory approach critics call appeasement.&lt;sup id="fnref:36"&gt;&lt;a href="#fn:36" class="footnote-ref" role="doc-noteref"&gt;36&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;
&lt;p&gt;Since 2024, the hedging has come under strain from both directions:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Vučić attended Moscow&amp;rsquo;s Victory Day parade on 9 May 2025 over explicit EU
warnings, and a Serbian military unit marched on Red Square.&lt;sup id="fnref:37"&gt;&lt;a href="#fn:37" class="footnote-ref" role="doc-noteref"&gt;37&lt;/a&gt;&lt;/sup&gt;&lt;/li&gt;
&lt;li&gt;Weeks later, Russia&amp;rsquo;s foreign intelligence service publicly accused Serbia
of &amp;ldquo;stabbing Moscow in the back&amp;rdquo; by supplying ammunition to Ukraine
through Czech and Bulgarian intermediaries. Vučić halted ammunition
exports in June 2025, then reversed course in November, offering to sell
ammunition to European buyers who &amp;ldquo;can do whatever they want with
it.&amp;rdquo;&lt;sup id="fnref:38"&gt;&lt;a href="#fn:38" class="footnote-ref" role="doc-noteref"&gt;38&lt;/a&gt;&lt;/sup&gt;&lt;/li&gt;
&lt;li&gt;US sanctions on NIS, Serbia&amp;rsquo;s Gazprom-controlled oil company, took effect
in October 2025 and shut the country&amp;rsquo;s only refinery within weeks; Gazprom
agreed to negotiate selling its stake, and Serbia signed only a short-term
extension of its Russian gas arrangement.&lt;sup id="fnref:39"&gt;&lt;a href="#fn:39" class="footnote-ref" role="doc-noteref"&gt;39&lt;/a&gt;&lt;/sup&gt;&lt;/li&gt;
&lt;li&gt;The European Parliament resolved in October 2025 that Serbia&amp;rsquo;s accession
cannot advance without alignment on sanctions.&lt;sup id="fnref:40"&gt;&lt;a href="#fn:40" class="footnote-ref" role="doc-noteref"&gt;40&lt;/a&gt;&lt;/sup&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Meanwhile Serbia&amp;rsquo;s domestic ground shifted in a way no foreign actor
scripted. The collapse of the Novi Sad railway station canopy on 1 November
2024, which killed 16 people, ignited the largest protest movement since the
fall of Milošević: student-led, anti-corruption, and sustained. Prime
Minister Miloš Vučević resigned in January 2025. On 27 June 2026, Vučić
announced that he would resign the presidency and call early elections; as
of this writing he has not yet formally stepped down, and analysts widely
expect him to attempt to govern from another seat.&lt;sup id="fnref:41"&gt;&lt;a href="#fn:41" class="footnote-ref" role="doc-noteref"&gt;41&lt;/a&gt;&lt;/sup&gt; Whatever follows,
the Vučić era of consolidated, personalized balancing is ending on terms
set by domestic accountability politics, not by either geopolitical patron.&lt;/p&gt;
&lt;h3 id="the-srebrenica-inversion"&gt;The Srebrenica inversion&lt;/h3&gt;
&lt;p&gt;Since the invasion, the Russian Embassy in Bosnia has
used social media to defend Russia&amp;rsquo;s war and to draw parallels between
eastern Ukraine and Srebrenica, recycling a comparison Putin himself made in
2017, when he warned that Ukrainian actions in Donbas could exceed the
Srebrenica massacre.&lt;sup id="fnref:42"&gt;&lt;a href="#fn:42" class="footnote-ref" role="doc-noteref"&gt;42&lt;/a&gt;&lt;/sup&gt; At the same time, Russia has consistently denied
the Srebrenica genocide itself. As Harun Karčić, a Sarajevo-based analyst of
Russian influence in the region, has documented, the genocide Russia denies
at home is the same one it invokes abroad to rationalize its
incursions.&lt;sup id="fnref:43"&gt;&lt;a href="#fn:43" class="footnote-ref" role="doc-noteref"&gt;43&lt;/a&gt;&lt;/sup&gt; The narrative is a tool, detached from any factual
commitment.&lt;/p&gt;
&lt;p&gt;James Rubin, then coordinator of the US State Department&amp;rsquo;s Global Engagement
Center, put the regional mechanics plainly:&lt;/p&gt;
&lt;p class="pull-quote pull-quote--long"&gt;"The main source of the threat in this part of the world is Russian-generated disinformation, often repeated and acting as a hub through Serbian media platforms and then repeated and promulgated here in the Western Balkans."&lt;/p&gt;
&lt;p&gt;The hub-and-spoke structure is the point: content originates with Russian
state media, gains local legitimacy through Serbian platforms, and arrives
across borders pre-translated and pre-trusted.&lt;sup id="fnref:44"&gt;&lt;a href="#fn:44" class="footnote-ref" role="doc-noteref"&gt;44&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;
&lt;figure&gt;
&lt;svg viewBox="0 0 640 484" role="img" aria-label="The hub-and-spoke media machine, Moscow through Belgrade to the region" aria-describedby="fig-hub-desc" xmlns="http://www.w3.org/2000/svg"&gt;
&lt;desc id="fig-hub-desc"&gt;Flow diagram. Moscow, home of RT and Sputnik International, sends state content to the Belgrade hub: Sputnik Serbia on web and radio since 2015, RT Balkan online since November 2022 and on 24-hour television since December 2024. From Belgrade, three spokes: Serbia, where pro-government mainstream media re-carry the framing; Republika Srpska, where RTRS and cable packages carry RT Balkan TV; and Montenegro, where the co-official language makes the content read as domestic. One Serbian-language newsroom serves the whole region; content arrives pre-translated and pre-trusted.&lt;/desc&gt;
&lt;defs&gt;&lt;marker id="fig2-arrow" viewBox="0 0 8 8" refX="7" refY="4" markerWidth="7" markerHeight="7" orient="auto-start-reverse"&gt;&lt;path d="M0,0.6 L7.4,4 L0,7.4 Z" fill="var(--violet)"/&gt;&lt;/marker&gt;&lt;/defs&gt;
&lt;rect x="220" y="28" width="200" height="74" rx="6" fill="var(--field-raised)" stroke="var(--hairline-strong)"/&gt;
&lt;rect x="221" y="29" width="198" height="3" fill="var(--violet)"/&gt;
&lt;text x="320" y="56" font-family="var(--font-mono)" font-size="12" letter-spacing="0.08em" fill="var(--ink)" text-anchor="middle"&gt;ORIGIN - MOSCOW&lt;/text&gt;
&lt;text x="320" y="80" font-family="var(--font-body)" font-size="13" fill="var(--ink-soft)" text-anchor="middle"&gt;RT and Sputnik International&lt;/text&gt;
&lt;line x1="320" y1="102" x2="320" y2="130" stroke="var(--violet)" stroke-width="1.5" marker-end="url(#fig2-arrow)"/&gt;
&lt;text x="332" y="121" font-family="var(--font-mono)" font-size="11" fill="var(--ink-soft)"&gt;state content&lt;/text&gt;
&lt;rect x="170" y="136" width="300" height="112" rx="6" fill="var(--field-raised)" stroke="var(--hairline-strong)"/&gt;
&lt;rect x="171" y="137" width="298" height="3" fill="var(--violet)"/&gt;
&lt;text x="320" y="164" font-family="var(--font-mono)" font-size="12" letter-spacing="0.08em" fill="var(--ink)" text-anchor="middle"&gt;THE BELGRADE HUB&lt;/text&gt;
&lt;g font-family="var(--font-body)" font-size="12.5" fill="var(--ink-soft)" text-anchor="middle"&gt;
&lt;text x="320" y="188"&gt;Sputnik Serbia &lt;tspan font-family="var(--font-mono)" fill="var(--teal-deep)"&gt;· web &amp;amp; radio · 2015&lt;/tspan&gt;&lt;/text&gt;
&lt;text x="320" y="208"&gt;RT Balkan &lt;tspan font-family="var(--font-mono)" fill="var(--teal-deep)"&gt;· online · Nov 2022&lt;/tspan&gt;&lt;/text&gt;
&lt;text x="320" y="228"&gt;RT Balkan &lt;tspan font-family="var(--font-mono)" fill="var(--teal-deep)"&gt;· 24-hour TV · Dec 2024&lt;/tspan&gt;&lt;/text&gt;
&lt;/g&gt;
&lt;line x1="250" y1="248" x2="120" y2="292" stroke="var(--violet)" stroke-width="1.5" marker-end="url(#fig2-arrow)"/&gt;
&lt;line x1="320" y1="248" x2="320" y2="292" stroke="var(--violet)" stroke-width="1.5" marker-end="url(#fig2-arrow)"/&gt;
&lt;line x1="390" y1="248" x2="520" y2="292" stroke="var(--violet)" stroke-width="1.5" marker-end="url(#fig2-arrow)"/&gt;
&lt;g&gt;
&lt;rect x="24" y="298" width="180" height="92" rx="6" fill="var(--field-raised)" stroke="var(--hairline-strong)"/&gt;
&lt;rect x="230" y="298" width="180" height="92" rx="6" fill="var(--field-raised)" stroke="var(--hairline-strong)"/&gt;
&lt;rect x="436" y="298" width="180" height="92" rx="6" fill="var(--field-raised)" stroke="var(--hairline-strong)"/&gt;
&lt;/g&gt;
&lt;g font-family="var(--font-mono)" font-size="12" letter-spacing="0.08em" fill="var(--ink)" text-anchor="middle"&gt;
&lt;text x="114" y="324"&gt;SERBIA&lt;/text&gt;&lt;text x="320" y="324"&gt;REPUBLIKA SRPSKA&lt;/text&gt;&lt;text x="526" y="324"&gt;MONTENEGRO&lt;/text&gt;
&lt;/g&gt;
&lt;g font-family="var(--font-body)" font-size="12.5" fill="var(--ink-soft)" text-anchor="middle"&gt;
&lt;text x="114" y="348"&gt;pro-government mainstream&lt;/text&gt;&lt;text x="114" y="366"&gt;re-carries the framing&lt;/text&gt;
&lt;text x="320" y="348"&gt;RTRS and cable packages&lt;/text&gt;&lt;text x="320" y="366"&gt;carry RT Balkan TV&lt;/text&gt;
&lt;text x="526" y="348"&gt;co-official language -&lt;/text&gt;&lt;text x="526" y="366"&gt;content reads as domestic&lt;/text&gt;
&lt;/g&gt;
&lt;g font-family="var(--font-body)" font-size="13.5" font-style="italic" fill="var(--ink-soft)" text-anchor="middle"&gt;
&lt;text x="320" y="432"&gt;One Serbian-language newsroom serves the whole region:&lt;/text&gt;
&lt;text x="320" y="452"&gt;content arrives pre-translated and pre-trusted.&lt;/text&gt;
&lt;/g&gt;
&lt;/svg&gt;
&lt;figcaption&gt;The hub and its spokes: Moscow-origin content gains local legitimacy in Belgrade, then travels the region in one shared language.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;In Serbia itself, the predominant source of information about the war is
pro-government mainstream media, which in the war&amp;rsquo;s first phase carried the
Russian framing of Ukraine as a Nazi state Russia was liberating. Serbian
users were saturated with viral posts about fabricated Nazi symbols among
Ukrainian officials and the conspiracy theory of US bioweapons laboratories
in Ukraine.&lt;sup id="fnref:45"&gt;&lt;a href="#fn:45" class="footnote-ref" role="doc-noteref"&gt;45&lt;/a&gt;&lt;/sup&gt; Other staple narratives track the official Russian line:
Western sanctions as the EU &amp;ldquo;shooting itself in the foot,&amp;rdquo; and Serbia&amp;rsquo;s
inability to sanction Russia because &amp;ldquo;China and Russia are our only
friends.&amp;rdquo;&lt;sup id="fnref:46"&gt;&lt;a href="#fn:46" class="footnote-ref" role="doc-noteref"&gt;46&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;
&lt;h2 id="what-it-produces"&gt;What it produces&lt;/h2&gt;
&lt;p&gt;Influence operations are measured by their outcomes; four are observable
here.&lt;/p&gt;
&lt;figure&gt;
&lt;svg viewBox="0 0 640 470" role="img" aria-label="The four observable outcomes, each with the evidence it rests on" aria-describedby="fig-outcomes-desc" xmlns="http://www.w3.org/2000/svg"&gt;
&lt;desc id="fig-outcomes-desc"&gt;Four cards. Public perception: polling consistently names Russia and China as Serbia's primary benefactors, while the largest donor and investor by a wide margin is the EU; evidence, polling versus donor data. Elections: government-aligned and Russian-backed outlets cast pro-Russian politicians as champions of national interest against Western pressure; the direction is clear, the electoral weight is argued rather than measured. Policy: Serbia's sustained refusal to join EU sanctions and the Republika Srpska block on NATO; disinformation keeps these positions cheap for politicians to hold; evidence, the sanctions record. Stability and integration: Bosnia's accession stalled since 2024 and distrust slows enlargement, yet Montenegro still advances; friction, not vetoes; evidence, sixteen of thirty-three chapters closed while Bosnia's talks stall.&lt;/desc&gt;
&lt;text x="24" y="40" font-family="var(--font-mono)" font-size="11" letter-spacing="0.08em" fill="var(--ink-soft)"&gt;FOUR OUTCOMES - WHERE THE MACHINERY SHOWS UP&lt;/text&gt;
&lt;g&gt;
&lt;rect x="24" y="64" width="288" height="180" rx="6" fill="var(--field-raised)" stroke="var(--hairline-strong)"/&gt;&lt;rect x="25" y="240" width="286" height="3" fill="var(--teal)"/&gt;
&lt;rect x="328" y="64" width="288" height="180" rx="6" fill="var(--field-raised)" stroke="var(--hairline-strong)"/&gt;&lt;rect x="329" y="240" width="286" height="3" fill="var(--teal)"/&gt;
&lt;rect x="24" y="264" width="288" height="180" rx="6" fill="var(--field-raised)" stroke="var(--hairline-strong)"/&gt;&lt;rect x="25" y="440" width="286" height="3" fill="var(--teal)"/&gt;
&lt;rect x="328" y="264" width="288" height="180" rx="6" fill="var(--field-raised)" stroke="var(--hairline-strong)"/&gt;&lt;rect x="329" y="440" width="286" height="3" fill="var(--teal)"/&gt;
&lt;/g&gt;
&lt;g font-family="var(--font-mono)" font-size="12.5" letter-spacing="0.08em" fill="var(--ink)" text-anchor="middle"&gt;
&lt;text x="168" y="94"&gt;PUBLIC PERCEPTION&lt;/text&gt;
&lt;text x="472" y="94"&gt;ELECTIONS&lt;/text&gt;
&lt;text x="168" y="294"&gt;POLICY&lt;/text&gt;
&lt;text x="472" y="294"&gt;STABILITY &amp;amp; INTEGRATION&lt;/text&gt;
&lt;/g&gt;
&lt;g font-family="var(--font-body)" font-size="12.5" fill="var(--ink-soft)" text-anchor="middle"&gt;
&lt;text x="168" y="122"&gt;Polling consistently names Russia&lt;/text&gt;
&lt;text x="168" y="139"&gt;and China as Serbia's primary&lt;/text&gt;
&lt;text x="168" y="156"&gt;benefactors. The largest donor and&lt;/text&gt;
&lt;text x="168" y="173"&gt;investor, by a wide margin: the EU.&lt;/text&gt;
&lt;text x="472" y="122"&gt;Government-aligned and Russian-&lt;/text&gt;
&lt;text x="472" y="139"&gt;backed outlets cast pro-Russian&lt;/text&gt;
&lt;text x="472" y="156"&gt;politicians as champions of national&lt;/text&gt;
&lt;text x="472" y="173"&gt;interest against Western pressure.&lt;/text&gt;
&lt;text x="168" y="322"&gt;Serbia's sustained refusal to join EU&lt;/text&gt;
&lt;text x="168" y="339"&gt;sanctions; the RS block on NATO.&lt;/text&gt;
&lt;text x="168" y="356"&gt;Disinformation keeps these positions&lt;/text&gt;
&lt;text x="168" y="373"&gt;cheap for politicians to hold.&lt;/text&gt;
&lt;text x="472" y="322"&gt;Bosnia's accession stalled since&lt;/text&gt;
&lt;text x="472" y="339"&gt;2024; distrust of the EU and NATO&lt;/text&gt;
&lt;text x="472" y="356"&gt;slows enlargement. Montenegro still&lt;/text&gt;
&lt;text x="472" y="373"&gt;advances: friction, not vetoes.&lt;/text&gt;
&lt;/g&gt;
&lt;g font-family="var(--font-mono)" font-size="10.5" letter-spacing="0.06em" text-anchor="middle"&gt;
&lt;text x="168" y="218" fill="var(--teal-deep)"&gt;POLLING VS DONOR DATA&lt;/text&gt;
&lt;text x="472" y="218" fill="var(--amber-deep)"&gt;DIRECTION CLEAR · WEIGHT ARGUED&lt;/text&gt;
&lt;text x="168" y="418" fill="var(--teal-deep)"&gt;THE SANCTIONS RECORD&lt;/text&gt;
&lt;text x="472" y="418" fill="var(--teal-deep)"&gt;16/33 CHAPTERS · TALKS STALLED&lt;/text&gt;
&lt;/g&gt;
&lt;/svg&gt;
&lt;figcaption&gt;The four outcomes up close, with the evidence each rests on. Where the case is argued rather than measured, the label says so.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;h3 id="public-perception"&gt;Public perception&lt;/h3&gt;
&lt;p&gt;Despite the European Union being Serbia&amp;rsquo;s largest donor and investor by a
wide margin, polling consistently shows many Serbians believing Russia and
China are the country&amp;rsquo;s primary benefactors.&lt;sup id="fnref:47"&gt;&lt;a href="#fn:47" class="footnote-ref" role="doc-noteref"&gt;47&lt;/a&gt;&lt;/sup&gt; That gap between economic
reality and public belief is not an accident of ignorance; it is the
product of a media environment in which Russian-aligned framing dominates coverage
of international affairs, with the old civilizational narratives as the
amplifier.&lt;/p&gt;
&lt;h3 id="elections"&gt;Elections&lt;/h3&gt;
&lt;p&gt;In Montenegro, the political shift after 2020, from a traditionally
Western-leaning orientation toward pro-Serbian and pro-Russian leadership,
was prepared and accompanied by media narratives casting pro-Russian
politicians as defenders of traditional Montenegrin and Serbian Orthodox
values.&lt;sup id="fnref:48"&gt;&lt;a href="#fn:48" class="footnote-ref" role="doc-noteref"&gt;48&lt;/a&gt;&lt;/sup&gt; In Serbia, media monitoring shows government-aligned and
Russian-backed outlets presenting pro-Russian politicians as champions of
national interest against Western pressure.&lt;sup id="fnref:49"&gt;&lt;a href="#fn:49" class="footnote-ref" role="doc-noteref"&gt;49&lt;/a&gt;&lt;/sup&gt; The precise electoral
weight of that coverage cannot be isolated from the other advantages of
incumbency - this is an argued interpretation, not a measured effect - but
the direction of the pressure is not in doubt, and the pattern of politicians
who align with Russian positions benefiting from favorable coverage recurs
across both countries.&lt;/p&gt;
&lt;h3 id="policy"&gt;Policy&lt;/h3&gt;
&lt;p&gt;The clearest policy imprint is Serbia&amp;rsquo;s sustained refusal to join EU
sanctions against Russia, a position that isolates it among EU candidate
states and that the strong pro-Russian public sentiment - itself partly
manufactured - makes domestically rational.&lt;sup id="fnref:50"&gt;&lt;a href="#fn:50" class="footnote-ref" role="doc-noteref"&gt;50&lt;/a&gt;&lt;/sup&gt; In Republika Srpska, the
entity&amp;rsquo;s blocking stance on NATO echoes the Kremlin&amp;rsquo;s position and is
reinforced by the entity&amp;rsquo;s Russian-friendly media environment.&lt;sup id="fnref:51"&gt;&lt;a href="#fn:51" class="footnote-ref" role="doc-noteref"&gt;51&lt;/a&gt;&lt;/sup&gt; In both
cases the causality runs the same way: disinformation did not
create these policies, but it built and maintains the public opinion that
makes them cheap for politicians to hold.&lt;/p&gt;
&lt;h3 id="regional-stability-and-eu-integration"&gt;Regional stability and EU integration&lt;/h3&gt;
&lt;p&gt;The strategic effect is drag: sustained distrust toward the EU and NATO
slows enlargement, deepens internal divisions in multi-ethnic societies, and
gives non-EU actors room to maneuver.&lt;sup id="fnref:52"&gt;&lt;a href="#fn:52" class="footnote-ref" role="doc-noteref"&gt;52&lt;/a&gt;&lt;/sup&gt; Bosnia and Herzegovina
illustrates the cost: the EU decided in March 2024 to open accession
negotiations, but the process has since stalled, with no negotiating
framework adopted and no intergovernmental conference held. The Dodik crisis
consumed the political year, and the Commission&amp;rsquo;s 2025 report scored
Bosnia&amp;rsquo;s progress lowest in the Western Balkans.&lt;sup id="fnref:53"&gt;&lt;a href="#fn:53" class="footnote-ref" role="doc-noteref"&gt;53&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;
&lt;p&gt;Montenegro complicates the story. The same country whose governing
coalition includes openly pro-Russian parties has become the EU&amp;rsquo;s
fastest-moving candidate: sixteen of thirty-three negotiating chapters closed by
June 2026, with a declared target of concluding negotiations by the end of
2026 and joining in 2028.&lt;sup id="fnref:54"&gt;&lt;a href="#fn:54" class="footnote-ref" role="doc-noteref"&gt;54&lt;/a&gt;&lt;/sup&gt; Russian influence in Montenegro is real, and
it has not been sufficient to stop a determined accession process backed by
public opinion and EU-side momentum. Influence buys friction, not vetoes.&lt;/p&gt;
&lt;h3 id="republika-srpska-dodik-after-the-verdict"&gt;Republika Srpska: Dodik after the verdict&lt;/h3&gt;
&lt;p&gt;The starkest development since publication tests the thesis directly. In
February 2025, the Court of Bosnia and Herzegovina convicted
Milorad Dodik of defying the decisions of the international High
Representative, sentencing him to one year in prison, later commuted to a
fine, and banning him from the RS presidency for six years. The verdict was
confirmed on appeal in August 2025; the Central Election Commission revoked
his mandate; the Constitutional Court rejected his final domestic appeal in
November.&lt;sup id="fnref:55"&gt;&lt;a href="#fn:55" class="footnote-ref" role="doc-noteref"&gt;55&lt;/a&gt;&lt;/sup&gt; The crisis triggered another EUFOR reinforcement: roughly 400
additional troops in March 2025, bringing the force to about 1,500.&lt;sup id="fnref:56"&gt;&lt;a href="#fn:56" class="footnote-ref" role="doc-noteref"&gt;56&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;
&lt;p&gt;Then came the twist. In October 2025, the United States lifted its sanctions
on Dodik and dozens of associated persons and entities, following RS
de-escalation steps and lobbying directed at the new US administration. The
reversal undid nearly nine years of American policy toward him.&lt;sup id="fnref:57"&gt;&lt;a href="#fn:57" class="footnote-ref" role="doc-noteref"&gt;57&lt;/a&gt;&lt;/sup&gt; In the snap
election for his vacated seat, Dodik&amp;rsquo;s hand-picked candidate Siniša Karan
won narrowly, a result confirmed in a partial repeat vote in February
2026.&lt;sup id="fnref:58"&gt;&lt;a href="#fn:58" class="footnote-ref" role="doc-noteref"&gt;58&lt;/a&gt;&lt;/sup&gt; Dodik remains president of his party, SNSD, and, as Balkan
Insight put it, the new president is in office while &amp;ldquo;the old one&amp;rsquo;s still in
control.&amp;rdquo;&lt;sup id="fnref:59"&gt;&lt;a href="#fn:59" class="footnote-ref" role="doc-noteref"&gt;59&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;
&lt;p&gt;For Moscow&amp;rsquo;s purposes, the episode cuts both ways. Its most reliable client
in the region lost his office and his ability to stand in the October 2026
elections. But the network he built absorbed the blow, and the Western front
against him cracked. The influence infrastructure proved more durable than
the individual, which is what infrastructure is for.&lt;/p&gt;
&lt;h2 id="what-counters-it-and-what-only-appears-to"&gt;What counters it, and what only appears to&lt;/h2&gt;
&lt;p&gt;The counter-disinformation literature converges on two prescriptions:
regulatory frameworks and media literacy. Both matter, and neither works
the way the standard recommendations imply; this region shows why.&lt;/p&gt;
&lt;h3 id="regulation-and-its-jurisdictional-limits"&gt;Regulation, and its jurisdictional limits&lt;/h3&gt;
&lt;p&gt;The EU&amp;rsquo;s own analysis is the right starting point. A study commissioned by
the European Parliament&amp;rsquo;s foreign-affairs committee concluded that
disinformation in the Western Balkans is not the root cause but a symptom of
poor governance, geopolitical exposure, and deep internal enmities, and that
the effective policy responses lie less in the media and security domains
than in governance, public engagement, and diplomacy.&lt;sup id="fnref:60"&gt;&lt;a href="#fn:60" class="footnote-ref" role="doc-noteref"&gt;60&lt;/a&gt;&lt;/sup&gt; The EUvsDisinfo
initiative&amp;rsquo;s regional work reaches the same structural conclusion.&lt;sup id="fnref:61"&gt;&lt;a href="#fn:61" class="footnote-ref" role="doc-noteref"&gt;61&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;
&lt;p&gt;The EU&amp;rsquo;s regulatory instruments have hardened since early 2024. The 2018 Code of Practice on Disinformation and its 2022
Strengthened successor&lt;sup id="fnref:62"&gt;&lt;a href="#fn:62" class="footnote-ref" role="doc-noteref"&gt;62&lt;/a&gt;&lt;/sup&gt; were voluntary self-regulation, and their
assessed weaknesses (undefined key concepts, missing performance indicators)
reflected that. In February 2025 the Code was formally integrated into the
Digital Services Act framework as the Code of Conduct on Disinformation,
effective 1 July 2025: for the largest platforms, adherence to its
commitments on demonetization, political advertising, and fact-checking now
counts as an auditable risk-mitigation benchmark rather than a
promise.&lt;sup id="fnref:63"&gt;&lt;a href="#fn:63" class="footnote-ref" role="doc-noteref"&gt;63&lt;/a&gt;&lt;/sup&gt; That is a real improvement, with two limits. X,
one of the region&amp;rsquo;s most consequential platforms for viral disinformation,
withdrew from the Code in 2023. And the DSA binds platforms, not
governments: none of it reaches RTRS&amp;rsquo;s relationship with the RS government,
Serbia&amp;rsquo;s tabloid ecosystem, or a cable package carrying RT Balkan.&lt;/p&gt;
&lt;p&gt;Behind that limit is the real problem with regulatory prescriptions for
this region: &lt;strong&gt;regulation assumes a good-faith regulator.&lt;/strong&gt; In Serbia and Republika Srpska, the state is not a neutral
referee facing disinformation from outside; the governing apparatus is
itself the largest amplifier of the narratives in question, funds the loyal
outlets, and harasses the critical ones. Recommending that such governments
implement EU-style disinformation frameworks is recommending that the
operator of the machine regulate the machine. Adaptation of the EU acquis
through the accession process&lt;sup id="fnref:64"&gt;&lt;a href="#fn:64" class="footnote-ref" role="doc-noteref"&gt;64&lt;/a&gt;&lt;/sup&gt; remains the one regulatory channel with
real force: it attaches conditions to something these governments want
instead of relying on their goodwill.&lt;/p&gt;
&lt;h3 id="media-literacy-and-its-trust-prerequisite"&gt;Media literacy, and its trust prerequisite&lt;/h3&gt;
&lt;p&gt;Finland is the standard citation, and deservedly: media education across all
levels of schooling, broad institutional participation, and a top ranking on
the European Media Literacy Index.&lt;sup id="fnref:65"&gt;&lt;a href="#fn:65" class="footnote-ref" role="doc-noteref"&gt;65&lt;/a&gt;&lt;/sup&gt; But Finland&amp;rsquo;s model rests on a
prerequisite the citation usually omits: high public trust in institutions,
schools, and independent public media. Media literacy education works when
the school and the public broadcaster are themselves trusted. In societies where institutional trust is low and the public
broadcaster is a party instrument, &amp;ldquo;critical thinking about media&amp;rdquo; can just
as easily turn into generalized cynicism: distrust of everything, which
serves the disinformer fine. Adapting Finnish-style programs to the Balkans
is therefore a sequencing problem, not a translation problem.
Partnership-driven programs through schools, NGOs, and communities are worth
building,&lt;sup id="fnref:66"&gt;&lt;a href="#fn:66" class="footnote-ref" role="doc-noteref"&gt;66&lt;/a&gt;&lt;/sup&gt; but they are a decade-scale investment that depends on the
governance improvements the EU study identified, not a substitute for them.&lt;/p&gt;
&lt;h3 id="what-that-leaves"&gt;What that leaves&lt;/h3&gt;
&lt;p&gt;Stripped of the boilerplate, the levers that plausibly move outcomes in this
region are: EU accession conditionality applied without the appeasement
discount; sustained funding and protection for the independent local
journalism that contests these narratives; transparency of media
ownership, where AidData&amp;rsquo;s mapping shows the entry points; and the
unglamorous work of governance reform that removes the grievances
disinformation feeds on. None of this is quick, and the
interested parties will resist every step: Moscow above all, but also the
local incumbents whose power the ambiguity sustains.&lt;/p&gt;
&lt;h2 id="where-this-leaves-the-region"&gt;Where this leaves the region&lt;/h2&gt;
&lt;p&gt;Viewed from mid-2026, the picture has moved a long way from the one we
described in early 2024, and the direction of the movement is itself
evidence.&lt;/p&gt;
&lt;figure&gt;
&lt;svg viewBox="0 0 640 648" role="img" aria-label="Two years of movement since the original research, on two tracks" aria-describedby="fig-timeline-desc" xmlns="http://www.w3.org/2000/svg"&gt;
&lt;desc id="fig-timeline-desc"&gt;Vertical timeline from November 2024 to June 2026 with a Bosnia and Republika Srpska track on the left and a Serbia track on the right. November 2024: the Novi Sad canopy collapse kills 16 and the protest movement begins. December 2024: RT Balkan starts 24-hour TV from Belgrade. February 2025: Dodik convicted and banned from the RS presidency. March 2025: EUFOR reinforced to about 1,500 troops. May 2025: Vučić attends Moscow's Victory Day parade. June to November 2025: ammunition exports halted, then offered to Europe. October 2025: the United States lifts sanctions on Dodik; NIS sanctions take effect and the gas arrangement goes short-term, still in motion. February 2026: Karan confirmed in the repeat vote. June 2026: Vučić announces his resignation and early elections, still in motion. Meanwhile Montenegro closes 16 of 33 EU chapters by June 2026.&lt;/desc&gt;
&lt;g font-family="var(--font-mono)" font-size="11.5" letter-spacing="0.08em" fill="var(--ink)" text-anchor="middle"&gt;
&lt;text x="160" y="40"&gt;BOSNIA &amp;amp; REPUBLIKA SRPSKA&lt;/text&gt;
&lt;text x="480" y="40"&gt;SERBIA&lt;/text&gt;
&lt;/g&gt;
&lt;line x1="320" y1="58" x2="320" y2="552" stroke="var(--hairline-strong)" stroke-width="1"/&gt;
&lt;g stroke="var(--hairline-strong)" stroke-width="1"&gt;
&lt;line x1="320" y1="84" x2="340" y2="84"/&gt;&lt;line x1="320" y1="134" x2="340" y2="134"/&gt;
&lt;line x1="300" y1="184" x2="320" y2="184"/&gt;&lt;line x1="300" y1="234" x2="320" y2="234"/&gt;
&lt;line x1="320" y1="284" x2="340" y2="284"/&gt;&lt;line x1="320" y1="334" x2="340" y2="334"/&gt;
&lt;line x1="300" y1="384" x2="320" y2="384"/&gt;&lt;line x1="320" y1="434" x2="340" y2="434"/&gt;
&lt;line x1="300" y1="484" x2="320" y2="484"/&gt;&lt;line x1="320" y1="534" x2="340" y2="534"/&gt;
&lt;/g&gt;
&lt;g&gt;
&lt;circle cx="320" cy="84" r="4.5" fill="var(--teal-deep)"/&gt;
&lt;circle cx="320" cy="134" r="4.5" fill="var(--teal-deep)"/&gt;
&lt;circle cx="320" cy="184" r="4.5" fill="var(--teal-deep)"/&gt;
&lt;circle cx="320" cy="234" r="4.5" fill="var(--teal-deep)"/&gt;
&lt;circle cx="320" cy="284" r="4.5" fill="var(--teal-deep)"/&gt;
&lt;circle cx="320" cy="334" r="4.5" fill="var(--teal-deep)"/&gt;
&lt;circle cx="320" cy="384" r="4.5" fill="var(--teal-deep)"/&gt;
&lt;circle cx="320" cy="434" r="4.5" fill="var(--amber)" stroke="var(--amber-deep)" stroke-width="1"/&gt;
&lt;circle cx="320" cy="484" r="4.5" fill="var(--teal-deep)"/&gt;
&lt;circle cx="320" cy="534" r="4.5" fill="var(--amber)" stroke="var(--amber-deep)" stroke-width="1"/&gt;
&lt;/g&gt;
&lt;g text-anchor="start"&gt;
&lt;text x="348" y="88" font-family="var(--font-mono)" font-size="11" fill="var(--teal-deep)"&gt;NOV 2024&lt;/text&gt;
&lt;text x="348" y="106" font-family="var(--font-body)" font-size="13" fill="var(--ink)"&gt;Novi Sad canopy collapse kills 16;&lt;/text&gt;
&lt;text x="348" y="122" font-family="var(--font-body)" font-size="13" fill="var(--ink)"&gt;the protest movement begins&lt;/text&gt;
&lt;text x="348" y="138" font-family="var(--font-mono)" font-size="11" fill="var(--teal-deep)"&gt;DEC 2024&lt;/text&gt;
&lt;text x="348" y="156" font-family="var(--font-body)" font-size="13" fill="var(--ink)"&gt;RT Balkan starts 24-hour TV&lt;/text&gt;
&lt;text x="348" y="172" font-family="var(--font-body)" font-size="13" fill="var(--ink)"&gt;from Belgrade&lt;/text&gt;
&lt;text x="348" y="288" font-family="var(--font-mono)" font-size="11" fill="var(--teal-deep)"&gt;MAY 2025&lt;/text&gt;
&lt;text x="348" y="306" font-family="var(--font-body)" font-size="13" fill="var(--ink)"&gt;Vučić attends Moscow's&lt;/text&gt;
&lt;text x="348" y="322" font-family="var(--font-body)" font-size="13" fill="var(--ink)"&gt;Victory Day parade&lt;/text&gt;
&lt;text x="348" y="338" font-family="var(--font-mono)" font-size="11" fill="var(--teal-deep)"&gt;JUN–NOV 2025&lt;/text&gt;
&lt;text x="348" y="356" font-family="var(--font-body)" font-size="13" fill="var(--ink)"&gt;Ammunition exports halted,&lt;/text&gt;
&lt;text x="348" y="372" font-family="var(--font-body)" font-size="13" fill="var(--ink)"&gt;then offered to Europe&lt;/text&gt;
&lt;text x="348" y="438" font-family="var(--font-mono)" font-size="11" fill="var(--amber-deep)"&gt;OCT 2025&lt;/text&gt;
&lt;text x="348" y="456" font-family="var(--font-body)" font-size="13" fill="var(--ink)"&gt;NIS sanctions bite;&lt;/text&gt;
&lt;text x="348" y="472" font-family="var(--font-body)" font-size="13" fill="var(--ink)"&gt;the gas deal goes short-term&lt;/text&gt;
&lt;text x="348" y="538" font-family="var(--font-mono)" font-size="11" fill="var(--amber-deep)"&gt;27 JUN 2026&lt;/text&gt;
&lt;text x="348" y="556" font-family="var(--font-body)" font-size="13" fill="var(--ink)"&gt;Vučić announces resignation&lt;/text&gt;
&lt;text x="348" y="572" font-family="var(--font-body)" font-size="13" fill="var(--ink)"&gt;and early elections&lt;/text&gt;
&lt;/g&gt;
&lt;g text-anchor="end"&gt;
&lt;text x="292" y="188" font-family="var(--font-mono)" font-size="11" fill="var(--teal-deep)"&gt;FEB 2025&lt;/text&gt;
&lt;text x="292" y="206" font-family="var(--font-body)" font-size="13" fill="var(--ink)"&gt;Dodik convicted and banned&lt;/text&gt;
&lt;text x="292" y="222" font-family="var(--font-body)" font-size="13" fill="var(--ink)"&gt;from the RS presidency&lt;/text&gt;
&lt;text x="292" y="238" font-family="var(--font-mono)" font-size="11" fill="var(--teal-deep)"&gt;MAR 2025&lt;/text&gt;
&lt;text x="292" y="256" font-family="var(--font-body)" font-size="13" fill="var(--ink)"&gt;EUFOR reinforced to&lt;/text&gt;
&lt;text x="292" y="272" font-family="var(--font-body)" font-size="13" fill="var(--ink)"&gt;about 1,500 troops&lt;/text&gt;
&lt;text x="292" y="388" font-family="var(--font-mono)" font-size="11" fill="var(--teal-deep)"&gt;OCT 2025&lt;/text&gt;
&lt;text x="292" y="406" font-family="var(--font-body)" font-size="13" fill="var(--ink)"&gt;United States lifts&lt;/text&gt;
&lt;text x="292" y="422" font-family="var(--font-body)" font-size="13" fill="var(--ink)"&gt;sanctions on Dodik&lt;/text&gt;
&lt;text x="292" y="488" font-family="var(--font-mono)" font-size="11" fill="var(--teal-deep)"&gt;FEB 2026&lt;/text&gt;
&lt;text x="292" y="506" font-family="var(--font-body)" font-size="13" fill="var(--ink)"&gt;Karan confirmed in&lt;/text&gt;
&lt;text x="292" y="522" font-family="var(--font-body)" font-size="13" fill="var(--ink)"&gt;the repeat vote&lt;/text&gt;
&lt;/g&gt;
&lt;text x="320" y="600" font-family="var(--font-mono)" font-size="10.5" letter-spacing="0.06em" fill="var(--ink-soft)" text-anchor="middle"&gt;MEANWHILE: MONTENEGRO CLOSES 16 OF 33 EU CHAPTERS BY JUNE 2026&lt;/text&gt;
&lt;g&gt;
&lt;circle cx="196" cy="624" r="4.5" fill="var(--teal-deep)"/&gt;
&lt;text x="207" y="628" font-family="var(--font-mono)" font-size="10.5" fill="var(--ink-soft)"&gt;settled&lt;/text&gt;
&lt;circle cx="286" cy="624" r="4.5" fill="var(--amber)" stroke="var(--amber-deep)" stroke-width="1"/&gt;
&lt;text x="297" y="628" font-family="var(--font-mono)" font-size="10.5" fill="var(--ink-soft)"&gt;still in motion, July 2026&lt;/text&gt;
&lt;/g&gt;
&lt;/svg&gt;
&lt;figcaption&gt;Two years of movement since the original research, on two tracks. Amber marks what is still in motion as of this edition.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;Russia&amp;rsquo;s investment in the Western Balkans has not purchased control. Its
main client is banned from office, reduced to governing through a proxy,
and dependent on an American policy reversal for relief. Serbia&amp;rsquo;s balancing
president announced his own exit under pressure from a domestic
accountability movement that no foreign narrative created or could redirect.
Montenegro is moving fast toward EU membership with pro-Russian parties inside
its governing coalition. Influence, again, buys friction rather than vetoes.&lt;/p&gt;
&lt;p&gt;But friction was always the product. The operation costs little, lasts,
and speaks the region&amp;rsquo;s own language; it lives inside local media and
local politics rather than arriving from outside. It has no victory
condition. What it needs is a region whose European future stays contested,
whose societies keep distrusting their institutions and each other, and
where a crisis is always on hand when Moscow wants one. The returns compound
quietly, in years of delayed enlargement, in elections fought over identity
instead of governance, in young people who emigrate because the ambiguity
offered nothing worth staying for.&lt;/p&gt;
&lt;p&gt;The conclusion we reached in 2024 stands, sharpened: treating
disinformation as the disease mistakes the symptom for the cause. The
disease is the combination of unresolved governance and elites for whom
ambiguity is a business model. Moscow supplies the narratives; the demand
side is local. Any serious Western strategy has to work both sides of that
market. The two years since publication suggest the region&amp;rsquo;s own societies,
from Belgrade&amp;rsquo;s streets to Podgorica&amp;rsquo;s negotiating chapters, are currently
doing more of that work than the strategies written for them.&lt;/p&gt;
&lt;h2 id="about-this-research"&gt;About this research&lt;/h2&gt;
&lt;p&gt;This piece is the authors&amp;rsquo; revised and updated edition of research first
published, under peer review, as: Vibor Cipan and David Kirichenko,
&amp;ldquo;Russian Influence and Disinformation Operations in the Balkans,&amp;rdquo;
&lt;a href="https://gssr.georgetown.edu/the-review/gssr-volume-11-issue-2/" rel="nofollow noreferrer noopener"&gt;&lt;em&gt;Georgetown Security Studies Review&lt;/em&gt;, Volume 11, Issue 2&lt;/a&gt;
(February 2024), pp. 65–85; the original is archived in
&lt;a href="https://repository.digital.georgetown.edu/handle/10822/1087169" rel="nofollow noreferrer noopener"&gt;DigitalGeorgetown&lt;/a&gt;.
Vibor Cipan is the lead author. David Kirichenko is a researcher on Eastern
Europe whose analysis appears in publications including the Center for
European Policy Analysis, the Atlantic Council, and The Hill.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;What changed in this edition.&lt;/strong&gt; The argument, structure, and evidence
of the original are preserved; the prose has been rewritten for this
publication. Factual updates, each verified against primary reporting in
July 2026: Dodik&amp;rsquo;s conviction, removal from office, and replacement by his
hand-picked successor Siniša Karan, alongside the US sanctions reversal;
RT Balkan&amp;rsquo;s television launch; Vulin&amp;rsquo;s exit from government;
corrected figures for the Russian émigré population in Serbia; Serbia&amp;rsquo;s
2025–26 balancing record (Victory Day parade, ammunition exports, NIS
sanctions) and the protest movement through Vučić&amp;rsquo;s June 2026 resignation
announcement; Montenegro&amp;rsquo;s accession acceleration; the EUFOR reinforcement
of March 2025; and the EU Code of Practice&amp;rsquo;s conversion into the DSA Code
of Conduct. The assessment of counter-disinformation policy has been
substantially rewritten; its conclusions are the authors&amp;rsquo; own.&lt;/p&gt;
&lt;div class="footnotes" role="doc-endnotes"&gt;
&lt;hr&gt;
&lt;ol&gt;
&lt;li id="fn:1"&gt;
&lt;p&gt;&lt;a href="https://www.euronews.com/2023/01/09/night-wolves-and-praise-for-putin-mark-milorad-dodiks-unconstitutional-fete" rel="nofollow noreferrer noopener"&gt;&amp;ldquo;Night Wolves and Praise for Putin Mark Milorad Dodik&amp;rsquo;s Unconstitutional Fête,&amp;quot;&lt;/a&gt; Euronews, January 9, 2023; &lt;a href="https://thegeopost.com/en/factchecking-eng/russian-night-wolveson-parade-in-east-sarajevo/" rel="nofollow noreferrer noopener"&gt;&amp;ldquo;Russian &amp;lsquo;Night Wolves&amp;rsquo; on Parade in East Sarajevo,&amp;quot;&lt;/a&gt; The Geopost, January 10, 2023; &lt;a href="https://n1info.ba/english/news/a250409-night-wolves-arrival-stirs-up-a-frenzy/" rel="nofollow noreferrer noopener"&gt;&amp;ldquo;Night Wolves Arrival Stirs up a Frenzy,&amp;quot;&lt;/a&gt; N1, March 19, 2018. US sanctions on the Night Wolves: US Department of the Treasury, December 2014 designations relating to Crimea.&amp;#160;&lt;a href="#fnref:1" class="footnote-backref" role="doc-backlink"&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id="fn:2"&gt;
&lt;p&gt;Bojinović Fenko, Ana, Soeren Keil, and Zlatko Šabič, &lt;a href="https://doi.org/10.1080/17502977.2022.2162674" rel="nofollow noreferrer noopener"&gt;&amp;ldquo;Europeans from the Start? Slovenia and Croatia Between State-building, National Identity and the European Union,&amp;quot;&lt;/a&gt; &lt;em&gt;Journal of Intervention and Statebuilding&lt;/em&gt; 17, no. 2 (2023): 136–155.&amp;#160;&lt;a href="#fnref:2" class="footnote-backref" role="doc-backlink"&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id="fn:3"&gt;
&lt;p&gt;Morozova, Natalya M., et al., &lt;a href="https://doi.org/10.15405/epsbs.2022.03.81" rel="nofollow noreferrer noopener"&gt;&amp;ldquo;Serbian Orthodox Church and Serbian National Identity,&amp;quot;&lt;/a&gt; in &lt;em&gt;Freedom and Responsibility in Pivotal Times&lt;/em&gt;, European Proceedings of Social and Behavioural Sciences, Vol. 125 (2022): 675–683.&amp;#160;&lt;a href="#fnref:3" class="footnote-backref" role="doc-backlink"&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id="fn:4"&gt;
&lt;p&gt;Pleština, Dijana, &lt;em&gt;Regional Development in Communist Yugoslavia: Success, Failure, and Consequences&lt;/em&gt; (Routledge, 2019), and standard histories of the Ottoman and Austro-Hungarian periods in the region.&amp;#160;&lt;a href="#fnref:4" class="footnote-backref" role="doc-backlink"&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id="fn:5"&gt;
&lt;p&gt;Pleština, &lt;em&gt;Regional Development in Communist Yugoslavia&lt;/em&gt;.&amp;#160;&lt;a href="#fnref:5" class="footnote-backref" role="doc-backlink"&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id="fn:6"&gt;
&lt;p&gt;Niebuhr, Robert, &amp;ldquo;Death of the Yugoslav People&amp;rsquo;s Army and the Wars of Succession,&amp;rdquo; &lt;em&gt;Polemos&lt;/em&gt; 7, nos. 1–2 (2004): 91–106; United States Central Intelligence Agency, Office of Russian and European Analysis, &lt;em&gt;Balkan Battlegrounds: A Military History of the Yugoslav Conflict, 1990–1995&lt;/em&gt;, Vol. 1 (CIA, 2002).&amp;#160;&lt;a href="#fnref:6" class="footnote-backref" role="doc-backlink"&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id="fn:7"&gt;
&lt;p&gt;&lt;em&gt;Balkan Battlegrounds&lt;/em&gt;, Vol. 1.&amp;#160;&lt;a href="#fnref:7" class="footnote-backref" role="doc-backlink"&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id="fn:8"&gt;
&lt;p&gt;Papasotiriou, H., &lt;a href="https://doi.org/10.1080/714004041" rel="nofollow noreferrer noopener"&gt;&amp;ldquo;The Kosovo War: Kosovar Insurrection, Serbian Retribution and NATO Intervention,&amp;quot;&lt;/a&gt; &lt;em&gt;Journal of Strategic Studies&lt;/em&gt; 25, no. 1 (2002): 39–62.&amp;#160;&lt;a href="#fnref:8" class="footnote-backref" role="doc-backlink"&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id="fn:9"&gt;
&lt;p&gt;McBride, James, &lt;a href="https://www.cfr.org/backgrounder/russias-influence-balkans" rel="nofollow noreferrer noopener"&gt;&amp;ldquo;Russia&amp;rsquo;s Influence in the Balkans,&amp;quot;&lt;/a&gt; Council on Foreign Relations, December 2, 2022; Cuppuleri, Adriana, and Liridona Veliu Ashiku, &lt;a href="https://doi.org/10.1017/NPS.2023.25" rel="nofollow noreferrer noopener"&gt;&amp;ldquo;The Multidimensional Soft Power of Illiberal States: Russia in the Western Balkans,&amp;quot;&lt;/a&gt; &lt;em&gt;Nationalities Papers&lt;/em&gt;, May 2, 2023, 1–21.&amp;#160;&lt;a href="#fnref:9" class="footnote-backref" role="doc-backlink"&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id="fn:10"&gt;
&lt;p&gt;Stradner, Ivana, &lt;a href="https://www.fdd.org/analysis/2023/06/04/how-putin-isusing-chaos-in-the-balkans-to-distract-the-west/" rel="nofollow noreferrer noopener"&gt;&amp;ldquo;How Putin Is Using Chaos in the Balkans to Distract the West,&amp;quot;&lt;/a&gt; Foundation for Defense of Democracies, June 4, 2023.&amp;#160;&lt;a href="#fnref:10" class="footnote-backref" role="doc-backlink"&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id="fn:11"&gt;
&lt;p&gt;Fridman, Ofer, &lt;a href="https://ndupress.ndu.edu/Media/News/News-Article-View/Article/1981229/on-the-gerasimovdoctrine-why-the-west-fails-to-beat-russia-to-the-punch/" rel="nofollow noreferrer noopener"&gt;&amp;ldquo;On the &amp;lsquo;Gerasimov Doctrine&amp;rsquo;: Why the West Fails to Beat Russia to the Punch,&amp;quot;&lt;/a&gt; &lt;em&gt;PRISM&lt;/em&gt; 8, no. 2, National Defense University Press, October 4, 2019; K. McKew, Molly, &lt;a href="https://www.politico.com/magazine/story/2017/09/05/gerasimov-doctrine-russia-foreign-policy-215538/" rel="nofollow noreferrer noopener"&gt;&amp;ldquo;The Gerasimov Doctrine,&amp;quot;&lt;/a&gt; Politico Magazine, October 1, 2017.&amp;#160;&lt;a href="#fnref:11" class="footnote-backref" role="doc-backlink"&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id="fn:12"&gt;
&lt;p&gt;Fridman, &amp;ldquo;On the &amp;lsquo;Gerasimov Doctrine.&amp;rsquo;&amp;rdquo;&amp;#160;&lt;a href="#fnref:12" class="footnote-backref" role="doc-backlink"&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id="fn:13"&gt;
&lt;p&gt;Stanovaya, Tatiana, &lt;a href="https://www.foreignaffairs.com/russian-federation/vladimir-putin-agechaos" rel="nofollow noreferrer noopener"&gt;&amp;ldquo;Putin&amp;rsquo;s Age of Chaos: The Dangers of Russian Disorder,&amp;quot;&lt;/a&gt; &lt;em&gt;Foreign Affairs&lt;/em&gt;, October 1, 2023.&amp;#160;&lt;a href="#fnref:13" class="footnote-backref" role="doc-backlink"&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id="fn:14"&gt;
&lt;p&gt;Shakhanova, Gaziza G., and Petr Kratochvíl, &lt;a href="https://doi.org/10.1017/S1755048320000620" rel="nofollow noreferrer noopener"&gt;&amp;ldquo;The Patriotic Turn in Russia: Political Convergence of the Russian Orthodox Church and the State?&amp;quot;&lt;/a&gt; &lt;em&gt;Politics and Religion&lt;/em&gt; 15, no. 1 (December 2020): 1–28; Smith, Anne, &lt;a href="https://newsbase.com/story/russian-soft-influence-in-serbia-fuelsmedia-war-against-ukraine-234140" rel="nofollow noreferrer noopener"&gt;&amp;ldquo;Russian &amp;lsquo;Soft Influence&amp;rsquo; in Serbia Fuels Media War against Ukraine,&amp;quot;&lt;/a&gt; Newsbase, February 3, 2022.&amp;#160;&lt;a href="#fnref:14" class="footnote-backref" role="doc-backlink"&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id="fn:15"&gt;
&lt;p&gt;Chiappa, Claudia, &lt;a href="https://www.politico.eu/article/serbianpresident-aleksandar-vucic-turns-to-russia-amid-rising-tensions-with-kosovo/" rel="nofollow noreferrer noopener"&gt;&amp;ldquo;Serbian President Turns to Russia amid Rising Tensions with Kosovo after Monastery Gun Battle,&amp;quot;&lt;/a&gt; Politico, September 25, 2023.&amp;#160;&lt;a href="#fnref:15" class="footnote-backref" role="doc-backlink"&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id="fn:16"&gt;
&lt;p&gt;&lt;a href="https://apnews.com/article/russia-ukraine-putin-politics-government-milorad-dodik7edc18d0133bbde4c5b84879c0dbe724" rel="nofollow noreferrer noopener"&gt;&amp;ldquo;Bosnian Serbs Award Putin with Medal of Honor,&amp;quot;&lt;/a&gt; AP News, January 8, 2023; &lt;a href="https://www.aljazeera.com/news/2023/1/9/bosnian-serbs-award-putin-with-medal-of-honour-2" rel="nofollow noreferrer noopener"&gt;&amp;ldquo;Bosnian Serbs award Putin with medal of honour,&amp;quot;&lt;/a&gt; Al Jazeera, January 9, 2023.&amp;#160;&lt;a href="#fnref:16" class="footnote-backref" role="doc-backlink"&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id="fn:17"&gt;
&lt;p&gt;US Department of the Treasury, &lt;a href="https://home.treasury.gov/news/press-releases/jy0549" rel="nofollow noreferrer noopener"&gt;designation of Milorad Dodik under E.O. 14033,&lt;/a&gt; January 5, 2022 (first designation January 2017); &lt;a href="https://balkaninsight.com/2022/04/11/criticising-russia-uk-sanctions-bosnian-serb-leaders/" rel="nofollow noreferrer noopener"&gt;&amp;ldquo;UK Sanctions Bosnian Serb Leaders,&amp;quot;&lt;/a&gt; Balkan Insight, April 11, 2022. On the October 2025 lifting of US sanctions, see below.&amp;#160;&lt;a href="#fnref:17" class="footnote-backref" role="doc-backlink"&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id="fn:18"&gt;
&lt;p&gt;&lt;a href="https://apnews.com/article/serbia-intelligencechief-resigns-aleksandar-vulin-russia-9d3ebdffdb75ee17bd452b45ed69dc55" rel="nofollow noreferrer noopener"&gt;&amp;ldquo;Serbia&amp;rsquo;s pro-Russia Intelligence Chief Sanctioned by the US Has Resigned Citing Western Pressure,&amp;quot;&lt;/a&gt; AP News, November 3, 2023.&amp;#160;&lt;a href="#fnref:18" class="footnote-backref" role="doc-backlink"&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id="fn:19"&gt;
&lt;p&gt;&lt;a href="https://apnews.com/article/russia-ukraine-united-nations-generalassembly-foreign-policy-moscow-serbia-c63b0ca1271dd5b2ee3008bdcbb7de23" rel="nofollow noreferrer noopener"&gt;&amp;ldquo;EU Candidate Serbia and Russia Sign Foreign Policy Agreement,&amp;quot;&lt;/a&gt; AP News, September 24, 2022.&amp;#160;&lt;a href="#fnref:19" class="footnote-backref" role="doc-backlink"&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id="fn:20"&gt;
&lt;p&gt;Bajrović, Reuf, Vesko Garčević, and Richard Kraemer, &lt;a href="https://www.fpri.org/wp-content/uploads/2018/07/kraemer-rfp5.pdf" rel="nofollow noreferrer noopener"&gt;&amp;ldquo;Russia&amp;rsquo;s Strategy of Destabilization in Montenegro: Hanging by a Thread,&amp;quot;&lt;/a&gt; Russian Foreign Policy Papers, Foreign Policy Research Institute, June 2018.&amp;#160;&lt;a href="#fnref:20" class="footnote-backref" role="doc-backlink"&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id="fn:21"&gt;
&lt;p&gt;&lt;a href="https://www.rferl.org/a/montenegro-mandic-pro-putin-speaker/32661765.html" rel="nofollow noreferrer noopener"&gt;&amp;ldquo;Pro-Russian Politician Elected Speaker as Montenegro Gets New Government,&amp;quot;&lt;/a&gt; RFE/RL, October 31, 2023; Chastand, Jean-Baptiste, &lt;a href="https://www.lemonde.fr/en/international/article/2023/11/02/unlikely-pro-russian-and-pro-eucoalition-forms-in-montenegro_6220917_4.html" rel="nofollow noreferrer noopener"&gt;&amp;ldquo;Unlikely Pro-Russian and pro-EU Coalition Forms in Montenegro,&amp;quot;&lt;/a&gt; Le Monde, November 2, 2023. The coalition deepened in July 2024, when a cabinet reshuffle brought the pro-Serbian bloc directly into the executive: &lt;a href="https://europeanwesternbalkans.com/2024/07/24/spajic-reshuffles-cabinet-to-include-pro-serbian-coalition-and-bosniak-party/" rel="nofollow noreferrer noopener"&gt;&amp;ldquo;Spajić Reshuffles Cabinet to Include Pro-Serbian Coalition and Bosniak Party,&amp;quot;&lt;/a&gt; European Western Balkans, July 24, 2024.&amp;#160;&lt;a href="#fnref:21" class="footnote-backref" role="doc-backlink"&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id="fn:22"&gt;
&lt;p&gt;A. Wemer, David, &lt;a href="https://www.atlanticcouncil.org/blogs/newatlanticist/the-western-balkans-a-growing-disinformation-battleground" rel="nofollow noreferrer noopener"&gt;&amp;ldquo;The Western Balkans: A Growing Disinformation Battleground,&amp;quot;&lt;/a&gt; Atlantic Council, March 7, 2019; Panasytska, Oleksandra, &lt;a href="https://voxukraine.org/en/propaganda-for-the-younger-slavic-brother-in-the-balkans-howrussia-promotes-a-disinformation-campaign-in-serbia/" rel="nofollow noreferrer noopener"&gt;&amp;ldquo;Propaganda for the &amp;lsquo;Younger Slavic Brother&amp;rsquo; in the Balkans: How Russia Promotes a Disinformation Campaign in Serbia,&amp;quot;&lt;/a&gt; Vox Ukraine, December 23, 2022.&amp;#160;&lt;a href="#fnref:22" class="footnote-backref" role="doc-backlink"&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id="fn:23"&gt;
&lt;p&gt;&lt;a href="https://www.freiheit.org/publikation/final-report-media-monitoring" rel="nofollow noreferrer noopener"&gt;&amp;ldquo;Final Report on Media Monitoring,&amp;quot;&lt;/a&gt; Friedrich Naumann Foundation for Freedom, Western Balkan, June 2022.&amp;#160;&lt;a href="#fnref:23" class="footnote-backref" role="doc-backlink"&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id="fn:24"&gt;
&lt;p&gt;Yun Chee, Foo, &lt;a href="https://www.reuters.com/world/europe/eu-bans-rt-sputnik-banned-over-ukraine-disinformation2022-03-02/" rel="nofollow noreferrer noopener"&gt;&amp;ldquo;EU Bans RT, Sputnik over Ukraine Disinformation,&amp;quot;&lt;/a&gt; Reuters, March 2, 2022.&amp;#160;&lt;a href="#fnref:24" class="footnote-backref" role="doc-backlink"&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id="fn:25"&gt;
&lt;p&gt;HINA, &lt;a href="https://n1info.hr/english/news/russia-today-launches-website-in-serbiandefying-eu-sanctions/" rel="nofollow noreferrer noopener"&gt;&amp;ldquo;Russia Today Launches Website in Serbian, Defying EU Sanctions,&amp;quot;&lt;/a&gt; N1, November 15, 2022; &lt;a href="https://www.themoscowtimes.com/2022/11/15/rt-launches-local-hub-in-serbia-a79380" rel="nofollow noreferrer noopener"&gt;&amp;ldquo;RT Launches Local Hub in Serbia,&amp;quot;&lt;/a&gt; The Moscow Times, November 15, 2022.&amp;#160;&lt;a href="#fnref:25" class="footnote-backref" role="doc-backlink"&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id="fn:26"&gt;
&lt;p&gt;&lt;a href="https://thegeopost.com/en/lajme/rt-balkan-nis-nje-kanal-te-ri-propagandistik-te-kremlinit-ne-ballkan/" rel="nofollow noreferrer noopener"&gt;&amp;ldquo;RT Balkan Launches a New Kremlin Propaganda Channel in the Balkans,&amp;quot;&lt;/a&gt; The Geopost, December 28, 2024; Reporters Without Borders, &lt;a href="https://rsf.org/en/russia-serbia-how-rt-spreads-kremlin-s-propaganda-balkans-despite-eu-sanctions" rel="nofollow noreferrer noopener"&gt;&amp;ldquo;Russia-Serbia: How RT Spreads the Kremlin&amp;rsquo;s Propaganda in the Balkans Despite EU Sanctions.&amp;quot;&lt;/a&gt;&amp;#160;&lt;a href="#fnref:26" class="footnote-backref" role="doc-backlink"&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id="fn:27"&gt;
&lt;p&gt;&lt;a href="https://eualive.net/serbia-defies-brussels-belgrade-rejects-eu-demands-to-silence-russian-media/" rel="nofollow noreferrer noopener"&gt;&amp;ldquo;Serbia Defies Brussels: Belgrade Rejects EU Demands to Silence Russian Media,&amp;quot;&lt;/a&gt; EUalive; on Sputnik&amp;rsquo;s Belgrade operation since 2015: &lt;a href="https://www.stopfake.org/en/russia-s-international-broadcasters-turning-the-serbian-media-into-a-disinformation-hub/" rel="nofollow noreferrer noopener"&gt;&amp;ldquo;Russia&amp;rsquo;s International Broadcasters: Turning the Serbian Media into a Disinformation Hub,&amp;quot;&lt;/a&gt; StopFake.&amp;#160;&lt;a href="#fnref:27" class="footnote-backref" role="doc-backlink"&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id="fn:28"&gt;
&lt;p&gt;Dumont, Emily, Jonathan Solis, and Lincoln Zaleski, &lt;a href="https://www.aiddata.org/publications/serbia-profile-of-media-ownership-and-potential-foreigninfluence-channels" rel="nofollow noreferrer noopener"&gt;&amp;ldquo;Serbia: Media Ownership and Potential Foreign Influence Channels,&amp;quot;&lt;/a&gt; AidData, April 11, 2023.&amp;#160;&lt;a href="#fnref:28" class="footnote-backref" role="doc-backlink"&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id="fn:29"&gt;
&lt;p&gt;&lt;a href="https://cin.ba/en/government-millions-for-private-news-outlets-in-the-rs/" rel="nofollow noreferrer noopener"&gt;&amp;ldquo;Government Millions for Private News Outlets in the RS,&amp;quot;&lt;/a&gt; CIN, February 22, 2012; &lt;a href="https://thegeopost.com/en/factchecking-eng/bosniaof-two-persuasions-and-russian-influence-through-republika-srpska/" rel="nofollow noreferrer noopener"&gt;&amp;ldquo;Bosnia of Two Persuasions and Russian Influence through Republika Srpska,&amp;quot;&lt;/a&gt; The Geopost, December 28, 2021.&amp;#160;&lt;a href="#fnref:29" class="footnote-backref" role="doc-backlink"&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id="fn:30"&gt;
&lt;p&gt;Saric, Dejana, and Pierre Morcos, &lt;a href="https://www.csis.org/analysis/war-ukraineaftershocks-balkans" rel="nofollow noreferrer noopener"&gt;&amp;ldquo;The War in Ukraine: Aftershocks in the Balkans,&amp;quot;&lt;/a&gt; Center for Strategic and International Studies, April 15, 2022; &lt;a href="https://www.reuters.com/world/europe/protesters-march-belgrade-against-planned-gay-pride-event-2022-08-28/" rel="nofollow noreferrer noopener"&gt;Reuters reporting from Belgrade,&lt;/a&gt; August 28, 2022.&amp;#160;&lt;a href="#fnref:30" class="footnote-backref" role="doc-backlink"&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id="fn:31"&gt;
&lt;p&gt;&lt;a href="https://www.tandfonline.com/doi/full/10.1080/13567888.2022.2110743" rel="nofollow noreferrer noopener"&gt;&amp;ldquo;The Effects of the War in Ukraine on the Western Balkans,&amp;quot;&lt;/a&gt; &lt;em&gt;Strategic Comments&lt;/em&gt; 28, no. 4 (August 5, 2022): 10–12.&amp;#160;&lt;a href="#fnref:31" class="footnote-backref" role="doc-backlink"&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id="fn:32"&gt;
&lt;p&gt;Sito-Sucic, Daria, &lt;a href="https://www.reuters.com/world/europe/eu-boosts-bosnia-force-after-russiasinvasion-ukraine-2022-02-24" rel="nofollow noreferrer noopener"&gt;&amp;ldquo;EU Boosts Bosnia Force after Russia&amp;rsquo;s Invasion of Ukraine,&amp;quot;&lt;/a&gt; Reuters, February 24, 2022.&amp;#160;&lt;a href="#fnref:32" class="footnote-backref" role="doc-backlink"&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id="fn:33"&gt;
&lt;p&gt;Interior-ministry figures and residence-permit data via &lt;a href="https://www.rferl.org/a/serbia-passports-citizenship-sanctioned-russians/33778410.html" rel="nofollow noreferrer noopener"&gt;RFE/RL&amp;rsquo;s freedom-of-information reporting&lt;/a&gt; (48,000+ temporary residents as of January 2025); community-size estimates in the Friedrich Ebert Stiftung&amp;rsquo;s &lt;a href="https://library.fes.de/pdf-files/bueros/belgrad/21771.pdf" rel="nofollow noreferrer noopener"&gt;mapping of the Russian diaspora in Serbia&lt;/a&gt;. Earlier reporting on the influx: Rossig, Rüdiger, &lt;a href="https://www.dw.com/en/russians-are-increasingly-flocking-to-visa-free-serbia/a-62792799" rel="nofollow noreferrer noopener"&gt;&amp;ldquo;A One-Way Ticket from Moscow to Belgrade,&amp;quot;&lt;/a&gt; Deutsche Welle, August 13, 2022; Ernst, Andreas, &lt;a href="https://www.nzz.ch/english/serbs-welcome-russian-refugees-for-the-wrong-reasons-ld.1734439" rel="nofollow noreferrer noopener"&gt;&amp;ldquo;Serbs Welcome Russian Refugees for the Wrong Reasons,&amp;quot;&lt;/a&gt; Neue Zürcher Zeitung, April 21, 2023.&amp;#160;&lt;a href="#fnref:33" class="footnote-backref" role="doc-backlink"&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id="fn:34"&gt;
&lt;p&gt;Stojanovic, Dušan, &lt;a href="https://apnews.com/article/russia-ukraine-politics-aleksandar-vucic-europeanunion-36a74ef395a1954914b247391445df89" rel="nofollow noreferrer noopener"&gt;&amp;ldquo;Serb President Pledges EU Course, Hints Russia Sanctions,&amp;quot;&lt;/a&gt; AP News, May 31, 2022; Dettmer, Jamie, &lt;a href="https://www.politico.eu/article/serbia-aleksandar-vucic-europe-russia-choice" rel="nofollow noreferrer noopener"&gt;&amp;ldquo;Serbia&amp;rsquo;s Vučić Faces a Tough Choice,&amp;quot;&lt;/a&gt; Politico, March 1, 2023; &lt;a href="https://apnews.com/article/russia-ukraine-politics-europe-serbia-european-union-6deaa57230993b02e7a67f57693bf7f2" rel="nofollow noreferrer noopener"&gt;&amp;ldquo;Serbian President Rejects Calls for Sanctions Against Russia,&amp;quot;&lt;/a&gt; AP News, January 4, 2023.&amp;#160;&lt;a href="#fnref:34" class="footnote-backref" role="doc-backlink"&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id="fn:35"&gt;
&lt;p&gt;Stojanović, Dušan, &lt;a href="https://apnews.com/article/russia-ukraine-putin-european-union-aleksandar-vucic5a6bbab20373ef26829378c6a0eb6065" rel="nofollow noreferrer noopener"&gt;&amp;ldquo;Serbia Ignores EU Sanctions, Secures Gas Deal with Putin,&amp;quot;&lt;/a&gt; AP News, May 29, 2022.&amp;#160;&lt;a href="#fnref:35" class="footnote-backref" role="doc-backlink"&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id="fn:36"&gt;
&lt;p&gt;Edwards, Christian, &lt;a href="https://www.genocidewatch.com/single-post/the-west-s-serbia-approach-risks-balkan-security" rel="nofollow noreferrer noopener"&gt;&amp;ldquo;US &amp;amp; EU Appeasement of Serbia Risks Balkan Security,&amp;quot;&lt;/a&gt; Genocide Watch, August 22, 2023; Bechev, Dimitar, &lt;a href="https://carnegieeurope.eu/2023/01/19/hedging-its-bets-serbia-between-russia-and-eu-pub88819" rel="nofollow noreferrer noopener"&gt;&amp;ldquo;Hedging Its Bets: Serbia Between Russia and the EU,&amp;quot;&lt;/a&gt; Carnegie Endowment for International Peace, January 19, 2023.&amp;#160;&lt;a href="#fnref:36" class="footnote-backref" role="doc-backlink"&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id="fn:37"&gt;
&lt;p&gt;&lt;a href="https://balkaninsight.com/2025/05/09/vucic-attends-moscow-victory-parade-amid-barrage-of-eu-criticism/" rel="nofollow noreferrer noopener"&gt;&amp;ldquo;Vučić Attends Moscow Victory Parade amid Barrage of EU Criticism,&amp;quot;&lt;/a&gt; Balkan Insight, May 9, 2025.&amp;#160;&lt;a href="#fnref:37" class="footnote-backref" role="doc-backlink"&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id="fn:38"&gt;
&lt;p&gt;&lt;a href="https://www.euronews.com/2025/05/30/russia-accuses-serbia-of-arming-ukraine-and-stabbing-moscow-in-the-back" rel="nofollow noreferrer noopener"&gt;&amp;ldquo;Russia Accuses Serbia of Arming Ukraine and Stabbing Moscow in the Back,&amp;quot;&lt;/a&gt; Euronews, May 30, 2025; &lt;a href="https://www.rferl.org/a/serbia-arms-exports-ukraine-russia-vucic/33453578.html" rel="nofollow noreferrer noopener"&gt;&amp;ldquo;Vučić Halts Serbian Ammunition Exports,&amp;quot;&lt;/a&gt; RFE/RL, June 2025; &lt;a href="https://www.aljazeera.com/news/2025/11/7/serbias-vucic-angers-russia-with-comments-about-selling-ammo-to-eu" rel="nofollow noreferrer noopener"&gt;&amp;ldquo;Serbia&amp;rsquo;s Vučić Angers Russia with Comments about Selling Ammo to EU,&amp;quot;&lt;/a&gt; Al Jazeera, November 7, 2025.&amp;#160;&lt;a href="#fnref:38" class="footnote-backref" role="doc-backlink"&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id="fn:39"&gt;
&lt;p&gt;&lt;a href="https://www.aljazeera.com/news/2025/11/11/russians-agree-to-quit-serbian-oil-company-as-us-sanctions-bite" rel="nofollow noreferrer noopener"&gt;&amp;ldquo;Russians Agree to Quit Serbian Oil Company as US Sanctions Bite,&amp;quot;&lt;/a&gt; Al Jazeera, November 11, 2025; &lt;a href="https://www.themoscowtimes.com/2025/12/23/serbia-signs-short-term-gas-deal-with-russia-a91522" rel="nofollow noreferrer noopener"&gt;&amp;ldquo;Serbia Signs Short-Term Gas Deal with Russia,&amp;quot;&lt;/a&gt; The Moscow Times, December 23, 2025.&amp;#160;&lt;a href="#fnref:39" class="footnote-backref" role="doc-backlink"&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id="fn:40"&gt;
&lt;p&gt;European Parliament resolution on Serbia, October 22, 2025, as reported in regional coverage of the enlargement debate.&amp;#160;&lt;a href="#fnref:40" class="footnote-backref" role="doc-backlink"&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id="fn:41"&gt;
&lt;p&gt;&lt;a href="https://en.wikipedia.org/wiki/Novi_Sad_railway_station_canopy_collapse" rel="nofollow noreferrer noopener"&gt;Novi Sad railway station canopy collapse,&lt;/a&gt; overview with sourcing; &lt;a href="https://www.rferl.org/a/serbia-vucic-resign-early-elections-protests/33790216.html" rel="nofollow noreferrer noopener"&gt;&amp;ldquo;Vučić Says He Will Resign and Call Early Elections,&amp;quot;&lt;/a&gt; RFE/RL, June 27, 2026; &lt;a href="https://www.aljazeera.com/news/2026/6/27/serbias-president-aleksandar-vucic-says-will-resign-within-weeks" rel="nofollow noreferrer noopener"&gt;&amp;ldquo;Serbia&amp;rsquo;s President Aleksandar Vučić Says He Will Resign within Weeks,&amp;quot;&lt;/a&gt; Al Jazeera, June 27, 2026.&amp;#160;&lt;a href="#fnref:41" class="footnote-backref" role="doc-backlink"&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id="fn:42"&gt;
&lt;p&gt;Pekmez, Irvin, &lt;a href="https://balkaninsight.com/2022/05/09/russia-targets-bosnia-with-disinformation-about-ukrainian-war/" rel="nofollow noreferrer noopener"&gt;&amp;ldquo;Russia Targets Bosnia With Disinformation About Ukrainian War,&amp;quot;&lt;/a&gt; Balkan Insight, May 9, 2022; International Criminal Tribunal for the former Yugoslavia, &lt;a href="https://www.icty.org/x/cases/popovic/acjug/en/150130_summary.pdf" rel="nofollow noreferrer noopener"&gt;Appeal Judgement Summary for Popović et al.,&lt;/a&gt; January 2015.&amp;#160;&lt;a href="#fnref:42" class="footnote-backref" role="doc-backlink"&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id="fn:43"&gt;
&lt;p&gt;Karčić, Harun, and Peter Mandaville, &lt;a href="https://www.usip.org/publications/2023/06/dislodging-putins-foothold-balkans" rel="nofollow noreferrer noopener"&gt;&amp;ldquo;Dislodging Putin&amp;rsquo;s Foothold in the Balkans,&amp;quot;&lt;/a&gt; United States Institute of Peace, June 1, 2023.&amp;#160;&lt;a href="#fnref:43" class="footnote-backref" role="doc-backlink"&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id="fn:44"&gt;
&lt;p&gt;Simeonova, Elitsa, &lt;a href="https://www.rferl.org/a/russia-disinformation-divide-us-allies-balkans/32439762.html" rel="nofollow noreferrer noopener"&gt;&amp;ldquo;U.S. Envoy Warns About Russian Efforts To Use Disinformation To Divide U.S. Allies In Balkans,&amp;quot;&lt;/a&gt; RFE/RL, June 2, 2023; &lt;a href="https://apnews.com/article/us-rubin-russia-balkans-disinformation8ae5a32becb5f4a10df0b074a6122ce7" rel="nofollow noreferrer noopener"&gt;&amp;ldquo;US Envoy: Balkans &amp;lsquo;Poisoned&amp;rsquo; by Russian Disinformation,&amp;quot;&lt;/a&gt; AP News, April 12, 2023.&amp;#160;&lt;a href="#fnref:44" class="footnote-backref" role="doc-backlink"&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id="fn:45"&gt;
&lt;p&gt;&lt;a href="https://crta.rs/en/nothing-is-true-and-everything-is-possible/" rel="nofollow noreferrer noopener"&gt;&amp;ldquo;Nothing Is True, and Everything Is Possible,&amp;quot;&lt;/a&gt; CRTA, March 1, 2023.&amp;#160;&lt;a href="#fnref:45" class="footnote-backref" role="doc-backlink"&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id="fn:46"&gt;
&lt;p&gt;&lt;a href="https://www.isac-fund.org/en/news/regional-analysis-of-narrative-kremlinand-pro-kremlin-false-narratives-regarding-the-ukraine-war-in-the-western-balkans" rel="nofollow noreferrer noopener"&gt;&amp;ldquo;Regional Analysis of Narrative &amp;lsquo;Kremlin and Pro-Kremlin False Narratives Regarding the Ukraine War&amp;rsquo; in the Western Balkans,&amp;quot;&lt;/a&gt; International and Security Affairs Centre, November 22, 2022.&amp;#160;&lt;a href="#fnref:46" class="footnote-backref" role="doc-backlink"&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id="fn:47"&gt;
&lt;p&gt;&lt;a href="https://n1info.rs/english/news/a582483-eu-largest-donor-to-serbia/" rel="nofollow noreferrer noopener"&gt;&amp;ldquo;EU Largest Donor to Serbia,&amp;quot;&lt;/a&gt; N1, March 27, 2020; Samorukov, Maxim, &lt;a href="https://www.carnegieendowment.org/politika/89600" rel="nofollow noreferrer noopener"&gt;&amp;ldquo;Surviving the War: Russia-Western Balkan Ties After the Invasion of Ukraine,&amp;quot;&lt;/a&gt; Carnegie Endowment for Peace, April 25, 2023.&amp;#160;&lt;a href="#fnref:47" class="footnote-backref" role="doc-backlink"&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id="fn:48"&gt;
&lt;p&gt;Anderson, Liz, &lt;a href="https://europeanvalues.cz/wp-content/uploads/2020/10/Vulnerabilities-toRussian-Influence-in-Montenegro.pdf" rel="nofollow noreferrer noopener"&gt;&amp;ldquo;Kremlin Watch Report: Vulnerabilities to Russian Influence in Montenegro,&amp;quot;&lt;/a&gt; European Values, 2019; Filipović, Ljubomir, &amp;ldquo;Confluence of Influence: Russo-Serbian Influence Operation(s) in Montenegro,&amp;rdquo; &lt;em&gt;National Security and the Future&lt;/em&gt; 24, no. 3 (2023): 67–81.&amp;#160;&lt;a href="#fnref:48" class="footnote-backref" role="doc-backlink"&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id="fn:49"&gt;
&lt;p&gt;&lt;a href="https://www.freiheit.org/publikation/final-report-media-monitoring" rel="nofollow noreferrer noopener"&gt;&amp;ldquo;Final Report on Media Monitoring,&amp;quot;&lt;/a&gt; Friedrich Naumann Foundation for Freedom, Western Balkan, June 2022.&amp;#160;&lt;a href="#fnref:49" class="footnote-backref" role="doc-backlink"&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id="fn:50"&gt;
&lt;p&gt;&lt;a href="https://apnews.com/article/russia-ukraine-politics-europe-serbia-european-union-6deaa57230993b02e7a67f57693bf7f2" rel="nofollow noreferrer noopener"&gt;&amp;ldquo;Serbian President Rejects Calls for Sanctions Against Russia,&amp;quot;&lt;/a&gt; AP News, January 4, 2023.&amp;#160;&lt;a href="#fnref:50" class="footnote-backref" role="doc-backlink"&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id="fn:51"&gt;
&lt;p&gt;Pekmez, &amp;ldquo;Russia Targets Bosnia With Disinformation About Ukrainian War.&amp;rdquo;&amp;#160;&lt;a href="#fnref:51" class="footnote-backref" role="doc-backlink"&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id="fn:52"&gt;
&lt;p&gt;Stanicek, Branislav, and Anna Caprile, &lt;a href="https://www.europarl.europa.eu/RegData/etudes/BRIE/2023/747096/EPRS_BRI(2023)747096_EN.pdf" rel="nofollow noreferrer noopener"&gt;&amp;ldquo;Russia and the Western Balkans - Geopolitical Confrontation, Economic Influence and Political Interference,&amp;quot;&lt;/a&gt; European Parliamentary Research Service, PE 747.096, April 2023.&amp;#160;&lt;a href="#fnref:52" class="footnote-backref" role="doc-backlink"&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id="fn:53"&gt;
&lt;p&gt;&lt;a href="https://www.consilium.europa.eu/en/policies/bosnia-herzegovina/" rel="nofollow noreferrer noopener"&gt;Council of the EU, Bosnia and Herzegovina policy overview&lt;/a&gt; (candidate status December 2022; decision to open negotiations March 21, 2024); &lt;a href="https://europeanwesternbalkans.com/2025/11/07/bosnia-and-the-eu-enlargement-report-a-non-event-in-a-non-process/" rel="nofollow noreferrer noopener"&gt;&amp;ldquo;Bosnia and the EU Enlargement Report: A Non-Event in a Non-Process,&amp;quot;&lt;/a&gt; European Western Balkans, November 7, 2025.&amp;#160;&lt;a href="#fnref:53" class="footnote-backref" role="doc-backlink"&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id="fn:54"&gt;
&lt;p&gt;&lt;a href="https://www.consilium.europa.eu/en/press/press-releases/2025/12/16/eu-and-montenegro-provisionally-close-another-five-chapters-in-accession-negotiations/" rel="nofollow noreferrer noopener"&gt;&amp;ldquo;EU and Montenegro Provisionally Close Another Five Chapters in Accession Negotiations,&amp;quot;&lt;/a&gt; Council of the EU, December 16, 2025; &lt;a href="https://balkaninsight.com/2026/06/15/montenegro-closes-two-more-eu-accession-chapters/" rel="nofollow noreferrer noopener"&gt;&amp;ldquo;Montenegro Closes Two More EU Accession Chapters,&amp;quot;&lt;/a&gt; Balkan Insight, June 15, 2026.&amp;#160;&lt;a href="#fnref:54" class="footnote-backref" role="doc-backlink"&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id="fn:55"&gt;
&lt;p&gt;&lt;a href="https://www.aljazeera.com/news/2025/2/26/bosnia-court-sentences-serb-leader-dodik-to-one-year-in-jail" rel="nofollow noreferrer noopener"&gt;&amp;ldquo;Bosnia Court Sentences Serb Leader Dodik to One Year in Jail,&amp;quot;&lt;/a&gt; Al Jazeera, February 26, 2025; &lt;a href="https://balkaninsight.com/2025/08/01/bosnias-top-court-confirms-serb-leader-dodiks-one-year-prison-sentence/" rel="nofollow noreferrer noopener"&gt;&amp;ldquo;Bosnia&amp;rsquo;s Top Court Confirms Serb Leader Dodik&amp;rsquo;s One-Year Prison Sentence,&amp;quot;&lt;/a&gt; Balkan Insight, August 1, 2025; &lt;a href="https://balkaninsight.com/2025/08/12/bosnian-court-commutes-milorad-dodiks-jail-sentence-to-a-fine/" rel="nofollow noreferrer noopener"&gt;&amp;ldquo;Bosnian Court Commutes Milorad Dodik&amp;rsquo;s Jail Sentence to a Fine,&amp;quot;&lt;/a&gt; Balkan Insight, August 12, 2025; &lt;a href="https://www.aljazeera.com/news/2025/8/6/separatist-bosnian-serb-leader-dodik-sacked-from-office-by-bosnia-officials" rel="nofollow noreferrer noopener"&gt;&amp;ldquo;Separatist Bosnian Serb Leader Dodik Sacked from Office,&amp;quot;&lt;/a&gt; Al Jazeera, August 6, 2025; &lt;a href="https://www.aljazeera.com/news/2025/11/4/bosnias-top-court-upholds-political-ban-on-bosnian-serb-leader-dodik" rel="nofollow noreferrer noopener"&gt;&amp;ldquo;Bosnia&amp;rsquo;s Top Court Upholds Political Ban on Bosnian Serb Leader Dodik,&amp;quot;&lt;/a&gt; Al Jazeera, November 4, 2025.&amp;#160;&lt;a href="#fnref:55" class="footnote-backref" role="doc-backlink"&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id="fn:56"&gt;
&lt;p&gt;&lt;a href="https://www.euronews.com/my-europe/2025/03/12/additional-eufor-peacekeeper-troops-arrive-in-bosnia-amid-rising-tensions" rel="nofollow noreferrer noopener"&gt;&amp;ldquo;Additional EUFOR Peacekeeper Troops Arrive in Bosnia amid Rising Tensions,&amp;quot;&lt;/a&gt; Euronews, March 12, 2025; &lt;a href="https://press.un.org/en/2025/sc16206.doc.htm" rel="nofollow noreferrer noopener"&gt;UN Security Council Resolution 2795 renewing the EUFOR Althea mandate,&lt;/a&gt; October 31, 2025.&amp;#160;&lt;a href="#fnref:56" class="footnote-backref" role="doc-backlink"&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id="fn:57"&gt;
&lt;p&gt;&lt;a href="https://balkaninsight.com/2025/10/29/us-suddenly-lifts-sanctions-on-bosnian-serb-leader-dodik/" rel="nofollow noreferrer noopener"&gt;&amp;ldquo;US Suddenly Lifts Sanctions on Bosnian Serb Leader Dodik,&amp;quot;&lt;/a&gt; Balkan Insight, October 29, 2025; &lt;a href="https://www.cnn.com/2025/10/30/world/milorad-dodik-sanctions-trump-intl" rel="nofollow noreferrer noopener"&gt;CNN reporting,&lt;/a&gt; October 30, 2025.&amp;#160;&lt;a href="#fnref:57" class="footnote-backref" role="doc-backlink"&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id="fn:58"&gt;
&lt;p&gt;&lt;a href="https://www.aljazeera.com/news/2025/11/23/barred-bosnian-serb-leader-dodiks-party-wins-presidential-election" rel="nofollow noreferrer noopener"&gt;&amp;ldquo;Barred Bosnian Serb Leader Dodik&amp;rsquo;s Party Wins Presidential Election,&amp;quot;&lt;/a&gt; Al Jazeera, November 23, 2025; &lt;a href="https://europeanwesternbalkans.com/2026/02/09/sinisa-karan-wins-the-repeat-vote-securing-the-position-of-president-of-republika-srpska/" rel="nofollow noreferrer noopener"&gt;&amp;ldquo;Siniša Karan Wins the Repeat Vote,&amp;quot;&lt;/a&gt; European Western Balkans, February 9, 2026.&amp;#160;&lt;a href="#fnref:58" class="footnote-backref" role="doc-backlink"&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id="fn:59"&gt;
&lt;p&gt;&lt;a href="https://balkaninsight.com/2026/02/24/republika-srpska-has-a-new-president-but-the-old-ones-still-in-control/" rel="nofollow noreferrer noopener"&gt;&amp;ldquo;Republika Srpska Has a New President, But the Old One&amp;rsquo;s Still in Control,&amp;quot;&lt;/a&gt; Balkan Insight, February 24, 2026.&amp;#160;&lt;a href="#fnref:59" class="footnote-backref" role="doc-backlink"&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id="fn:60"&gt;
&lt;p&gt;Greene, Samuel, Gregory Asmolov, Adam Fagan, Ofer Fridman, and Borjan Gjuzelov, &lt;a href="https://www.europarl.europa.eu/RegData/etudes/STUD/2020/653621/EXPO_STU(2020)653621_EN.pdf" rel="nofollow noreferrer noopener"&gt;&amp;ldquo;Mapping Fake News and Disinformation in the Western Balkans and Identifying Ways to Effectively Counter Them,&amp;quot;&lt;/a&gt; European Parliament, February 23, 2021.&amp;#160;&lt;a href="#fnref:60" class="footnote-backref" role="doc-backlink"&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id="fn:61"&gt;
&lt;p&gt;EUvsDisinfo regional analyses of disinformation in the Western Balkans, EEAS East StratCom Task Force.&amp;#160;&lt;a href="#fnref:61" class="footnote-backref" role="doc-backlink"&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id="fn:62"&gt;
&lt;p&gt;European Commission, &lt;a href="https://digital-strategy.ec.europa.eu/en/library/2018-code-practice-disinformation" rel="nofollow noreferrer noopener"&gt;2018 Code of Practice on Disinformation&lt;/a&gt;; &lt;a href="https://digital-strategy.ec.europa.eu/en/library/2022-strengthened-code-practice-disinformation" rel="nofollow noreferrer noopener"&gt;2022 Strengthened Code of Practice on Disinformation&lt;/a&gt;.&amp;#160;&lt;a href="#fnref:62" class="footnote-backref" role="doc-backlink"&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id="fn:63"&gt;
&lt;p&gt;European Commission, &lt;a href="https://ec.europa.eu/commission/presscorner/detail/en/ip_25_505" rel="nofollow noreferrer noopener"&gt;&amp;ldquo;Commission and Board Endorse Integration of the Code of Practice on Disinformation into the DSA Framework,&amp;quot;&lt;/a&gt; February 13, 2025; &lt;a href="https://digital-strategy.ec.europa.eu/en/library/code-conduct-disinformation" rel="nofollow noreferrer noopener"&gt;Code of Conduct on Disinformation,&lt;/a&gt; effective July 1, 2025.&amp;#160;&lt;a href="#fnref:63" class="footnote-backref" role="doc-backlink"&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id="fn:64"&gt;
&lt;p&gt;European Commission, &lt;a href="https://neighbourhoodenlargement.ec.europa.eu/enlargement-policy/glossary/acquis_en" rel="nofollow noreferrer noopener"&gt;the EU acquis,&lt;/a&gt; enlargement-policy glossary.&amp;#160;&lt;a href="#fnref:64" class="footnote-backref" role="doc-backlink"&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id="fn:65"&gt;
&lt;p&gt;J. Cord, David, &lt;a href="https://finland.fi/life-society/educated-decisions-finnish-media-literacy-deters-disinformation/" rel="nofollow noreferrer noopener"&gt;&amp;ldquo;Educated Decisions: Finnish Media Literacy Deters Disinformation,&amp;quot;&lt;/a&gt; This is Finland, August 2022; Lessenski, Marin, &lt;a href="https://www.osce.org/files/f/documents/0/4/534146.pdf" rel="nofollow noreferrer noopener"&gt;&amp;ldquo;Media Literacy Index 2022: Main Findings and Possible Implications,&amp;quot;&lt;/a&gt; Open Society Institute Sofia, December 6, 2022; Jolls, Tessa, and Michele Johnsen, &amp;ldquo;Media Literacy: A Foundational Skill for Democracy in the 21st Century,&amp;rdquo; &lt;em&gt;Hastings Law Journal&lt;/em&gt; 69 (2017): 1379.&amp;#160;&lt;a href="#fnref:65" class="footnote-backref" role="doc-backlink"&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id="fn:66"&gt;
&lt;p&gt;On localization requirements for media-literacy programming in the region, see Greene et al., &amp;ldquo;Mapping Fake News and Disinformation in the Western Balkans.&amp;rdquo;&amp;#160;&lt;a href="#fnref:66" class="footnote-backref" role="doc-backlink"&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;</content:encoded></item><item><title>Ethics in data visualization: how charts deceive, and how to read them like an analyst</title><link>https://viborc.com/ethics-and-ethical-data-visualization-a-complete-guide/</link><pubDate>Tue, 14 Jul 2026 08:00:00 +0000</pubDate><guid isPermaLink="true">https://viborc.com/ethics-and-ethical-data-visualization-a-complete-guide/</guid><description>How charts deceive: the manipulation techniques, the arrival of AI-generated deception at scale, a verification checklist, and the ethics of honest charts.</description><content:encoded>&lt;p&gt;Most people will question a sentence before they&amp;rsquo;ll question a chart. A
sentence is obviously somebody&amp;rsquo;s opinion. A chart looks like measurement:
axes, gridlines, a source line in small print, numbers with decimal points.
Somebody counted something, the format says, so there&amp;rsquo;s nothing left to
argue about.&lt;/p&gt;
&lt;p&gt;That trust is mostly reasonable. Nobody has time to verify everything, and
charts really are how honest people communicate data. The problem is that
the trust attaches to the format, not to the content, and the format is
easy to fake. A wrong number in prose invites checking. The same wrong
number drawn as a bar mostly doesn&amp;rsquo;t.&lt;/p&gt;
&lt;p&gt;I wrote the first version of this guide in 2023, as a set of ethical
principles for people who make charts. Rewriting it in 2026, that framing
feels too polite. Since then, deceptive charts have become something you
can generate with software, in volume, aimed at specific audiences. So this
version treats a chart the way an analyst treats any incoming report:
possibly true, possibly crafted, and not to be trusted on presentation
alone. The known techniques come first, with documented cases; then what
changed now that the work is automated, how to read charts, and how to
make them honestly.&lt;/p&gt;
&lt;h2 id="why-charts-get-believed"&gt;Why charts get believed&lt;/h2&gt;
&lt;p&gt;The persuasive power of a chart doesn&amp;rsquo;t come from its data. It comes from
the signs of rigor around the data. Axes, gridlines, source lines, and
precise-looking numbers all suggest that someone did the work, so the
reader doesn&amp;rsquo;t have to. That&amp;rsquo;s a shortcut, and usually a sensible one.&lt;/p&gt;
&lt;p&gt;But the shortcut fires whether or not the work was honest. The visual
grammar of evidence is trivial to imitate, and imitation is enough, because
readers almost never recompute what a chart claims.&lt;/p&gt;
&lt;p&gt;Two findings frame the catalog below.&lt;/p&gt;
&lt;p&gt;First, bad charts are not a fringe problem. When researchers
&lt;a href="https://www.sciencedirect.com/science/article/abs/pii/S0360131525001812" rel="nofollow noreferrer noopener"&gt;audited pandemic-era news charts&lt;/a&gt;,
roughly a third of the bar charts and over 40% of the pictorial charts they
examined qualified as misleading. This wasn&amp;rsquo;t enemy propaganda. It was the
everyday output of newsrooms and agencies working under deadline.&lt;/p&gt;
&lt;p&gt;Second, and more uncomfortable: the most effective deceptive charts are
often technically correct. In 2021, MIT researchers studied hundreds of
thousands of coronavirus-skeptic posts and found that the skeptics were not
making crude, error-ridden graphics. They were producing
&lt;a href="https://arxiv.org/abs/2101.07993" rel="nofollow noreferrer noopener"&gt;polished, data-rich visualizations built with orthodox methods&lt;/a&gt;,
real government data, correctly plotted, framed to argue the crisis was
over. A &lt;a href="https://vdl.sci.utah.edu/blog/2023/04/17/misleading/" rel="nofollow noreferrer noopener"&gt;study from the University of Utah&amp;rsquo;s visualization lab&lt;/a&gt;
reached the same conclusion from the other direction: when people lie with
charts in the wild, they mostly don&amp;rsquo;t violate design guidelines at all.
They plot faithful data and let the title, the cropping, and the annotation
do the lying.&lt;/p&gt;
&lt;p&gt;So the catalog below matters, but spotting broken technique is not the
whole defense. The sharpest deception passes every design check and fails
only the questions a chart can&amp;rsquo;t answer about itself: who made this, what
was left out, and what am I being led to conclude?&lt;/p&gt;
&lt;h2 id="the-deception-techniques"&gt;The deception techniques&lt;/h2&gt;
&lt;p&gt;These are the recurring mechanisms. Each one comes with a documented case,
because none of them are hypothetical.&lt;/p&gt;
&lt;h3 id="the-manipulated-axis"&gt;The manipulated axis&lt;/h3&gt;
&lt;p&gt;The vertical axis states the chart&amp;rsquo;s scale, which makes it the
most-tampered component. Three variants cover most of what you&amp;rsquo;ll run into.&lt;/p&gt;
&lt;p&gt;An &lt;strong&gt;inverted axis&lt;/strong&gt; turns a trend upside down. After Florida enacted its
&amp;ldquo;Stand Your Ground&amp;rdquo; law, a widely shared chart appeared to show gun deaths
falling, until you notice that the y-axis runs top-down, with zero at the
top. Read against the actual axis, gun deaths rose.&lt;/p&gt;
&lt;figure&gt;&lt;a href="https://viborc.com/wp-content/uploads/2023/05/data-viz-ethics-stand-your-ground-florida.png"&gt;&lt;img src="https://viborc.com/wp-content/uploads/2023/05/data-viz-ethics-stand-your-ground-florida.png" alt="Gun deaths in Florida charted with an inverted Y-axis, making a rise read as a fall" width="604" height="756" loading="lazy" decoding="async"&gt;&lt;/a&gt;&lt;figcaption&gt;Gun deaths in Florida. The y-axis is inverted: the line goes down, the deaths go up.&lt;/figcaption&gt;&lt;/figure&gt;
&lt;p&gt;The designer, Christine Chan, defended the inversion as a stylistic
preference, showing deaths &amp;ldquo;in negative terms (inverted),&amp;rdquo; and there&amp;rsquo;s no
reason to assume she meant to mislead anyone. It doesn&amp;rsquo;t matter. The first
impression is the message, most readers never study the axis, and the
damage doesn&amp;rsquo;t depend on her intentions.&lt;/p&gt;
&lt;p&gt;A &lt;strong&gt;missing axis&lt;/strong&gt; removes the scale entirely, so the bars can exaggerate
freely. A chart comparing Americans &amp;ldquo;on welfare&amp;rdquo; with Americans holding
full-time jobs drew the welfare bar several times taller, with no y-axis,
no baseline, and category definitions that quietly overlapped. Redraw it
with a labeled axis starting at zero and the story shrinks to something far
less alarming.&lt;/p&gt;
&lt;figure&gt;&lt;a href="https://viborc.com/wp-content/uploads/2023/05/dataviz-ethics-welfare-vs-fulltime-jobs.jpg"&gt;&lt;img src="https://viborc.com/wp-content/uploads/2023/05/dataviz-ethics-welfare-vs-fulltime-jobs.jpg" alt="Bar chart comparing welfare and full-time employment with no Y-axis or baseline" width="583" height="387" loading="lazy" decoding="async"&gt;&lt;/a&gt;&lt;figcaption&gt;No axis, no baseline, no scale. The bars are free to say anything.&lt;/figcaption&gt;&lt;/figure&gt;
&lt;p&gt;A &lt;strong&gt;truncated axis&lt;/strong&gt; is the subtler version: the axis exists but starts
just below the smallest value, so trivial differences tower over each
other. CNN aired presidential approval bars whose visual gaps were several
times the actual percentage-point differences (spotted, as such things
often are, by
&lt;a href="https://www.reddit.com/r/dataisugly/comments/5rzcym/misleading_cnn/" rel="nofollow noreferrer noopener"&gt;the r/dataisugly community&lt;/a&gt;).
Truncation has legitimate uses in fine-grained technical charts. In a
persuasive context, though, a bar chart that doesn&amp;rsquo;t start at zero is an
argument, not a measurement.&lt;/p&gt;
&lt;figure&gt;&lt;a href="https://viborc.com/wp-content/uploads/2023/05/dataviz-ethics-cnn-presidental-approval-ratings.jpg"&gt;&lt;img src="https://viborc.com/wp-content/uploads/2023/05/dataviz-ethics-cnn-presidental-approval-ratings.jpg" alt="CNN bar chart of presidential approval ratings with a truncated Y-axis exaggerating differences" width="740" height="414" loading="lazy" decoding="async"&gt;&lt;/a&gt;&lt;figcaption&gt;Truncated axis: the visual differences are several times the numeric ones.&lt;/figcaption&gt;&lt;/figure&gt;
&lt;h3 id="the-impossible-pie"&gt;The impossible pie&lt;/h3&gt;
&lt;p&gt;This pie chart of &amp;ldquo;biggest COVID worries&amp;rdquo; fails arithmetic before anything
else: the slices add up to well over 100%. Respondents could pick several
answers, which is exactly the situation a pie chart can&amp;rsquo;t represent. The
one promise the form makes is that the slices sum to a whole. Here they
don&amp;rsquo;t, and the legend doesn&amp;rsquo;t even match the slice order.&lt;/p&gt;
&lt;figure&gt;&lt;a href="https://viborc.com/wp-content/uploads/2023/05/dataviz-ethics-biggest-covid-worries.jpg"&gt;&lt;img src="https://viborc.com/wp-content/uploads/2023/05/dataviz-ethics-biggest-covid-worries.jpg" alt="Pie chart of biggest COVID-19 worries whose slices sum to far more than 100 percent" width="740" height="643" loading="lazy" decoding="async"&gt;&lt;/a&gt;&lt;figcaption&gt;Multiple-response data in a pie chart: the slices total far more than 100%.&lt;/figcaption&gt;&lt;/figure&gt;
&lt;p&gt;Chart-type mismatch is a deception vector of its own. Every chart form
promises something: pies that the parts make a whole, line charts that
the data is continuous, maps that geography matters. Break the
promise and the reader walks away with a false belief without a single
number being wrong.&lt;/p&gt;
&lt;h3 id="cherry-picking-and-the-vanishing-context"&gt;Cherry-picking and the vanishing context&lt;/h3&gt;
&lt;p&gt;Choose the right start date and almost any trend will say what you want. A
decade of decline turns into &amp;ldquo;three months of recovery&amp;rdquo; if the window opens
at the bottom. A warming trend disappears if the series starts in an
unusually hot year. Nothing is fabricated here. The deception is done
entirely by cropping, which is why an honest chart discloses its window and
an honest reader asks what the line looked like before the left edge.&lt;/p&gt;
&lt;p&gt;The same move works on populations (show only the subgroup where your claim
holds), on denominators (report absolute counts where rates would deflate
the story, or the reverse), and on aggregation (pick the weekly, monthly,
or yearly bucket that produces the pattern you need). Any one of those
choices can be defended in isolation. What gives the game away is the
pattern: every choice, every time, breaking toward the same conclusion.&lt;/p&gt;
&lt;h3 id="geometry-that-lies-area-radius-and-3d"&gt;Geometry that lies: area, radius, and 3D&lt;/h3&gt;
&lt;p&gt;Human perception compares areas, but charting tools often scale circles by
radius. A circle with twice the radius has four times the area, so a bubble
chart scaled by radius squares every difference: a country with double the
population reads as quadruple. The same math corrupts pictogram charts (a
coin drawn twice as tall is four times as large on the page) and every 3D
chart, where perspective adds distortion no data justifies and the front
series physically hides the back ones.&lt;/p&gt;
&lt;p&gt;Geometry problems are quieter than axis problems because they look like
aesthetic choices when they&amp;rsquo;re really measurement choices.&lt;/p&gt;
&lt;h3 id="uncertainty-laundered"&gt;Uncertainty, laundered&lt;/h3&gt;
&lt;p&gt;Every serious estimate carries uncertainty: margins of error, confidence
intervals, model assumptions. Charts routinely strip all of it out, and the
stripped version reads as more precise than the science it summarizes.
Election forecasts drawn as clean lines invite overconfidence in outcomes
that were always probabilistic. Climate and medical findings presented
without error bands set readers up to treat every later revision as
betrayal (&amp;ldquo;they keep changing the numbers&amp;rdquo;) instead of what it is, which is
uncertainty behaving normally.&lt;/p&gt;
&lt;p&gt;Stripping uncertainty rarely gets called deception. It should be. It
transfers false confidence from the chart to the reader, and false
confidence is the product being sold.&lt;/p&gt;
&lt;h3 id="the-honest-chart-with-a-hostile-frame"&gt;The honest chart with a hostile frame&lt;/h3&gt;
&lt;p&gt;The technique that ties the catalog together has no visual signature at
all. Take faithful data, plot it by the book, and do the work in the
surroundings instead: a title that asserts what the data merely permits, an
annotation that supplies the causal story, a comparison chosen to flatter,
and a crop that removes whatever would hurt. The MIT coronavirus study
found exactly this pattern. Those communities celebrated rigor, mistrusted
mediated conclusions, demanded raw data, and then framed competent charts
into conclusions the data didn&amp;rsquo;t support.&lt;/p&gt;
&lt;p&gt;This is why chart-literacy advice that stops at &amp;ldquo;check the axes&amp;rdquo; produces
false security: the axes can be perfect while the lie lives entirely in
what the chart is for.&lt;/p&gt;
&lt;h2 id="2026-deception-at-machine-scale"&gt;2026: deception at machine scale&lt;/h2&gt;
&lt;p&gt;Everything above predates the current tools. The grammar of chart
deception is the same. What changed is the cost, the volume, and the
targeting.&lt;/p&gt;
&lt;h3 id="the-techniques-are-now-automated"&gt;The techniques are now automated&lt;/h3&gt;
&lt;p&gt;Deceptive charts used to require a motivated human with tooling skills.
They no longer do. &lt;a href="https://arxiv.org/pdf/2601.12983" rel="nofollow noreferrer noopener"&gt;ChartAttack&lt;/a&gt;, a 2026
study, showed that large language models can be prompted to mass-produce
misleading charts using the same catalog you just read (inverted axes,
inappropriate log scales, 3D distortion, misrepresented data), and that the
machine-generated versions cut human reading accuracy by roughly 20%. In
effect, the techniques have been compiled into software. Anyone who can
write a prompt can now emit endless plausible chart variants and A/B test
which deception spreads best.&lt;/p&gt;
&lt;p&gt;Detection research is racing in the same direction, with
&lt;a href="https://arxiv.org/html/2508.21675v1" rel="nofollow noreferrer noopener"&gt;automated systems that grade charts for misleading design&lt;/a&gt;.
For now the asymmetry favors the attacker. A chart is an image, and an
image arrives with no provenance. Generated text at least lives in a medium
where provenance tooling is maturing. A chart screenshot three
reposts deep carries nothing but its own pixels.&lt;/p&gt;
&lt;h3 id="charts-are-now-a-payload-in-influence-operations"&gt;Charts are now a payload in influence operations&lt;/h3&gt;
&lt;p&gt;This stopped being a hypothetical about lone bad actors. The European
Union&amp;rsquo;s foreign-interference monitoring found that
&lt;a href="https://www.weforum.org/stories/2026/03/how-cognitive-manipulation-and-ai-will-shape-disinformation-in-2026/" rel="nofollow noreferrer noopener"&gt;27% of documented information-manipulation attempts in 2025 involved AI, roughly triple the share of 2024&lt;/a&gt;,
and researchers tracking the 2026 election cycle expect
&lt;a href="https://www.witf.org/2025/12/20/voters-to-face-unprecedented-levels-of-ai-generated-misinformation-in-2026/" rel="nofollow noreferrer noopener"&gt;unprecedented volumes of AI-generated political misinformation&lt;/a&gt;.
The chart-specific arm of this is now being traced academically: a 2025
study in the ACM&amp;rsquo;s human-computer interaction proceedings followed
&lt;a href="https://dl.acm.org/doi/10.1145/3757574" rel="nofollow noreferrer noopener"&gt;data visualizations circulating as propaganda in anti-immigrant discourse&lt;/a&gt;,
watching the same charts mutate, lose their sources, and pick up new
captions as they moved between communities.&lt;/p&gt;
&lt;p&gt;Influence operations work by handing
communities ammunition that feels self-verified, and a chart is ideal for
that: it compresses a claim into one shareable image, survives
translation, sheds its source in a single screenshot, and lets the person
sharing it say &amp;ldquo;look at the data&amp;rdquo; instead of &amp;ldquo;trust my source.&amp;rdquo; The
Wisconsin turnout claims I
&lt;a href="https://viborc.com/wisconsin-election-fraud-turnout-fact-check/"&gt;fact-checked in November 2020&lt;/a&gt;
ran on exactly this fuel: numbers arranged to look like arithmetic proof of
fraud, spreading faster than anyone could recompute a denominator.&lt;/p&gt;
&lt;h3 id="the-target-is-cognition-not-the-chart"&gt;The target is cognition, not the chart&lt;/h3&gt;
&lt;p&gt;The World Economic Forum&amp;rsquo;s 2026 analysis of disinformation names the shift
plainly: the frontier is
&lt;a href="https://www.weforum.org/stories/2026/03/how-cognitive-manipulation-and-ai-will-shape-disinformation-in-2026/" rel="nofollow noreferrer noopener"&gt;cognitive manipulation, content engineered for how particular audiences think&lt;/a&gt;,
rather than broadcast lies hoping to find believers.&lt;/p&gt;
&lt;p&gt;Charts suit that kind of engineering unusually well, because they exploit
biases that operate before skepticism gets a chance. Charts anchor: the
first magnitude you see calibrates every number after it. They also confirm:
readers pull out the pattern they arrived expecting, and &amp;ldquo;do your own
research&amp;rdquo; often means finding a chart that agrees with you. Fluency does
its part too. Cleanly designed information feels truer than messy
information, which is why the polished skeptic dashboards in the MIT study
out-persuaded institutional graphics that looked worse. And precision bias
closes the loop: 72.28% feels measured in a way &amp;ldquo;about seven in ten&amp;rdquo; never
will, whether or not the denominator was right.&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;ve written before about
&lt;a href="https://viborc.com/cognitive-biases-intelligence-analysis-mitigation/"&gt;how these same biases distort intelligence analysis&lt;/a&gt;:
anchoring, confirmation, the pull of a coherent story. The overlap is not a
coincidence. Intelligence analysts learned generations ago that the failure
point is rarely the data. It&amp;rsquo;s the analyst&amp;rsquo;s untested assumptions meeting
evidence shaped to exploit them. Now that generative models can shape that
evidence per audience and per bias, everyone who reads charts has inherited
the analyst&amp;rsquo;s problem. &amp;ldquo;Be skeptical&amp;rdquo; doesn&amp;rsquo;t survive contact with content
engineered for your specific priors. A procedure does. That&amp;rsquo;s what the
checklist is for.&lt;/p&gt;
&lt;h2 id="how-to-read-a-chart-like-an-analyst"&gt;How to read a chart like an analyst&lt;/h2&gt;
&lt;p&gt;Before a chart changes your mind, and especially before you share it,
walk it through seven questions. With a
little practice this takes under a minute.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Source: who counted, and where is the count?&lt;/strong&gt; Not who posted the
chart. Who produced the underlying data, and can you reach it? A chart
that names no source has the evidentiary weight of a rumor. A chart
that names one deserves thirty seconds of checking that the source
actually says what the chart claims.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Axes: where does the scale start, and which way does it run?&lt;/strong&gt; Zero
baseline on bar charts. No inversions. Log scales only where orders of
magnitude genuinely differ, and flagged when used.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Denominator: percentage of what?&lt;/strong&gt; Rates, turnouts, and growth
figures are fractions, and the fraud usually hides in the bottom half.
The Wisconsin &amp;ldquo;89% turnout&amp;rdquo; claim died the moment the denominator was
checked: votes divided by registered voters in one year, by eligible
voters in the comparison years.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Window: what did the data look like before the left edge?&lt;/strong&gt; Ask why
the series starts where it starts, why this subgroup, why this
aggregation bucket. If the honest answer is &amp;ldquo;because otherwise the
story disappears,&amp;rdquo; you have your finding.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Geometry: does the visual encoding match the numbers?&lt;/strong&gt; Areas scale
with values, not radii. No 3D. Pies only where the parts genuinely sum
to a whole.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Uncertainty: where did the error bars go?&lt;/strong&gt; An estimate presented
without its uncertainty is a claim presented without honesty. For polls
and forecasts, the margin is the story.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Interest: who benefits if you believe this?&lt;/strong&gt; The analyst&amp;rsquo;s closing
question. It doesn&amp;rsquo;t decide truth, since honest people have interests
too, but it decides how much of the previous six steps the chart has to
survive. And reverse-search viral charts. Finding the original often
turns up a crop, a re-caption, or a five-year-old graphic wearing this
week&amp;rsquo;s news.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;If a chart fails step 1, stop. There&amp;rsquo;s nothing to verify. If it passes all
seven, it has earned some provisional trust, which is more than most charts
ever actually earn.&lt;/p&gt;
&lt;h2 id="the-ethics-of-making-them"&gt;The ethics of making them&lt;/h2&gt;
&lt;p&gt;Run the checklist in reverse and you have the maker&amp;rsquo;s obligations.
Everything a careful reader has to verify, an honest visualizer supplies up
front: named sources, truthful scales, the right denominator, the full
window, geometry that matches the numbers, uncertainty on the page, and a
framing the data can actually carry. Accessibility belongs on that list
too. Color choices that survive color blindness and alt text that states
what the chart shows are part of honesty, because a chart that only some
readers can check is only partly checkable.&lt;/p&gt;
&lt;p&gt;Two additions from hard experience. First, test the take-away, not the
chart: show it to someone for ten seconds and ask what they learned. If
their sentence isn&amp;rsquo;t supported by the data, the chart is misleading no
matter how correct its construction, because first impressions don&amp;rsquo;t read
footnotes. Second, your errors will be screenshotted without their
corrections, so the standard has to be met before publication, not patched
after. Even institutional cartography fails this way. The European
Commission once published
&lt;a href="https://viborc.com/data-visualization-fail-on-the-map-of-the-european-union/"&gt;a children&amp;rsquo;s map of the EU that got borders and capitals wrong&lt;/a&gt;,
and artifacts like that keep circulating long after anyone corrects them.&lt;/p&gt;
&lt;p&gt;In 2011, Jason Moore proposed a Hippocratic Oath for visualization work,
&lt;a href="https://eagereyes.org/blog/2011/visualization-is-growing-up" rel="nofollow noreferrer noopener"&gt;published by Robert Kosara&lt;/a&gt;.
It has aged better than most advice in this field:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;I shall not use visualization to intentionally hide or confuse the truth
which it is intended to portray. I will respect the great power
visualization has in garnering wisdom and misleading the uninformed. I
accept this responsibility willfully and without reservation, and promise
to defend this oath against all enemies, both domestic and foreign.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;In 2011 that closing line read as professional etiquette. In 2026, now
that the deceptive side is automated, it reads as a side to pick.&lt;/p&gt;
&lt;h2 id="further-reading"&gt;Further reading&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Michael Correll, &lt;a href="https://arxiv.org/pdf/1811.07271.pdf" rel="nofollow noreferrer noopener"&gt;&lt;em&gt;Ethical Dimensions of Visualization Research&lt;/em&gt;&lt;/a&gt;, the research agenda behind visualization ethics.&lt;/li&gt;
&lt;li&gt;Lee et al., &lt;a href="https://arxiv.org/abs/2101.07993" rel="nofollow noreferrer noopener"&gt;&lt;em&gt;Viral Visualizations&lt;/em&gt;&lt;/a&gt;, the MIT study of coronavirus-skeptic data practices. Essential for understanding orthodox methods put to unorthodox use.&lt;/li&gt;
&lt;li&gt;University of Utah Visualization Design Lab, &lt;a href="https://vdl.sci.utah.edu/blog/2023/04/17/misleading/" rel="nofollow noreferrer noopener"&gt;&lt;em&gt;How People Actually Lie With Charts&lt;/em&gt;&lt;/a&gt;, on why real-world deception rarely violates design guidelines.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://arxiv.org/pdf/2601.12983" rel="nofollow noreferrer noopener"&gt;&lt;em&gt;ChartAttack&lt;/em&gt;&lt;/a&gt;, LLM-generated misleading charts measured against human readers.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://dl.acm.org/doi/10.1145/3757574" rel="nofollow noreferrer noopener"&gt;&lt;em&gt;Data Visualizations as Propaganda&lt;/em&gt;&lt;/a&gt;, tracing chart lineages through online anti-immigrant discourse.&lt;/li&gt;
&lt;li&gt;Pollicy, &lt;a href="https://pollicy.medium.com/whats-in-a-chart-a-step-by-step-guide-to-identifying-misinformation-in-a-data-visualization-bd964b90b3f0" rel="nofollow noreferrer noopener"&gt;&lt;em&gt;What&amp;rsquo;s in a chart?&lt;/em&gt;&lt;/a&gt;, a complementary step-by-step verification walkthrough.&lt;/li&gt;
&lt;li&gt;Alberto Cairo&amp;rsquo;s book &lt;em&gt;How Charts Lie&lt;/em&gt; remains the best long-form treatment of reading charts defensively, and &lt;a href="https://teachdatascience.com/ethicaldataviz/" rel="nofollow noreferrer noopener"&gt;&lt;em&gt;Ethical Data Viz&lt;/em&gt;&lt;/a&gt; collects teaching material for the maker&amp;rsquo;s side.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;p&gt;&lt;em&gt;Originally published on 7 May 2023 as a practitioner&amp;rsquo;s guide to
data-visualization ethics. Substantially rewritten and expanded on 14 July
2026, at the same URL.&lt;/em&gt;&lt;/p&gt;</content:encoded></item><item><title>Fact check: Was there election fraud in Wisconsin in 2020?</title><link>https://viborc.com/wisconsin-election-fraud-turnout-fact-check/</link><pubDate>Sat, 07 Nov 2020 13:06:29 +0000</pubDate><guid isPermaLink="true">https://viborc.com/wisconsin-election-fraud-turnout-fact-check/</guid><description>Two viral claims of election fraud in Wisconsin, checked against the election commission's own numbers: registration rules, turnout arithmetic, and what the math actually shows.</description><content:encoded>&lt;p&gt;The 2020 United States election produced a whole family of claims that the
process failed. Claims like that deserve to be checked rather than shared,
and the two loudest ones concern Wisconsin, where Joe Biden held the lead.&lt;/p&gt;
&lt;p&gt;The two claims:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;How could turnout in parts of Wisconsin exceed 90%, even 100%?&lt;/li&gt;
&lt;li&gt;Why did Wisconsin&amp;rsquo;s turnout jump so drastically - by &amp;ldquo;up to five standard
deviations&amp;rdquo; - compared with previous years?&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="does-turnout-above-100-prove-the-election-was-stolen"&gt;Does turnout above 100% prove the election was stolen?&lt;/h2&gt;
&lt;p&gt;Mike Coudrey posted a tweet that read: &amp;ldquo;&lt;em&gt;BREAKING: Wisconsin has more votes
than people who are registered to vote. Total number of registered voters:
3,129,000. Total number of votes cast: 3,239,920. This is direct evidence of
fraud.&lt;/em&gt;&amp;rdquo;&lt;/p&gt;
&lt;p&gt;Coudrey claimed that Wisconsin recorded more votes than it had
registered voters. He later deleted the tweet, but
&lt;a href="https://archive.is/us8Os#selection-3041.0-3041.193" rel="nofollow noreferrer noopener"&gt;an archived copy is preserved here&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Two things about American elections matter here:
most states require voters to register in advance, and Wisconsin also
allows registration &lt;em&gt;on election day itself&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;The first number Coudrey relied on, 3,129,000 registered voters, is wrong. According to the Wisconsin Elections Commission, the state had
&lt;strong&gt;3,684,726 registered voters as of 1 November 2020&lt;/strong&gt;. That is 555,726 more
than Coudrey claimed, and more than enough to cover the gap he was pointing
at.&lt;/p&gt;
&lt;p&gt;And that registration figure is itself only a snapshot from 1 November.
Because Wisconsin offers same-day voter registration, anyone who had not
registered by then could still do so at the polling place on 3 November. The
final registration total was therefore higher still than the commission&amp;rsquo;s
1 November snapshot.&lt;/p&gt;
&lt;p&gt;So &lt;strong&gt;the claim of election fraud is simply false&lt;/strong&gt;. Basic arithmetic and a
basic understanding of how Wisconsin&amp;rsquo;s registration system works are enough
to show it.&lt;/p&gt;
&lt;h3 id="how-could-the-town-of-russell-report-101-turnout-and-sheboygan-county-over-90"&gt;How could the town of Russell report 101% turnout, and Sheboygan County over 90%?&lt;/h3&gt;
&lt;p&gt;The same explanation applies. The pre-election registration counts date from
1 November; on election day itself, many more voters registered on the spot,
which can push turnout measured against the &lt;em&gt;old&lt;/em&gt; registration snapshot past
90%, or past 100%.&lt;/p&gt;
&lt;h2 id="why-did-wisconsins-turnout-deviate-so-sharply-from-previous-years"&gt;Why did Wisconsin&amp;rsquo;s turnout deviate so sharply from previous years?&lt;/h2&gt;
&lt;p&gt;The president&amp;rsquo;s son, Eric Trump, amplified a series of posts, among them
one from Harlan Hill, an adviser to President Trump
(&lt;a href="https://twitter.com/EricTrump/status/1324085320296574979" rel="nofollow noreferrer noopener"&gt;the tweet&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;If the link no longer resolves, here is a screenshot:&lt;/p&gt;
&lt;figure&gt;&lt;img src="https://viborc.com/wp-content/uploads/2020/11/wisconsin-izlaznost-je-li-prijevara-421x416.jpg" alt="Hill claims that the jump in turnout to 89.25% this year is evidence the election was stolen." width="421" height="416" loading="lazy" decoding="async"&gt;&lt;figcaption&gt;Hill claims that the jump in turnout to 89.25% is evidence the election was stolen.&lt;/figcaption&gt;&lt;/figure&gt;
&lt;p&gt;A jump to 89.25% turnout, when previous years hovered around 70%, does
catch the eye.&lt;/p&gt;
&lt;p&gt;But check the arithmetic before leaping to the conclusion that happens to
support your side of the argument, left or right.&lt;/p&gt;
&lt;p&gt;Turnout is calculated by dividing the number of people who actually voted by
the number of people &lt;em&gt;eligible&lt;/em&gt; to vote. The eligible population (broadly,
everyone over 18) is always larger than the registered population. In
Wisconsin, the eligible-voter population was &lt;strong&gt;4,536,293&lt;/strong&gt; (election
commission data, 2019). Of those, 3,684,726 had registered by 1 November,
roughly 850,000 fewer than could have.&lt;/p&gt;
&lt;p&gt;Turnout, then, is the votes cast (3,278,963 as counted on 5 November)
divided by the eligible population (4,536,293):&lt;/p&gt;
&lt;p&gt;3,278,963 / 4,536,293 = 0.7228. &lt;strong&gt;Wisconsin&amp;rsquo;s turnout was 72.28%&lt;/strong&gt;,
far lower than the 89.25% claimed by the president&amp;rsquo;s adviser.&lt;/p&gt;
&lt;p&gt;And 72.28% is no meaningful deviation from earlier years. In fact, by
Hill&amp;rsquo;s own figures, turnout in 2004 was &lt;em&gt;higher&lt;/em&gt;: 73.24%.&lt;/p&gt;
&lt;p&gt;Hill divided the wrong numbers. For previous years he used the eligible
population as the denominator; for 2020 (deliberately or not) he used the
registration snapshot instead, and the &amp;ldquo;anomaly&amp;rdquo; comes from that
substitution.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;em&gt;This analysis was first published in Croatian on 7 November 2020, while
the count was still under way. &lt;a href="https://viborc.com/hr/wisonsin-prijevara-krada-izbora-izlaznost-provjera-istinitosti/"&gt;The Croatian original remains in the
archive&lt;/a&gt;,
preserved as written.&lt;/em&gt;&lt;/p&gt;</content:encoded></item></channel></rss>