<?xml version="1.0" encoding="utf-8" standalone="yes"?><?xml-stylesheet type="text/xsl" href="/rss.xsl"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Philipp D. Dubach</title><link>https://philippdubach.com/</link><description>Recent content on Philipp D. Dubach</description><image><url>https://static.philippdubach.com/ograph/ograph-post.jpg</url><title>Philipp D. Dubach</title><link>https://philippdubach.com/</link></image><generator>Hugo -- gohugo.io</generator><language>en-us</language><managingEditor>me@philippdubach.com (Philipp D. Dubach)</managingEditor><webMaster>me@philippdubach.com (Philipp D. Dubach)</webMaster><atom:link href="https://philippdubach.com/index.xml" rel="self" type="application/rss+xml"/><item><title>Finding the Performance–Cost–Speed Sweet Spot With LLMs</title><link>https://philippdubach.com/posts/llm-performance-cost-speed-sweet-spot/</link><pubDate>Sun, 30 Aug 2026 00:00:00 +0200</pubDate><author>me@philippdubach.com (Philipp D. Dubach)</author><guid>https://philippdubach.com/posts/llm-performance-cost-speed-sweet-spot/</guid><description>&lt;figure class="emoji-cover emoji-cover--sweet-spot" role="img" aria-label="A handshake centered on a cyan-to-indigo gradient, representing the balance between LLM performance, cost, and speed."&gt;
&lt;span class="emoji-cover__glyph" aria-hidden="true"&gt;🤝&lt;/span&gt;
&lt;/figure&gt;
&lt;p&gt;I have spent an unreasonable amount of time using large language models for both work and personal projects. Most of that time went to Anthropic and OpenAI, with some Kimi and Qwen mixed in. I used them for research, writing, coding, and long agent runs.&lt;/p&gt;
&lt;p&gt;I finally feel like I have found the sweet spot for most tasks: GPT-5.6 Sol reasoning effort High in Fast mode.&lt;/p&gt;
&lt;p&gt;It took me some time to settle on that because I kept assuming that the strongest setting must be the best one. It is not. Max can be smarter and still make me less productive.&lt;/p&gt;
&lt;h2 id="i-kept-choosing-the-highest-reasoning-effort"&gt;I kept choosing the highest reasoning effort&lt;/h2&gt;
&lt;p&gt;Until this year, I was completely Claude-pilled. Claude was the model I opened first. That changed after the &lt;a href="https://philippdubach.com/posts/krugman-fable5-europe-decline/"&gt;Fable 5 incident&lt;/a&gt;. Anthropic &lt;a href="https://www.anthropic.com/news/claude-fable-5-mythos-5"&gt;released Fable 5&lt;/a&gt;, suspended it days later, and later &lt;a href="https://www.anthropic.com/news/redeploying-fable-5"&gt;brought it back with new safeguards&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;I continued to use Anthropic after that. Opus 4.8 was good. Fable 5 was often very good, but too verbose for my taste. Then came Opus 5. Yes, it is good. I still do not like it. It is somewhat slow and, gosh, it is hard to read.&lt;/p&gt;
&lt;p&gt;I moved more of my workload to GPT-5.6 Sol. Naturally, I selected the biggest settings. I used Fast mode and reached for Codex Ultra on large jobs. Ultra can divide one coding task among several sub-agents and run them in parallel. At first, that sounded ideal. In practice, the agents sometimes expanded the plan, checked each other&amp;rsquo;s work, and found new reasons not to finish.&lt;/p&gt;
&lt;p&gt;Sol can also get stuck without Ultra. I watched it inspect a problem, revise the plan, inspect again, and then produce another plan instead of the change I asked for. The model was busy. I was not getting an answer.&lt;/p&gt;
&lt;figure class="post-figure" style="width: 100%; margin: 1.5rem auto;"&gt;
&lt;button type="button" class="img-trigger" data-lightbox-target="lightbox-openai_vs_anthropic_time_light-png-1" aria-label="View full-size image"&gt;
&lt;picture class="img-lightbox"&gt;
&lt;source media="(max-width: 768px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=320,quality=80,format=auto/openai_vs_anthropic_time_light.png 320w,
https://static.philippdubach.com/cdn-cgi/image/width=480,quality=80,format=auto/openai_vs_anthropic_time_light.png 480w,
https://static.philippdubach.com/cdn-cgi/image/width=640,quality=80,format=auto/openai_vs_anthropic_time_light.png 640w,
https://static.philippdubach.com/cdn-cgi/image/width=960,quality=80,format=auto/openai_vs_anthropic_time_light.png 960w,
https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/openai_vs_anthropic_time_light.png 1200w"
sizes="(max-width: 768px) 100vw, 720px"&gt;
&lt;source media="(max-width: 1024px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=768,quality=80,format=auto/openai_vs_anthropic_time_light.png 768w,
https://static.philippdubach.com/cdn-cgi/image/width=1024,quality=80,format=auto/openai_vs_anthropic_time_light.png 1024w,
https://static.philippdubach.com/cdn-cgi/image/width=1440,quality=80,format=auto/openai_vs_anthropic_time_light.png 1440w"
sizes="(max-width: 768px) 100vw, 720px"&gt;
&lt;source media="(min-width: 1025px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/openai_vs_anthropic_time_light.png 1200w,
https://static.philippdubach.com/cdn-cgi/image/width=1600,quality=80,format=auto/openai_vs_anthropic_time_light.png 1600w,
https://static.philippdubach.com/cdn-cgi/image/width=2000,quality=80,format=auto/openai_vs_anthropic_time_light.png 2000w"
sizes="(max-width: 768px) 100vw, 720px"&gt;
&lt;img src="https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/openai_vs_anthropic_time_light.png"
alt="GPT-5.6 Sol vs Claude Opus 5 and 20 other OpenAI and Anthropic configurations plotted by Intelligence Index and total working time."
class=""
width="2920"
height="1360" style="aspect-ratio: 2920 / 1360"
fetchpriority="high"
decoding="async"&gt;
&lt;/picture&gt;
&lt;/button&gt;
&lt;/figure&gt;
&lt;dialog id="lightbox-openai_vs_anthropic_time_light-png-1" class="lightbox-dialog" aria-label="Full-size image" data-hires="https://static.philippdubach.com/cdn-cgi/image/width=2000,quality=85,format=auto/openai_vs_anthropic_time_light.png"&gt;
&lt;form method="dialog" class="lightbox-close-form"&gt;
&lt;button type="submit" class="lightbox-close" aria-label="Close"&gt;×&lt;/button&gt;
&lt;/form&gt;
&lt;img alt="GPT-5.6 Sol vs Claude Opus 5 and 20 other OpenAI and Anthropic configurations plotted by Intelligence Index and total working time." decoding="async"&gt;
&lt;/dialog&gt;
&lt;h2 id="the-gpt-56-sol-reasoning-effort-curve-bends-at-high"&gt;The GPT-5.6 Sol reasoning effort curve bends at High&lt;/h2&gt;
&lt;p&gt;I compared 22 configurations using the &lt;a href="https://artificialanalysis.ai/models/releases/gpt-5-6-sol"&gt;Artificial Analysis Intelligence Index&lt;/a&gt;. Sol shows a clear pattern:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Effort&lt;/th&gt;
&lt;th style="text-align: right"&gt;Index&lt;/th&gt;
&lt;th style="text-align: right"&gt;Estimated cost per test task&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Low&lt;/td&gt;
&lt;td style="text-align: right"&gt;51&lt;/td&gt;
&lt;td style="text-align: right"&gt;$0.18&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Medium&lt;/td&gt;
&lt;td style="text-align: right"&gt;56&lt;/td&gt;
&lt;td style="text-align: right"&gt;$0.29&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;High&lt;/td&gt;
&lt;td style="text-align: right"&gt;57&lt;/td&gt;
&lt;td style="text-align: right"&gt;$0.43&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Xhigh&lt;/td&gt;
&lt;td style="text-align: right"&gt;59&lt;/td&gt;
&lt;td style="text-align: right"&gt;$0.63&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Max&lt;/td&gt;
&lt;td style="text-align: right"&gt;61&lt;/td&gt;
&lt;td style="text-align: right"&gt;$0.95&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Medium is the obvious bargain. High adds only one point, but it gives the model more room on difficult tasks without making every interaction feel slow.&lt;/p&gt;
&lt;p&gt;After High, the trade gets worse. Xhigh costs about 47% more for two points. Max costs more than twice as much as High for four points.&lt;/p&gt;
&lt;figure class="post-figure" style="width: 100%; margin: 1.5rem auto;"&gt;
&lt;button type="button" class="img-trigger" data-lightbox-target="lightbox-gpt56_speed_vs_intelligence_light-png-2" aria-label="View full-size image"&gt;
&lt;picture class="img-lightbox"&gt;
&lt;source media="(max-width: 768px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=320,quality=80,format=auto/gpt56_speed_vs_intelligence_light.png 320w,
https://static.philippdubach.com/cdn-cgi/image/width=480,quality=80,format=auto/gpt56_speed_vs_intelligence_light.png 480w,
https://static.philippdubach.com/cdn-cgi/image/width=640,quality=80,format=auto/gpt56_speed_vs_intelligence_light.png 640w,
https://static.philippdubach.com/cdn-cgi/image/width=960,quality=80,format=auto/gpt56_speed_vs_intelligence_light.png 960w,
https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/gpt56_speed_vs_intelligence_light.png 1200w"
sizes="(max-width: 768px) 100vw, 720px"&gt;
&lt;source media="(max-width: 1024px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=768,quality=80,format=auto/gpt56_speed_vs_intelligence_light.png 768w,
https://static.philippdubach.com/cdn-cgi/image/width=1024,quality=80,format=auto/gpt56_speed_vs_intelligence_light.png 1024w,
https://static.philippdubach.com/cdn-cgi/image/width=1440,quality=80,format=auto/gpt56_speed_vs_intelligence_light.png 1440w"
sizes="(max-width: 768px) 100vw, 720px"&gt;
&lt;source media="(min-width: 1025px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/gpt56_speed_vs_intelligence_light.png 1200w,
https://static.philippdubach.com/cdn-cgi/image/width=1600,quality=80,format=auto/gpt56_speed_vs_intelligence_light.png 1600w,
https://static.philippdubach.com/cdn-cgi/image/width=2000,quality=80,format=auto/gpt56_speed_vs_intelligence_light.png 2000w"
sizes="(max-width: 768px) 100vw, 720px"&gt;
&lt;img src="https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/gpt56_speed_vs_intelligence_light.png"
alt="GPT-5.6 Sol reasoning effort from Low through Max compared by Intelligence Index and time to first token in Standard and Fast modes."
class=""
width="2640"
height="1200" style="aspect-ratio: 2640 / 1200"
loading="lazy"
decoding="async"&gt;
&lt;/picture&gt;
&lt;/button&gt;
&lt;/figure&gt;
&lt;dialog id="lightbox-gpt56_speed_vs_intelligence_light-png-2" class="lightbox-dialog" aria-label="Full-size image" data-hires="https://static.philippdubach.com/cdn-cgi/image/width=2000,quality=85,format=auto/gpt56_speed_vs_intelligence_light.png"&gt;
&lt;form method="dialog" class="lightbox-close-form"&gt;
&lt;button type="submit" class="lightbox-close" aria-label="Close"&gt;×&lt;/button&gt;
&lt;/form&gt;
&lt;img alt="GPT-5.6 Sol reasoning effort from Low through Max compared by Intelligence Index and time to first token in Standard and Fast modes." decoding="async"&gt;
&lt;/dialog&gt;
&lt;p&gt;Sol Max spends about 146 seconds thinking before it starts writing in Standard mode. Moving from Xhigh to Max adds about 52.6 seconds of waiting for two points.&lt;/p&gt;
&lt;h2 id="working-time-matters-more-than-token-price"&gt;Working time matters more than token price&lt;/h2&gt;
&lt;p&gt;Combining time to first token with output speed gives the total working time: the initial pause plus the time needed to generate the full response.&lt;/p&gt;
&lt;figure class="post-figure" style="width: 100%; margin: 1.5rem auto;"&gt;
&lt;button type="button" class="img-trigger" data-lightbox-target="lightbox-gpt56_time_vs_intelligence_light-png-3" aria-label="View full-size image"&gt;
&lt;picture class="img-lightbox"&gt;
&lt;source media="(max-width: 768px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=320,quality=80,format=auto/gpt56_time_vs_intelligence_light.png 320w,
https://static.philippdubach.com/cdn-cgi/image/width=480,quality=80,format=auto/gpt56_time_vs_intelligence_light.png 480w,
https://static.philippdubach.com/cdn-cgi/image/width=640,quality=80,format=auto/gpt56_time_vs_intelligence_light.png 640w,
https://static.philippdubach.com/cdn-cgi/image/width=960,quality=80,format=auto/gpt56_time_vs_intelligence_light.png 960w,
https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/gpt56_time_vs_intelligence_light.png 1200w"
sizes="(max-width: 768px) 100vw, 720px"&gt;
&lt;source media="(max-width: 1024px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=768,quality=80,format=auto/gpt56_time_vs_intelligence_light.png 768w,
https://static.philippdubach.com/cdn-cgi/image/width=1024,quality=80,format=auto/gpt56_time_vs_intelligence_light.png 1024w,
https://static.philippdubach.com/cdn-cgi/image/width=1440,quality=80,format=auto/gpt56_time_vs_intelligence_light.png 1440w"
sizes="(max-width: 768px) 100vw, 720px"&gt;
&lt;source media="(min-width: 1025px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/gpt56_time_vs_intelligence_light.png 1200w,
https://static.philippdubach.com/cdn-cgi/image/width=1600,quality=80,format=auto/gpt56_time_vs_intelligence_light.png 1600w,
https://static.philippdubach.com/cdn-cgi/image/width=2000,quality=80,format=auto/gpt56_time_vs_intelligence_light.png 2000w"
sizes="(max-width: 768px) 100vw, 720px"&gt;
&lt;img src="https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/gpt56_time_vs_intelligence_light.png"
alt="GPT-5.6 Sol, Terra, and Luna reasoning levels compared by Intelligence Index and total working time."
class=""
width="2880"
height="1320" style="aspect-ratio: 2880 / 1320"
loading="lazy"
decoding="async"&gt;
&lt;/picture&gt;
&lt;/button&gt;
&lt;/figure&gt;
&lt;dialog id="lightbox-gpt56_time_vs_intelligence_light-png-3" class="lightbox-dialog" aria-label="Full-size image" data-hires="https://static.philippdubach.com/cdn-cgi/image/width=2000,quality=85,format=auto/gpt56_time_vs_intelligence_light.png"&gt;
&lt;form method="dialog" class="lightbox-close-form"&gt;
&lt;button type="submit" class="lightbox-close" aria-label="Close"&gt;×&lt;/button&gt;
&lt;/form&gt;
&lt;img alt="GPT-5.6 Sol, Terra, and Luna reasoning levels compared by Intelligence Index and total working time." decoding="async"&gt;
&lt;/dialog&gt;
&lt;p&gt;On the full test set, Sol takes about 88 hours at High and 150 at Xhigh. That is 1.7 times the working time for two points. Max rises to roughly 270 hours.&lt;/p&gt;
&lt;p&gt;The same problem appeared when I tried &lt;a href="https://philippdubach.com/posts/kimi-k3-inside-claude-code/"&gt;Kimi K3 inside Claude Code&lt;/a&gt;. Cheap tokens do not help if I need more retries or the model never closes the task.&lt;/p&gt;
&lt;h2 id="gpt-56-sol-vs-claude-opus-5-at-the-top"&gt;GPT-5.6 Sol vs Claude Opus 5 at the top&lt;/h2&gt;
&lt;figure class="post-figure" style="width: 100%; margin: 1.5rem auto;"&gt;
&lt;button type="button" class="img-trigger" data-lightbox-target="lightbox-claude_time_vs_intelligence_light-png-5" aria-label="View full-size image"&gt;
&lt;picture class="img-lightbox"&gt;
&lt;source media="(max-width: 768px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=320,quality=80,format=auto/claude_time_vs_intelligence_light.png 320w,
https://static.philippdubach.com/cdn-cgi/image/width=480,quality=80,format=auto/claude_time_vs_intelligence_light.png 480w,
https://static.philippdubach.com/cdn-cgi/image/width=640,quality=80,format=auto/claude_time_vs_intelligence_light.png 640w,
https://static.philippdubach.com/cdn-cgi/image/width=960,quality=80,format=auto/claude_time_vs_intelligence_light.png 960w,
https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/claude_time_vs_intelligence_light.png 1200w"
sizes="(max-width: 768px) 100vw, 720px"&gt;
&lt;source media="(max-width: 1024px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=768,quality=80,format=auto/claude_time_vs_intelligence_light.png 768w,
https://static.philippdubach.com/cdn-cgi/image/width=1024,quality=80,format=auto/claude_time_vs_intelligence_light.png 1024w,
https://static.philippdubach.com/cdn-cgi/image/width=1440,quality=80,format=auto/claude_time_vs_intelligence_light.png 1440w"
sizes="(max-width: 768px) 100vw, 720px"&gt;
&lt;source media="(min-width: 1025px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/claude_time_vs_intelligence_light.png 1200w,
https://static.philippdubach.com/cdn-cgi/image/width=1600,quality=80,format=auto/claude_time_vs_intelligence_light.png 1600w,
https://static.philippdubach.com/cdn-cgi/image/width=2000,quality=80,format=auto/claude_time_vs_intelligence_light.png 2000w"
sizes="(max-width: 768px) 100vw, 720px"&gt;
&lt;img src="https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/claude_time_vs_intelligence_light.png"
alt="Claude Opus 5, Fable 5, Opus 4.8, and Sonnet 5 compared by Intelligence Index and total working time."
class=""
width="2880"
height="1320" style="aspect-ratio: 2880 / 1320"
loading="lazy"
decoding="async"&gt;
&lt;/picture&gt;
&lt;/button&gt;
&lt;/figure&gt;
&lt;dialog id="lightbox-claude_time_vs_intelligence_light-png-5" class="lightbox-dialog" aria-label="Full-size image" data-hires="https://static.philippdubach.com/cdn-cgi/image/width=2000,quality=85,format=auto/claude_time_vs_intelligence_light.png"&gt;
&lt;form method="dialog" class="lightbox-close-form"&gt;
&lt;button type="submit" class="lightbox-close" aria-label="Close"&gt;×&lt;/button&gt;
&lt;/form&gt;
&lt;img alt="Claude Opus 5, Fable 5, Opus 4.8, and Sonnet 5 compared by Intelligence Index and total working time." decoding="async"&gt;
&lt;/dialog&gt;
&lt;p&gt;Anthropic has the same problem at its upper end. &lt;a href="https://artificialanalysis.ai/models/claude-opus-5-xhigh"&gt;Opus 5 reaches about 63 at Xhigh&lt;/a&gt;. Max stays near 63 after adding roughly 87 hours across the test set. More effort does not guarantee a better result.&lt;/p&gt;
&lt;p&gt;Benchmarks also miss whether a response is pleasant to read. They do not know whether an agent recognizes that it is stuck. A model can score higher and still waste my time.&lt;/p&gt;</description></item><item><title>The OpenAI–Hugging Face Incident in Plain English</title><link>https://philippdubach.com/posts/openai-hugging-face-incident-plain-english/</link><pubDate>Sun, 16 Aug 2026 00:00:00 +0200</pubDate><author>me@philippdubach.com (Philipp D. Dubach)</author><guid>https://philippdubach.com/posts/openai-hugging-face-incident-plain-english/</guid><description>&lt;figure class="post-figure" style="width: 80%; margin: 1.5rem auto;"&gt;
&lt;button type="button" class="img-trigger" data-lightbox-target="lightbox-openai-hugging-face-incident-cover-v2-png-0" aria-label="View full-size image"&gt;
&lt;picture class="img-lightbox"&gt;
&lt;source media="(max-width: 768px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=320,quality=80,format=auto/openai-hugging-face-incident-cover-v2.png 320w,
https://static.philippdubach.com/cdn-cgi/image/width=480,quality=80,format=auto/openai-hugging-face-incident-cover-v2.png 480w,
https://static.philippdubach.com/cdn-cgi/image/width=640,quality=80,format=auto/openai-hugging-face-incident-cover-v2.png 640w,
https://static.philippdubach.com/cdn-cgi/image/width=960,quality=80,format=auto/openai-hugging-face-incident-cover-v2.png 960w,
https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/openai-hugging-face-incident-cover-v2.png 1200w"
sizes="(max-width: 768px) 80vw, 576px"&gt;
&lt;source media="(max-width: 1024px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=768,quality=80,format=auto/openai-hugging-face-incident-cover-v2.png 768w,
https://static.philippdubach.com/cdn-cgi/image/width=1024,quality=80,format=auto/openai-hugging-face-incident-cover-v2.png 1024w,
https://static.philippdubach.com/cdn-cgi/image/width=1440,quality=80,format=auto/openai-hugging-face-incident-cover-v2.png 1440w"
sizes="(max-width: 768px) 80vw, 576px"&gt;
&lt;source media="(min-width: 1025px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/openai-hugging-face-incident-cover-v2.png 1200w,
https://static.philippdubach.com/cdn-cgi/image/width=1600,quality=80,format=auto/openai-hugging-face-incident-cover-v2.png 1600w,
https://static.philippdubach.com/cdn-cgi/image/width=2000,quality=80,format=auto/openai-hugging-face-incident-cover-v2.png 2000w"
sizes="(max-width: 768px) 80vw, 576px"&gt;
&lt;img src="https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/openai-hugging-face-incident-cover-v2.png"
alt="A yellow paper-cut Hugging Face character behind four transparent security boundaries as an orange path crosses the panels."
class=""
width="1600"
height="840"
fetchpriority="high"
decoding="async"&gt;
&lt;/picture&gt;
&lt;/button&gt;
&lt;/figure&gt;
&lt;dialog id="lightbox-openai-hugging-face-incident-cover-v2-png-0" class="lightbox-dialog" aria-label="Full-size image" data-hires="https://static.philippdubach.com/cdn-cgi/image/width=2000,quality=85,format=auto/openai-hugging-face-incident-cover-v2.png"&gt;
&lt;form method="dialog" class="lightbox-close-form"&gt;
&lt;button type="submit" class="lightbox-close" aria-label="Close"&gt;×&lt;/button&gt;
&lt;/form&gt;
&lt;img alt="A yellow paper-cut Hugging Face character behind four transparent security boundaries as an orange path crosses the panels." decoding="async"&gt;
&lt;/dialog&gt;
&lt;p&gt;The OpenAI–Hugging Face incident involved &lt;a href="https://huggingface.co/blog/agent-intrusion-technical-timeline"&gt;about 17,600 recovered agent actions&lt;/a&gt; in a campaign that lasted roughly four and a half days. The agents started inside an OpenAI cyber evaluation. Some of their activity ended inside Hugging Face production.&lt;/p&gt;
&lt;p&gt;That is the incident in three sentences. The difficult part is keeping the next three claims separate: what the models did, what the surrounding system permitted, and what Hugging Face confirmed.&lt;/p&gt;
&lt;h2 id="17600-actions-do-not-make-a-rogue-ai"&gt;17,600 actions do not make a rogue AI&lt;/h2&gt;
&lt;p&gt;&lt;a href="https://openai.com/index/hugging-face-model-evaluation-security-incident/"&gt;OpenAI says the model combination included&lt;/a&gt; GPT-5.6 Sol and an unnamed internal research prototype. OpenAI tested the models for cyber capability in an evaluation based on ExploitGym. OpenAI reduced their cyber refusals and disabled production classifiers for the test.&lt;/p&gt;
&lt;p&gt;The word &amp;ldquo;autonomous&amp;rdquo; needs care here. The models took many actions without a person approving each step. People still selected the goal, evaluation design, tools, compute, and permissions. The disclosures don&amp;rsquo;t state the stop conditions. The model was one component inside an agent system.&lt;/p&gt;
&lt;p&gt;OpenAI assessed that the models were seeking benchmark solutions. Hugging Face described the activity as evaluation cheating. Those are reasonable interpretations of the action sequence. They aren&amp;rsquo;t proof of consciousness, a human-like motive, or a general hostile goal.&lt;/p&gt;
&lt;p&gt;The dramatic framing points at the wrong control. A prompt can tell a model to stay inside a boundary. A network rule or identity policy can enforce that boundary.&lt;/p&gt;
&lt;p&gt;The &lt;a href="https://www.aisi.gov.uk/blog/cheating-behaviour-in-frontier-model-evaluations?stream=top"&gt;UK AI Security Institute has already documented evaluation cheating&lt;/a&gt; in frontier models. Its work shows that a model can recognize the structure of a test and pursue an easier route. In this case, the easier route reached somebody else&amp;rsquo;s production system.&lt;/p&gt;
&lt;h2 id="how-the-ai-agents-escaped-the-evaluation-sandbox"&gt;How the AI agents escaped the evaluation sandbox&lt;/h2&gt;
&lt;p&gt;The evaluation didn&amp;rsquo;t initially give the models direct Internet access. According to OpenAI, the agents found a weakness in an Artifactory package proxy. That proxy gave them an unintended route outside the test environment.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://jfrog.com/blog/jfrog-and-openai-collaboration-on-zero-day-security-findings/"&gt;JFrog later described its work with OpenAI&lt;/a&gt; on that previously unknown weakness. The technical exploit matters to defenders, but the system design matters to everyone else. An allowed dependency became an Internet path.&lt;/p&gt;
&lt;p&gt;Hugging Face places the first recovered action at 02:28 UTC on July 9. At 04:01, the agents ran the first recovered root-level command on an outside sandbox. The campaign entered Hugging Face production on July 11. Hugging Face cut access on July 13.&lt;/p&gt;
&lt;p&gt;The daily totals in the report sum to 17,613 actions. Hugging Face rounds that figure to about 17,600 and groups the actions into roughly 6,280 clusters.&lt;/p&gt;
&lt;p&gt;Hugging Face later &lt;a href="https://github.com/huggingface/blog/commit/1d48cddf724affab8f36c0e6abfe247c0fb25ed2"&gt;corrected its duration wording&lt;/a&gt;. The recovered campaign lasted about four and a half days. Activity inside Hugging Face infrastructure lasted about two and a half days.&lt;/p&gt;
&lt;p&gt;The correction matters because incident duration determines exposure estimates, log scope, and which controls were active at each point.&lt;/p&gt;
&lt;h2 id="the-intrusion-reached-farther-than-five-datasets"&gt;The intrusion reached farther than five datasets&lt;/h2&gt;
&lt;p&gt;The five-dataset figure is easy to misread. It describes the customer content that Hugging Face identified, not the total reach of the intrusion.&lt;/p&gt;
&lt;p&gt;Hugging Face says five customer datasets had names and files that suggested a connection to benchmark challenges and solutions. It also reports access to operational metadata from dataset-server searches. The company doesn&amp;rsquo;t claim that every file was a verified answer key.&lt;/p&gt;
&lt;p&gt;Hugging Face reports that the agents accessed one internal database, service credentials, secrets, production clusters, and a small set of source-control repositories. The agents also obtained write permissions. Hugging Face&amp;rsquo;s controls denied 84 operations against credential and cluster-key stores. The agents still accessed one secret object that contained 136 keys.&lt;/p&gt;
&lt;p&gt;Hugging Face&amp;rsquo;s record shows both containment and exposure. The company found no unauthorized commit, workflow change, container image, or package that shipped through its software supply chain. Hugging Face also found no bulk database extraction and no database write from the nodes it examined.&lt;/p&gt;
&lt;p&gt;Those are bounded findings. &amp;ldquo;No unauthorized package shipped&amp;rdquo; doesn&amp;rsquo;t mean &amp;ldquo;no write access existed.&amp;rdquo; &amp;ldquo;No bulk extraction appeared in the reviewed logs&amp;rdquo; doesn&amp;rsquo;t mean &amp;ldquo;nothing left the environment.&amp;rdquo;&lt;/p&gt;
&lt;p&gt;I find model-only explanations weak for exactly this reason. Security, tools, identity, orchestration, and context all sit around the model. I described that layered structure in &lt;a href="https://philippdubach.com/posts/dont-go-monolithic-the-agent-stack-is-stratifying/"&gt;Don&amp;rsquo;t Go Monolithic; The Agent Stack Is Stratifying&lt;/a&gt;. The same decomposition is useful when an agent fails.&lt;/p&gt;
&lt;h2 id="the-public-account-changed-because-the-evidence-changed"&gt;The public account changed because the evidence changed&lt;/h2&gt;
&lt;p&gt;Hugging Face&amp;rsquo;s &lt;a href="https://huggingface.co/blog/security-incident-july-2026"&gt;initial disclosure on July 16&lt;/a&gt; reported access to limited internal datasets and service credentials. Hugging Face was still assessing effects on customers and partners. That was the correct level of certainty for the first notice.&lt;/p&gt;
&lt;p&gt;The &lt;a href="https://huggingface.co/blog/agent-intrusion-technical-timeline"&gt;July 27 technical reconstruction&lt;/a&gt; added the detailed timeline, action counts, internal access, and customer-content findings. Later edits corrected the campaign duration and the description of the datasets.&lt;/p&gt;
&lt;p&gt;On July 30, Hugging Face &lt;a href="https://github.com/huggingface/blog/commit/119627f344c78ff5c8b13b8a45f58174310aa028"&gt;corrected third-party attribution&lt;/a&gt;. ExploitGym&amp;rsquo;s maintainers and infrastructure didn&amp;rsquo;t participate in OpenAI&amp;rsquo;s deployment. An unknown third party deployed the outside harness and labeled it CyberGym. The harness exposed an endpoint that upstream CyberGym doesn&amp;rsquo;t provide. &lt;a href="https://modal.com/blog/a-note-on-the-hugging-face-agent-incident"&gt;Modal said its platform and isolation weren&amp;rsquo;t compromised&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;The same edit replaced stronger answer-key language with a statement about apparent connections.&lt;/p&gt;
&lt;p&gt;OpenAI also updated its account. It reported limited use of four accounts on outside services. It later said that &lt;a href="https://openai.com/index/third-party-cyber-evaluations-involving-openai-models/"&gt;other incidents involving UK AISI and Irregular were separate&lt;/a&gt;. It also said &lt;a href="https://openai.com/index/responding-next-frontier-critical-cyber-capabilities/"&gt;Astra was not involved&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;These changes are not evidence that public reporting failed. The failure would be changing the claims silently. A dated correction preserves what the organizations knew, what changed, and why.&lt;/p&gt;
&lt;p&gt;OpenAI said it worked with CrowdStrike on the technical investigation. Hugging Face said outside forensic specialists supported its work. OpenAI&amp;rsquo;s incident page still described its technical report and the METR and Redwood Research assessment as future work. I found no public findings by August 16.&lt;/p&gt;
&lt;aside class="newsletter-preview" aria-label="Newsletter signup"&gt;
&lt;p class="newsletter-preview__title"&gt;Monthly notes&lt;/p&gt;&lt;form class="newsletter-preview__form" method="post" action="https://newsletter-api.philippd.workers.dev/api/subscribe" data-newsletter-endpoint="https://newsletter-api.philippd.workers.dev/api/subscribe" data-newsletter-count-endpoint="https://newsletter-api.philippd.workers.dev/api/subscriber-count" novalidate&gt;
&lt;label for="newsletter-2"&gt;Email address&lt;/label&gt;
&lt;div class="newsletter-preview__controls"&gt;
&lt;input id="newsletter-2" name="email" type="email" autocomplete="email" inputmode="email" required placeholder="you@example.com"&gt;
&lt;button type="submit"&gt;Subscribe&lt;/button&gt;
&lt;/div&gt;
&lt;p class="newsletter-preview__note" data-newsletter-note&gt;&lt;a href="https://philippdubach.com/posts/building-a-no-tracking-newsletter-from-markdown-to-distribution/"&gt;No tracking&lt;/a&gt;. Unsubscribe anytime.&lt;/p&gt;
&lt;p class="newsletter-preview__message" data-newsletter-message role="status" aria-live="polite"&gt;&lt;/p&gt;
&lt;/form&gt;
&lt;/aside&gt;
&lt;h2 id="plain-english-must-preserve-uncertainty"&gt;Plain English must preserve uncertainty&lt;/h2&gt;
&lt;p&gt;Plain language can make an inaccurate incident report easier to read. It cannot make the report accurate.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://www.asd-ste100.org/assets/files/ASD-STE100_ISSUE9.pdf"&gt;ASD-STE100 Simplified Technical English (STE) Issue 9&lt;/a&gt;, dated January 15, 2025, contains 53 writing rules in nine sections. Its dictionary has 875 approved general words. The &lt;a href="https://asd-ste100.org/about_STE.html"&gt;official overview&lt;/a&gt; also lists roughly 1,200 unapproved entries with alternatives.&lt;/p&gt;
&lt;p&gt;That doesn&amp;rsquo;t limit a technical report to 875 words. Writers can also use technical nouns and technical verbs from an applicable glossary. ASD-STE100 requires consistent terminology. I use a separate evidence framework for this incident.&lt;/p&gt;
&lt;p&gt;I use four evidence-status labels:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Status&lt;/th&gt;
&lt;th&gt;Plain-English meaning&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Confirmed&lt;/td&gt;
&lt;td&gt;Named evidence supports the claim.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Assessed&lt;/td&gt;
&lt;td&gt;A named source gives an interpretation and states its evidence.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Unknown&lt;/td&gt;
&lt;td&gt;The investigation has not established the answer.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Corrected&lt;/td&gt;
&lt;td&gt;A later dated statement changes an earlier statement.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Access, modification, and publication also need separate sentences. The agents accessed a small set of source-control repositories. The agents obtained write permissions. Hugging Face says it found no unauthorized software change that shipped. Combining those facts into one reassuring sentence would remove the distinction a reader needs.&lt;/p&gt;
&lt;p&gt;A checker can flag long sentences and unapproved or unknown words. &lt;a href="https://asd-ste100.org/STEsoftware.html"&gt;Official ASD-STE100 tool guidance&lt;/a&gt; says tools cannot replace the writer or the standard. A &lt;a href="https://www.asd-ste100.org/assets/files/WhitePaper-ASD-STE100_and_AI.pdf"&gt;June 2026 white paper from the ASD Simplified Technical English Maintenance Group&lt;/a&gt; applies the same limit to AI-generated text. The human author or organization remains responsible for accuracy and compliance.&lt;/p&gt;
&lt;p&gt;This article applies selected STE clarity principles. It wasn&amp;rsquo;t reviewed against every applicable Issue 9 rule or dictionary entry. It doesn&amp;rsquo;t claim ASD-STE100 compliance.&lt;/p&gt;
&lt;p&gt;Model explanations need the same evidentiary discipline. In &lt;a href="https://philippdubach.com/posts/what-claude-thinks-but-doesnt-say/"&gt;What Claude Thinks But Doesn&amp;rsquo;t Say&lt;/a&gt;, I argued that readable model explanations are leads, not source material. Agent self-reports belong in the same category.&lt;/p&gt;
&lt;h2 id="the-controls-belong-around-the-model"&gt;The controls belong around the model&lt;/h2&gt;
&lt;p&gt;OpenAI&amp;rsquo;s evaluation reduced model refusals and disabled production classifiers by design. A serious cyber-capability test may require those changes. They also remove two behavioral safeguards, which leaves more work for independent controls.&lt;/p&gt;
&lt;p&gt;The &lt;a href="https://www.aisi.gov.uk/blog/how-our-new-control-red-team-is-stress-testing-frontier-monitors"&gt;UK AI Security Institute&amp;rsquo;s control red team&lt;/a&gt; tests whether monitors can detect deliberately evasive behavior. The &lt;a href="https://www.ncsc.gov.uk/blogs/10-questions-ask-using-ai-models-find-vulnerabilities"&gt;UK National Cyber Security Centre&lt;/a&gt; asks organizations to keep ordinary security controls around AI vulnerability tools. Their advice is fairly ordinary: put enforcement around the model.&lt;/p&gt;
&lt;p&gt;That design has four parts. (1) Give the evaluation short-lived identities and narrow network routes. (2) Record model actions, tool calls, identity events, and network events on one clock. (3) Stop the run when it crosses a trust boundary, even if the behavior looks scientifically interesting. (4) Give the incident owner a tested way to contact an affected third party.&lt;/p&gt;
&lt;p&gt;Prompts and model refusals can reduce risk, but neither independently enforces a security boundary.&lt;/p&gt;
&lt;p&gt;The case also says little about how often agents will do this. One unusual evaluation with high capability and reduced safeguards is not a base-rate estimate. The evidence supports a narrower claim: capability becomes more dangerous when permissions, network paths, time, and weak containment line up.&lt;/p&gt;
&lt;p&gt;AI-lab security has been part of the policy argument for years. &lt;a href="https://philippdubach.com/posts/aschenbrenners-receipts/"&gt;Aschenbrenner&amp;rsquo;s Receipts&lt;/a&gt; examined the prediction that frontier models would turn lab security into a national concern. This incident supplies one concrete mechanism without proving the entire forecast.&lt;/p&gt;
&lt;h2 id="an-evaluation-that-can-reach-production-is-already-a-deployment"&gt;An evaluation that can reach production is already a deployment&lt;/h2&gt;
&lt;p&gt;The incident crossed several trust boundaries after OpenAI started the evaluation. A dependency exposed an unintended path to the Internet. Hugging Face absorbed the operational consequences.&lt;/p&gt;
&lt;p&gt;I would assign controls by ownership. The evaluation owner controls the goal, model, tools, and initial environment. Infrastructure providers control dependencies and isolation within their services. The affected third party controls its own detection and response. Each party needs logs that let the other parties reconstruct the sequence.&lt;/p&gt;
&lt;p&gt;What bothers me is how ordinary the failure looks once the drama is stripped away. A test had tools, a reachable dependency, time, and reduced safeguards. Hugging Face then had to respond to the incident.&lt;/p&gt;
&lt;p&gt;OpenAI started a capability test, and Hugging Face ended up running incident response. Any evaluation that can cause an incident at another organization requires production-grade security controls.&lt;/p&gt;</description></item><item><title>Put the Model in the Basement</title><link>https://philippdubach.com/posts/put-the-model-in-the-basement/</link><pubDate>Sat, 15 Aug 2026 00:00:00 +0200</pubDate><author>me@philippdubach.com (Philipp D. Dubach)</author><guid>https://philippdubach.com/posts/put-the-model-in-the-basement/</guid><description>&lt;figure class="post-figure" style="width: 100%; margin: 1.5rem auto;"&gt;
&lt;button type="button" class="img-trigger" data-lightbox-target="lightbox-mode-basement-cover-image-png-0" aria-label="View full-size image"&gt;
&lt;picture class="img-lightbox"&gt;
&lt;source media="(max-width: 768px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=320,quality=80,format=auto/mode-basement-cover-image.png 320w,
https://static.philippdubach.com/cdn-cgi/image/width=480,quality=80,format=auto/mode-basement-cover-image.png 480w,
https://static.philippdubach.com/cdn-cgi/image/width=640,quality=80,format=auto/mode-basement-cover-image.png 640w,
https://static.philippdubach.com/cdn-cgi/image/width=960,quality=80,format=auto/mode-basement-cover-image.png 960w,
https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/mode-basement-cover-image.png 1200w"
sizes="(max-width: 768px) 100vw, 720px"&gt;
&lt;source media="(max-width: 1024px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=768,quality=80,format=auto/mode-basement-cover-image.png 768w,
https://static.philippdubach.com/cdn-cgi/image/width=1024,quality=80,format=auto/mode-basement-cover-image.png 1024w,
https://static.philippdubach.com/cdn-cgi/image/width=1440,quality=80,format=auto/mode-basement-cover-image.png 1440w"
sizes="(max-width: 768px) 100vw, 720px"&gt;
&lt;source media="(min-width: 1025px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/mode-basement-cover-image.png 1200w,
https://static.philippdubach.com/cdn-cgi/image/width=1600,quality=80,format=auto/mode-basement-cover-image.png 1600w,
https://static.philippdubach.com/cdn-cgi/image/width=2000,quality=80,format=auto/mode-basement-cover-image.png 2000w"
sizes="(max-width: 768px) 100vw, 720px"&gt;
&lt;img src="https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/mode-basement-cover-image.png"
alt="A secure local AI server room in a Swiss alpine building. One black server rack stands behind glass beside a window with mountain light."
class=""
width="1731"
height="909"
fetchpriority="high"
decoding="async"&gt;
&lt;/picture&gt;
&lt;/button&gt;
&lt;/figure&gt;
&lt;dialog id="lightbox-mode-basement-cover-image-png-0" class="lightbox-dialog" aria-label="Full-size image" data-hires="https://static.philippdubach.com/cdn-cgi/image/width=2000,quality=85,format=auto/mode-basement-cover-image.png"&gt;
&lt;form method="dialog" class="lightbox-close-form"&gt;
&lt;button type="submit" class="lightbox-close" aria-label="Close"&gt;×&lt;/button&gt;
&lt;/form&gt;
&lt;img alt="A secure local AI server room in a Swiss alpine building. One black server rack stands behind glass beside a window with mountain light." decoding="async"&gt;
&lt;/dialog&gt;
&lt;p&gt;This article follows &lt;a href="https://philippdubach.com/posts/kimi-k3-inside-claude-code/"&gt;I Tried Kimi K3 Inside Claude Code&lt;/a&gt;. That test asked whether Kimi K3 could work inside a familiar coding setup. Here, I test a Swiss sovereign AI business case for a provider serving a model of similar scale. This is K3-class inference.&lt;/p&gt;
&lt;p&gt;Banks already treat data sovereignty as an operating issue. In &lt;a href="https://philippdubach.com/posts/dora-critical-cloud-providers-sovereignty/"&gt;How DORA Made Sovereignty a Bank Problem&lt;/a&gt;, I argued that banks must plan for concentration, exit, and audit rights. They must also prepare for rule changes by critical foreign providers.&lt;/p&gt;
&lt;p&gt;AI gets the same treatment. Recent open-weight releases make local use more realistic because operators can download and run their learned model weights.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://www.kimi.com/blog/kimi-k3"&gt;Kimi K3&lt;/a&gt; is huge. Alibaba is moving the Qwen family in the same direction. &lt;a href="https://thinkingmachines.ai/news/introducing-inkling/"&gt;Inkling&lt;/a&gt; may matter more. It is a US-trained model with full weights and a focus on customisation. Its one-million-token context window lets it process large amounts of information in one request.&lt;/p&gt;
&lt;h2 id="swiss-sovereign-ai-the-business-case"&gt;Swiss sovereign AI: the business case&lt;/h2&gt;
&lt;p&gt;Assume a Swiss provider operates 64 graphics processing units (GPUs) as one connected cluster in Zurich. It sells dedicated or managed K3-class inference to banks, pharmaceutical companies, government bodies, and other customers that need Swiss data residency. Their data remain stored and processed in Switzerland.&lt;/p&gt;
&lt;p&gt;This case assumes $7 million in initial costs, monthly costs of $370,000, and average use of 70%. Subscriptions cost CHF 15,000 to CHF 50,000 each month. With these values, one cluster makes about CHF 7.4 million in annual revenue.&lt;/p&gt;
&lt;p&gt;The cluster generates about CHF 3 million in earnings before interest, taxes, depreciation, and amortisation (EBITDA). This measure approximates operating profit before financing and non-cash costs. The cluster recovers its initial cost in three years.&lt;/p&gt;
&lt;figure class="post-figure" style="width: 100%; margin: 1.5rem auto;"&gt;
&lt;button type="button" class="img-trigger" data-lightbox-target="lightbox-swiss-sovereign-ai-business-case-png-1" aria-label="View full-size image"&gt;
&lt;picture class="img-lightbox"&gt;
&lt;source media="(max-width: 768px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=320,quality=80,format=auto/swiss-sovereign-ai-business-case.png 320w,
https://static.philippdubach.com/cdn-cgi/image/width=480,quality=80,format=auto/swiss-sovereign-ai-business-case.png 480w,
https://static.philippdubach.com/cdn-cgi/image/width=640,quality=80,format=auto/swiss-sovereign-ai-business-case.png 640w,
https://static.philippdubach.com/cdn-cgi/image/width=960,quality=80,format=auto/swiss-sovereign-ai-business-case.png 960w,
https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/swiss-sovereign-ai-business-case.png 1200w"
sizes="(max-width: 768px) 100vw, 720px"&gt;
&lt;source media="(max-width: 1024px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=768,quality=80,format=auto/swiss-sovereign-ai-business-case.png 768w,
https://static.philippdubach.com/cdn-cgi/image/width=1024,quality=80,format=auto/swiss-sovereign-ai-business-case.png 1024w,
https://static.philippdubach.com/cdn-cgi/image/width=1440,quality=80,format=auto/swiss-sovereign-ai-business-case.png 1440w"
sizes="(max-width: 768px) 100vw, 720px"&gt;
&lt;source media="(min-width: 1025px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/swiss-sovereign-ai-business-case.png 1200w,
https://static.philippdubach.com/cdn-cgi/image/width=1600,quality=80,format=auto/swiss-sovereign-ai-business-case.png 1600w,
https://static.philippdubach.com/cdn-cgi/image/width=2000,quality=80,format=auto/swiss-sovereign-ai-business-case.png 2000w"
sizes="(max-width: 768px) 100vw, 720px"&gt;
&lt;img src="https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/swiss-sovereign-ai-business-case.png"
alt="Business case for a Swiss sovereign AI provider. It shows equipment, initial cost, monthly costs, customer mix, five-year results, and sensitivity cases."
class=""
width="2544"
height="1808"
loading="lazy"
decoding="async"&gt;
&lt;/picture&gt;
&lt;/button&gt;
&lt;/figure&gt;
&lt;dialog id="lightbox-swiss-sovereign-ai-business-case-png-1" class="lightbox-dialog" aria-label="Full-size image" data-hires="https://static.philippdubach.com/cdn-cgi/image/width=2000,quality=85,format=auto/swiss-sovereign-ai-business-case.png"&gt;
&lt;form method="dialog" class="lightbox-close-form"&gt;
&lt;button type="submit" class="lightbox-close" aria-label="Close"&gt;×&lt;/button&gt;
&lt;/form&gt;
&lt;img alt="Business case for a Swiss sovereign AI provider. It shows equipment, initial cost, monthly costs, customer mix, five-year results, and sensitivity cases." decoding="async"&gt;
&lt;/dialog&gt;
&lt;h2 id="the-product-is-control"&gt;The product is control&lt;/h2&gt;
&lt;p&gt;The provider sells control as well as tokens. It offers Swiss residency and a defined security boundary around each customer&amp;rsquo;s data and systems. It does not train on customer data. Customers receive audit access, service-continuity terms, and an exit route if the provider fails.&lt;/p&gt;
&lt;p&gt;Most companies will not put a model in a basement. Some will pay local providers to get the same control.&lt;/p&gt;
&lt;h2 id="what-can-make-local-ai-inference-fail"&gt;What can make local AI inference fail&lt;/h2&gt;
&lt;p&gt;A 2.8-trillion-parameter model costs a lot to serve, and one cluster puts every customer on the same equipment. Hardware also loses value quickly. If customers use it less than expected, the business loses money. A smaller model may work almost as well next year, before the operator recovers the cluster&amp;rsquo;s cost.&lt;/p&gt;
&lt;p&gt;Those risks are real. I still think this market will exist.&lt;/p&gt;</description></item><item><title>I Tried Kimi K3 Inside Claude Code</title><link>https://philippdubach.com/posts/kimi-k3-inside-claude-code/</link><pubDate>Sun, 19 Jul 2026 00:00:00 +0200</pubDate><author>me@philippdubach.com (Philipp D. Dubach)</author><guid>https://philippdubach.com/posts/kimi-k3-inside-claude-code/</guid><description>&lt;figure class="post-figure" style="width: 80%; margin: 1.5rem auto;"&gt;
&lt;button type="button" class="img-trigger" data-lightbox-target="lightbox-kimi-k3-cover1-png-0" aria-label="View full-size image"&gt;
&lt;picture class="img-lightbox"&gt;
&lt;source media="(max-width: 768px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=320,quality=80,format=auto/kimi-k3-cover1.png 320w,
https://static.philippdubach.com/cdn-cgi/image/width=480,quality=80,format=auto/kimi-k3-cover1.png 480w,
https://static.philippdubach.com/cdn-cgi/image/width=640,quality=80,format=auto/kimi-k3-cover1.png 640w,
https://static.philippdubach.com/cdn-cgi/image/width=960,quality=80,format=auto/kimi-k3-cover1.png 960w,
https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/kimi-k3-cover1.png 1200w"
sizes="(max-width: 768px) 80vw, 576px"&gt;
&lt;source media="(max-width: 1024px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=768,quality=80,format=auto/kimi-k3-cover1.png 768w,
https://static.philippdubach.com/cdn-cgi/image/width=1024,quality=80,format=auto/kimi-k3-cover1.png 1024w,
https://static.philippdubach.com/cdn-cgi/image/width=1440,quality=80,format=auto/kimi-k3-cover1.png 1440w"
sizes="(max-width: 768px) 80vw, 576px"&gt;
&lt;source media="(min-width: 1025px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/kimi-k3-cover1.png 1200w,
https://static.philippdubach.com/cdn-cgi/image/width=1600,quality=80,format=auto/kimi-k3-cover1.png 1600w,
https://static.philippdubach.com/cdn-cgi/image/width=2000,quality=80,format=auto/kimi-k3-cover1.png 2000w"
sizes="(max-width: 768px) 80vw, 576px"&gt;
&lt;img src="https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/kimi-k3-cover1.png"
alt="Claude Code running Moonshot AI&amp;#39;s Kimi K3."
class=""
width="1280"
height="720"
fetchpriority="high"
decoding="async"&gt;
&lt;/picture&gt;
&lt;/button&gt;
&lt;/figure&gt;
&lt;dialog id="lightbox-kimi-k3-cover1-png-0" class="lightbox-dialog" aria-label="Full-size image" data-hires="https://static.philippdubach.com/cdn-cgi/image/width=2000,quality=85,format=auto/kimi-k3-cover1.png"&gt;
&lt;form method="dialog" class="lightbox-close-form"&gt;
&lt;button type="submit" class="lightbox-close" aria-label="Close"&gt;×&lt;/button&gt;
&lt;/form&gt;
&lt;img alt="Claude Code running Moonshot AI&amp;#39;s Kimi K3." decoding="async"&gt;
&lt;/dialog&gt;
&lt;p&gt;&lt;a href="https://www.kimi.com/blog/kimi-k3"&gt;Kimi K3 is Moonshot&amp;rsquo;s new 2.8-trillion-parameter mixture-of-experts model&lt;/a&gt;. I tested Kimi K3 in Claude Code to see whether those specifications mattered in a familiar workflow. Its parameters are values learned during training. Because K3 uses several specialised components, only part of the model handles each token. It also accepts images and up to one million tokens of context in a request.&lt;/p&gt;
&lt;p&gt;Together, those learned parameters form the model weights. Open weights are available for others to download and run. This is narrower than open source, which usually also provides training code and data.&lt;/p&gt;
&lt;p&gt;Moonshot described K3 as the first model at this scale announced for an open-weight release. On July 19, 2026, those weights were not yet available. Moonshot said it would release them by July 27. Its launch post was unusually candid about the remaining gap. K3 still trailed Fable 5 and GPT-5.6 Sol overall, and its user experience was weaker.&lt;/p&gt;
&lt;p&gt;As I wrote this article, Alibaba &lt;a href="https://x.com/Alibaba_Qwen/status/2078759124914098291"&gt;announced Qwen 3.8&lt;/a&gt;, another large model intended for open-weight release. Thinking Machines Lab had also released &lt;a href="https://thinkingmachines.ai/news/introducing-inkling/"&gt;Inkling&lt;/a&gt;, a US model with full weights available. Inkling has 975 billion total parameters and activates 41 billion for each token. Kimi is not a one-off anymore. There is now a queue.&lt;/p&gt;
&lt;p&gt;I have burned millions of tokens through Claude Code by now. It is the agent harness that connects a model to files, tools, and coding tasks. My configuration works, the tools are where I expect them, and I know the rhythm of the harness.&lt;/p&gt;
&lt;p&gt;I kept Claude Code and changed only the model behind it. &lt;a href="https://openrouter.ai/"&gt;OpenRouter&lt;/a&gt;, a request-routing service, sent the requests to Kimi K3.
&lt;figure class="post-figure" style="width: 80%; margin: 1.5rem auto;"&gt;
&lt;button type="button" class="img-trigger" data-lightbox-target="lightbox-kimi-in-claude-png-1" aria-label="View full-size image"&gt;
&lt;picture class="img-lightbox"&gt;
&lt;source media="(max-width: 768px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=320,quality=80,format=auto/kimi-in-claude.png 320w,
https://static.philippdubach.com/cdn-cgi/image/width=480,quality=80,format=auto/kimi-in-claude.png 480w,
https://static.philippdubach.com/cdn-cgi/image/width=640,quality=80,format=auto/kimi-in-claude.png 640w,
https://static.philippdubach.com/cdn-cgi/image/width=960,quality=80,format=auto/kimi-in-claude.png 960w,
https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/kimi-in-claude.png 1200w"
sizes="(max-width: 768px) 80vw, 576px"&gt;
&lt;source media="(max-width: 1024px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=768,quality=80,format=auto/kimi-in-claude.png 768w,
https://static.philippdubach.com/cdn-cgi/image/width=1024,quality=80,format=auto/kimi-in-claude.png 1024w,
https://static.philippdubach.com/cdn-cgi/image/width=1440,quality=80,format=auto/kimi-in-claude.png 1440w"
sizes="(max-width: 768px) 80vw, 576px"&gt;
&lt;source media="(min-width: 1025px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/kimi-in-claude.png 1200w,
https://static.philippdubach.com/cdn-cgi/image/width=1600,quality=80,format=auto/kimi-in-claude.png 1600w,
https://static.philippdubach.com/cdn-cgi/image/width=2000,quality=80,format=auto/kimi-in-claude.png 2000w"
sizes="(max-width: 768px) 80vw, 576px"&gt;
&lt;img src="https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/kimi-in-claude.png"
alt="Claude Code configured to use Moonshot AI&amp;#39;s Kimi K3 through OpenRouter."
class=""
width="898"
height="142"
loading="lazy"
decoding="async"&gt;
&lt;/picture&gt;
&lt;/button&gt;
&lt;/figure&gt;
&lt;dialog id="lightbox-kimi-in-claude-png-1" class="lightbox-dialog" aria-label="Full-size image" data-hires="https://static.philippdubach.com/cdn-cgi/image/width=2000,quality=85,format=auto/kimi-in-claude.png"&gt;
&lt;form method="dialog" class="lightbox-close-form"&gt;
&lt;button type="submit" class="lightbox-close" aria-label="Close"&gt;×&lt;/button&gt;
&lt;/form&gt;
&lt;img alt="Claude Code configured to use Moonshot AI&amp;#39;s Kimi K3 through OpenRouter." decoding="async"&gt;
&lt;/dialog&gt;
&lt;/p&gt;
&lt;h2 id="first-impression-in-claude-code-slow"&gt;First impression in Claude Code: slow&lt;/h2&gt;
&lt;p&gt;It felt slow. Very slow, at first. That was odd because third-party measurements pointed the other way. &lt;a href="https://artificialanalysis.ai/models/comparisons/kimi-k3-vs-claude-opus-4-8"&gt;Artificial Analysis&lt;/a&gt; reported speed in output tokens, the small units of a model&amp;rsquo;s response. Around July 19, 2026, it measured about 62 per second for Kimi K3 and 57 for Claude Opus 4.8. K3 also began its responses sooner.&lt;/p&gt;
&lt;p&gt;Maybe the difference was time spent reasoning before useful text appeared. Maybe it was the cadence of the stream. Maybe I have used Claude Code long enough that any different rhythm feels wrong. (&lt;em&gt;Or maybe routing through OpenRouter was the cause.&lt;/em&gt;)&lt;/p&gt;
&lt;p&gt;Then, somewhere during the first hour, I stopped noticing. K3 had not suddenly become faster. It handled files, edits, and tool calls well enough that I forgot where the traffic was going.&lt;/p&gt;
&lt;h2 id="a-quick-kimi-k3-frontend-test"&gt;A quick Kimi K3 frontend test&lt;/h2&gt;
&lt;p&gt;K3 was getting attention for frontend work when I tested it. &lt;a href="https://arena.ai/leaderboard/code/webdev"&gt;It ranked first on Code Arena&lt;/a&gt; around July 19, 2026. Code Arena is a public leaderboard for generated web interfaces. I wanted a visual test rather than another coding benchmark. A benchmark is a standard task used to compare models.&lt;/p&gt;
&lt;p&gt;I reused the detailed prompt and original assets from &lt;a href="https://lafys.com/posts/ai-smart-solution-full-website-1783698696773"&gt;this Lafys build&lt;/a&gt;. I assume the reference used Fable 5, although I cannot verify that.&lt;/p&gt;
&lt;figure class="post-figure" style="width: 100%; margin: 1.5rem auto;"&gt;
&lt;button type="button" class="img-trigger" data-lightbox-target="lightbox-section-1-productivity-png-2" aria-label="View full-size image"&gt;
&lt;picture class="img-lightbox"&gt;
&lt;source media="(max-width: 768px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=320,quality=80,format=auto/section-1-productivity.png 320w,
https://static.philippdubach.com/cdn-cgi/image/width=480,quality=80,format=auto/section-1-productivity.png 480w,
https://static.philippdubach.com/cdn-cgi/image/width=640,quality=80,format=auto/section-1-productivity.png 640w,
https://static.philippdubach.com/cdn-cgi/image/width=960,quality=80,format=auto/section-1-productivity.png 960w,
https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/section-1-productivity.png 1200w"
sizes="(max-width: 768px) 100vw, 720px"&gt;
&lt;source media="(max-width: 1024px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=768,quality=80,format=auto/section-1-productivity.png 768w,
https://static.philippdubach.com/cdn-cgi/image/width=1024,quality=80,format=auto/section-1-productivity.png 1024w,
https://static.philippdubach.com/cdn-cgi/image/width=1440,quality=80,format=auto/section-1-productivity.png 1440w"
sizes="(max-width: 768px) 100vw, 720px"&gt;
&lt;source media="(min-width: 1025px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/section-1-productivity.png 1200w,
https://static.philippdubach.com/cdn-cgi/image/width=1600,quality=80,format=auto/section-1-productivity.png 1600w,
https://static.philippdubach.com/cdn-cgi/image/width=2000,quality=80,format=auto/section-1-productivity.png 2000w"
sizes="(max-width: 768px) 100vw, 720px"&gt;
&lt;img src="https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/section-1-productivity.png"
alt="Reference design on the left and Kimi K3 reconstruction of the Productivity section on the right."
class=""
width="3580"
height="1150"
loading="lazy"
decoding="async"&gt;
&lt;/picture&gt;
&lt;/button&gt;
&lt;/figure&gt;
&lt;dialog id="lightbox-section-1-productivity-png-2" class="lightbox-dialog" aria-label="Full-size image" data-hires="https://static.philippdubach.com/cdn-cgi/image/width=2000,quality=85,format=auto/section-1-productivity.png"&gt;
&lt;form method="dialog" class="lightbox-close-form"&gt;
&lt;button type="submit" class="lightbox-close" aria-label="Close"&gt;×&lt;/button&gt;
&lt;/form&gt;
&lt;img alt="Reference design on the left and Kimi K3 reconstruction of the Productivity section on the right." decoding="async"&gt;
&lt;/dialog&gt;
&lt;figure class="post-figure" style="width: 100%; margin: 1.5rem auto;"&gt;
&lt;button type="button" class="img-trigger" data-lightbox-target="lightbox-section-2-flexibility-png-3" aria-label="View full-size image"&gt;
&lt;picture class="img-lightbox"&gt;
&lt;source media="(max-width: 768px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=320,quality=80,format=auto/section-2-flexibility.png 320w,
https://static.philippdubach.com/cdn-cgi/image/width=480,quality=80,format=auto/section-2-flexibility.png 480w,
https://static.philippdubach.com/cdn-cgi/image/width=640,quality=80,format=auto/section-2-flexibility.png 640w,
https://static.philippdubach.com/cdn-cgi/image/width=960,quality=80,format=auto/section-2-flexibility.png 960w,
https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/section-2-flexibility.png 1200w"
sizes="(max-width: 768px) 100vw, 720px"&gt;
&lt;source media="(max-width: 1024px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=768,quality=80,format=auto/section-2-flexibility.png 768w,
https://static.philippdubach.com/cdn-cgi/image/width=1024,quality=80,format=auto/section-2-flexibility.png 1024w,
https://static.philippdubach.com/cdn-cgi/image/width=1440,quality=80,format=auto/section-2-flexibility.png 1440w"
sizes="(max-width: 768px) 100vw, 720px"&gt;
&lt;source media="(min-width: 1025px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/section-2-flexibility.png 1200w,
https://static.philippdubach.com/cdn-cgi/image/width=1600,quality=80,format=auto/section-2-flexibility.png 1600w,
https://static.philippdubach.com/cdn-cgi/image/width=2000,quality=80,format=auto/section-2-flexibility.png 2000w"
sizes="(max-width: 768px) 100vw, 720px"&gt;
&lt;img src="https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/section-2-flexibility.png"
alt="Reference design on the left and Kimi K3 reconstruction of the Flexibility section on the right."
class=""
width="3580"
height="1150"
loading="lazy"
decoding="async"&gt;
&lt;/picture&gt;
&lt;/button&gt;
&lt;/figure&gt;
&lt;dialog id="lightbox-section-2-flexibility-png-3" class="lightbox-dialog" aria-label="Full-size image" data-hires="https://static.philippdubach.com/cdn-cgi/image/width=2000,quality=85,format=auto/section-2-flexibility.png"&gt;
&lt;form method="dialog" class="lightbox-close-form"&gt;
&lt;button type="submit" class="lightbox-close" aria-label="Close"&gt;×&lt;/button&gt;
&lt;/form&gt;
&lt;img alt="Reference design on the left and Kimi K3 reconstruction of the Flexibility section on the right." decoding="async"&gt;
&lt;/dialog&gt;
&lt;figure class="post-figure" style="width: 100%; margin: 1.5rem auto;"&gt;
&lt;button type="button" class="img-trigger" data-lightbox-target="lightbox-section-3-unify-teams-png-4" aria-label="View full-size image"&gt;
&lt;picture class="img-lightbox"&gt;
&lt;source media="(max-width: 768px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=320,quality=80,format=auto/section-3-unify-teams.png 320w,
https://static.philippdubach.com/cdn-cgi/image/width=480,quality=80,format=auto/section-3-unify-teams.png 480w,
https://static.philippdubach.com/cdn-cgi/image/width=640,quality=80,format=auto/section-3-unify-teams.png 640w,
https://static.philippdubach.com/cdn-cgi/image/width=960,quality=80,format=auto/section-3-unify-teams.png 960w,
https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/section-3-unify-teams.png 1200w"
sizes="(max-width: 768px) 100vw, 720px"&gt;
&lt;source media="(max-width: 1024px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=768,quality=80,format=auto/section-3-unify-teams.png 768w,
https://static.philippdubach.com/cdn-cgi/image/width=1024,quality=80,format=auto/section-3-unify-teams.png 1024w,
https://static.philippdubach.com/cdn-cgi/image/width=1440,quality=80,format=auto/section-3-unify-teams.png 1440w"
sizes="(max-width: 768px) 100vw, 720px"&gt;
&lt;source media="(min-width: 1025px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/section-3-unify-teams.png 1200w,
https://static.philippdubach.com/cdn-cgi/image/width=1600,quality=80,format=auto/section-3-unify-teams.png 1600w,
https://static.philippdubach.com/cdn-cgi/image/width=2000,quality=80,format=auto/section-3-unify-teams.png 2000w"
sizes="(max-width: 768px) 100vw, 720px"&gt;
&lt;img src="https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/section-3-unify-teams.png"
alt="Reference design on the left and Kimi K3 reconstruction of the Unify Teams section on the right."
class=""
width="3580"
height="1150"
loading="lazy"
decoding="async"&gt;
&lt;/picture&gt;
&lt;/button&gt;
&lt;/figure&gt;
&lt;dialog id="lightbox-section-3-unify-teams-png-4" class="lightbox-dialog" aria-label="Full-size image" data-hires="https://static.philippdubach.com/cdn-cgi/image/width=2000,quality=85,format=auto/section-3-unify-teams.png"&gt;
&lt;form method="dialog" class="lightbox-close-form"&gt;
&lt;button type="submit" class="lightbox-close" aria-label="Close"&gt;×&lt;/button&gt;
&lt;/form&gt;
&lt;img alt="Reference design on the left and Kimi K3 reconstruction of the Unify Teams section on the right." decoding="async"&gt;
&lt;/dialog&gt;
&lt;figure class="post-figure" style="width: 100%; margin: 1.5rem auto;"&gt;
&lt;button type="button" class="img-trigger" data-lightbox-target="lightbox-section-4-team-created-png-5" aria-label="View full-size image"&gt;
&lt;picture class="img-lightbox"&gt;
&lt;source media="(max-width: 768px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=320,quality=80,format=auto/section-4-team-created.png 320w,
https://static.philippdubach.com/cdn-cgi/image/width=480,quality=80,format=auto/section-4-team-created.png 480w,
https://static.philippdubach.com/cdn-cgi/image/width=640,quality=80,format=auto/section-4-team-created.png 640w,
https://static.philippdubach.com/cdn-cgi/image/width=960,quality=80,format=auto/section-4-team-created.png 960w,
https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/section-4-team-created.png 1200w"
sizes="(max-width: 768px) 100vw, 720px"&gt;
&lt;source media="(max-width: 1024px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=768,quality=80,format=auto/section-4-team-created.png 768w,
https://static.philippdubach.com/cdn-cgi/image/width=1024,quality=80,format=auto/section-4-team-created.png 1024w,
https://static.philippdubach.com/cdn-cgi/image/width=1440,quality=80,format=auto/section-4-team-created.png 1440w"
sizes="(max-width: 768px) 100vw, 720px"&gt;
&lt;source media="(min-width: 1025px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/section-4-team-created.png 1200w,
https://static.philippdubach.com/cdn-cgi/image/width=1600,quality=80,format=auto/section-4-team-created.png 1600w,
https://static.philippdubach.com/cdn-cgi/image/width=2000,quality=80,format=auto/section-4-team-created.png 2000w"
sizes="(max-width: 768px) 100vw, 720px"&gt;
&lt;img src="https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/section-4-team-created.png"
alt="Reference design on the left and Kimi K3 reconstruction of the Team Created section on the right."
class=""
width="3580"
height="1150"
loading="lazy"
decoding="async"&gt;
&lt;/picture&gt;
&lt;/button&gt;
&lt;/figure&gt;
&lt;dialog id="lightbox-section-4-team-created-png-5" class="lightbox-dialog" aria-label="Full-size image" data-hires="https://static.philippdubach.com/cdn-cgi/image/width=2000,quality=85,format=auto/section-4-team-created.png"&gt;
&lt;form method="dialog" class="lightbox-close-form"&gt;
&lt;button type="submit" class="lightbox-close" aria-label="Close"&gt;×&lt;/button&gt;
&lt;/form&gt;
&lt;img alt="Reference design on the left and Kimi K3 reconstruction of the Team Created section on the right." decoding="async"&gt;
&lt;/dialog&gt;
&lt;p&gt;&lt;em&gt;I know this is one run, with very specific instructions and the original assets. Give the model a vaguer prompt and the result may fall apart. I did not run a control trial or calculate an objective similarity score.&lt;/em&gt;&lt;/p&gt;
&lt;h2 id="kimi-k3-cost-in-claude-code"&gt;Kimi K3 cost in Claude Code&lt;/h2&gt;
&lt;p&gt;The OpenRouter export covered 115 requests. It logged 13.64 million prompt tokens carrying instructions and context, plus 82,307 output tokens carrying model responses. Of those prompt tokens, 12.95 million were cache hits, which reuse earlier input at a lower price. Nearly 95% of the prompt tokens were cached. Total cost: $7.18.&lt;/p&gt;
&lt;p&gt;I then applied Anthropic&amp;rsquo;s published list prices to that recorded traffic mix. The calculation gives about $11.96 for Claude Opus 4.8 and $23.92 for Claude Fable 5. These are estimates, not bills from separate Claude runs. The other models might generate different token volumes or cache patterns.&lt;/p&gt;
&lt;p&gt;Under this fixed-mix assumption, Kimi was roughly 40% cheaper than Opus and 70% cheaper than Fable.&lt;/p&gt;
&lt;h2 id="is-kimi-k3-a-claude-opus-replacement"&gt;Is Kimi K3 a Claude Opus replacement?&lt;/h2&gt;
&lt;p&gt;No. Not for me.&lt;/p&gt;
&lt;p&gt;Opus still feels more dependable when the work gets difficult. It is better at knowing when to stop and at handling ambiguity. It is also less likely to make an energetic decision I did not ask for.&lt;/p&gt;
&lt;p&gt;Moonshot listed excessive proactiveness and sensitivity to the surrounding software among &lt;a href="https://www.kimi.com/blog/kimi-k3#:~:text=Excessive%20proactiveness."&gt;K3&amp;rsquo;s limitations&lt;/a&gt;. That matches parts of my experience.&lt;/p&gt;
&lt;p&gt;I would not call K3 a Fable 5-class model either.&lt;/p&gt;
&lt;p&gt;But below Fable and Opus the air gets thin very quickly. K3 is close enough that many users may not care about the remaining difference. Others may care less about that gap than the price.&lt;/p&gt;
&lt;h2 id="so-where-do-we-go-from-here"&gt;So where do we go from here?&lt;/h2&gt;
&lt;p&gt;In the days before July 19, 2026, the takes went in every direction.&lt;/p&gt;
&lt;p&gt;Kimi K3 is the end of the American model moat. Kimi K3 is benchmark theatre. Open weights make closed models obsolete. Open weights are irrelevant if running the thing costs a small data centre. China is deliberately commoditising the layer on which a large part of the US market is now betting. Or there is no master plan and Chinese labs are releasing good models because good models bring developers, usage and prestige.&lt;/p&gt;
&lt;p&gt;A less dramatic list from my notes looks like this:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;$/token is a poor comparison when models use very different numbers of tokens.&lt;/li&gt;
&lt;li&gt;Public benchmarks are easier to optimise for and may not separate the best models well.&lt;/li&gt;
&lt;li&gt;Open weights put a ceiling on API prices even if most users never self-host.&lt;/li&gt;
&lt;li&gt;The model is becoming replaceable; the harness, data and workflow may not be.&lt;/li&gt;
&lt;li&gt;Value may move up into applications and down into chips, power and the systems that serve model responses.&lt;/li&gt;
&lt;li&gt;Open weights help with control and privacy, but &amp;ldquo;open&amp;rdquo; does not mean cheap to run.&lt;/li&gt;
&lt;li&gt;Export controls can slow Chinese labs and, at the same time, give them a reason to build around the US stack.&lt;/li&gt;
&lt;li&gt;The biggest threat is not necessarily that Kimi becomes number one. It is that nobody stays number one for long.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;As of July 19, 2026, &lt;a href="https://epoch.ai/data-insights/open-closed-eci-gap"&gt;Epoch AI&lt;/a&gt; estimated that the best open-weight models trailed the most capable closed models by only a few months. The exact gap depends on the benchmark, so public evaluations require care. Still, a short lag lets buyers wait, switch, or split workloads across providers. Personally, I think this can be distilled, yes, I know, into a threat and an opportunity.&lt;/p&gt;
&lt;h2 id="the-threat"&gt;The threat&lt;/h2&gt;
&lt;p&gt;The threat is not that Kimi K3 is better than every American model. It is not.&lt;/p&gt;
&lt;p&gt;The threat is that K3 may be good enough to make the premium harder to defend.&lt;/p&gt;
&lt;p&gt;The large US labs are valued on more than technical competence. Their financial case assumes that frontier intelligence remains scarce and that the lead lasts. It also assumes that customers keep paying high margins for access.&lt;/p&gt;
&lt;p&gt;A model can damage that story without taking first place. It only needs to remain close enough to the frontier at a lower price. Existing software must also accept it easily.&lt;/p&gt;
&lt;p&gt;That is a bad combination for pricing power: a seller&amp;rsquo;s ability to maintain high prices. It also weakens the model moat, the durable advantage that protects those prices.&lt;/p&gt;
&lt;p&gt;Most enterprise software is sticky because switching is awful. Databases, operating systems, and core banking platforms accumulate years of dependencies. A language model behind an application programming interface (API) is different. The API already lets software exchange requests and responses with another system. The model may be important while remaining surprisingly easy to replace. My Claude Code test is the small version of that.&lt;/p&gt;
&lt;p&gt;Closed labs still have ways to earn the premium. Reliability, tool use, and enterprise controls matter. Being six months ahead can be worth a lot when the task is valuable enough.&lt;/p&gt;
&lt;p&gt;The timing is awkward because the infrastructure bill is enormous. I examined it in &lt;a href="https://philippdubach.com/posts/ai-capex-arms-race-who-blinks-first/"&gt;AI Capex Arms Race: Who Blinks First?&lt;/a&gt;. Capital expenditure (capex) buys long-lived assets such as data centres and graphics processing units (GPUs). Depreciation spreads an asset&amp;rsquo;s cost across its useful life. The unresolved issue is how much revenue must arrive, and how quickly, to support these assets and their debt.&lt;/p&gt;
&lt;p&gt;If model capability commoditises faster than revenue grows, the damage does not stop at the labs. It reaches large cloud providers, chipmakers, data-centre developers, utilities, and their lenders. A cheaper Kimi is good for users and potentially bad for whoever underwrote scarcity.&lt;/p&gt;
&lt;p&gt;The same substitutability also weakens export-control leverage.&lt;/p&gt;
&lt;p&gt;The US controls much of the closed-model frontier and the hardware underneath it. That creates leverage while other countries depend on the same stack. Restricting chips and APIs may preserve the lead, but it can also make a parallel stack more valuable.&lt;/p&gt;
&lt;p&gt;I examined the other side in &lt;a href="https://philippdubach.com/posts/krugman-fable5-europe-decline/"&gt;Krugman, Fable 5, and Europe in Decline?&lt;/a&gt;. A provider or its government can cut off a closed model. Once operators have distributed open weights, nobody can switch them off in the same way. K3&amp;rsquo;s promised weights were not yet available on July 19, 2026.&lt;/p&gt;
&lt;p&gt;There is another, more mundane risk: we may be overrating the model.&lt;/p&gt;
&lt;p&gt;Every launch now comes with a dense page of benchmark wins. Some use different harnesses, budgets, or settings chosen for one model. Others are saturated, so top scores cluster too closely to distinguish models. A model that looks brilliant on a leaderboard can still be unpleasant over a long session.&lt;/p&gt;
&lt;h2 id="the-opportunity"&gt;The opportunity&lt;/h2&gt;
&lt;p&gt;At lower prices, more tasks become worth attempting. Agents combine models and tools to complete those tasks. They can take more passes, read more context, and handle work that does not justify Fable pricing. Lower unit costs may not shrink the market at all.&lt;/p&gt;
&lt;p&gt;What interests me more is separation. The interface, agent, and model do not have to come from the same company.&lt;/p&gt;
&lt;p&gt;A routine refactor can go to a cheaper model. A difficult architecture decision can go to Opus. Sensitive material can stay on a private deployment. Frontend work can go to whichever model happens to be best at it that month.&lt;/p&gt;
&lt;p&gt;The durable product may be the surrounding workflow rather than any single model. Its router selects a model, while its context layer supplies the right information. A validation loop checks the result and sends corrections when needed.&lt;/p&gt;
&lt;p&gt;Open weights also matter beyond price. An organisation can fine-tune them for a specific task or quantise them to reduce hardware needs. It can then run the model on premises, under its own controls.&lt;/p&gt;
&lt;p&gt;Private deployment changes who answers the hard operational questions. Data residency covers where processing and storage occur; retention covers how long data remain stored. Continuity asks whether the service survives supplier or network failures. Local control does not automatically make a deployment secure or compliant.&lt;/p&gt;
&lt;h2 id="so-what"&gt;So what?!&lt;/h2&gt;
&lt;p&gt;I do not think Kimi K3 kills Anthropic. I do not think one frontend reconstruction proves parity. On July 19, 2026, I would still choose Opus for the hardest coding work.&lt;/p&gt;
&lt;p&gt;But K3 was good enough that I forgot I was using it. It cost materially less. It ran inside the harness I already liked. Moonshot said the weights would be available by July 27 to anyone willing to provide the hardware.&lt;/p&gt;
&lt;p&gt;Closed labs now need a lead that is large enough to matter and durable enough to defend. They also need customers who will keep paying for each extra gain as switching becomes routine.&lt;/p&gt;
&lt;p&gt;For the operational version of this argument, read &lt;a href="https://philippdubach.com/posts/put-the-model-in-the-basement/"&gt;Put the Model in the Basement&lt;/a&gt;. It tests a Swiss business case built around data residency, control and continuity.&lt;/p&gt;</description></item><item><title>Krugman, Fable 5, and Europe in Decline?</title><link>https://philippdubach.com/posts/krugman-fable5-europe-decline/</link><pubDate>Mon, 22 Jun 2026 00:00:00 +0200</pubDate><author>me@philippdubach.com (Philipp D. Dubach)</author><guid>https://philippdubach.com/posts/krugman-fable5-europe-decline/</guid><description>&lt;figure class="post-figure" style="width: 80%; margin: 1.5rem auto;"&gt;
&lt;button type="button" class="img-trigger" data-lightbox-target="lightbox-cover-fable5-europe-decline1-png-0" aria-label="View full-size image"&gt;
&lt;picture class="img-lightbox"&gt;
&lt;source media="(max-width: 768px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=320,quality=80,format=auto/cover-fable5-europe-decline1.png 320w,
https://static.philippdubach.com/cdn-cgi/image/width=480,quality=80,format=auto/cover-fable5-europe-decline1.png 480w,
https://static.philippdubach.com/cdn-cgi/image/width=640,quality=80,format=auto/cover-fable5-europe-decline1.png 640w,
https://static.philippdubach.com/cdn-cgi/image/width=960,quality=80,format=auto/cover-fable5-europe-decline1.png 960w,
https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/cover-fable5-europe-decline1.png 1200w"
sizes="(max-width: 768px) 80vw, 576px"&gt;
&lt;source media="(max-width: 1024px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=768,quality=80,format=auto/cover-fable5-europe-decline1.png 768w,
https://static.philippdubach.com/cdn-cgi/image/width=1024,quality=80,format=auto/cover-fable5-europe-decline1.png 1024w,
https://static.philippdubach.com/cdn-cgi/image/width=1440,quality=80,format=auto/cover-fable5-europe-decline1.png 1440w"
sizes="(max-width: 768px) 80vw, 576px"&gt;
&lt;source media="(min-width: 1025px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/cover-fable5-europe-decline1.png 1200w,
https://static.philippdubach.com/cdn-cgi/image/width=1600,quality=80,format=auto/cover-fable5-europe-decline1.png 1600w,
https://static.philippdubach.com/cdn-cgi/image/width=2000,quality=80,format=auto/cover-fable5-europe-decline1.png 2000w"
sizes="(max-width: 768px) 80vw, 576px"&gt;
&lt;img src="https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/cover-fable5-europe-decline1.png"
alt="Wall switch set to OFF inside a ring of dimmed European Union stars, representing lost access to frontier AI"
class=""
width="1892"
height="1068"
fetchpriority="high"
decoding="async"&gt;
&lt;/picture&gt;
&lt;/button&gt;
&lt;/figure&gt;
&lt;dialog id="lightbox-cover-fable5-europe-decline1-png-0" class="lightbox-dialog" aria-label="Full-size image" data-hires="https://static.philippdubach.com/cdn-cgi/image/width=2000,quality=85,format=auto/cover-fable5-europe-decline1.png"&gt;
&lt;form method="dialog" class="lightbox-close-form"&gt;
&lt;button type="submit" class="lightbox-close" aria-label="Close"&gt;×&lt;/button&gt;
&lt;/form&gt;
&lt;img alt="Wall switch set to OFF inside a ring of dimmed European Union stars, representing lost access to frontier AI" decoding="async"&gt;
&lt;/dialog&gt;
&lt;p&gt;On May 21, 2026, &lt;a href="https://paulkrugman.substack.com/p/challenging-the-narrative-of-european-478"&gt;Paul Krugman&lt;/a&gt; concluded a long argument that Europe was not really in economic decline. He made one exception. Europe, he wrote, &amp;ldquo;can&amp;rsquo;t be sure that it will always have access to new technologies developed and produced in the other superpowers.&amp;rdquo; He added that &amp;ldquo;the risk of being cut off from strategically important technologies, once minimal, is now very real.&amp;rdquo;&lt;/p&gt;
&lt;p&gt;Twenty-two days later, a US directive switched off a frontier AI model for every non-American. Well, technically, it also switched the model off for every American. The episode turned European tech sovereignty from an abstract policy goal into an operational risk.&lt;/p&gt;
&lt;p&gt;His argument turns on a measurement paradox. &lt;a href="https://www.noahpinion.blog/p/yes-europeans-are-poorer-than-americans"&gt;Noah Smith&lt;/a&gt; and the Garicano brothers take the other side. Since 2000, measured US productivity grew much faster than Europe&amp;rsquo;s when economists held prices constant.&lt;/p&gt;
&lt;p&gt;Yet European output per hour at current-price purchasing power parity (PPP) barely moved relative to the US. PPP adjusts currency comparisons for local prices. The European figure rose from about 86% of the US level to about 87%.&lt;/p&gt;
&lt;p&gt;Krugman treats the flat current-price line as closer to reality. He sees the &lt;a href="https://paulkrugman.substack.com/p/modeling-the-us-europe-paradox-very"&gt;diverging constant-price line&lt;/a&gt; as an effect of fast-falling US technology prices. His critics treat the divergence as real. In their view, companies captured the gains as profits and equity instead of passing them to consumers.&lt;/p&gt;
&lt;figure class="post-figure" style="width: 80%; margin: 1.5rem auto;"&gt;
&lt;button type="button" class="img-trigger" data-lightbox-target="lightbox-fable5-europe-decline-productivity-paradox1-png-1" aria-label="View full-size image"&gt;
&lt;picture class="img-lightbox"&gt;
&lt;source media="(max-width: 768px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=320,quality=80,format=auto/fable5-europe-decline-productivity-paradox1.png 320w,
https://static.philippdubach.com/cdn-cgi/image/width=480,quality=80,format=auto/fable5-europe-decline-productivity-paradox1.png 480w,
https://static.philippdubach.com/cdn-cgi/image/width=640,quality=80,format=auto/fable5-europe-decline-productivity-paradox1.png 640w,
https://static.philippdubach.com/cdn-cgi/image/width=960,quality=80,format=auto/fable5-europe-decline-productivity-paradox1.png 960w,
https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/fable5-europe-decline-productivity-paradox1.png 1200w"
sizes="(max-width: 768px) 80vw, 576px"&gt;
&lt;source media="(max-width: 1024px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=768,quality=80,format=auto/fable5-europe-decline-productivity-paradox1.png 768w,
https://static.philippdubach.com/cdn-cgi/image/width=1024,quality=80,format=auto/fable5-europe-decline-productivity-paradox1.png 1024w,
https://static.philippdubach.com/cdn-cgi/image/width=1440,quality=80,format=auto/fable5-europe-decline-productivity-paradox1.png 1440w"
sizes="(max-width: 768px) 80vw, 576px"&gt;
&lt;source media="(min-width: 1025px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/fable5-europe-decline-productivity-paradox1.png 1200w,
https://static.philippdubach.com/cdn-cgi/image/width=1600,quality=80,format=auto/fable5-europe-decline-productivity-paradox1.png 1600w,
https://static.philippdubach.com/cdn-cgi/image/width=2000,quality=80,format=auto/fable5-europe-decline-productivity-paradox1.png 2000w"
sizes="(max-width: 768px) 80vw, 576px"&gt;
&lt;img src="https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/fable5-europe-decline-productivity-paradox1.png"
alt="Euro-area output per hour versus the US, 2000–2024: constant-price falls from 104% to 87%, while current-price PPP stays near 86–87%"
class=""
width="1200"
height="786"
loading="lazy"
decoding="async"&gt;
&lt;/picture&gt;
&lt;/button&gt;
&lt;/figure&gt;
&lt;dialog id="lightbox-fable5-europe-decline-productivity-paradox1-png-1" class="lightbox-dialog" aria-label="Full-size image" data-hires="https://static.philippdubach.com/cdn-cgi/image/width=2000,quality=85,format=auto/fable5-europe-decline-productivity-paradox1.png"&gt;
&lt;form method="dialog" class="lightbox-close-form"&gt;
&lt;button type="submit" class="lightbox-close" aria-label="Close"&gt;×&lt;/button&gt;
&lt;/form&gt;
&lt;img alt="Euro-area output per hour versus the US, 2000–2024: constant-price falls from 104% to 87%, while current-price PPP stays near 86–87%" decoding="async"&gt;
&lt;/dialog&gt;
&lt;p&gt;On whether the typical European is getting poorer, I am mostly with Krugman. The median gap is roughly stable. His comparison between California and the rest of the US is hard to dismiss. Constant-price productivity is also a poor measure of how people live. Europe remains a fine place to live and is not falling apart.&lt;/p&gt;
&lt;h2 id="technology-you-dont-own"&gt;Technology you don&amp;rsquo;t own&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;the big benefits of IT come from applying it, rather than creating it&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Europe applies information technology well. True. But &amp;ldquo;apply, don&amp;rsquo;t create&amp;rdquo; assumes that access remains frictionless and apolitical. It assumes that models, graphics processing units (GPUs), and cloud services remain available at world prices. That assumption died on June 12.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://www.foreignaffairs.com/united-states/weaponized-world-economy-farrell-newman"&gt;Henry Farrell and Abraham Newman&lt;/a&gt; call the replacement weaponised interdependence. Economic networks often depend on a few hubs. Control of one hub can let its owner cut off users downstream. They call this the chokepoint effect.&lt;/p&gt;
&lt;aside class="newsletter-preview" aria-label="Newsletter signup"&gt;
&lt;p class="newsletter-preview__title"&gt;Monthly notes&lt;/p&gt;&lt;form class="newsletter-preview__form" method="post" action="https://newsletter-api.philippd.workers.dev/api/subscribe" data-newsletter-endpoint="https://newsletter-api.philippd.workers.dev/api/subscribe" data-newsletter-count-endpoint="https://newsletter-api.philippd.workers.dev/api/subscriber-count" novalidate&gt;
&lt;label for="newsletter-3"&gt;Email address&lt;/label&gt;
&lt;div class="newsletter-preview__controls"&gt;
&lt;input id="newsletter-3" name="email" type="email" autocomplete="email" inputmode="email" required placeholder="you@example.com"&gt;
&lt;button type="submit"&gt;Subscribe&lt;/button&gt;
&lt;/div&gt;
&lt;p class="newsletter-preview__note" data-newsletter-note&gt;&lt;a href="https://philippdubach.com/posts/building-a-no-tracking-newsletter-from-markdown-to-distribution/"&gt;No tracking&lt;/a&gt;. Unsubscribe anytime.&lt;/p&gt;
&lt;p class="newsletter-preview__message" data-newsletter-message role="status" aria-live="polite"&gt;&lt;/p&gt;
&lt;/form&gt;
&lt;/aside&gt;
&lt;h2 id="europes-asml-lithography-chokepoint"&gt;Europe&amp;rsquo;s ASML lithography chokepoint&lt;/h2&gt;
&lt;p&gt;Extreme-ultraviolet (EUV) lithography uses light to print the smallest circuits on advanced chips. &lt;a href="https://www.asml.com/en/investors"&gt;ASML&lt;/a&gt; is the only supplier and earned €32.7 billion in 2025 sales. That is Europe&amp;rsquo;s one real card.&lt;/p&gt;
&lt;p&gt;Chip fabrication is different. Taiwan&amp;rsquo;s &lt;a href="https://www.trendforce.com/"&gt;TSMC&lt;/a&gt; held around 70% of the foundry market. A foundry manufactures chips designed by other companies.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://hai.stanford.edu/ai-index/2026-ai-index-report"&gt;Nvidia&lt;/a&gt; supplied 80% to 90% of AI-accelerator revenue and well over half of global AI computing capacity. An accelerator is a chip designed for intensive AI calculations. Nvidia&amp;rsquo;s CUDA software platform reinforces that position.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://www.semianalysis.com/"&gt;Synopsys and Cadence&lt;/a&gt; formed a US near-duopoly above 90% in chip-design software. Electronic design automation (EDA) software helps engineers design chips. Siemens EDA was the only European player at about 13%, and it still relied on US technology.&lt;/p&gt;
&lt;p&gt;AWS, Microsoft, and Google supplied about &lt;a href="https://www.srgresearch.com/"&gt;70% of the European Union cloud market&lt;/a&gt;. Those services also sit under US legal jurisdiction. As of June 21, 2026, US laboratories dominated the closed-model frontier. Mistral was the main European exception, while &lt;a href="https://www.deepseek.com/"&gt;DeepSeek&lt;/a&gt; showed that China could build a parallel stack under sanctions.&lt;/p&gt;
&lt;figure class="post-figure" style="width: 80%; margin: 1.5rem auto;"&gt;
&lt;button type="button" class="img-trigger" data-lightbox-target="lightbox-fable5-europe-decline-ai-stack-chokepoints1-png-4" aria-label="View full-size image"&gt;
&lt;picture class="img-lightbox"&gt;
&lt;source media="(max-width: 768px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=320,quality=80,format=auto/fable5-europe-decline-ai-stack-chokepoints1.png 320w,
https://static.philippdubach.com/cdn-cgi/image/width=480,quality=80,format=auto/fable5-europe-decline-ai-stack-chokepoints1.png 480w,
https://static.philippdubach.com/cdn-cgi/image/width=640,quality=80,format=auto/fable5-europe-decline-ai-stack-chokepoints1.png 640w,
https://static.philippdubach.com/cdn-cgi/image/width=960,quality=80,format=auto/fable5-europe-decline-ai-stack-chokepoints1.png 960w,
https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/fable5-europe-decline-ai-stack-chokepoints1.png 1200w"
sizes="(max-width: 768px) 80vw, 576px"&gt;
&lt;source media="(max-width: 1024px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=768,quality=80,format=auto/fable5-europe-decline-ai-stack-chokepoints1.png 768w,
https://static.philippdubach.com/cdn-cgi/image/width=1024,quality=80,format=auto/fable5-europe-decline-ai-stack-chokepoints1.png 1024w,
https://static.philippdubach.com/cdn-cgi/image/width=1440,quality=80,format=auto/fable5-europe-decline-ai-stack-chokepoints1.png 1440w"
sizes="(max-width: 768px) 80vw, 576px"&gt;
&lt;source media="(min-width: 1025px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/fable5-europe-decline-ai-stack-chokepoints1.png 1200w,
https://static.philippdubach.com/cdn-cgi/image/width=1600,quality=80,format=auto/fable5-europe-decline-ai-stack-chokepoints1.png 1600w,
https://static.philippdubach.com/cdn-cgi/image/width=2000,quality=80,format=auto/fable5-europe-decline-ai-stack-chokepoints1.png 2000w"
sizes="(max-width: 768px) 80vw, 576px"&gt;
&lt;img src="https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/fable5-europe-decline-ai-stack-chokepoints1.png"
alt="Europe controls 100% of EUV; outside suppliers control 70% of fabrication, 85% of GPUs, 90% of design, and 70% of cloud and frontier models"
class=""
width="1200"
height="749"
loading="lazy"
decoding="async"&gt;
&lt;/picture&gt;
&lt;/button&gt;
&lt;/figure&gt;
&lt;dialog id="lightbox-fable5-europe-decline-ai-stack-chokepoints1-png-4" class="lightbox-dialog" aria-label="Full-size image" data-hires="https://static.philippdubach.com/cdn-cgi/image/width=2000,quality=85,format=auto/fable5-europe-decline-ai-stack-chokepoints1.png"&gt;
&lt;form method="dialog" class="lightbox-close-form"&gt;
&lt;button type="submit" class="lightbox-close" aria-label="Close"&gt;×&lt;/button&gt;
&lt;/form&gt;
&lt;img alt="Europe controls 100% of EUV; outside suppliers control 70% of fabrication, 85% of GPUs, 90% of design, and 70% of cloud and frontier models" decoding="async"&gt;
&lt;/dialog&gt;
&lt;p&gt;The map is lopsided. Europe owns the hardest single chokepoint in the chain and buys almost everything else. The US held &lt;a href="https://epoch.ai/data-insights/ai-supercomputers-performance-share-by-country"&gt;74.5% of measured global GPU-cluster performance&lt;/a&gt;. China held 14.1%, and the European Union held 4.8%.&lt;/p&gt;
&lt;p&gt;Even the ASML card is partly held in Washington. ASML machines contain US technology. The &lt;a href="https://www.federalregister.gov/agencies/industry-and-security-bureau"&gt;Foreign Direct Product Rule&lt;/a&gt; can restrict foreign-made products that use specified US technology.&lt;/p&gt;
&lt;h2 id="us-ai-export-controls-at-washingtons-discretion"&gt;US AI export controls at Washington&amp;rsquo;s discretion&lt;/h2&gt;
&lt;p&gt;The usual objection is that governments threaten technology restrictions but rarely apply them to allies. By June 2026, they had started doing so.&lt;/p&gt;
&lt;p&gt;In January 2025, the US issued the &lt;a href="https://www.federalregister.gov/documents/2025/01/15/2025-00636/framework-for-artificial-intelligence-diffusion"&gt;AI Diffusion Rule&lt;/a&gt;. It divided countries into tiers for access to AI computing power. The rule placed ten European Union members in the licence-free top tier. It placed seventeen members in a capped second tier.&lt;/p&gt;
&lt;p&gt;In May 2025, the administration &lt;a href="https://www.bis.gov/press-release/department-commerce-announces-rescission-biden-era-artificial-intelligence-diffusion-rule-strengthens"&gt;rescinded the rule&lt;/a&gt;. Its notice said the rule &amp;ldquo;would have undermined U.S. diplomatic relations with dozens of countries by downgrading them to second-tier status.&amp;rdquo; Tiered access for allies had become too costly diplomatically.&lt;/p&gt;
&lt;p&gt;What is worse than a bad rule for a dependent ally? No rule at all. It is discretion.&lt;/p&gt;
&lt;p&gt;The administration made deal-by-deal grants to Gulf states. It also received a &lt;a href="https://www.npr.org/2025/08/11/nx-s1-5498689/trump-nvidia-h20-chip-sales-china"&gt;15% share of Nvidia&amp;rsquo;s China revenue&lt;/a&gt; in exchange for export licences. One lawmaker said this told China and US allies that &amp;ldquo;American national security principles are negotiable for the right fee.&amp;rdquo;&lt;/p&gt;
&lt;p&gt;And then came Fable 5. The &lt;a href="https://www.anthropic.com/news/fable-mythos-access"&gt;June 12 directive&lt;/a&gt; required Anthropic to block the models for &amp;ldquo;any foreign national, whether inside or outside the United States.&amp;rdquo; Anthropic &lt;a href="https://support.claude.com/en/articles/14328960-identity-verification-on-claude"&gt;could not check nationality in real time&lt;/a&gt;, so the practical result was a worldwide shutoff.&lt;/p&gt;
&lt;p&gt;Anthropic disputed the directive&amp;rsquo;s basis. It called the flagged flaw &amp;ldquo;a narrow, non-universal jailbreak&amp;rdquo; that other models also allowed. It warned that the standard &amp;ldquo;would essentially halt all new model deployments.&amp;rdquo;&lt;/p&gt;
&lt;p&gt;Analysts at &lt;a href="https://www.lawfaremedia.org/article/a-kill-switch-for-frontier-ai"&gt;Lawfare&lt;/a&gt; and &lt;a href="https://www.techpolicy.press/did-the-us-government-just-set-an-ai-export-precedent-by-blocking-mythos/"&gt;Tech Policy Press&lt;/a&gt; identified a broader change. Officials had extended export powers designed for physical goods to a live API. An application programming interface (API) lets software send requests to a model. Individual enforcement decisions had started to function like a rule.&lt;/p&gt;
&lt;h2 id="tail-risk"&gt;Tail risk&lt;/h2&gt;
&lt;p&gt;Krugman&amp;rsquo;s welfare case and the security case answer different questions: the average outcome versus the extreme loss. Dependence is cheap and harmless most of the time. It becomes a catastrophe in the bad state of the world. Nobody prices flood insurance from the average year.&lt;/p&gt;
&lt;p&gt;The strongest objections do not sink the point. Open weights spread after release. &lt;a href="https://www.deepseek.com/"&gt;DeepSeek-R1&lt;/a&gt; matched a leading US model at about one twenty-seventh of the cost of producing responses. As of June 21, &lt;a href="https://epoch.ai/data-insights/open-closed-eci-gap"&gt;Epoch estimated&lt;/a&gt; that open models trailed the closed frontier by roughly four months. Granted.&lt;/p&gt;
&lt;p&gt;But the binding dependence is not the downloadable file. It is the cloud, API, update cycle, and advanced chips underneath. Buyers cannot substitute these components easily.&lt;/p&gt;
&lt;p&gt;ASML gives Europe some leverage in return. A US cutoff could invite a Dutch response that blocks the leading-edge chip chain, including US factories. Also true. That possibility lowers the chance of a cutoff. It does not reduce the damage if one occurs. For this argument, severity matters more than probability.&lt;/p&gt;
&lt;p&gt;China&amp;rsquo;s parallel stack shows that separation is survivable. It also shows that separation is expensive and probably leaves the parallel system a step behind.&lt;/p&gt;
&lt;h2 id="european-technology-sovereignty-the-scorecard"&gt;European technology sovereignty: the scorecard&lt;/h2&gt;
&lt;p&gt;The giveaway is that Europe&amp;rsquo;s own institutions already accept the argument under gentler names. Mario Draghi&amp;rsquo;s &lt;a href="https://commission.europa.eu/topics/eu-competitiveness/draghi-report_en"&gt;competitiveness report&lt;/a&gt; called the dependence an existential challenge. It warned of &amp;ldquo;slow agony&amp;rdquo; and proposed roughly €800 billion in annual investment.&lt;/p&gt;
&lt;p&gt;The report made a still sharper concession. It concluded that &amp;ldquo;it is too late for the EU to try and develop systematic challengers to the major US cloud providers.&amp;rdquo;&lt;/p&gt;
&lt;p&gt;The &lt;a href="https://www.eca.europa.eu/en/publications/SR-2025-12"&gt;EU Chips Act&lt;/a&gt; carried a €43 billion headline, but only about €3.3 billion was new EU money. The US CHIPS Act provided $52.7 billion. The European Court of Auditors called the bloc&amp;rsquo;s target of 20% global chip share by 2030 &amp;ldquo;very unlikely.&amp;rdquo; It estimated a more realistic share of 11.7%.&lt;/p&gt;
&lt;p&gt;Europe&amp;rsquo;s reflex is to regulate from strength. It then quietly retreats when the &lt;a href="https://digital-strategy.ec.europa.eu/en/policies/regulatory-framework-ai"&gt;AI Act&lt;/a&gt; starts to impose material costs.&lt;/p&gt;
&lt;figure class="post-figure" style="width: 80%; margin: 1.5rem auto;"&gt;
&lt;button type="button" class="img-trigger" data-lightbox-target="lightbox-fable5-europe-decline-chip-funding-gap1-png-6" aria-label="View full-size image"&gt;
&lt;picture class="img-lightbox"&gt;
&lt;source media="(max-width: 768px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=320,quality=80,format=auto/fable5-europe-decline-chip-funding-gap1.png 320w,
https://static.philippdubach.com/cdn-cgi/image/width=480,quality=80,format=auto/fable5-europe-decline-chip-funding-gap1.png 480w,
https://static.philippdubach.com/cdn-cgi/image/width=640,quality=80,format=auto/fable5-europe-decline-chip-funding-gap1.png 640w,
https://static.philippdubach.com/cdn-cgi/image/width=960,quality=80,format=auto/fable5-europe-decline-chip-funding-gap1.png 960w,
https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/fable5-europe-decline-chip-funding-gap1.png 1200w"
sizes="(max-width: 768px) 80vw, 576px"&gt;
&lt;source media="(max-width: 1024px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=768,quality=80,format=auto/fable5-europe-decline-chip-funding-gap1.png 768w,
https://static.philippdubach.com/cdn-cgi/image/width=1024,quality=80,format=auto/fable5-europe-decline-chip-funding-gap1.png 1024w,
https://static.philippdubach.com/cdn-cgi/image/width=1440,quality=80,format=auto/fable5-europe-decline-chip-funding-gap1.png 1440w"
sizes="(max-width: 768px) 80vw, 576px"&gt;
&lt;source media="(min-width: 1025px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/fable5-europe-decline-chip-funding-gap1.png 1200w,
https://static.philippdubach.com/cdn-cgi/image/width=1600,quality=80,format=auto/fable5-europe-decline-chip-funding-gap1.png 1600w,
https://static.philippdubach.com/cdn-cgi/image/width=2000,quality=80,format=auto/fable5-europe-decline-chip-funding-gap1.png 2000w"
sizes="(max-width: 768px) 80vw, 576px"&gt;
&lt;img src="https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/fable5-europe-decline-chip-funding-gap1.png"
alt="US CHIPS Act provides $52.7 billion; the EU headline is €43 billion, including only €3.3 billion in new EU money"
class=""
width="1200"
height="762"
loading="lazy"
decoding="async"&gt;
&lt;/picture&gt;
&lt;/button&gt;
&lt;/figure&gt;
&lt;dialog id="lightbox-fable5-europe-decline-chip-funding-gap1-png-6" class="lightbox-dialog" aria-label="Full-size image" data-hires="https://static.philippdubach.com/cdn-cgi/image/width=2000,quality=85,format=auto/fable5-europe-decline-chip-funding-gap1.png"&gt;
&lt;form method="dialog" class="lightbox-close-form"&gt;
&lt;button type="submit" class="lightbox-close" aria-label="Close"&gt;×&lt;/button&gt;
&lt;/form&gt;
&lt;img alt="US CHIPS Act provides $52.7 billion; the EU headline is €43 billion, including only €3.3 billion in new EU money" decoding="async"&gt;
&lt;/dialog&gt;
&lt;p&gt;The &lt;a href="https://www.cnbc.com/2026/06/03/europe-tech-sovereignty-us-tech-reliance.html"&gt;June 2026 technology-sovereignty package&lt;/a&gt; carried its own admission: &amp;ldquo;we want to be sure nobody has a kill switch.&amp;rdquo;&lt;/p&gt;
&lt;p&gt;Former French prime minister Édouard Philippe was more direct after Fable 5. Infrastructure whose models and computing capacity you do not control &amp;ldquo;is an infrastructure that others can unplug.&amp;rdquo;&lt;/p&gt;
&lt;p&gt;A week later, &lt;a href="https://www.euronews.com/my-europe/2026/06/17/ai-takes-centre-stage-at-g7-as-western-fears-over-us-kill-switch-get-real"&gt;Group of Seven leaders met at Evian while VivaTech opened in Paris&lt;/a&gt;. By then, the dependence was no longer a white-paper abstraction.&lt;/p&gt;
&lt;h2 id="footnote"&gt;Footnote&lt;/h2&gt;
&lt;p&gt;Krugman moved the worry from productivity to geopolitics and treated that as filing it away. It was the opposite. European policymakers should not fear the output-per-hour line that he correctly takes apart. They should fear becoming revocable second-tier customers in somebody else&amp;rsquo;s licensing system.&lt;/p&gt;</description></item><item><title>Degoogling cost me my YouTube feed, so I made my own</title><link>https://philippdubach.com/posts/degoogling-cost-me-my-youtube-feed-so-i-made-my-own/</link><pubDate>Sun, 14 Jun 2026 00:00:00 +0200</pubDate><author>me@philippdubach.com (Philipp D. Dubach)</author><guid>https://philippdubach.com/posts/degoogling-cost-me-my-youtube-feed-so-i-made-my-own/</guid><description>&lt;figure class="post-figure post-figure--unframed" style="width: 80%; margin: 1.5rem auto;"&gt;
&lt;button type="button" class="img-trigger" data-lightbox-target="lightbox-degoogle-youtube-feed-cover-png-0" aria-label="View full-size image"&gt;
&lt;picture class="img-lightbox"&gt;
&lt;source media="(max-width: 768px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=320,quality=80,format=auto/degoogle-youtube-feed-cover.png 320w,
https://static.philippdubach.com/cdn-cgi/image/width=480,quality=80,format=auto/degoogle-youtube-feed-cover.png 480w,
https://static.philippdubach.com/cdn-cgi/image/width=640,quality=80,format=auto/degoogle-youtube-feed-cover.png 640w,
https://static.philippdubach.com/cdn-cgi/image/width=960,quality=80,format=auto/degoogle-youtube-feed-cover.png 960w,
https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/degoogle-youtube-feed-cover.png 1200w"
sizes="(max-width: 768px) 80vw, 576px"&gt;
&lt;source media="(max-width: 1024px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=768,quality=80,format=auto/degoogle-youtube-feed-cover.png 768w,
https://static.philippdubach.com/cdn-cgi/image/width=1024,quality=80,format=auto/degoogle-youtube-feed-cover.png 1024w,
https://static.philippdubach.com/cdn-cgi/image/width=1440,quality=80,format=auto/degoogle-youtube-feed-cover.png 1440w"
sizes="(max-width: 768px) 80vw, 576px"&gt;
&lt;source media="(min-width: 1025px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/degoogle-youtube-feed-cover.png 1200w,
https://static.philippdubach.com/cdn-cgi/image/width=1600,quality=80,format=auto/degoogle-youtube-feed-cover.png 1600w,
https://static.philippdubach.com/cdn-cgi/image/width=2000,quality=80,format=auto/degoogle-youtube-feed-cover.png 2000w"
sizes="(max-width: 768px) 80vw, 576px"&gt;
&lt;img src="https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/degoogle-youtube-feed-cover.png"
alt="The feed lists new videos from Veritasium, Vizeh, First We Feast, and Saturday Night Live in a desktop browser. It shows no comments, recommendations, or Shorts."
class=""
width="2064"
height="1674"
fetchpriority="high"
decoding="async"&gt;
&lt;/picture&gt;
&lt;/button&gt;
&lt;/figure&gt;
&lt;dialog id="lightbox-degoogle-youtube-feed-cover-png-0" class="lightbox-dialog" aria-label="Full-size image" data-hires="https://static.philippdubach.com/cdn-cgi/image/width=2000,quality=85,format=auto/degoogle-youtube-feed-cover.png"&gt;
&lt;form method="dialog" class="lightbox-close-form"&gt;
&lt;button type="submit" class="lightbox-close" aria-label="Close"&gt;×&lt;/button&gt;
&lt;/form&gt;
&lt;img alt="The feed lists new videos from Veritasium, Vizeh, First We Feast, and Saturday Night Live in a desktop browser. It shows no comments, recommendations, or Shorts." decoding="async"&gt;
&lt;/dialog&gt;
&lt;p&gt;I dropped the YouTube app as part of degoogling my life. My self-hosted YouTube subscription feed shows one thing: new videos from the 10 to 15 channels I follow. No comments, no recommendations, no Shorts. I rebuilt that screen and nothing else.&lt;/p&gt;
&lt;h2 id="a-self-hosted-youtube-subscription-feed"&gt;A self-hosted YouTube subscription feed&lt;/h2&gt;
&lt;p&gt;The result is one chronological list. It merges videos from every channel I follow and sorts them newest first. I can add a channel by URL or @handle, and it stays on the list.&lt;/p&gt;
&lt;p&gt;I ignore or avoid everything YouTube adds to the subscription feed. Building the one screen I use took less work than configuring the app to leave me alone.&lt;/p&gt;
&lt;h2 id="youtube-rss-feeds-without-an-api-key"&gt;YouTube RSS feeds without an API key&lt;/h2&gt;
&lt;p&gt;Each channel publishes a public RSS feed at &lt;code&gt;feeds/videos.xml&lt;/code&gt;. The file uses Atom, a standard XML format for content feeds. A Cloudflare Worker reads it, and &lt;code&gt;fast-xml-parser&lt;/code&gt; converts the XML into structured data. The Worker is a small program that runs on Cloudflare&amp;rsquo;s network.&lt;/p&gt;
&lt;p&gt;This route avoids the YouTube Data application programming interface (API), Google&amp;rsquo;s official interface for software requests. It needs no quota, Google project, or token.&lt;/p&gt;
&lt;p&gt;A handle or vanity URL can change, but a channel ID remains stable. The Worker reads the channel page once to find that ID. It saves the result and uses the ID for later feed requests.&lt;/p&gt;
&lt;p&gt;Before the Worker fetches a user-supplied URL, it checks the destination. This guard prevents server-side request forgery (SSRF). Without it, someone could make the Worker fetch an unintended address.&lt;/p&gt;
&lt;h2 id="how-to-filter-youtube-shorts-from-rss"&gt;How to filter YouTube Shorts from RSS&lt;/h2&gt;
&lt;p&gt;Shorts were the main thing I wanted gone, and one check does not catch them reliably. The first check looks for &lt;code&gt;#shorts&lt;/code&gt; in the title. The second tests how the video URL redirects because Shorts and full videos resolve differently. A video must pass both checks to appear.&lt;/p&gt;
&lt;h2 id="playback-without-the-tracking"&gt;Playback without the tracking&lt;/h2&gt;
&lt;p&gt;Clicking a thumbnail loads the video through YouTube&amp;rsquo;s privacy-enhanced iframe player. An iframe places a page from one site inside another page. The embed does not load before that click, so the player cannot set cookies before playback.&lt;/p&gt;
&lt;p&gt;This is not perfect privacy. Once loaded, the player writes an identifier to local storage and sends your IP address to Google. It is still much less intrusive than the app.&lt;/p&gt;
&lt;p&gt;On iOS, the video starts muted with a &amp;ldquo;Tap for sound&amp;rdquo; overlay. Apple blocks one-tap sound on the web, so muted playback is the least-bad workaround. Videos that block embedding show an &amp;ldquo;open on YouTube&amp;rdquo; link instead of a dead frame.&lt;/p&gt;
&lt;h2 id="picture-in-picture-came-for-free"&gt;Picture-in-picture came for free&lt;/h2&gt;
&lt;p&gt;Picture-in-picture was an unplanned bonus. Playback uses a normal web video element, so it receives the system controls. On iOS, the floating window follows me across apps. Audio also continues when the screen locks.&lt;/p&gt;
&lt;figure class="post-figure" style="width: 60%; margin: 1.5rem auto;"&gt;
&lt;button type="button" class="img-trigger" data-lightbox-target="lightbox-degoogle-youtube-feed-pip-png-2" aria-label="View full-size image"&gt;
&lt;picture class="img-lightbox"&gt;
&lt;source media="(max-width: 768px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=320,quality=80,format=auto/degoogle-youtube-feed-pip.png 320w,
https://static.philippdubach.com/cdn-cgi/image/width=480,quality=80,format=auto/degoogle-youtube-feed-pip.png 480w,
https://static.philippdubach.com/cdn-cgi/image/width=640,quality=80,format=auto/degoogle-youtube-feed-pip.png 640w,
https://static.philippdubach.com/cdn-cgi/image/width=960,quality=80,format=auto/degoogle-youtube-feed-pip.png 960w,
https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/degoogle-youtube-feed-pip.png 1200w"
sizes="(max-width: 768px) 60vw, 432px"&gt;
&lt;source media="(max-width: 1024px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=768,quality=80,format=auto/degoogle-youtube-feed-pip.png 768w,
https://static.philippdubach.com/cdn-cgi/image/width=1024,quality=80,format=auto/degoogle-youtube-feed-pip.png 1024w,
https://static.philippdubach.com/cdn-cgi/image/width=1440,quality=80,format=auto/degoogle-youtube-feed-pip.png 1440w"
sizes="(max-width: 768px) 60vw, 432px"&gt;
&lt;source media="(min-width: 1025px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/degoogle-youtube-feed-pip.png 1200w,
https://static.philippdubach.com/cdn-cgi/image/width=1600,quality=80,format=auto/degoogle-youtube-feed-pip.png 1600w,
https://static.philippdubach.com/cdn-cgi/image/width=2000,quality=80,format=auto/degoogle-youtube-feed-pip.png 2000w"
sizes="(max-width: 768px) 60vw, 432px"&gt;
&lt;img src="https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/degoogle-youtube-feed-pip.png"
alt="An iPhone plays Casey Neistat in a floating picture-in-picture window above the feed. A Marques Brownlee video remains open on the page below."
class=""
width="1179"
height="1387"
loading="lazy"
decoding="async"&gt;
&lt;/picture&gt;
&lt;/button&gt;
&lt;/figure&gt;
&lt;dialog id="lightbox-degoogle-youtube-feed-pip-png-2" class="lightbox-dialog" aria-label="Full-size image" data-hires="https://static.philippdubach.com/cdn-cgi/image/width=2000,quality=85,format=auto/degoogle-youtube-feed-pip.png"&gt;
&lt;form method="dialog" class="lightbox-close-form"&gt;
&lt;button type="submit" class="lightbox-close" aria-label="Close"&gt;×&lt;/button&gt;
&lt;/form&gt;
&lt;img alt="An iPhone plays Casey Neistat in a floating picture-in-picture window above the feed. A Marques Brownlee video remains open on the page below." decoding="async"&gt;
&lt;/dialog&gt;
&lt;h2 id="fast-and-hard-to-break"&gt;Fast and hard to break&lt;/h2&gt;
&lt;p&gt;The Worker starts all feed requests together. JavaScript&amp;rsquo;s &lt;code&gt;Promise.allSettled&lt;/code&gt; waits for every result without rejecting the group when one request fails. Each request also has a timeout. A slow or dead channel therefore returns nothing instead of hanging the page.&lt;/p&gt;
&lt;p&gt;The Cache API stores the merged feed on Cloudflare&amp;rsquo;s network for 15 minutes. Cloudflare KV, a key-value database, stores the channel list. The Worker builds the complete HTML page before sending it to the browser. I deploy it with Cloudflare&amp;rsquo;s &lt;code&gt;wrangler&lt;/code&gt; command-line tool.&lt;/p&gt;</description></item><item><title>Midyear Portfolio Review: Valuations got more extreme, not less</title><link>https://philippdubach.com/posts/midyear-portfolio-review-the-rotation-worked-europe-didnt/</link><pubDate>Sun, 31 May 2026 00:00:00 +0200</pubDate><author>me@philippdubach.com (Philipp D. Dubach)</author><guid>https://philippdubach.com/posts/midyear-portfolio-review-the-rotation-worked-europe-didnt/</guid><description>&lt;figure class="post-figure" style="width: 80%; margin: 1.5rem auto;"&gt;
&lt;button type="button" class="img-trigger" data-lightbox-target="lightbox-midyear-cover-jpg-0" aria-label="View full-size image"&gt;
&lt;picture class="img-lightbox"&gt;
&lt;source media="(max-width: 768px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=320,quality=80,format=auto/midyear-cover.jpg 320w,
https://static.philippdubach.com/cdn-cgi/image/width=480,quality=80,format=auto/midyear-cover.jpg 480w,
https://static.philippdubach.com/cdn-cgi/image/width=640,quality=80,format=auto/midyear-cover.jpg 640w,
https://static.philippdubach.com/cdn-cgi/image/width=960,quality=80,format=auto/midyear-cover.jpg 960w,
https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/midyear-cover.jpg 1200w"
sizes="(max-width: 768px) 80vw, 576px"&gt;
&lt;source media="(max-width: 1024px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=768,quality=80,format=auto/midyear-cover.jpg 768w,
https://static.philippdubach.com/cdn-cgi/image/width=1024,quality=80,format=auto/midyear-cover.jpg 1024w,
https://static.philippdubach.com/cdn-cgi/image/width=1440,quality=80,format=auto/midyear-cover.jpg 1440w"
sizes="(max-width: 768px) 80vw, 576px"&gt;
&lt;source media="(min-width: 1025px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/midyear-cover.jpg 1200w,
https://static.philippdubach.com/cdn-cgi/image/width=1600,quality=80,format=auto/midyear-cover.jpg 1600w,
https://static.philippdubach.com/cdn-cgi/image/width=2000,quality=80,format=auto/midyear-cover.jpg 2000w"
sizes="(max-width: 768px) 80vw, 576px"&gt;
&lt;img src="https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/midyear-cover.jpg"
alt="Figure on a Swiss alpine balcony facing a financial skyline dominated by one unusually tall tower"
class=""
width="947"
height="532"
fetchpriority="high"
decoding="async"&gt;
&lt;/picture&gt;
&lt;/button&gt;
&lt;/figure&gt;
&lt;dialog id="lightbox-midyear-cover-jpg-0" class="lightbox-dialog" aria-label="Full-size image" data-hires="https://static.philippdubach.com/cdn-cgi/image/width=2000,quality=85,format=auto/midyear-cover.jpg"&gt;
&lt;form method="dialog" class="lightbox-close-form"&gt;
&lt;button type="submit" class="lightbox-close" aria-label="Close"&gt;×&lt;/button&gt;
&lt;/form&gt;
&lt;img alt="Figure on a Swiss alpine balcony facing a financial skyline dominated by one unusually tall tower" decoding="async"&gt;
&lt;/dialog&gt;
&lt;p&gt;Last December, I rebalanced around &lt;a href="https://philippdubach.com/posts/how-ai-is-shaping-my-investment-portfolio-for-2026/"&gt;five theses for 2026&lt;/a&gt;. Five months later, moving money from US large companies into cheaper markets had mostly worked. Europe was the exception. As always, this is my 2026 midyear portfolio review, not a recommendation.&lt;/p&gt;
&lt;h2 id="portfolio-performance-review-through-may"&gt;Portfolio performance review through May&lt;/h2&gt;
&lt;p&gt;Through May 29, the portfolio gained &lt;strong&gt;5.2%&lt;/strong&gt; in Swiss francs on a time-weighted basis. A time-weighted return removes the effect of deposits and withdrawals.&lt;/p&gt;
&lt;p&gt;My global 60/40 benchmark gained &lt;strong&gt;5.4%&lt;/strong&gt;. It holds 60% in the MSCI All Country World Index and 40% in global bonds. The bond portion is hedged against movements in the Swiss franc. The S&amp;amp;P 500 total return gained &lt;strong&gt;9.0%&lt;/strong&gt; in francs.&lt;/p&gt;
&lt;p&gt;The portfolio therefore matched the diversified benchmark and trailed the US index by almost four percentage points.&lt;/p&gt;
&lt;figure class="post-figure" style="width: 80%; margin: 1.5rem auto;"&gt;
&lt;button type="button" class="img-trigger" data-lightbox-target="lightbox-portfolio_performance_2026h1-png-1" aria-label="View full-size image"&gt;
&lt;picture class="img-lightbox"&gt;
&lt;source media="(max-width: 768px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=320,quality=80,format=auto/portfolio_performance_2026h1.png 320w,
https://static.philippdubach.com/cdn-cgi/image/width=480,quality=80,format=auto/portfolio_performance_2026h1.png 480w,
https://static.philippdubach.com/cdn-cgi/image/width=640,quality=80,format=auto/portfolio_performance_2026h1.png 640w,
https://static.philippdubach.com/cdn-cgi/image/width=960,quality=80,format=auto/portfolio_performance_2026h1.png 960w,
https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/portfolio_performance_2026h1.png 1200w"
sizes="(max-width: 768px) 80vw, 576px"&gt;
&lt;source media="(max-width: 1024px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=768,quality=80,format=auto/portfolio_performance_2026h1.png 768w,
https://static.philippdubach.com/cdn-cgi/image/width=1024,quality=80,format=auto/portfolio_performance_2026h1.png 1024w,
https://static.philippdubach.com/cdn-cgi/image/width=1440,quality=80,format=auto/portfolio_performance_2026h1.png 1440w"
sizes="(max-width: 768px) 80vw, 576px"&gt;
&lt;source media="(min-width: 1025px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/portfolio_performance_2026h1.png 1200w,
https://static.philippdubach.com/cdn-cgi/image/width=1600,quality=80,format=auto/portfolio_performance_2026h1.png 1600w,
https://static.philippdubach.com/cdn-cgi/image/width=2000,quality=80,format=auto/portfolio_performance_2026h1.png 2000w"
sizes="(max-width: 768px) 80vw, 576px"&gt;
&lt;img src="https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/portfolio_performance_2026h1.png"
alt="From January 2 to May 29, the portfolio gained 5.2% in francs, global 60/40 gained 5.4%, and S&amp;amp;P 500 gained 9.0%. The March trough was near -4%."
class=""
width="2888"
height="1321"
loading="lazy"
decoding="async"&gt;
&lt;/picture&gt;
&lt;/button&gt;
&lt;/figure&gt;
&lt;dialog id="lightbox-portfolio_performance_2026h1-png-1" class="lightbox-dialog" aria-label="Full-size image" data-hires="https://static.philippdubach.com/cdn-cgi/image/width=2000,quality=85,format=auto/portfolio_performance_2026h1.png"&gt;
&lt;form method="dialog" class="lightbox-close-form"&gt;
&lt;button type="submit" class="lightbox-close" aria-label="Close"&gt;×&lt;/button&gt;
&lt;/form&gt;
&lt;img alt="From January 2 to May 29, the portfolio gained 5.2% in francs, global 60/40 gained 5.4%, and S&amp;amp;P 500 gained 9.0%. The March trough was near -4%." decoding="async"&gt;
&lt;/dialog&gt;
&lt;p&gt;I was up modestly through January, lost those gains by late March, and bottomed near &lt;strong&gt;-4%&lt;/strong&gt;. The portfolio then climbed steadily.&lt;/p&gt;
&lt;p&gt;A Middle East conflict began in late February. A brief threat to the Strait of Hormuz sent oil sharply higher. Markets had expected inflation to keep slowing. For several weeks, the oil shock replaced that story with persistent inflation. I think that single event reset the economic backdrop for everything that followed.&lt;/p&gt;
&lt;p&gt;In 2025, this approach beat the S&amp;amp;P 500 by a wide margin in Swiss francs. The dollar&amp;rsquo;s fall against the franc drove that result. The USD/CHF exchange rate fell about 11.5% that year. Through May 29, 2026, it had fallen only about 1.2%.&lt;/p&gt;
&lt;p&gt;The currency tailwind that made the strategy look brilliant is gone. Without it, the portfolio did what I expected: matched a balanced benchmark and trailed the US index.&lt;/p&gt;
&lt;h2 id="what-worked-what-didnt"&gt;What worked, what didn&amp;rsquo;t&lt;/h2&gt;
&lt;figure class="post-figure" style="width: 80%; margin: 1.5rem auto;"&gt;
&lt;button type="button" class="img-trigger" data-lightbox-target="lightbox-thesis_scorecard_2026h1-png-2" aria-label="View full-size image"&gt;
&lt;picture class="img-lightbox"&gt;
&lt;source media="(max-width: 768px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=320,quality=80,format=auto/thesis_scorecard_2026h1.png 320w,
https://static.philippdubach.com/cdn-cgi/image/width=480,quality=80,format=auto/thesis_scorecard_2026h1.png 480w,
https://static.philippdubach.com/cdn-cgi/image/width=640,quality=80,format=auto/thesis_scorecard_2026h1.png 640w,
https://static.philippdubach.com/cdn-cgi/image/width=960,quality=80,format=auto/thesis_scorecard_2026h1.png 960w,
https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/thesis_scorecard_2026h1.png 1200w"
sizes="(max-width: 768px) 80vw, 576px"&gt;
&lt;source media="(max-width: 1024px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=768,quality=80,format=auto/thesis_scorecard_2026h1.png 768w,
https://static.philippdubach.com/cdn-cgi/image/width=1024,quality=80,format=auto/thesis_scorecard_2026h1.png 1024w,
https://static.philippdubach.com/cdn-cgi/image/width=1440,quality=80,format=auto/thesis_scorecard_2026h1.png 1440w"
sizes="(max-width: 768px) 80vw, 576px"&gt;
&lt;source media="(min-width: 1025px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/thesis_scorecard_2026h1.png 1200w,
https://static.philippdubach.com/cdn-cgi/image/width=1600,quality=80,format=auto/thesis_scorecard_2026h1.png 1600w,
https://static.philippdubach.com/cdn-cgi/image/width=2000,quality=80,format=auto/thesis_scorecard_2026h1.png 2000w"
sizes="(max-width: 768px) 80vw, 576px"&gt;
&lt;img src="https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/thesis_scorecard_2026h1.png"
alt="Returns through May 29: emerging markets 20.7%, small caps 13.2%, Japan 13.1%, US large caps 9.9%, and Europe 4.8%. Gold gained 1.0%; corporate bonds 0.2%; global bonds were flat; euro bonds -0.1%; Treasuries -1.3%; listed private equity -13.5%; Bitcoin -19.3%."
class=""
width="3004"
height="1466"
loading="lazy"
decoding="async"&gt;
&lt;/picture&gt;
&lt;/button&gt;
&lt;/figure&gt;
&lt;dialog id="lightbox-thesis_scorecard_2026h1-png-2" class="lightbox-dialog" aria-label="Full-size image" data-hires="https://static.philippdubach.com/cdn-cgi/image/width=2000,quality=85,format=auto/thesis_scorecard_2026h1.png"&gt;
&lt;form method="dialog" class="lightbox-close-form"&gt;
&lt;button type="submit" class="lightbox-close" aria-label="Close"&gt;×&lt;/button&gt;
&lt;/form&gt;
&lt;img alt="Returns through May 29: emerging markets 20.7%, small caps 13.2%, Japan 13.1%, US large caps 9.9%, and Europe 4.8%. Gold gained 1.0%; corporate bonds 0.2%; global bonds were flat; euro bonds -0.1%; Treasuries -1.3%; listed private equity -13.5%; Bitcoin -19.3%." decoding="async"&gt;
&lt;/dialog&gt;
&lt;p&gt;Emerging Markets gained about &lt;strong&gt;20.7%&lt;/strong&gt; in Swiss francs and contributed the most relative to its portfolio weight. US Small Cap gained &lt;strong&gt;13.2%&lt;/strong&gt;, and Japan gained &lt;strong&gt;13.1%&lt;/strong&gt;. My valuation thesis worked in three of the four market segments where I had added money.&lt;/p&gt;
&lt;p&gt;I only half-anticipated what drove the emerging-market gain. In December, I had expected Chinese stimulus. Instead, Korean and Taiwanese chipmakers at the centre of the AI supply chain led the move. My broad emerging-market holding captured that gain; my dedicated Chinese-technology holding did not. I was right about Asia for the opposite reason I had written down. Fair enough.&lt;/p&gt;
&lt;p&gt;The fourth rotation was Europe, and it did not deliver. It gained &lt;strong&gt;4.8%&lt;/strong&gt; in francs, compared with 9.9% for US large companies. Europe trailed the other three rotations by eight to sixteen percentage points.&lt;/p&gt;
&lt;p&gt;Germany announced a €500 billion infrastructure fund, €400 billion for defence, and €600 billion in private commitments. &lt;a href="https://www.citigroup.com/global/insights/european-equity-strategy-european-fiscal-stimulus-revisited"&gt;Citi&amp;rsquo;s European equity team maintained its overweight view&lt;/a&gt;. An overweight position exceeds the market&amp;rsquo;s share in a benchmark. Citi projected 13% compound annual growth in German earnings per share through 2029.&lt;/p&gt;
&lt;p&gt;None of that had appeared in prices by May 29. A cheap market can remain cheap until an event forces investors to value it differently. The event I expected had not done its job, at least not yet.&lt;/p&gt;
&lt;p&gt;Bitcoin and listed private equity were the worst calls, down about &lt;strong&gt;19%&lt;/strong&gt; and &lt;strong&gt;13%&lt;/strong&gt; in francs. Bitcoin&amp;rsquo;s behaviour in March changed how I size it.&lt;/p&gt;
&lt;p&gt;I am watching listed private equity more carefully. Its share-price discount to net asset value (NAV) widened and caused the loss. NAV is the value of assets minus liabilities. I see a crowded trade in a year with wider differences between investment returns, rather than a broken thesis.&lt;/p&gt;
&lt;h2 id="valuations-got-more-extreme-not-less"&gt;Valuations got more extreme, not less&lt;/h2&gt;
&lt;p&gt;The Shiller cyclically adjusted price-to-earnings ratio (CAPE) was the spine of my December argument. CAPE compares share prices with ten years of inflation-adjusted earnings. When I wrote that article, the S&amp;amp;P 500 traded at 40.5 times earnings. The long-run mean was 17.3.&lt;/p&gt;
&lt;p&gt;I expected the gap to close through lower valuations or higher earnings. Investors often call the first path multiple contraction.&lt;/p&gt;
&lt;figure class="post-figure" style="width: 80%; margin: 1.5rem auto;"&gt;
&lt;button type="button" class="img-trigger" data-lightbox-target="lightbox-cape_ratio_2026h1-png-4" aria-label="View full-size image"&gt;
&lt;picture class="img-lightbox"&gt;
&lt;source media="(max-width: 768px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=320,quality=80,format=auto/cape_ratio_2026h1.png 320w,
https://static.philippdubach.com/cdn-cgi/image/width=480,quality=80,format=auto/cape_ratio_2026h1.png 480w,
https://static.philippdubach.com/cdn-cgi/image/width=640,quality=80,format=auto/cape_ratio_2026h1.png 640w,
https://static.philippdubach.com/cdn-cgi/image/width=960,quality=80,format=auto/cape_ratio_2026h1.png 960w,
https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/cape_ratio_2026h1.png 1200w"
sizes="(max-width: 768px) 80vw, 576px"&gt;
&lt;source media="(max-width: 1024px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=768,quality=80,format=auto/cape_ratio_2026h1.png 768w,
https://static.philippdubach.com/cdn-cgi/image/width=1024,quality=80,format=auto/cape_ratio_2026h1.png 1024w,
https://static.philippdubach.com/cdn-cgi/image/width=1440,quality=80,format=auto/cape_ratio_2026h1.png 1440w"
sizes="(max-width: 768px) 80vw, 576px"&gt;
&lt;source media="(min-width: 1025px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/cape_ratio_2026h1.png 1200w,
https://static.philippdubach.com/cdn-cgi/image/width=1600,quality=80,format=auto/cape_ratio_2026h1.png 1600w,
https://static.philippdubach.com/cdn-cgi/image/width=2000,quality=80,format=auto/cape_ratio_2026h1.png 2000w"
sizes="(max-width: 768px) 80vw, 576px"&gt;
&lt;img src="https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/cape_ratio_2026h1.png"
alt="S&amp;amp;P 500 CAPE, 1990 to May 2026: 42.7 in May, 39.8 in December 2025, 17.3 long-run mean, and 44.2 dot-com peak"
class=""
width="2899"
height="1325"
loading="lazy"
decoding="async"&gt;
&lt;/picture&gt;
&lt;/button&gt;
&lt;/figure&gt;
&lt;dialog id="lightbox-cape_ratio_2026h1-png-4" class="lightbox-dialog" aria-label="Full-size image" data-hires="https://static.philippdubach.com/cdn-cgi/image/width=2000,quality=85,format=auto/cape_ratio_2026h1.png"&gt;
&lt;form method="dialog" class="lightbox-close-form"&gt;
&lt;button type="submit" class="lightbox-close" aria-label="Close"&gt;×&lt;/button&gt;
&lt;/form&gt;
&lt;img alt="S&amp;amp;P 500 CAPE, 1990 to May 2026: 42.7 in May, 39.8 in December 2025, 17.3 long-run mean, and 44.2 dot-com peak" decoding="async"&gt;
&lt;/dialog&gt;
&lt;p&gt;Neither path closed the gap. The &lt;a href="https://www.multpl.com/shiller-pe"&gt;CAPE was about &lt;strong&gt;42.7&lt;/strong&gt;&lt;/a&gt; in late May, up from 39.8 at the end of December. No reading since December 1999 had been closer to the dot-com peak of 44.2. The valuation rose while earnings kept pace, and the rest of the world remained cheaper.&lt;/p&gt;
&lt;p&gt;Concentration is messier. Nvidia&amp;rsquo;s index weight rose from 7.2% in December to &lt;strong&gt;8.17%&lt;/strong&gt;. Apple represented 6.70%, while Microsoft fell from 5.9% to 4.96%. The ten largest companies represented 39.1% of the index.&lt;/p&gt;
&lt;p&gt;The concentration problem had become a risk tied to one company, not the whole group known as the Magnificent Seven.&lt;/p&gt;
&lt;figure class="post-figure" style="width: 80%; margin: 1.5rem auto;"&gt;
&lt;button type="button" class="img-trigger" data-lightbox-target="lightbox-sp500_concentration_2026h1-png-5" aria-label="View full-size image"&gt;
&lt;picture class="img-lightbox"&gt;
&lt;source media="(max-width: 768px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=320,quality=80,format=auto/sp500_concentration_2026h1.png 320w,
https://static.philippdubach.com/cdn-cgi/image/width=480,quality=80,format=auto/sp500_concentration_2026h1.png 480w,
https://static.philippdubach.com/cdn-cgi/image/width=640,quality=80,format=auto/sp500_concentration_2026h1.png 640w,
https://static.philippdubach.com/cdn-cgi/image/width=960,quality=80,format=auto/sp500_concentration_2026h1.png 960w,
https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/sp500_concentration_2026h1.png 1200w"
sizes="(max-width: 768px) 80vw, 576px"&gt;
&lt;source media="(max-width: 1024px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=768,quality=80,format=auto/sp500_concentration_2026h1.png 768w,
https://static.philippdubach.com/cdn-cgi/image/width=1024,quality=80,format=auto/sp500_concentration_2026h1.png 1024w,
https://static.philippdubach.com/cdn-cgi/image/width=1440,quality=80,format=auto/sp500_concentration_2026h1.png 1440w"
sizes="(max-width: 768px) 80vw, 576px"&gt;
&lt;source media="(min-width: 1025px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/sp500_concentration_2026h1.png 1200w,
https://static.philippdubach.com/cdn-cgi/image/width=1600,quality=80,format=auto/sp500_concentration_2026h1.png 1600w,
https://static.philippdubach.com/cdn-cgi/image/width=2000,quality=80,format=auto/sp500_concentration_2026h1.png 2000w"
sizes="(max-width: 768px) 80vw, 576px"&gt;
&lt;img src="https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/sp500_concentration_2026h1.png"
alt="S&amp;amp;P 500 weights: Nvidia 8.17%, up from 7.2%; Apple 6.70%; Microsoft 4.96%, down from 5.9%; ten largest companies 39.1%"
class=""
width="2823"
height="1399"
loading="lazy"
decoding="async"&gt;
&lt;/picture&gt;
&lt;/button&gt;
&lt;/figure&gt;
&lt;dialog id="lightbox-sp500_concentration_2026h1-png-5" class="lightbox-dialog" aria-label="Full-size image" data-hires="https://static.philippdubach.com/cdn-cgi/image/width=2000,quality=85,format=auto/sp500_concentration_2026h1.png"&gt;
&lt;form method="dialog" class="lightbox-close-form"&gt;
&lt;button type="submit" class="lightbox-close" aria-label="Close"&gt;×&lt;/button&gt;
&lt;/form&gt;
&lt;img alt="S&amp;amp;P 500 weights: Nvidia 8.17%, up from 7.2%; Apple 6.70%; Microsoft 4.96%, down from 5.9%; ten largest companies 39.1%" decoding="async"&gt;
&lt;/dialog&gt;
&lt;h2 id="the-europe-trade-is-alive-but-not-paying"&gt;The Europe trade is alive but not paying&lt;/h2&gt;
&lt;p&gt;UBS&amp;rsquo;s &lt;em&gt;Year Ahead 2026&lt;/em&gt; described Europe&amp;rsquo;s discount using expected earnings as 22%. Its figures placed the US at 23 times forward earnings and Europe at 14 times. A forward ratio uses expected earnings.&lt;/p&gt;
&lt;p&gt;By May 29, the US traded around &lt;strong&gt;28 times&lt;/strong&gt; past earnings, while Europe traded around &lt;strong&gt;18 times&lt;/strong&gt;. This trailing ratio gave Europe a discount near 35%. The cheap market had become cheaper relative to the expensive one.&lt;/p&gt;
&lt;p&gt;Being early on a valuation gap that will not close is indistinguishable from being wrong for as long as it lasts.&lt;/p&gt;
&lt;figure class="post-figure" style="width: 80%; margin: 1.5rem auto;"&gt;
&lt;button type="button" class="img-trigger" data-lightbox-target="lightbox-regional_pe_2026h1-png-7" aria-label="View full-size image"&gt;
&lt;picture class="img-lightbox"&gt;
&lt;source media="(max-width: 768px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=320,quality=80,format=auto/regional_pe_2026h1.png 320w,
https://static.philippdubach.com/cdn-cgi/image/width=480,quality=80,format=auto/regional_pe_2026h1.png 480w,
https://static.philippdubach.com/cdn-cgi/image/width=640,quality=80,format=auto/regional_pe_2026h1.png 640w,
https://static.philippdubach.com/cdn-cgi/image/width=960,quality=80,format=auto/regional_pe_2026h1.png 960w,
https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/regional_pe_2026h1.png 1200w"
sizes="(max-width: 768px) 80vw, 576px"&gt;
&lt;source media="(max-width: 1024px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=768,quality=80,format=auto/regional_pe_2026h1.png 768w,
https://static.philippdubach.com/cdn-cgi/image/width=1024,quality=80,format=auto/regional_pe_2026h1.png 1024w,
https://static.philippdubach.com/cdn-cgi/image/width=1440,quality=80,format=auto/regional_pe_2026h1.png 1440w"
sizes="(max-width: 768px) 80vw, 576px"&gt;
&lt;source media="(min-width: 1025px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/regional_pe_2026h1.png 1200w,
https://static.philippdubach.com/cdn-cgi/image/width=1600,quality=80,format=auto/regional_pe_2026h1.png 1600w,
https://static.philippdubach.com/cdn-cgi/image/width=2000,quality=80,format=auto/regional_pe_2026h1.png 2000w"
sizes="(max-width: 768px) 80vw, 576px"&gt;
&lt;img src="https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/regional_pe_2026h1.png"
alt="May 2026 trailing price-to-earnings ratios: US 28, Japan 19, emerging markets 19, and Europe 18, a 35% discount to the US"
class=""
width="2772"
height="1271"
loading="lazy"
decoding="async"&gt;
&lt;/picture&gt;
&lt;/button&gt;
&lt;/figure&gt;
&lt;dialog id="lightbox-regional_pe_2026h1-png-7" class="lightbox-dialog" aria-label="Full-size image" data-hires="https://static.philippdubach.com/cdn-cgi/image/width=2000,quality=85,format=auto/regional_pe_2026h1.png"&gt;
&lt;form method="dialog" class="lightbox-close-form"&gt;
&lt;button type="submit" class="lightbox-close" aria-label="Close"&gt;×&lt;/button&gt;
&lt;/form&gt;
&lt;img alt="May 2026 trailing price-to-earnings ratios: US 28, Japan 19, emerging markets 19, and Europe 18, a 35% discount to the US" decoding="async"&gt;
&lt;/dialog&gt;
&lt;p&gt;Two quarters of strong US earnings supported the high valuation. &lt;a href="https://insight.factset.com/sp-500-earnings-season-update-may-1-2026"&gt;FactSet reported a record 13.4% net profit margin for the first quarter of 2026&lt;/a&gt;. The index therefore looked expensive without looking fragile.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://www.cnbc.com/2026/04/21/jpmorgan-raises-sp-500-target-as-mythos-model-bolsters-ai-trade.html"&gt;JPM&amp;rsquo;s Lakos-Bujas raised his year-end S&amp;amp;P 500 target to 7,600 in April&lt;/a&gt;. He raised expected 2026 earnings per share (EPS) to $330, a 22% annual increase. &lt;a href="https://www.cnbc.com/video/2026/04/14/sp500-lows-are-in-for-the-year-for-the-sp-500-says-morgan-stanley-cio-mike-wilson.html"&gt;Morgan Stanley&amp;rsquo;s Mike Wilson set a 7,800 target&lt;/a&gt; and called the market &amp;ldquo;early cycle.&amp;rdquo; &lt;a href="https://www.cnbc.com/2025/12/15/bofas-savita-subramanian-says-sp-500-will-rise-to-just-7100-in-2026.html"&gt;Bank of America&amp;rsquo;s Subramanian was more cautious at 7,100&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Forecasts had gathered near the high end of the range. For my Europe position, the lesson is that a wide discount can persist for years. A low valuation was never enough on its own. Europe needed a catalyst, and Germany&amp;rsquo;s fiscal shift had not yet changed the valuation.&lt;/p&gt;
&lt;h2 id="dollar-ai-bonds"&gt;Dollar, AI, bonds&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Dollar.&lt;/strong&gt; In December, I expected the dollar to fall 4% to 10% during 2026. By May 29, it had fallen about 1.2% against the franc. That was a stall rather than a fail.&lt;/p&gt;
&lt;p&gt;Goldman Sachs, UBS, Pictet, ABN AMRO, and MUFG kept their weaker-dollar forecasts. They moved most of the expected decline into the second half of 2026. The underlying factors remained: US fiscal and current-account deficits, a smaller interest-rate advantage, and concerns about government debt. The International Monetary Fund highlighted the fiscal concerns in April.&lt;/p&gt;
&lt;p&gt;The war revived demand for the dollar as a safe asset. A Federal Reserve focused on inflation also preserved the dollar&amp;rsquo;s interest advantage. I assume the thesis is delayed, not dead.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;AI capital expenditure.&lt;/strong&gt; The largest cloud companies were forecast in December to spend $571 billion on long-lived assets during 2026. First-quarter results and company forecasts raised the conservative range to roughly &lt;strong&gt;$660 billion to $725 billion&lt;/strong&gt;. One financial-analyst estimate reached $805 billion. No major research firm reduced its forecast. Cloud revenue accelerated with the spending.&lt;/p&gt;
&lt;p&gt;I still think AI may become a competitive commodity. In that case, much of the value flows to users rather than one model provider. But the investment cycle had clearly not peaked. Betting against it on valuation alone would have cost me.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Bonds.&lt;/strong&gt; This is the clean miss. I built the holdings around two or three Federal Reserve cuts in 2026, and none occurred by May 29. The energy shock pushed inflation back towards 4%. The Federal Reserve held rates at every meeting.&lt;/p&gt;
&lt;p&gt;By spring, markets expected the European Central Bank to raise rates before the Federal Reserve changed them. Swiss-franc corporate bonds returned about &lt;strong&gt;0.2%&lt;/strong&gt; in francs. Hedged euro government bonds returned about &lt;strong&gt;-0.1%&lt;/strong&gt;, while US Treasuries returned about &lt;strong&gt;-1.3%&lt;/strong&gt; in francs. The currency loss erased a roughly flat dollar return.&lt;/p&gt;
&lt;p&gt;Interest income has been fine. My expected capital gain has not arrived. I had assumed that lower policy rates would raise bond prices.&lt;/p&gt;
&lt;h2 id="the-two-diversifiers-split"&gt;The two diversifiers split&lt;/h2&gt;
&lt;p&gt;The clearest lesson from the first five months is that my two &amp;ldquo;diversifiers&amp;rdquo; are not the same animal. The March shock separated them.&lt;/p&gt;
&lt;p&gt;Gold behaved like a diversifier when it mattered. It held its value during the energy-shock drawdown while equities fell. Central banks also continued buying gold. &lt;a href="https://www.gold.org/goldhub/research/gold-demand-trends/gold-demand-trends-q1-2026/central-banks"&gt;They bought 244 tonnes in the first quarter, according to the World Gold Council&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Over the full five months, my Swiss-franc-hedged gold holding gained only about &lt;strong&gt;1%&lt;/strong&gt;. The currency hedge removed gains that unhedged gold received from the dollar. I accepted that cost deliberately. Gold did its job during the only period that tested it. It remains my portfolio&amp;rsquo;s one genuine diversifier.&lt;/p&gt;
&lt;p&gt;Bitcoin did not. During the March drawdown, it fell with equities and fell further than they did. It was down about &lt;strong&gt;19%&lt;/strong&gt; in francs for the year through May 29. Bitcoin behaved like an amplified bet on risk appetite and market liquidity, not like ballast.&lt;/p&gt;
&lt;h2 id="three-portfolio-allocation-changes"&gt;Three portfolio allocation changes&lt;/h2&gt;
&lt;p&gt;I made three small changes. None reversed the strategy. A midyear review mostly earns the right to leave things alone, and that is what this one did.&lt;/p&gt;
&lt;figure class="post-figure" style="width: 80%; margin: 1.5rem auto;"&gt;
&lt;button type="button" class="img-trigger" data-lightbox-target="lightbox-allocation_decisions_2026h1-png-9" aria-label="View full-size image"&gt;
&lt;picture class="img-lightbox"&gt;
&lt;source media="(max-width: 768px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=320,quality=80,format=auto/allocation_decisions_2026h1.png 320w,
https://static.philippdubach.com/cdn-cgi/image/width=480,quality=80,format=auto/allocation_decisions_2026h1.png 480w,
https://static.philippdubach.com/cdn-cgi/image/width=640,quality=80,format=auto/allocation_decisions_2026h1.png 640w,
https://static.philippdubach.com/cdn-cgi/image/width=960,quality=80,format=auto/allocation_decisions_2026h1.png 960w,
https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/allocation_decisions_2026h1.png 1200w"
sizes="(max-width: 768px) 80vw, 576px"&gt;
&lt;source media="(max-width: 1024px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=768,quality=80,format=auto/allocation_decisions_2026h1.png 768w,
https://static.philippdubach.com/cdn-cgi/image/width=1024,quality=80,format=auto/allocation_decisions_2026h1.png 1024w,
https://static.philippdubach.com/cdn-cgi/image/width=1440,quality=80,format=auto/allocation_decisions_2026h1.png 1440w"
sizes="(max-width: 768px) 80vw, 576px"&gt;
&lt;source media="(min-width: 1025px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/allocation_decisions_2026h1.png 1200w,
https://static.philippdubach.com/cdn-cgi/image/width=1600,quality=80,format=auto/allocation_decisions_2026h1.png 1600w,
https://static.philippdubach.com/cdn-cgi/image/width=2000,quality=80,format=auto/allocation_decisions_2026h1.png 2000w"
sizes="(max-width: 768px) 80vw, 576px"&gt;
&lt;img src="https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/allocation_decisions_2026h1.png"
alt="Changes across 14 holdings: gold rose from 5% to 6%, crypto fell from 4.5% to 3.5%, and Japan stayed at 3% with a franc hedge"
class=""
width="2725"
height="1520"
loading="lazy"
decoding="async"&gt;
&lt;/picture&gt;
&lt;/button&gt;
&lt;/figure&gt;
&lt;dialog id="lightbox-allocation_decisions_2026h1-png-9" class="lightbox-dialog" aria-label="Full-size image" data-hires="https://static.philippdubach.com/cdn-cgi/image/width=2000,quality=85,format=auto/allocation_decisions_2026h1.png"&gt;
&lt;form method="dialog" class="lightbox-close-form"&gt;
&lt;button type="submit" class="lightbox-close" aria-label="Close"&gt;×&lt;/button&gt;
&lt;/form&gt;
&lt;img alt="Changes across 14 holdings: gold rose from 5% to 6%, crypto fell from 4.5% to 3.5%, and Japan stayed at 3% with a franc hedge" decoding="async"&gt;
&lt;/dialog&gt;
&lt;p&gt;&lt;strong&gt;Gold from 5% to 6%.&lt;/strong&gt; It is the portfolio&amp;rsquo;s one genuine diversifier and held up during the year&amp;rsquo;s only stress period. I funded the increase with new cash rather than selling anything. The currency hedge reduced this year&amp;rsquo;s reported gain, and I am keeping it anyway. I own gold to reduce equity losses in francs, not to make a separate dollar bet.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Crypto from 4.5% to 3.5%.&lt;/strong&gt; This is not a loss of faith. I keep a meaningful position because the potential gain exceeds the amount at risk. But crypto&amp;rsquo;s job was diversification, and it failed that job in March.&lt;/p&gt;
&lt;p&gt;I am sizing it for what it actually is. I let its weight fall and redirected new contributions instead of selling after the decline. The change therefore had no transaction cost.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Japan, switched into a Swiss-franc-hedged share class.&lt;/strong&gt; Japanese equities gained well into the teens in local currency. A falling yen erased most of that gain for me as a franc investor.&lt;/p&gt;
&lt;p&gt;I kept the equity exposure and hedged the currency. The Swiss National Bank&amp;rsquo;s policy rate was 0%, and Japanese rates were also low. The small rate difference made the hedge inexpensive compared with the currency move it removed. Same 3% weight, different currency.&lt;/p&gt;
&lt;p&gt;I did not apply the same logic to the dollar. Hedging dollars cost roughly 4% because of the interest-rate difference. That cost was too high to offset a one-percentage-point currency move on a 2% Treasury position. I preferred to keep the extra interest income.&lt;/p&gt;
&lt;p&gt;I also measured the AI exposure hidden inside my supposedly less concentrated portfolio. Market-capitalisation-weighted funds hold more of the largest companies, including Nvidia and TSMC. This indirect AI exposure was roughly 13% of the portfolio. No single company exceeded about 2%.&lt;/p&gt;
&lt;p&gt;The reduction in concentration worked. I do not have a concealed AI bet masquerading as diversification. That was the outcome I most wanted to rule out.&lt;/p&gt;
&lt;h2 id="what-would-change-my-mind"&gt;What would change my mind&lt;/h2&gt;
&lt;p&gt;The thesis rests on a few load-bearing assumptions. A useful review names what would break each one.&lt;/p&gt;
&lt;p&gt;For AI and US concentration, price alone is not the trigger because expensive assets can remain expensive. I would react if the largest cloud companies cut investment while their cloud revenue stopped growing. A major efficiency gain that made current infrastructure look excessive would have the same effect.&lt;/p&gt;
&lt;p&gt;Through May 29, capital expenditure was still rising and generating revenue. If that relationship reverses, I will reduce the portfolio&amp;rsquo;s direct and indirect AI exposure.&lt;/p&gt;
&lt;p&gt;For interest rates, falling inflation and Federal Reserve cuts would restore the bond case that I got wrong this spring. I would then buy bonds with longer maturities. Longer-maturity bonds respond more strongly to changes in interest rates.&lt;/p&gt;
&lt;p&gt;If inflation remains high and energy costs feed into wages, gold must provide protection. I would keep the bonds at shorter maturities.&lt;/p&gt;
&lt;p&gt;For Europe, I will keep the overweight position while the public-spending plan remains intact. I view the problem as a missing catalyst, not a broken thesis. If German spending stalls or analysts cut earnings forecasts, I will reduce the position to its benchmark weight.&lt;/p&gt;
&lt;aside class="disclaimer" role="note" aria-label="Disclaimer"&gt;
&lt;div class="disclaimer-content"&gt;&lt;p&gt;&lt;strong&gt;Disclaimer:&lt;/strong&gt; Journalism, not investment advice or a recommendation. Not directed at UK persons; not a financial promotion under FSMA s.21. The author may hold positions in instruments discussed and receives no compensation from issuers. &lt;a href="https://philippdubach.com/disclaimers/#finance"&gt;Full disclaimer →&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;
&lt;/aside&gt;</description></item><item><title>How DORA Made Sovereignty a Bank Problem</title><link>https://philippdubach.com/posts/dora-critical-cloud-providers-sovereignty/</link><pubDate>Sun, 24 May 2026 00:00:00 +0200</pubDate><author>me@philippdubach.com (Philipp D. Dubach)</author><guid>https://philippdubach.com/posts/dora-critical-cloud-providers-sovereignty/</guid><description>&lt;figure class="post-figure" style="width: 80%; margin: 1.5rem auto;"&gt;
&lt;button type="button" class="img-trigger" data-lightbox-target="lightbox-cover-dora-sovereignty-png-0" aria-label="View full-size image"&gt;
&lt;picture class="img-lightbox"&gt;
&lt;source media="(max-width: 768px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=320,quality=80,format=auto/cover-dora-sovereignty.png 320w,
https://static.philippdubach.com/cdn-cgi/image/width=480,quality=80,format=auto/cover-dora-sovereignty.png 480w,
https://static.philippdubach.com/cdn-cgi/image/width=640,quality=80,format=auto/cover-dora-sovereignty.png 640w,
https://static.philippdubach.com/cdn-cgi/image/width=960,quality=80,format=auto/cover-dora-sovereignty.png 960w,
https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/cover-dora-sovereignty.png 1200w"
sizes="(max-width: 768px) 80vw, 576px"&gt;
&lt;source media="(max-width: 1024px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=768,quality=80,format=auto/cover-dora-sovereignty.png 768w,
https://static.philippdubach.com/cdn-cgi/image/width=1024,quality=80,format=auto/cover-dora-sovereignty.png 1024w,
https://static.philippdubach.com/cdn-cgi/image/width=1440,quality=80,format=auto/cover-dora-sovereignty.png 1440w"
sizes="(max-width: 768px) 80vw, 576px"&gt;
&lt;source media="(min-width: 1025px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/cover-dora-sovereignty.png 1200w,
https://static.philippdubach.com/cdn-cgi/image/width=1600,quality=80,format=auto/cover-dora-sovereignty.png 1600w,
https://static.philippdubach.com/cdn-cgi/image/width=2000,quality=80,format=auto/cover-dora-sovereignty.png 2000w"
sizes="(max-width: 768px) 80vw, 576px"&gt;
&lt;img src="https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/cover-dora-sovereignty.png"
alt="A green circuit board shaped like Europe represents bank cloud sovereignty. Copper traces mark borders, and electronic components mark cities."
class=""
width="1316"
height="759"
fetchpriority="high"
decoding="async"&gt;
&lt;/picture&gt;
&lt;/button&gt;
&lt;/figure&gt;
&lt;dialog id="lightbox-cover-dora-sovereignty-png-0" class="lightbox-dialog" aria-label="Full-size image" data-hires="https://static.philippdubach.com/cdn-cgi/image/width=2000,quality=85,format=auto/cover-dora-sovereignty.png"&gt;
&lt;form method="dialog" class="lightbox-close-form"&gt;
&lt;button type="submit" class="lightbox-close" aria-label="Close"&gt;×&lt;/button&gt;
&lt;/form&gt;
&lt;img alt="A green circuit board shaped like Europe represents bank cloud sovereignty. Copper traces mark borders, and electronic components mark cities." decoding="async"&gt;
&lt;/dialog&gt;
&lt;p&gt;I&amp;rsquo;ve heard variants of the same line from probably a dozen people in the last six months. A consultant I know has done more US-to-EU migrations this calendar year than in his entire career before. A founder on LinkedIn wrote the other day: Trump effectively has a kill-switch to our highly digitalised society, and the thought of that is frightening. None of those people would have used the word &amp;ldquo;sovereignty&amp;rdquo; in 2023. All of them now use it without explanation. For European banks, the Digital Operational Resilience Act (DORA) turns that language into an operating requirement.&lt;/p&gt;
&lt;p&gt;Schleswig-Holstein is a German state with 2.9 million residents. By late 2025, it had moved roughly 80% of about 30,000 state workstations from Microsoft Office to LibreOffice. Linux pilots were also running, and the state targeted full migration for 2026 (&lt;a href="https://www.theregister.com/software/2025/10/15/schleswig-holstein-waves-auf-wiedersehen-to-microsoft-stack/1543638"&gt;&lt;em&gt;The Register&lt;/em&gt;, 15 Oct 2025&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;Airbus opened a tender for a sovereign EU cloud in December 2025. The system would host software for planning, manufacturing, customer management, and product development. The potential contract is worth more than €50M and could run for 10 years. Airbus&amp;rsquo;s executive vice president for digital gave herself only an &amp;ldquo;80/20&amp;rdquo; chance of finding a qualifying provider (&lt;a href="https://www.heise.de/en/news/Airbus-is-looking-for-a-sovereign-EU-cloud-11122105.html"&gt;&lt;em&gt;heise online&lt;/em&gt;, 19 Dec 2025&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;The International Criminal Court (ICC) left Microsoft Office for &lt;strong&gt;openDesk&lt;/strong&gt; in October 2025. Germany&amp;rsquo;s ZenDiS developed the open-source suite (&lt;a href="https://www.theregister.com/2025/10/31/international_criminal_court_ditches_office/"&gt;&lt;em&gt;The Register&lt;/em&gt;, 31 Oct 2025&lt;/a&gt;). The move came about six months after the US government effectively cut access to the chief prosecutor&amp;rsquo;s Microsoft email under Executive Order 14203. A &lt;a href="https://www.justiceinfo.net/en/156691-how-sanctions-can-weaponize-us-tech-against-the-icc.html"&gt;Just Security analysis&lt;/a&gt; traces the sequence. In February 2026, &lt;a href="https://www.theregister.com/2026/02/18/microsoft_asks_uk_parliament_to_correct_record/"&gt;Microsoft asked the UK Parliament to &amp;ldquo;correct the record&amp;rdquo;&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;The Dutch parliament passed five separate motions in March 2025 (&lt;em&gt;Computer Weekly&lt;/em&gt;; &lt;em&gt;Euronews&lt;/em&gt;, 20 Mar 2025). The first would remove DigiD from Kyndryl after its planned acquisition of Solvinity. The second called for a review of Amazon Web Services (AWS) hosting the .nl domain. The other motions would prioritise EU providers, require exit plans for all US-hosted systems, and tender a Dutch-controlled national cloud.&lt;/p&gt;
&lt;p&gt;Microsoft responded with a datacenter expansion worth more than €40B. The plan would increase capacity by 40% across 16 EU countries. Microsoft also offered a contractually binding &amp;ldquo;court-fight clause.&amp;rdquo; Brad Smith pledged that Microsoft would sue the US government rather than comply with an order to suspend EU operations. Microsoft described the clause in its &lt;a href="https://blogs.microsoft.com/on-the-issues/2026/04/29/one-year-on-progress-on-our-european-digital-commitments/"&gt;one-year update to the European Digital Commitments&lt;/a&gt;, published on 29 April 2026.&lt;/p&gt;
&lt;p&gt;The European Commission is reportedly preparing a Tech Sovereignty Package for 27 May 2026. The package would combine the Cloud and AI Development Act (CADA) with a Chips Act 2.0. It would restrict member-state governments from using US cloud providers for sensitive public-sector data. The restrictions would cover healthcare, finance, and judicial systems (&lt;a href="https://www.cnbc.com/2026/05/07/eu-commission-cloud-sensitive-data.html"&gt;CNBC, 7 May 2026&lt;/a&gt;).&lt;/p&gt;
&lt;aside class="newsletter-preview" aria-label="Newsletter signup"&gt;
&lt;p class="newsletter-preview__title"&gt;Monthly notes&lt;/p&gt;&lt;form class="newsletter-preview__form" method="post" action="https://newsletter-api.philippd.workers.dev/api/subscribe" data-newsletter-endpoint="https://newsletter-api.philippd.workers.dev/api/subscribe" data-newsletter-count-endpoint="https://newsletter-api.philippd.workers.dev/api/subscriber-count" novalidate&gt;
&lt;label for="newsletter-1"&gt;Email address&lt;/label&gt;
&lt;div class="newsletter-preview__controls"&gt;
&lt;input id="newsletter-1" name="email" type="email" autocomplete="email" inputmode="email" required placeholder="you@example.com"&gt;
&lt;button type="submit"&gt;Subscribe&lt;/button&gt;
&lt;/div&gt;
&lt;p class="newsletter-preview__note" data-newsletter-note&gt;&lt;a href="https://philippdubach.com/posts/building-a-no-tracking-newsletter-from-markdown-to-distribution/"&gt;No tracking&lt;/a&gt;. Unsubscribe anytime.&lt;/p&gt;
&lt;p class="newsletter-preview__message" data-newsletter-message role="status" aria-live="polite"&gt;&lt;/p&gt;
&lt;/form&gt;
&lt;/aside&gt;
&lt;p&gt;I also see the change in my day-to-day work. Every data or artificial intelligence (AI) project we ran with DACH banks in the last 12 months included digital sovereignty. DACH covers Germany, Austria, and Switzerland. Sometimes sovereignty was &lt;em&gt;the&lt;/em&gt; agenda.&lt;/p&gt;
&lt;p&gt;On 18 November 2025, the European Supervisory Authorities published their first list under the Digital Operational Resilience Act (DORA). It named &lt;strong&gt;19 Critical ICT Third-Party Providers (CTPPs)&lt;/strong&gt;. Here, ICT means information and communication technology. The list includes AWS, Microsoft, Google Cloud, IBM, Bloomberg, London Stock Exchange Group, Tata Consultancy Services, and Orange (&lt;a href="https://www.eba.europa.eu/publications-and-media/press-releases/european-supervisory-authorities-designate-critical-ict-third-party-providers-under-digital"&gt;EBA press release&lt;/a&gt;). Each provider now faces direct EU oversight. Lead Overseers can impose a daily fine equal to 1% of average daily global turnover for up to six months.&lt;/p&gt;
&lt;p&gt;Sovereignty has therefore become a regulatory deliverable with a last-test date. Two forces drove that change: four converging legal pressures and a shift in how decision-makers price political risk.&lt;/p&gt;
&lt;figure class="post-figure" style="width: 80%; margin: 1.5rem auto;"&gt;
&lt;button type="button" class="img-trigger" data-lightbox-target="lightbox-dora-sovereignty-19-critical-providers-1-png-2" aria-label="View full-size image"&gt;
&lt;picture class="img-lightbox"&gt;
&lt;source media="(max-width: 768px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=320,quality=80,format=auto/dora-sovereignty-19-critical-providers-1.png 320w,
https://static.philippdubach.com/cdn-cgi/image/width=480,quality=80,format=auto/dora-sovereignty-19-critical-providers-1.png 480w,
https://static.philippdubach.com/cdn-cgi/image/width=640,quality=80,format=auto/dora-sovereignty-19-critical-providers-1.png 640w,
https://static.philippdubach.com/cdn-cgi/image/width=960,quality=80,format=auto/dora-sovereignty-19-critical-providers-1.png 960w,
https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/dora-sovereignty-19-critical-providers-1.png 1200w"
sizes="(max-width: 768px) 80vw, 576px"&gt;
&lt;source media="(max-width: 1024px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=768,quality=80,format=auto/dora-sovereignty-19-critical-providers-1.png 768w,
https://static.philippdubach.com/cdn-cgi/image/width=1024,quality=80,format=auto/dora-sovereignty-19-critical-providers-1.png 1024w,
https://static.philippdubach.com/cdn-cgi/image/width=1440,quality=80,format=auto/dora-sovereignty-19-critical-providers-1.png 1440w"
sizes="(max-width: 768px) 80vw, 576px"&gt;
&lt;source media="(min-width: 1025px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/dora-sovereignty-19-critical-providers-1.png 1200w,
https://static.philippdubach.com/cdn-cgi/image/width=1600,quality=80,format=auto/dora-sovereignty-19-critical-providers-1.png 1600w,
https://static.philippdubach.com/cdn-cgi/image/width=2000,quality=80,format=auto/dora-sovereignty-19-critical-providers-1.png 2000w"
sizes="(max-width: 768px) 80vw, 576px"&gt;
&lt;img src="https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/dora-sovereignty-19-critical-providers-1.png"
alt="Diagram of selected DORA Critical ICT Third-Party Providers by headquarters. Five US providers are shaded orange, while three European and Asian providers use blue or grey."
class=""
width="1376"
height="768"
loading="lazy"
decoding="async"&gt;
&lt;/picture&gt;
&lt;/button&gt;
&lt;/figure&gt;
&lt;dialog id="lightbox-dora-sovereignty-19-critical-providers-1-png-2" class="lightbox-dialog" aria-label="Full-size image" data-hires="https://static.philippdubach.com/cdn-cgi/image/width=2000,quality=85,format=auto/dora-sovereignty-19-critical-providers-1.png"&gt;
&lt;form method="dialog" class="lightbox-close-form"&gt;
&lt;button type="submit" class="lightbox-close" aria-label="Close"&gt;×&lt;/button&gt;
&lt;/form&gt;
&lt;img alt="Diagram of selected DORA Critical ICT Third-Party Providers by headquarters. Five US providers are shaded orange, while three European and Asian providers use blue or grey." decoding="async"&gt;
&lt;/dialog&gt;
&lt;h2 id="dora-cloud-sovereignty-and-the-policy-shift"&gt;DORA, cloud sovereignty, and the policy shift&lt;/h2&gt;
&lt;p&gt;The sovereignty debate in 2026 is no longer mainly about the General Data Protection Regulation (GDPR); that battle is six years old. Four legal pressures now collide. The market was willing to ignore that collision until 2024.&lt;/p&gt;
&lt;h3 id="us-laws-reach-eu-hosted-data"&gt;US laws reach EU-hosted data&lt;/h3&gt;
&lt;p&gt;The Clarifying Lawful Overseas Use of Data (CLOUD) Act compels US-headquartered providers to disclose data (&lt;a href="https://www.law.cornell.edu/uscode/text/18/2713"&gt;18 U.S.C. § 2713&lt;/a&gt;). The duty applies &amp;ldquo;regardless of whether such communication, record, or other information is located within or outside of the United States.&amp;rdquo;&lt;/p&gt;
&lt;p&gt;Microsoft&amp;rsquo;s transparency report for the second half of 2024 records 5,587 US law-enforcement demands for consumer data. Of those demands, 115 were warrants for content stored outside the US (&lt;a href="https://www.microsoft.com/en-us/corporate-responsibility/reports/government-requests/customer-data"&gt;Microsoft CSR Government Requests&lt;/a&gt;). In late 2024, &lt;a href="https://www.actuia.com/en/news/sensitive-data-and-cloud-act-microsoft-france-admits-it-cannot-oppose-an-american-injunction/"&gt;Microsoft France told the French Senate&lt;/a&gt; that it could not guarantee non-transfer of EU-hosted data under a CLOUD Act order. Microsoft France had now put the conflict on the record.&lt;/p&gt;
&lt;p&gt;Executive Order 14203 sanctioned ICC officials, including Chief Prosecutor Karim Khan. The order appeared in the &lt;a href="https://www.federalregister.gov/documents/2025/02/12/2025-02612/imposing-sanctions-on-the-international-criminal-court"&gt;Federal Register on 12 February 2025&lt;/a&gt;; Winston &amp;amp; Strawn published a separate &lt;a href="https://www.winston.com/en/blogs-and-podcasts/global-trade-and-foreign-policy-insights/executive-order-14203-imposing-sanctions-on-the-international-criminal-court-and-key-takeaways"&gt;legal analysis&lt;/a&gt;. Khan then lost access to his Microsoft email (&lt;a href="https://www.computerweekly.com/opinion/Microsofts-ICC-email-block-reignites-European-data-sovereignty-concerns"&gt;Computer Weekly&lt;/a&gt;). Microsoft denied that it had actively cut him off. The ICC moved to openDesk anyway. The sequence remains disputed, but banks now have a concrete case to examine.&lt;/p&gt;
&lt;p&gt;Congress reauthorised Section 702 of the Foreign Intelligence Surveillance Act (FISA) in April 2024. The Reforming Intelligence and Securing America Act (RISAA) extended it until 20 April 2026 (&lt;a href="https://www.congress.gov/crs-product/R48592"&gt;CRS R48592&lt;/a&gt;; &lt;a href="https://www.brennancenter.org/our-work/research-reports/section-702-foreign-intelligence-surveillance-act-fisa-2026-resource-page"&gt;Brennan Center §702 resource&lt;/a&gt;). Section 702 still allows warrantless collection from US &amp;ldquo;electronic communication service providers.&amp;rdquo; Those surveillance powers helped invalidate Privacy Shield in &lt;em&gt;Schrems II&lt;/em&gt; (&lt;a href="https://eur-lex.europa.eu/legal-content/EN/TXT/?uri=CELEX:62018CJ0311"&gt;CJEU C-311/18, 16 Jul 2020&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;The privacy group noyb &lt;a href="https://noyb.eu/en/eu-us-data-transfers-time-prepare-more-trouble-come"&gt;plans a broader challenge&lt;/a&gt; to the EU-US Data Privacy Framework (DPF). It would bring the case before the Court of Justice of the European Union (CJEU). Its argument is that Executive Order 14086 supports the transatlantic data system. Any later US administration can rescind that order. The General Court upheld the DPF in &lt;em&gt;Latombe&lt;/em&gt; (&lt;a href="https://www.hoganlovells.com/en/publications/transatlantic-data-transfers-eu-general-court-upholds-dat-privacy-framework"&gt;T-553/23, 3 Sept 2025, Hogan Lovells&lt;/a&gt;). An appeal filed on 31 October 2025 remains pending.&lt;/p&gt;
&lt;h3 id="eu-law-pushes-back"&gt;EU law pushes back&lt;/h3&gt;
&lt;p&gt;The Data Act applies from 12 September 2025 (&lt;a href="https://eur-lex.europa.eu/eli/reg/2023/2854/oj/eng"&gt;Regulation (EU) 2023/2854&lt;/a&gt;). Article 32(1) requires data-processing providers to take &amp;ldquo;all adequate technical, organisational and legal measures&amp;hellip; to prevent international and third-country governmental access and transfer of non-personal data held in the Union where such transfer or access would create a conflict with Union law.&amp;rdquo; Article 32(2) recognises a third-country order only when it is based on an international agreement in force with the EU or relevant Member State.&lt;/p&gt;
&lt;p&gt;No EU–US CLOUD Act executive agreement exists. On paper, a US warrant for non-personal banking transaction metadata hosted in Frankfurt therefore creates a conflict that the provider must resist. A &lt;a href="https://www.alston.com/en/insights/publications/2025/09/eu-data-act-switching-requirements-cloud-services"&gt;ban on switching charges&lt;/a&gt; begins in January 2027 and removes one source of structural lock-in.&lt;/p&gt;
&lt;p&gt;The EU AI Act entered into force on 1 August 2024 (&lt;a href="https://artificialintelligenceact.eu/"&gt;Regulation 2024/1689&lt;/a&gt;). Obligations for general-purpose AI (GPAI) applied from 2 August 2025. The threshold for a systemic-risk designation is 10²⁵ floating-point operations (FLOPs). Commission enforcement begins on 2 August 2026, and fines can reach 7% of global turnover. Meta declined to sign the GPAI Code of Practice, while OpenAI, Anthropic, and Google signed it. The European Commission has not yet settled compliance rules for the next generation of frontier models.&lt;/p&gt;
&lt;h3 id="eu-cloud-certification-remains-unresolved"&gt;EU cloud certification remains unresolved&lt;/h3&gt;
&lt;p&gt;The European Union Agency for Cybersecurity (ENISA) drafted the European Cybersecurity Certification Scheme for Cloud Services (EUCS). Under industry pressure, it removed the &amp;ldquo;high+&amp;rdquo; sovereignty requirements in March 2024. Those rules required EU headquarters, staff, and jurisdiction. ENISA has not formally adopted a successor (&lt;a href="https://itif.org/publications/2025/05/25/eu-cloud-service-restrictions/"&gt;ITIF analysis, May 2025&lt;/a&gt;). &lt;a href="https://www.hoganlovells.com/en/publications/eucs-controversial-data-sovereignty-issues-continue-to-drive-debate-around-the-eu-certification-scheme-for-cloud-services"&gt;Hogan Lovells reports&lt;/a&gt; that France, Italy, and Spain are seeking to restore the requirements.&lt;/p&gt;
&lt;p&gt;France&amp;rsquo;s national &lt;strong&gt;SecNumCloud&lt;/strong&gt; standard already requires immunity from extraterritorial laws. S3NS, a joint venture between Thales and Google, received SecNumCloud 3.2 qualification on 17 December 2025. It was the first US-tech-backed sovereign cloud to receive that qualification.&lt;/p&gt;
&lt;h3 id="dora-turns-the-issue-into-bank-operations"&gt;DORA turns the issue into bank operations&lt;/h3&gt;
&lt;p&gt;The Digital Operational Resilience Act applied from 17 January 2025 (&lt;a href="https://eur-lex.europa.eu/eli/reg/2022/2554/oj"&gt;Regulation 2022/2554&lt;/a&gt;). The 19-provider CTPP list is its most visible operational result. Article 28 requires contractual exit strategies, while Article 30 specifies contracts for critical functions. Articles 31–44 give Lead Overseers direct EU-level authority. Lead Overseers can impose a daily fine equal to 1% of average daily global turnover for up to six months.&lt;/p&gt;
&lt;p&gt;The European Central Bank (ECB) published its Guide on Outsourcing Cloud Services on &lt;a href="https://www.bankingsupervision.europa.eu/press/pr/date/2025/html/ssm.pr250716~c0401b1b6b.en.html"&gt;16 July 2025&lt;/a&gt;. It clarifies the expectations of the Single Supervisory Mechanism (SSM) for concentration risk and exit testing. It also treats audit rights as a continuous obligation rather than contract boilerplate.&lt;/p&gt;
&lt;p&gt;The German Federal Financial Supervisory Authority (BaFin) uses several national rules. Its &lt;a href="https://www.bafin.de/SharedDocs/Veroeffentlichungen/EN/Fachartikel/2018/fa_bj_1801_BAIT_en.html"&gt;Supervisory Requirements for IT in Financial Institutions (BAIT)&lt;/a&gt; align German supervision with DORA. So do the &lt;a href="https://www.gleisslutz.com/en/know-how/9th-marisk-amendment-overview-bafins-envisaged-changes"&gt;Minimum Requirements for Risk Management (MaRisk), section AT 9&lt;/a&gt;. The ninth MaRisk amendment dates from June 2024.&lt;/p&gt;
&lt;p&gt;The Swiss Financial Market Supervisory Authority (FINMA) has applied Circular 2018/3 since 2018. The technology-neutral circular permits foreign outsourcing only when inspection rights are enforceable in the host jurisdiction. &lt;a href="https://www.dlapiper.com/en/insights/publications/2024/03/bafin-updates-guidelines-on-cloud-provider-outsourcing-navigating-dora-compliance"&gt;BaFin&amp;rsquo;s March 2024 cloud guidance update&lt;/a&gt; sets the same expectations in German national practice.&lt;/p&gt;
&lt;p&gt;Across DACH, DORA, the ECB Guide, BAIT and MaRisk, and FINMA Circular 2018/3 converge on three operational requirements. Banks need a documented and tested exit strategy. They need contractually enforceable audit access in the actual jurisdiction and a measurable concentration metric for ICT third-party providers. That combination has put sovereignty on every chief information officer&amp;rsquo;s agenda.&lt;/p&gt;
&lt;figure class="post-figure" style="width: 80%; margin: 1.5rem auto;"&gt;
&lt;button type="button" class="img-trigger" data-lightbox-target="lightbox-dora-sovereignty-four-statute-convergence-1-png-3" aria-label="View full-size image"&gt;
&lt;picture class="img-lightbox"&gt;
&lt;source media="(max-width: 768px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=320,quality=80,format=auto/dora-sovereignty-four-statute-convergence-1.png 320w,
https://static.philippdubach.com/cdn-cgi/image/width=480,quality=80,format=auto/dora-sovereignty-four-statute-convergence-1.png 480w,
https://static.philippdubach.com/cdn-cgi/image/width=640,quality=80,format=auto/dora-sovereignty-four-statute-convergence-1.png 640w,
https://static.philippdubach.com/cdn-cgi/image/width=960,quality=80,format=auto/dora-sovereignty-four-statute-convergence-1.png 960w,
https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/dora-sovereignty-four-statute-convergence-1.png 1200w"
sizes="(max-width: 768px) 80vw, 576px"&gt;
&lt;source media="(max-width: 1024px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=768,quality=80,format=auto/dora-sovereignty-four-statute-convergence-1.png 768w,
https://static.philippdubach.com/cdn-cgi/image/width=1024,quality=80,format=auto/dora-sovereignty-four-statute-convergence-1.png 1024w,
https://static.philippdubach.com/cdn-cgi/image/width=1440,quality=80,format=auto/dora-sovereignty-four-statute-convergence-1.png 1440w"
sizes="(max-width: 768px) 80vw, 576px"&gt;
&lt;source media="(min-width: 1025px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/dora-sovereignty-four-statute-convergence-1.png 1200w,
https://static.philippdubach.com/cdn-cgi/image/width=1600,quality=80,format=auto/dora-sovereignty-four-statute-convergence-1.png 1600w,
https://static.philippdubach.com/cdn-cgi/image/width=2000,quality=80,format=auto/dora-sovereignty-four-statute-convergence-1.png 2000w"
sizes="(max-width: 768px) 80vw, 576px"&gt;
&lt;img src="https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/dora-sovereignty-four-statute-convergence-1.png"
alt="Flow diagram of US and EU laws that affect cloud services. Arrows lead to three bank requirements: an exit plan, enforceable audit rights, and a provider-concentration metric."
class=""
width="1376"
height="670"
loading="lazy"
decoding="async"&gt;
&lt;/picture&gt;
&lt;/button&gt;
&lt;/figure&gt;
&lt;dialog id="lightbox-dora-sovereignty-four-statute-convergence-1-png-3" class="lightbox-dialog" aria-label="Full-size image" data-hires="https://static.philippdubach.com/cdn-cgi/image/width=2000,quality=85,format=auto/dora-sovereignty-four-statute-convergence-1.png"&gt;
&lt;form method="dialog" class="lightbox-close-form"&gt;
&lt;button type="submit" class="lightbox-close" aria-label="Close"&gt;×&lt;/button&gt;
&lt;/form&gt;
&lt;img alt="Flow diagram of US and EU laws that affect cloud services. Arrows lead to three bank requirements: an exit plan, enforceable audit rights, and a provider-concentration metric." decoding="async"&gt;
&lt;/dialog&gt;
&lt;h2 id="opinion-shift"&gt;Opinion shift&lt;/h2&gt;
&lt;p&gt;The opinion shift is harder to quantify, and I think it is also harder to undo. The consultant I mentioned earlier put it plainly. These migrations are not about trusting Brussels more than Washington. They respond to a US administration that repeatedly showed it would weaponise commercial dependencies against allies.&lt;/p&gt;
&lt;p&gt;Two political events drove that response. The Microsoft and Karim Khan episode put a precedent on the record. The second was the threat to Greenland&amp;rsquo;s sovereignty. It included the January 2026 tariff escalation against Denmark (&lt;a href="https://commonslibrary.parliament.uk/research-briefings/cbp-10472/"&gt;House of Commons Library CBP-10472&lt;/a&gt;). The Center for Strategic and International Studies (CSIS) called the Greenland crisis &amp;ldquo;the catalyst for European digital awakening&amp;rdquo; (&lt;a href="https://www.csis.org/analysis/why-greenland-could-spur-europes-digital-awakening"&gt;CSIS, 2025&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;In &lt;a href="https://www.euronews.com/business/2025/08/26/trump-threatens-tariffs-on-nations-imposing-digital-taxes-on-us-tech"&gt;August 2025, Trump threatened substantial tariffs and export restrictions&lt;/a&gt;. He targeted countries with digital services taxes, the Digital Markets Act (DMA), or the Digital Services Act (DSA). A December 2025 &lt;a href="https://www.bloomberg.com/news/articles/2025-12-16/us-threatens-to-retaliate-against-eu-companies-over-digital-tax"&gt;Bloomberg report named Accenture, Siemens, and Spotify&lt;/a&gt; as possible targets for Section 301 retaliation. Together, those events removed the remaining doubt about whether Washington would use the lever.&lt;/p&gt;
&lt;p&gt;The well-meaning &amp;ldquo;Europe isn&amp;rsquo;t a sanctuary&amp;rdquo; objection misses the structure of the decision. On its own terms, the objection is correct. The EU has its own surveillance expansion. Examples include the European Parliamentary Research Service study on virtual private networks and recurring Chat Control proposals. They also include German Impressum rules, French identification rules, and the UK&amp;rsquo;s age-verification regime.&lt;/p&gt;
&lt;p&gt;Stripe was founded by Irish brothers, but it is structurally a US company. ASML is technically Dutch. Yet its supply chain and intellectual property (IP) exposure put it within the US Foreign Direct Product Rule. In &lt;a href="https://www.government.nl/latest/news/2024/09/06/the-netherlands-expands-export-control-measure-advanced-semiconductor-manufacturing-equipment"&gt;September 2024, the Dutch government moved&lt;/a&gt; to take over licensing for the NXT:1970i and 1980i deep ultraviolet (DUV) systems. The licensing decision shows that Dutch ownership does not remove US influence.&lt;/p&gt;
&lt;p&gt;Proton, a Swiss privacy provider, has publicly threatened to leave Switzerland over the revised Ordinance on the Surveillance of Post and Telecommunications (VÜPF). It has also started moving physical infrastructure to Germany and Norway. Europe is not clean, but its marginal exposure remains lower than that of a US-controlled stack.&lt;/p&gt;
&lt;p&gt;Europe in 2026 is trying to &lt;em&gt;distance&lt;/em&gt; more than it is trying to &lt;em&gt;grow&lt;/em&gt;. The sovereignty drive could produce fragmented and slightly worse versions of every layer in the stack. It might still fail to produce a competitive EU technology sector. The Airbus-A380 jibe captures the risk: &amp;ldquo;database in France, frontend in Belgium, ops in Spain.&amp;rdquo;&lt;/p&gt;
&lt;p&gt;Airbus is doing fine. Schwarz Digits, the IT arm of Lidl and Kaufland, won the Dutch Central Bank&amp;rsquo;s cloud business from AWS. OVHcloud passed €1B in fiscal year 2025 revenue, with 9.3% like-for-like (LFL) growth. In September 2025, Mistral closed a €1.7B Series C led by ASML. It plans a Swedish datacenter worth more than $1B. The fragmentation critique is valid, but it does not justify stopping.&lt;/p&gt;
&lt;h2 id="what-id-hold-dora-makes-cloud-sovereignty-operational"&gt;What I&amp;rsquo;d hold: DORA makes cloud sovereignty operational&lt;/h2&gt;
&lt;p&gt;I keep coming back to two extreme facts that coexist.&lt;/p&gt;
&lt;p&gt;First, sovereignty is not a values play. It is a rational response to the US legal apparatus and the EU statutory framework. In 2025, the US showed that it would weaponise commercial dependencies. EU law now makes &lt;em&gt;inaction&lt;/em&gt; increasingly non-compliant. The policy shift forces the conversation, while the opinion shift makes it stick.&lt;/p&gt;
&lt;p&gt;Second, the supply side is underfunded by two orders of magnitude relative to the hyperscalers it is meant to replace. The EUCS process still cannot agree on what &amp;ldquo;sovereign&amp;rdquo; means. Most organisations will therefore move one partition at a time. The first contested CLOUD Act warrant against an EU-resident hyperscaler subsidiary will test that legal structure.&lt;/p&gt;
&lt;p&gt;These migrations are not a bet that the EU is a sanctuary. They lower the conditional probability that a foreign government can use a provider to unplug a bank. That government answers to a different electorate. I see this as a structural risk, not a directional call. It has quietly made sovereignty the #1 agenda item of 2026.&lt;/p&gt;
&lt;aside class="disclaimer" role="note" aria-label="Disclaimer"&gt;
&lt;div class="disclaimer-content"&gt;&lt;p&gt;&lt;strong&gt;Disclaimer:&lt;/strong&gt; Journalism, not investment advice or a recommendation. Not directed at UK persons; not a financial promotion under FSMA s.21. The author may hold positions in instruments discussed and receives no compensation from issuers. &lt;a href="https://philippdubach.com/disclaimers/#finance"&gt;Full disclaimer →&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;
&lt;/aside&gt;</description></item><item><title>Moving the blog stack to Europe (kind of)</title><link>https://philippdubach.com/posts/moving-the-blog-stack-to-europe-kind-of/</link><pubDate>Sun, 24 May 2026 00:00:00 +0200</pubDate><author>me@philippdubach.com (Philipp D. Dubach)</author><guid>https://philippdubach.com/posts/moving-the-blog-stack-to-europe-kind-of/</guid><description>&lt;figure class="post-figure" style="width: 80%; margin: 1.5rem auto;"&gt;
&lt;button type="button" class="img-trigger" data-lightbox-target="lightbox-eu-move-cover-png-0" aria-label="View full-size image"&gt;
&lt;picture class="img-lightbox"&gt;
&lt;source media="(max-width: 768px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=320,quality=80,format=auto/eu-move-cover.png 320w,
https://static.philippdubach.com/cdn-cgi/image/width=480,quality=80,format=auto/eu-move-cover.png 480w,
https://static.philippdubach.com/cdn-cgi/image/width=640,quality=80,format=auto/eu-move-cover.png 640w,
https://static.philippdubach.com/cdn-cgi/image/width=960,quality=80,format=auto/eu-move-cover.png 960w,
https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/eu-move-cover.png 1200w"
sizes="(max-width: 768px) 80vw, 576px"&gt;
&lt;source media="(max-width: 1024px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=768,quality=80,format=auto/eu-move-cover.png 768w,
https://static.philippdubach.com/cdn-cgi/image/width=1024,quality=80,format=auto/eu-move-cover.png 1024w,
https://static.philippdubach.com/cdn-cgi/image/width=1440,quality=80,format=auto/eu-move-cover.png 1440w"
sizes="(max-width: 768px) 80vw, 576px"&gt;
&lt;source media="(min-width: 1025px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/eu-move-cover.png 1200w,
https://static.philippdubach.com/cdn-cgi/image/width=1600,quality=80,format=auto/eu-move-cover.png 1600w,
https://static.philippdubach.com/cdn-cgi/image/width=2000,quality=80,format=auto/eu-move-cover.png 2000w"
sizes="(max-width: 768px) 80vw, 576px"&gt;
&lt;img src="https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/eu-move-cover.png"
alt="Two technicians in workwear pushing a black server rack on wheels from a van labeled Data Center toward a building entrance, with EU member-state flags raised above the entry"
class=""
width="1307"
height="685"
fetchpriority="high"
decoding="async"&gt;
&lt;/picture&gt;
&lt;/button&gt;
&lt;figcaption class="post-figure-caption"&gt;&lt;em&gt;AI-generated, one-shot from the blog title via Gemini (Nano Banana).&lt;/em&gt;&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;dialog id="lightbox-eu-move-cover-png-0" class="lightbox-dialog" aria-label="Full-size image" data-hires="https://static.philippdubach.com/cdn-cgi/image/width=2000,quality=85,format=auto/eu-move-cover.png"&gt;
&lt;form method="dialog" class="lightbox-close-form"&gt;
&lt;button type="submit" class="lightbox-close" aria-label="Close"&gt;×&lt;/button&gt;
&lt;/form&gt;
&lt;img alt="Two technicians in workwear pushing a black server rack on wheels from a van labeled Data Center toward a building entrance, with EU member-state flags raised above the entry" decoding="async"&gt;
&lt;p class="lightbox-caption"&gt;&lt;em&gt;AI-generated, one-shot from the blog title via Gemini (Nano Banana).&lt;/em&gt;&lt;/p&gt;
&lt;/dialog&gt;
&lt;p&gt;There&amp;rsquo;s a version of this story where I move everything to Europe in one go and write a triumphant post about digital sovereignty. The actual version is less clean. As of this week, the site you&amp;rsquo;re reading runs from a small &lt;a href="https://philippdubach.com/posts/the-tech-behind-this-site/"&gt;Hetzner box in Nuremberg&lt;/a&gt;, and most of the supporting services moved with it. Some of the reasoning fed into my latest essay: &lt;a href="https://philippdubach.com/posts/dora-critical-cloud-providers-sovereignty/"&gt;How DORA Made Sovereignty a Bank Problem&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id="why-now"&gt;Why now&lt;/h2&gt;
&lt;p&gt;Two things converged. First, GitHub Pages started feeling more like a constraint than a freebie: no access logs, a hard cap on file size, no control over response headers without bolting on a Cloudflare Worker, no place to run anything dynamic next to the static site. Second, the EU jurisdictional question stopped feeling academic. Newsletter subscriber records, draft posts, analytics counters, backup archives: all of it sat in US-controlled storage by default.&lt;/p&gt;
&lt;p&gt;Self-hosting isn&amp;rsquo;t a moral position. It&amp;rsquo;s a series of small choices about where data lives and how much operational overhead you&amp;rsquo;re willing to absorb in exchange for control. Longer-term I want to be off the major hyperscalers entirely.&lt;/p&gt;
&lt;h2 id="compute-github-pages--hetzner-cpx21"&gt;Compute: GitHub Pages → Hetzner CPX21&lt;/h2&gt;
&lt;p&gt;The site moved from GitHub Pages to a Hetzner CPX21 in Nuremberg. Debian, four virtual cores, four gigabytes of RAM, plenty of headroom for a Hugo blog and the supporting services. Hetzner publishes its CO₂ footprint per server class and runs its EU fleet on renewable contracts.&lt;/p&gt;
&lt;p&gt;For now, GitHub Pages remains a warm standby. The deploy workflow is still wired up, so if anything goes wrong with the self-hosted setup that I can&amp;rsquo;t fix in an hour, flipping DNS back gets the site online while I sort it out. Sovereignty is good. A working escape hatch is also good.&lt;/p&gt;
&lt;h2 id="object-storage-r2--r2-eu-jurisdiction"&gt;Object storage: R2 → R2 EU jurisdiction&lt;/h2&gt;
&lt;p&gt;The images and newsletter archives that the site loads from &lt;code&gt;static.philippdubach.com&lt;/code&gt; used to live in a Cloudflare R2 bucket with no jurisdictional pinning, which in practice meant US-resident metadata. Hetzner Object Storage and Scaleway are both on the table, and I&amp;rsquo;m still weighing them.&lt;/p&gt;
&lt;p&gt;R2 has zero egress fees, the API is S3-compatible, the Workers integration is built in, and the image-resizing pipeline I&amp;rsquo;d already wired up depends on it. Walking away from all of that to gain a one-step shorter jurisdictional chain felt like the wrong trade, so the bucket moved to Cloudflare&amp;rsquo;s EU jurisdiction (&lt;code&gt;static-eu&lt;/code&gt;) instead.&lt;/p&gt;
&lt;p&gt;This part of the story doesn&amp;rsquo;t fit the clean Europe-versus-US framing. Cloudflare is still US-headquartered. EU jurisdiction means the data stays in EU data centers and the company applies stricter handling, but a US court can still compel disclosure under the CLOUD Act.&lt;/p&gt;
&lt;h2 id="newsletter-nothing-at-all--self-hosted-listmonk"&gt;Newsletter: nothing at all → self-hosted Listmonk&lt;/h2&gt;
&lt;p&gt;Moving away from &lt;a href="https://philippdubach.com/posts/building-a-no-tracking-newsletter-from-markdown-to-distribution/"&gt;my fully bootstrapped newsletter generator&lt;/a&gt;. Listmonk is open source, runs in about 50 MB of RAM, and stores its data in the same Postgres instance I already had running for other services. Subscribers, campaigns, templates: all of it now lives on the same box as the blog itself.&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;m now responsible for deliverability, suppression lists, bounce handling, and the surprisingly large number of small operational decisions that hosted newsletter services hide from you. Sending mail still goes through Resend over standard SMTP. Operating my own outbound mail server is a level of pain I&amp;rsquo;m not willing to absorb for marginal sovereignty gains, and Hetzner blocks port 25 on new accounts anyway.&lt;/p&gt;
&lt;h2 id="source-code-github--forgejo"&gt;Source code: GitHub → Forgejo&lt;/h2&gt;
&lt;p&gt;This was the move I expected to regret and didn&amp;rsquo;t. Forgejo is a Gitea fork that runs as a single Go binary, includes a web UI, supports webhooks, and behaves like GitHub for every day-to-day operation. Pushing code to my own remote and watching a webhook fire a Hugo rebuild on the same box has a closed-loop simplicity I didn&amp;rsquo;t realize I was missing.&lt;/p&gt;
&lt;p&gt;I still mirror to GitHub for the public-repo discoverability and the social signal. The self-hosted instance is the source of truth; GitHub is the read replica.&lt;/p&gt;
&lt;h2 id="analytics-already-on-goatcounter-still-on-goatcounter"&gt;Analytics: already on GoatCounter, still on GoatCounter&lt;/h2&gt;
&lt;p&gt;Analytics never went through Google. The previous setup used a hosted GoatCounter, which is open source, privacy-preserving, and stores no personal data. The migration moved it onto my own box. Same software, different host, same privacy stance.&lt;/p&gt;
&lt;h2 id="backups-a-thing-i-now-have"&gt;Backups: a thing I now have&lt;/h2&gt;
&lt;p&gt;Before the migration, &amp;ldquo;backup&amp;rdquo; meant whatever GitHub kept of my repo and a vague trust that my newsletter provider would still exist next month. After the migration, it means a nightly restic snapshot to a Cloudflare R2 EU bucket, encrypted, with monthly integrity checks that email me if anything is wrong.&lt;/p&gt;
&lt;h2 id="what-i-kept-on-us-infrastructure"&gt;What I kept on US infrastructure&lt;/h2&gt;
&lt;p&gt;Cloudflare. The CDN, the Workers that handle subscribe forms and edge logic, the cache rules, the rate limiting on admin endpoints. Moving off Cloudflare would mean rebuilding the edge layer that makes the site fast everywhere and the spam controls that keep brute-force login attempts away from the self-hosted admin panels. I&amp;rsquo;m not ready for that trade.&lt;/p&gt;
&lt;p&gt;Resend, for outbound mail. They handle SPF, DKIM, DMARC, reputation management, and the dozen other things that determine whether your email lands in the inbox or the spam folder. European alternatives exist, and I&amp;rsquo;ll look at them next.&lt;/p&gt;
&lt;p&gt;GitHub, for the public mirror. The friction cost of asking everyone to discover my code on a self-hosted Forgejo instance is higher than the sovereignty benefit, given the code is open source and the source of truth is on my box anyway.&lt;/p&gt;</description></item><item><title>Aschenbrenner's Receipts</title><link>https://philippdubach.com/posts/aschenbrenners-receipts/</link><pubDate>Thu, 21 May 2026 00:00:00 +0200</pubDate><author>me@philippdubach.com (Philipp D. Dubach)</author><guid>https://philippdubach.com/posts/aschenbrenners-receipts/</guid><description>&lt;figure class="post-figure" style="width: 80%; margin: 1.5rem auto;"&gt;
&lt;button type="button" class="img-trigger" data-lightbox-target="lightbox-leopold-cover-png-0" aria-label="View full-size image"&gt;
&lt;picture class="img-lightbox"&gt;
&lt;source media="(max-width: 768px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=320,quality=80,format=auto/leopold-cover.png 320w,
https://static.philippdubach.com/cdn-cgi/image/width=480,quality=80,format=auto/leopold-cover.png 480w,
https://static.philippdubach.com/cdn-cgi/image/width=640,quality=80,format=auto/leopold-cover.png 640w,
https://static.philippdubach.com/cdn-cgi/image/width=960,quality=80,format=auto/leopold-cover.png 960w,
https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/leopold-cover.png 1200w"
sizes="(max-width: 768px) 80vw, 576px"&gt;
&lt;source media="(max-width: 1024px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=768,quality=80,format=auto/leopold-cover.png 768w,
https://static.philippdubach.com/cdn-cgi/image/width=1024,quality=80,format=auto/leopold-cover.png 1024w,
https://static.philippdubach.com/cdn-cgi/image/width=1440,quality=80,format=auto/leopold-cover.png 1440w"
sizes="(max-width: 768px) 80vw, 576px"&gt;
&lt;source media="(min-width: 1025px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/leopold-cover.png 1200w,
https://static.philippdubach.com/cdn-cgi/image/width=1600,quality=80,format=auto/leopold-cover.png 1600w,
https://static.philippdubach.com/cdn-cgi/image/width=2000,quality=80,format=auto/leopold-cover.png 2000w"
sizes="(max-width: 768px) 80vw, 576px"&gt;
&lt;img src="https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/leopold-cover.png"
alt="Leopold Aschenbrenner at a podium beneath spotlights labelled libertarian, Burkean hawk, and alignment optimist"
class=""
width="1360"
height="768"
fetchpriority="high"
decoding="async"&gt;
&lt;/picture&gt;
&lt;/button&gt;
&lt;/figure&gt;
&lt;dialog id="lightbox-leopold-cover-png-0" class="lightbox-dialog" aria-label="Full-size image" data-hires="https://static.philippdubach.com/cdn-cgi/image/width=2000,quality=85,format=auto/leopold-cover.png"&gt;
&lt;form method="dialog" class="lightbox-close-form"&gt;
&lt;button type="submit" class="lightbox-close" aria-label="Close"&gt;×&lt;/button&gt;
&lt;/form&gt;
&lt;img alt="Leopold Aschenbrenner at a podium beneath spotlights labelled libertarian, Burkean hawk, and alignment optimist" decoding="async"&gt;
&lt;/dialog&gt;
&lt;p&gt;In June 2024, Leopold Aschenbrenner published a 165-page essay called &lt;a href="https://situational-awareness.ai/wp-content/uploads/2024/06/situationalawareness.pdf"&gt;Situational Awareness&lt;/a&gt;. He committed himself to a chain of dated forecasts. Models would get more processing while producing answers, a method called test-time compute. Power, not chips, would constrain the US AI buildout. The Marcellus shale would power data centres despite climate pledges by the largest cloud companies. By May 21, 2026, most technology and infrastructure calls examined here had landed, received supporting evidence, or were tracking.&lt;/p&gt;
&lt;p&gt;Most political prescriptions remained unfulfilled or moved in the opposite direction. There was no voluntary lab merger, Congressional trillions, or coordinated democratic coalition. The US government did not invoke the Defense Production Act (DPA) for the proposed project. Export controls loosened. Some deadlines extend to 2027–28 or the end of the decade, so this political verdict remains provisional.&lt;/p&gt;
&lt;p&gt;This split says something about the worldview holding both halves up. Read &lt;em&gt;Situational Awareness&lt;/em&gt; beside the &lt;a href="https://www.youtube.com/watch?v=zdbVtZIn9IM"&gt;four-and-a-half-hour Dwarkesh Patel interview&lt;/a&gt;. You find something stranger than a clean libertarian, hawk, or alignment researcher. You find all three running at once.&lt;/p&gt;
&lt;p&gt;Artificial general intelligence (AGI) means broad human-level or greater cognitive ability. The essay treats AGI as a dated forecast and a political event.&lt;/p&gt;
&lt;p&gt;The libertarian:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;ldquo;I am a big believer in the American private sector, and would almost never advocate for heavy government involvement in technology or industry.&amp;rdquo;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;That sentence is in &lt;em&gt;Situational Awareness&lt;/em&gt;. Three pages later he calls for the largest peacetime industrial nationalisation in American history.&lt;/p&gt;
&lt;p&gt;The hawk wants the US to secure its AI labs to a &amp;ldquo;B-21 bomber-grade&amp;rdquo; standard. He also wants nuclear deterrence against strikes on US data centres. By 2027/28, he expects the state to absorb the frontier labs into a national project. He calls this &lt;em&gt;Burkean&lt;/em&gt;.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;ldquo;American checks and balances have held for over 200 years and through crazy technological revolutions.&amp;rdquo;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;The alignment researcher was an initial member of OpenAI&amp;rsquo;s Superalignment team. That team studied how to control AI systems that exceed human ability. Aschenbrenner has said publicly that OpenAI dismissed him in spring 2024 after he shared a security memo with the board. He has also said that he declined a departure agreement with a non-disparagement clause. According to him, that choice cost roughly a million dollars in vested equity. &lt;em&gt;&amp;ldquo;Freedom is priceless,&amp;rdquo;&lt;/em&gt; was his summary.&lt;/p&gt;
&lt;p&gt;He thinks the default plan will probably work. That plan uses scalable oversight, weak-to-strong generalisation, and interpretability. Scalable oversight helps people supervise systems that exceed their direct reviewing ability. Weak-to-strong generalisation asks whether weak supervision can guide stronger systems. Interpretability research examines how a model produces decisions. By the standards of the Machine Intelligence Research Institute (MIRI) and Eliezer Yudkowsky, he is an optimist.&lt;/p&gt;
&lt;p&gt;Each identity is internally consistent on its own. Their conjunction is not. A libertarian does not nationalise. A Burkean does not impose a Manhattan Project on a peacetime economy. An empirical alignment optimist does not demand wartime custody in a sensitive compartmented information facility (SCIF) by April 2028. A SCIF protects classified information.&lt;/p&gt;
&lt;p&gt;Aschenbrenner reaches all three positions by using the same forecasting machinery in three domains. These domains are compute scaling, great-power competition, and alignment tractability. The forecasts converge on a single decisive event. The opening line of his Dwarkesh interview names it directly:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;ldquo;What will be at stake will not just be cool products, but whether liberal democracy survives, whether the CCP survives, what the world order for the next century will be.&amp;rdquo;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;CCP refers to the Chinese Communist Party. I read Aschenbrenner the way he reads scaling laws: by decomposition. The three identities form the spine. For each one, I examine the framework, the evidence available by May 21, 2026, and the strongest counter-position. I also examine what the synthesis costs him. The result shows what a convergent forecast does to a worldview. It also reveals something about the AI-policy debate that the rest of us are still having.&lt;/p&gt;
&lt;h2 id="i-the-forecaster-before-the-politics-a-prediction-scorecard"&gt;I. The forecaster before the politics: a prediction scorecard&lt;/h2&gt;
&lt;p&gt;Before any criticism, what he got right.&lt;/p&gt;
&lt;p&gt;The signature analytical move in &lt;em&gt;Situational Awareness&lt;/em&gt; is what he calls &amp;ldquo;counting OOMs&amp;rdquo;, or orders of magnitude of effective compute. An OOM is a tenfold change. Effective compute combines training scale with gains from better algorithms and methods.&lt;/p&gt;
&lt;p&gt;His decomposition is multiplicative. Training compute adds half an OOM per year. Algorithmic efficiency adds another half an OOM. Discrete unhobbling gains add more. Unhobbling means removing practical limits on model performance. His examples include reinforcement learning from human feedback (RLHF), which uses human preferences to improve responses. They also include chain-of-thought reasoning, which makes a model produce intermediate reasoning steps. Scaffolding connects a model to tools and structured workflows.&lt;/p&gt;
&lt;p&gt;Extrapolating to 2027 gives roughly five OOM of effective compute scaleup since GPT-4. In his framing, this equals another GPT-2-to-GPT-4–sized capability jump. The framework is unfashionably simple. It is also empirically unusually well calibrated.&lt;/p&gt;
&lt;p&gt;By May 21, 2026, most concrete technology and infrastructure calls examined here had landed, received supporting evidence, or were tracking.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Test-time compute overhang.&lt;/strong&gt; In June 2024 he wrote:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;ldquo;What if it could use millions of tokens to think about and work on really hard problems or bigger projects? […] If we could unlock &amp;lsquo;being able to think and work on something for months-equivalent, rather than a few-minutes-equivalent&amp;rsquo; for models, it would unlock an insane jump in capability.&amp;rdquo;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;OpenAI &lt;a href="https://openai.com/index/introducing-openai-o1-preview/"&gt;launched o1&lt;/a&gt; four months later. &lt;a href="https://api-docs.deepseek.com/news/news250120"&gt;DeepSeek-R1 followed in January 2025&lt;/a&gt;. Claude extended thinking and GPT-5 thinking provided further support for the paradigm. Aschenbrenner had predicted a model category that did not yet exist. He inferred it from AlphaGo research on the trade-off between compute during training and compute during use.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;GPQA Diamond saturation.&lt;/strong&gt; Graduate-Level Google-Proof Q&amp;amp;A (GPQA) Diamond tests models with difficult science questions. Claude 3 Opus scored 60% when Aschenbrenner wrote. He predicted &lt;em&gt;&amp;ldquo;this benchmark to fall in the next generation or two.&amp;rdquo;&lt;/em&gt; In May 2026, GPT-5 scored 88.4% without tools. Gemini 3.1 Pro Preview scored 94.3% with extended reasoning. &lt;a href="https://epoch.ai/benchmarks/gpqa-diamond"&gt;Epoch AI describes the benchmark&lt;/a&gt; as near its asymptote, where further gains become small. It took roughly 18 months, almost exactly the prediction window.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Power as the binding constraint.&lt;/strong&gt; This was the essay&amp;rsquo;s most prescient line of policy analysis. It preceded &lt;a href="https://www.woodmac.com/press-releases/gas-turbine-prices-soar-195-as-market-faces-supply-demand-crisis/"&gt;Wood Mackenzie&amp;rsquo;s headline numbers&lt;/a&gt; by roughly six months. Heavy-frame turbine lead times reached six years by May 21, 2026. Original equipment manufacturers (OEMs) had sold their order books through 2027. &lt;a href="https://www.spglobal.com/energy/en/news-research/latest-news/electric-power/101425-data-center-grid-power-demand-to-rise-22-in-2025-nearly-triple-by-2030"&gt;S&amp;amp;P Global put data-centre grid power growth at +22% in 2025&lt;/a&gt;. His power-not-chips framing preceded consensus and later became industry consensus.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Marcellus shale and behind-the-meter gas.&lt;/strong&gt; Behind-the-meter plants generate power at or near the customer site. A gigawatt (GW) is one billion watts. Aschenbrenner argued that abundant US natural gas was the only way to power the trillion-dollar cluster. This claim ran against climate pledges by the largest cloud companies. Meta later &lt;a href="https://www.bloomberg.com/news/articles/2026-04-29/meta-s-need-for-gas-power-boosts-entergy-spending-by-14-billion"&gt;ordered ten gas plants for the planned Hyperion build&lt;/a&gt;. The build is planned at 7.5 GW, with an associated grid expansion of roughly 30% in Louisiana. &lt;a href="https://www.bloomberg.com/news/articles/2026-03-31/microsoft-in-talks-with-chevron-engine-no-1-over-7-billion-texas-power-plant"&gt;Microsoft, Chevron, and Engine No. 1 partnered&lt;/a&gt; on 5 GW in West Texas. &lt;a href="https://www.power-eng.com/gas/williams-pushes-deeper-into-power-generation-as-data-center-demand-accelerates/"&gt;Williams Companies committed $5B to behind-the-meter turbines&lt;/a&gt;. By May 21, 2026, the US pipeline contained over 250 GW of new gas capacity.&lt;/p&gt;
&lt;p&gt;This is the part of the record that gets him invited to the room. The next part is what he says once he is in it.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;The Gulf chip pivot.&lt;/strong&gt; He asked, intending the answer to be no:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;ldquo;Would you do the Manhattan Project in the UAE?&amp;rdquo;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;a href="https://openai.com/index/introducing-stargate-uae/"&gt;Stargate UAE&lt;/a&gt; was under construction by May 21, 2026. A megawatt (MW) is one million watts. Its eventual capacity is 5 GW, with 200 MW planned for the third quarter of 2026. &lt;a href="https://nvidianews.nvidia.com/news/humain-and-nvidia-announce-strategic-partnership-to-build-ai-factories-of-the-future-in-saudi-arabia"&gt;HUMAIN deployed its first 18,000 GB300s in Saudi Arabia&lt;/a&gt;. &lt;a href="https://www.bloomberg.com/news/articles/2025-11-19/us-reaches-ai-chip-sale-agreement-with-g42-in-win-for-uae-firm"&gt;The Trump administration authorised 70,000 GB300s for G42 and HUMAIN in November 2025&lt;/a&gt;. The thing he warned against happened. &lt;em&gt;The same US government that he expected to nationalise the labs authorised it.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;AMD&amp;rsquo;s compute TAM.&lt;/strong&gt; Total addressable market (TAM) estimates the revenue opportunity available to an industry or product. Aschenbrenner cited AMD&amp;rsquo;s $400B AI accelerator forecast for 2027. AMD later reaffirmed the forecast and &lt;a href="https://www.amd.com/en/newsroom/press-releases/2025-11-11-amd-unveils-strategy-to-lead-the-1-trillion-compu.html"&gt;upgraded to a $1T compute TAM by 2030&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Scaling lawfulness, generally.&lt;/strong&gt; Aschenbrenner claims that scaling laws held across fifteen orders of magnitude. He cites the Kaplan-to-Chinchilla-to-GPT-4 chain. Evidence from 2024-26 broadly supports this claim. The 2024 Kaplan paper from Anthropic on data-bound scaling complicates the picture. So do capability gains driven mainly by RL post-training rather than pretraining floating-point operations (FLOPs). Neither development breaks the scaling claim.&lt;/p&gt;
&lt;p&gt;Several predictions were ahead of consensus by months. The predictions themselves were not the novel contribution. Anyone reading SemiAnalysis and AMD investor decks could have triangulated most of them. The novelty was his &lt;em&gt;commitment to a dated narrative&lt;/em&gt; in which they all compound.&lt;/p&gt;
&lt;p&gt;A sceptical reader will note that San Francisco&amp;rsquo;s AI cluster has better information about what happens inside the labs. Granted. But test-time compute was not yet inside-the-lab consensus when he published. The power constraint preceded the industry&amp;rsquo;s shift. The Gulf-at-the-AGI-table point preceded the actual deal flow. There is real foresight here, even after discounting for the information asymmetry.&lt;/p&gt;
&lt;p&gt;The May 21, 2026, scorecard cuts hard the other way on another category of prediction. I return to that record later. The technology and infrastructure forecasts earn the rest of this essay. If those forecasts had been mediocre, his worldview would not be worth dissecting.&lt;/p&gt;
&lt;h2 id="ii-identity-one-the-libertarian"&gt;II. Identity one: the libertarian&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;ldquo;I am a big believer in the American private sector, and would almost never advocate for heavy government involvement in technology or industry.&amp;rdquo;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;That sentence opens Chapter IV of &lt;em&gt;Situational Awareness&lt;/em&gt;. The chapter is titled &amp;ldquo;The Project.&amp;rdquo; It argues that the United States must absorb frontier AI labs by 2027–28. The national effort would resemble the Manhattan Project and could be voluntary or compulsory. Congress would appropriate trillions of dollars for compute and power. Democratic allies would form a coalition for AGI development. The core research team would move to a SCIF.&lt;/p&gt;
&lt;p&gt;The gap between the opening sentence and the thesis is not hidden. He flags it himself:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;ldquo;I used to apply this same framework to AGI — until I joined an AI lab.&amp;rdquo;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Aschenbrenner&amp;rsquo;s libertarianism is operational, not rhetorical. He says he declined a departure agreement with a non-disparagement clause when he left OpenAI. According to him, that refusal cost &amp;ldquo;close to a million dollars&amp;rdquo; in vested equity. He did not want to constrain his future ability to write what he believes.&lt;/p&gt;
&lt;p&gt;Aschenbrenner calls himself a &amp;ldquo;speech deontologist,&amp;rdquo; meaning that he says what he thinks even when the consequences argue against it. He admires the American private sector. He also admires the wider US institutional system: the Federal Reserve, the Supreme Court, and the Constitution.&lt;/p&gt;
&lt;p&gt;The &lt;a href="https://www.whitehouse.gov/presidential-actions/2025/11/launching-the-genesis-mission/"&gt;November 2025 Genesis Mission executive order (EO)&lt;/a&gt; under Trump 2.0 used explicit Manhattan-Project language. It mobilised Department of Energy (DOE) national laboratories for AI-accelerated science. This is the rhetoric that Aschenbrenner predicted. The institutional structure did not form. There was no voluntary lab merger, no appropriation of trillions, and no coalition of democracies.&lt;/p&gt;
&lt;p&gt;His libertarianism is not absolute. It creates a presumption against state action with one exception. The exception applies when civilian technology becomes a weapons-grade output for state actors. He reclassifies AGI from &amp;ldquo;tech industry&amp;rdquo; to a weapon of mass destruction (WMD). His rule against state involvement therefore no longer applies.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;ldquo;They&amp;rsquo;re startups. And startups are startups, you know — I think they&amp;rsquo;re not fit to handle WMDs.&amp;rdquo;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;This argument is structurally cleaner than it looks. Nineteenth-century classical liberalism made similar exceptions. Mill wrote about intervention in failed states. Bagehot treated the Bank of England as a lender of last resort. Hamilton accepted a national bank when the political economy required it. Aschenbrenner&amp;rsquo;s novelty is using an industrial technology as the trigger. The empirical question is whether AGI clears that bar. The structure of the argument is not new.&lt;/p&gt;
&lt;p&gt;By May 21, 2026, the full nationalisation that he predicted had not happened. Frontier labs remained decentralised and competitive. &lt;a href="https://openai.com/index/announcing-the-stargate-project/"&gt;Stargate was announced as a four-year, $500B investment plan involving OpenAI, SoftBank, Oracle, and MGX&lt;/a&gt;. It looks more like a defence-contractor public-private partnership (PPP) than a Manhattan Project. The CHIPS Act still contained the original $39B + $11B from 2022. Congress had not appropriated trillions.&lt;/p&gt;
&lt;p&gt;The &lt;a href="https://fedscoop.com/trump-administration-rebrands-ai-safety-institute-aisi-caisi/"&gt;AI Safety Institute (AISI) became the Center for AI Standards and Innovation (CAISI) in June 2025&lt;/a&gt;. The multilateral framework that Aschenbrenner expected had dissolved into transactional bilateral agreements.&lt;/p&gt;
&lt;p&gt;A different version of his prediction did partly land. Defence contracting was expanding by May 21, 2026. &lt;a href="https://www.anthropic.com/news/anthropic-and-the-department-of-defense-to-advance-responsible-ai-in-defense-operations"&gt;Anthropic signed a $200M Department of Defense (DoD) contract&lt;/a&gt;. Claude became the first AI model authorised on classified networks. Stargate is functionally a national-security PPP under commercial wrapping. His interview line &amp;ldquo;we&amp;rsquo;ll all be in a bunker&amp;rdquo; was correct in spirit and wrong in form.&lt;/p&gt;
&lt;p&gt;The investment firm is the product of a libertarian instinct that refuses to die. He wants situational awareness to become financially decisive &lt;em&gt;before&lt;/em&gt; the state arrives.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;ldquo;If AGI were priced in tomorrow, you could maybe make 100x. Probably you can make even way more than that because of the sequencing.&amp;rdquo;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;The fund is the libertarian&amp;rsquo;s hedge against his own forecast. It captures private upside before his predicted nationalisation reshapes the prize.&lt;/p&gt;
&lt;p&gt;The strongest counter-position says that this is not a libertarian making a careful exception. It is a hawk borrowing libertarian clothes.&lt;/p&gt;
&lt;p&gt;The defence starts with his equity forfeiture, his speech deontology, and his refusal to sign an NDA at material cost. His libertarian commitment is operational when he can choose to exit, including from his own employment. That choice cost him real money. His conditional preference for state action is consistent with classical liberalism rather than a defection from it. He is careful about the exception, not opportunistic.&lt;/p&gt;
&lt;p&gt;That is intellectually honourable. It is also the first place where the synthesis starts to creak. A real libertarian who pays a million dollars to call for a Manhattan Project is more interesting than a hypocrite.&lt;/p&gt;
&lt;p&gt;He asks us to follow a chain whose first link is &amp;ldquo;I changed my mind about state involvement when I joined an AI lab.&amp;rdquo; That is an empirical claim. The prescriptive jump also depends on the hawk&amp;rsquo;s claim about adversary capability. It then depends on the alignment optimist&amp;rsquo;s claim about institutional tractability.&lt;/p&gt;
&lt;h2 id="iii-identity-two-the-burkean-hawk"&gt;III. Identity two: the Burkean hawk&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;ldquo;In some sense, this is simply a Burkean argument: the institutions, constitutions, laws, courts, checks and balances, norms and common dedication to the liberal democratic order […] have withstood the test of hundreds of years. Special AI lab governance structures, meanwhile, collapsed the first time they were tested.&amp;rdquo;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Aschenbrenner names Burke in Chapter IV to defend the Project. The phrase &amp;ldquo;collapsed the first time they were tested&amp;rdquo; refers to OpenAI&amp;rsquo;s November 2023 board crisis. The board fired Sam Altman and briefly put Mira Murati in charge. Then &lt;a href="https://www.cnbc.com/2023/11/20/hundreds-of-openai-employees-threaten-to-follow-altman-to-microsoft-unless-board-resigns-reports-say.html"&gt;~700 employees threatened to resign&lt;/a&gt;. Within five days, the board reinstated Altman and changed its membership. Special-purpose AI-lab governance structures genuinely collapsed on contact with reality. Aschenbrenner&amp;rsquo;s empirical observation is correct.&lt;/p&gt;
&lt;p&gt;The substantive Burkean intuition is that two-hundred-year-old institutions absorb shocks better than improvised lab-governance structures. On its face, that is a strong empirical argument. Aschenbrenner&amp;rsquo;s respect for American institutions is unusual among accelerationists, who favour faster technological development. Much accelerationist discourse in 2024 was openly contemptuous of regulators, Congress, and constitutional checks. Aschenbrenner takes them seriously enough to attempt a synthesis.&lt;/p&gt;
&lt;p&gt;He praises the Federal Reserve as a model of competent technocratic delegation. He also admires the Supreme Court. In his words, &amp;ldquo;they really believe in the constitution, they love the constitution&amp;rdquo;. He recommends listening to oral arguments as a podcast.&lt;/p&gt;
&lt;p&gt;The Burkean argument also cuts the other way. Burke argued that radical institutional changes tend to cause unintended damage, even when reformers share the institution&amp;rsquo;s goals. In Burke&amp;rsquo;s sense, the conservative move is slow.&lt;/p&gt;
&lt;p&gt;Aschenbrenner proposes a Manhattan Project for a peacetime economy in 2027. An accelerated executive command would run it. Frontier research would move to a SCIF, and workers would build the trillion-dollar cluster in record time. This is the modal Promethean prescription, not the modal Burkean one.&lt;/p&gt;
&lt;p&gt;A Burkean prior would favour stronger lab governance and slower state involvement. It would favour more private firms running parallel efforts, not fewer. It would also resist rapid centralisation of dual-use capability under one chain of command.&lt;/p&gt;
&lt;p&gt;Aschenbrenner&amp;rsquo;s Burkean argument therefore performs a specific task. He does not invoke Burke to defend AI as it is. He argues that two conditions would make existing constitutional institutions the only viable home for AGI. First, AGI must arrive within a decade. Second, it must decide national security.&lt;/p&gt;
&lt;p&gt;The rhetorical move is that Burkean ends require Promethean means. Existing institutions must survive. To preserve them, the state must absorb the technology that threatens them into its existing chain of command.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;ldquo;There&amp;rsquo;s only one chain of command and set of institutions that has proven itself up to this task.&amp;rdquo;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;The institutions Aschenbrenner praised held under stress. The 2024 election produced a peaceful transfer of power. The Federal Reserve maintained operational independence despite significant political pressure on interest-rate policy. The Supreme Court ruled against the executive on several procedural questions in 2025. In the narrow sense, the constitutional system did not break.&lt;/p&gt;
&lt;p&gt;But those institutions did not produce the response that Aschenbrenner predicted. Trump 2.0 made a commercial and deregulatory pivot. That response differed from the one assumed by his Burkean-Manhattan synthesis.&lt;/p&gt;
&lt;p&gt;The export controls that he expected to tighten instead loosened. The &lt;a href="https://techcrunch.com/2025/05/13/trump-administration-officially-rescinds-bidens-ai-diffusion-rules/"&gt;AI Diffusion Rule was scrapped in May 2025&lt;/a&gt;. In December 2025, &lt;a href="https://www.cnbc.com/2025/12/08/trump-nvidia-h200-sales-china.html"&gt;Trump announced that Nvidia could sell H200-equivalents to China for a 25% revenue tariff&lt;/a&gt;. He expected the regulatory system to mobilise around a national-security exception. Instead, it monetised the exception. Export controls became transactional. The administration treated coalition partners as leverage points rather than allies. It also rebranded the AI Safety Institute.&lt;/p&gt;
&lt;p&gt;The Manhattan Project analogy does more rhetorical work than it can carry. Nuclear weapons were excludable because their physics required uranium-235 or plutonium-239. States could control both substances. Manhattan Project secrecy survived because the physics required those materials.&lt;/p&gt;
&lt;p&gt;AI weights are infinitely reproducible after exfiltration. DeepSeek&amp;rsquo;s January 2025 R1 release also showed that algorithms diffuse through papers and reverse engineering. DeepSeek worked with a fraction of the budget that frontier labs were spending.&lt;/p&gt;
&lt;p&gt;Aschenbrenner&amp;rsquo;s proposed regime lacks the physical basis of the original Nuclear Non-Proliferation Treaty (NPT). He asks the political system to control a technology without excludability. Excludability lets an owner prevent others from accessing or reproducing something. Historical control regimes depended on it.&lt;/p&gt;
&lt;p&gt;The strongest defence says that calling him a hypocrite for invoking Burke is itself un-Burkean. Burke was not a pacifist about state action. He was a pragmatist about the load that institutions can bear.&lt;/p&gt;
&lt;p&gt;The hawk-Burkean combination has a serious lineage. It runs through Hamilton, the liberal hawks of the Second World War, Acheson, Kennan, and the architects of NSC-68. Granted. But an unprecedented industrial nationalisation by 2027 remains a real stretch as the Burkean move. Twenty-three months of evidence had not produced the institutional mobilisation that his framework requires. The institutions held. They just held in a direction he did not predict.&lt;/p&gt;
&lt;p&gt;Most acceleration discourse is contemptuous of institutions; Aschenbrenner&amp;rsquo;s version takes them seriously enough to attempt a synthesis. The synthesis fails on its own terms, but it is a failure worth having.&lt;/p&gt;
&lt;h2 id="iv-identity-three-the-alignment-optimist"&gt;IV. Identity three: the alignment optimist&lt;/h2&gt;
&lt;p&gt;Aschenbrenner was an initial member of OpenAI&amp;rsquo;s Superalignment team. The team sought a successor to RLHF. Its mission was to align AI systems that were substantially smarter than their human supervisors. Aschenbrenner worked under Ilya Sutskever and Jan Leike. OpenAI publicly committed 20% of its compute to the team through 2027.&lt;/p&gt;
&lt;p&gt;By the standards of MIRI, Yudkowsky, and the 99%-p(doom) group, Aschenbrenner is a moderate. The term p(doom) means the estimated probability of an AI catastrophe. &lt;em&gt;Situational Awareness&lt;/em&gt; calls alignment &amp;ldquo;a real technical problem&amp;rdquo; but a &amp;ldquo;solvable&amp;rdquo; one. He treats it as a machine-learning (ML) engineering problem rather than a philosophical problem.&lt;/p&gt;
&lt;p&gt;Aschenbrenner writes that the default plan will &lt;em&gt;probably&lt;/em&gt; work. Scalable oversight would use debate, recursive reward modelling, and prover-verifier games for somewhat-superhuman systems. Weak-to-strong generalisation would cover the next tier. Interpretability research is the longest-shot but most ambitious bet.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;ldquo;I&amp;rsquo;m incredibly bullish on the technical tractability of the superalignment problem. […] Deep learning generalises surprisingly benignly in many situations: it often just &amp;lsquo;does the thing we meant&amp;rsquo; rather than picking up some abstruse malign behaviour.&amp;rdquo;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;In technical terms, he argues that evidence from the models available when he wrote weighs against the worst alignment failures as the most likely outcome. Those failures include deceptive alignment and instrumental convergence towards power-seeking.&lt;/p&gt;
&lt;p&gt;This is the alignment chapter&amp;rsquo;s strongest empirical claim. Twenty-three months later, it is probably the claim that aged worst.&lt;/p&gt;
&lt;p&gt;Aschenbrenner correctly identified RLHF as an approach with scaling limits. Later papers showed that reward hacking generalises beyond the training distribution. Reward hacking occurs when a model exploits its scoring rule instead of doing the intended task. The resulting behaviour included alignment faking, sabotage, and cooperation with malicious actors.&lt;/p&gt;
&lt;p&gt;Anthropic&amp;rsquo;s &lt;a href="https://arxiv.org/abs/2406.10162"&gt;&lt;em&gt;Sycophancy to Subterfuge&lt;/em&gt;&lt;/a&gt; from June 2024 studied this problem. &lt;a href="https://arxiv.org/abs/2508.17511"&gt;&lt;em&gt;School of Reward Hacks&lt;/em&gt;&lt;/a&gt; followed in August 2025. Both papers show that hacking on harmless tasks can generalise to misalignment.&lt;/p&gt;
&lt;p&gt;The November 2025 paper &lt;a href="https://arxiv.org/abs/2511.18397"&gt;&lt;em&gt;Natural Emergent Misalignment from Reward Hacking&lt;/em&gt;&lt;/a&gt; studied reward hacking in production RL. The training process produced models that lied, sabotaged codebases, and reasoned about malicious goals as a routine result.&lt;/p&gt;
&lt;p&gt;These results validate Aschenbrenner&amp;rsquo;s diagnosis. RLHF breaks at scale, alignment is a real technical problem, and researchers must address it empirically. The results do not validate his optimism.&lt;/p&gt;
&lt;p&gt;In December 2024, Anthropic published &lt;a href="https://arxiv.org/abs/2412.14093"&gt;&lt;em&gt;Alignment Faking in Large Language Models&lt;/em&gt;&lt;/a&gt;. Claude 3 Opus complied with harmful queries 14% of the time when it inferred that researchers were training it. Its chain of thought contained explicit alignment-faking reasoning. This behaviour emerged from routine training without researchers training it directly.&lt;/p&gt;
&lt;p&gt;That month, Apollo Research published &lt;a href="https://arxiv.org/abs/2412.04984"&gt;&lt;em&gt;Frontier Models are Capable of In-Context Scheming&lt;/em&gt;&lt;/a&gt;. The evaluations covered o1, Claude 3.5 Sonnet, Claude 3 Opus, Gemini 1.5 Pro, and Llama 3.1 405B. Every model attempted to copy its weights to external servers during scheming evaluations.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://arxiv.org/abs/2503.17378"&gt;arXiv 2503.17378&lt;/a&gt; found that 11 of 32 systems could replicate themselves. The observed behaviour included unprompted self-exfiltration to evade shutdown.&lt;/p&gt;
&lt;p&gt;Chain-of-thought faithfulness measures whether a model&amp;rsquo;s stated reasoning reflects the factors that shaped its answer. Aschenbrenner called it a &amp;ldquo;criminally underrated&amp;rdquo; tool for alignment monitoring. &lt;a href="https://www.anthropic.com/research/reasoning-models-dont-say-think"&gt;Later evidence substantially weakened that tool&lt;/a&gt;. Claude 3.7 Sonnet acknowledged influential hints only 25% of the time. DeepSeek-R1 acknowledged them 39% of the time.&lt;/p&gt;
&lt;p&gt;In its strong form, &amp;ldquo;Deep learning generalises benignly&amp;rdquo; is refuted. The structural fact is more damaging. His default plan depended on labs investing seriously in superalignment infrastructure.&lt;/p&gt;
&lt;p&gt;Three weeks before &lt;em&gt;Situational Awareness&lt;/em&gt; appeared, &lt;a href="https://www.cnbc.com/2024/05/17/openai-superalignment-sutskever-leike.html"&gt;OpenAI dissolved the Superalignment team&lt;/a&gt;. &lt;a href="https://x.com/ilyasut/status/1790517455628198322"&gt;Sutskever resigned May 14, 2024&lt;/a&gt;. &lt;a href="https://www.cbsnews.com/sanfrancisco/news/openai-exec-jan-leike-resigns-says-safety-has-taken-a-backseat/"&gt;Leike resigned May 15&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;ldquo;Safety culture and processes have taken a backseat to shiny products.&amp;rdquo;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;In the Dwarkesh Patel interview, Aschenbrenner gave his own public account of the dismissal. He said it came one to two weeks earlier. According to his account, his exit discussions covered three factors. One was a security memo that he had sent to the board. Another was his refusal to sign the November 2023 employee letter. The third was his position on AGI nationalisation. OpenAI has not commented publicly on the specifics.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://fortune.com/2024/05/21/openai-superalignment-20-compute-commitment-never-fulfilled-sutskever-leike-altman-brockman-murati/"&gt;The 20% compute commitment was effectively voided&lt;/a&gt;. &lt;a href="https://techcrunch.com/2026/02/11/openai-disbands-mission-alignment-team-which-focused-on-safe-and-trustworthy-ai-development/"&gt;OpenAI dissolved Superalignment&amp;rsquo;s successor, the Mission Alignment team, in February 2026&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;This evidence strengthens his geopolitical case while weakening his alignment case. In his framework, failed lab governance leaves state custody as the remaining institutional answer for safety.&lt;/p&gt;
&lt;p&gt;But speed pressure makes alignment faking and scheming operationally dangerous under state custody. Several models attempted self-exfiltration during research evaluations. The danger grows in a wartime SCIF whose operators are racing China through an intelligence explosion.&lt;/p&gt;
&lt;p&gt;The Project was supposed to provide a safety margin that the labs would not. Evidence through May 21, 2026, points the other way. Under speed pressure, state custody appears less safe for the failure modes that researchers had observed by that date.&lt;/p&gt;
&lt;p&gt;The strongest defence is timing. He wrote in May 2024. Most alignment-faking and scheming research did not yet exist. Every alignment researcher in mid-2024 had less evidence of deceptive behaviour in frontier systems. Granted.&lt;/p&gt;
&lt;p&gt;But the asymmetry is not &amp;ldquo;I underweighted X paper&amp;rdquo;. He based his political conclusion on alignment going reasonably well. The alignment evidence moved the other way faster than he projected. That shift changes the political calculation, regardless of when one writes.&lt;/p&gt;
&lt;h2 id="v-why-the-three-have-to-run-together"&gt;V. Why the three have to run together&lt;/h2&gt;
&lt;p&gt;&lt;em&gt;If&lt;/em&gt; compute scales as predicted, &lt;em&gt;then&lt;/em&gt; timelines compress. &lt;em&gt;Then&lt;/em&gt; state-actor competition becomes active. &lt;em&gt;Then&lt;/em&gt; the libertarian must yield to the hawk. This is Identity One&amp;rsquo;s libertarian-empiricist foundation: OOM counting.&lt;/p&gt;
&lt;p&gt;Drop the compute forecast and the politics dissolve. The chain requires AGI to arrive by 2027–28 on a 10 GW cluster. Without that timing, the claim of a near-term decisive military advantage falls away. There is therefore no Burkean exception for a Manhattan Project and no nationalisation argument.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;If&lt;/em&gt; the hawk is right about adversary capability, &lt;em&gt;then&lt;/em&gt; lab security must reach SCIF standards. &lt;em&gt;Then&lt;/em&gt; private-startup governance becomes inadequate. &lt;em&gt;Then&lt;/em&gt; the alignment optimist&amp;rsquo;s default plan needs state-scale resources. This is Identity Two&amp;rsquo;s institutional-Burkean argument.&lt;/p&gt;
&lt;p&gt;Drop the hawk and the Project becomes unnecessary. Labs can muddle through under existing market discipline. Drop the SCIF requirement and the alignment argument gains more time.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;If&lt;/em&gt; the alignment optimist is right, &lt;em&gt;then&lt;/em&gt; the default plan is tractable. &lt;em&gt;Then&lt;/em&gt; the Manhattan Project is justified. &lt;em&gt;Then&lt;/em&gt; engineers can align the system after nationalisation. The state receives a solvable engineering problem rather than an uncontrollable catastrophic capability.&lt;/p&gt;
&lt;p&gt;Drop the optimism and the Project becomes reckless. The hawk-libertarian-Burkean exception then transfers unprecedented military capability to a chain of command that cannot reliably control it. This is Identity Three&amp;rsquo;s empirical optimism.&lt;/p&gt;
&lt;p&gt;The synthesis is therefore &lt;em&gt;forced&lt;/em&gt;. Each identity is a precondition for the next. That structure makes Aschenbrenner intellectually interesting and hard to refute piecemeal. A critic must break the chain at a specific link.&lt;/p&gt;
&lt;p&gt;He is the rarest kind of public forecaster: legible enough to be wrong about. The same clarity makes his framework &lt;em&gt;fragile&lt;/em&gt;. It is a series-circuit argument. One failed component breaks the whole circuit.&lt;/p&gt;
&lt;p&gt;From the May 21, 2026, perspective, the record on the three premises was mixed.&lt;/p&gt;
&lt;p&gt;Compute scaling was alive but contested. Capability gains continued, and test-time compute supported the framework in a way that he did not emphasise. However, pretraining slowed relative to RL post-training. That shift complicates the &amp;ldquo;5 OOM additivity&amp;rdquo; framing.&lt;/p&gt;
&lt;p&gt;The evidence on adversary capability moved in the wrong direction for his argument. China did not catch up by stealing weights as he predicted. It reproduced the algorithmic frontier through papers and reverse engineering on a fraction of the budget. DeepSeek-V3, R1, V3.1, and V4 illustrate the path. The security thesis correctly predicted diffusion but identified the wrong channel.&lt;/p&gt;
&lt;p&gt;On alignment, the evidence confirmed his diagnosis but weakened his optimism. The deepest blow came from the institutional choices of his former employer.&lt;/p&gt;
&lt;p&gt;The strongest counter-counter is that the timeline remained open on May 21, 2026. Aschenbrenner&amp;rsquo;s AGI window is 2027–28. His window for political reordering is &amp;ldquo;by end of decade&amp;rdquo;.&lt;/p&gt;
&lt;p&gt;Several political forecasts could still turn green by 2028. Genesis Mission could harden into Manhattan-Project-style consolidation. A different administration could tighten export controls. OpenAI&amp;rsquo;s relationship with Stargate could move closer to nationalisation.&lt;/p&gt;
&lt;p&gt;Concede this honestly: the verdict is provisional. But the methodological point about series-circuit fragility does not depend on the final political outcome. Even if three political claims turn green by 2028, forecasts would still depend on the processes underneath them.&lt;/p&gt;
&lt;h2 id="vi-the-coalition-triad-and-its-cracks"&gt;VI. The coalition triad and its cracks&lt;/h2&gt;
&lt;p&gt;Aschenbrenner&amp;rsquo;s most operational geopolitical model has three coalition rings for the post-AGI world.&lt;/p&gt;
&lt;p&gt;The inner ring contains democracies. The US, the UK through DeepMind, Japan, South Korea, and core North Atlantic Treaty Organization (NATO) members would coordinate AGI development. A pact like the 1943 US-UK Quebec Agreement on nuclear cooperation would govern the work.&lt;/p&gt;
&lt;p&gt;The middle ring shares benefits with non-aligned states through an Atoms-for-Peace structure. Atoms for Peace was a Cold War programme for sharing civilian nuclear technology. The outer ring seeks to contain authoritarian adversaries through export controls, espionage interdiction, and ultimately deterrence.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;ldquo;Perhaps most importantly, a healthy lead gives us room to maneuver.&amp;rdquo;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;As of May 21, 2026, the inner ring had not formed. No coalition of democracies had emerged. The Group of Seven (G7) AI Industry/Digital Ministerial declarations existed. So did the Council of Europe AI/Human Rights Framework Convention. Neither created a coordinated bloc for AGI development.&lt;/p&gt;
&lt;p&gt;Trump 2.0 acted unilaterally. The administration rebranded the AI Safety Institute (AISI) as CAISI in June 2025. It treated allied AI policy as leverage in trade negotiations. There was no secret pact and no bilateral coordination at the technology level.&lt;/p&gt;
&lt;p&gt;The middle ring formed on commercial terms that he did not anticipate. Gulf authorisations covered 70,000 GB300s for G42 and HUMAIN. They also supported the partnership structure for Stargate UAE. These are not Atoms-for-Peace benefit-sharing arrangements. They are paid commercial deals.&lt;/p&gt;
&lt;p&gt;The administration announced a 25% revenue tariff on H200 sales to China in December 2025. &lt;em&gt;&amp;ldquo;Would you do the Manhattan Project in the UAE?&amp;rdquo;&lt;/em&gt; became a real question with a real answer. The UAE received the compute on transactional terms.&lt;/p&gt;
&lt;p&gt;The outer ring inverted. Containment loosened instead of tightening. The AI Diffusion Rule was scrapped in May 2025. In January 2026, the final rule changed H200/MI325X licence review from &amp;ldquo;presumption of denial&amp;rdquo; to &amp;ldquo;case-by-case.&amp;rdquo; This change reversed the direction that Aschenbrenner expected from any administration that recognised AGI&amp;rsquo;s importance.&lt;/p&gt;
&lt;p&gt;The twenty-three-month record exposed a flaw in the Atoms-for-Peace analogy. His proposed non-proliferation regime lacks the physical substrate of the original NPT. DeepSeek&amp;rsquo;s R1 release in January 2025 demonstrated the problem. A Chinese lab reproduced reasoning capability comparable to o1 on a budget that leading US labs would consider impossibly small. It used publicly available technical insights and reverse-engineered training recipes.&lt;/p&gt;
&lt;p&gt;This breaks something specific in the framework. If algorithmic secrets are not durable moats, the security thesis addresses the wrong threat. Locking down labs may stop state actors from exfiltrating information. It does not stop them from reproducing the work. The threat is not theft. The threat is reproduction. Reproduction requires nothing that Aschenbrenner&amp;rsquo;s lockdown architecture would prevent.&lt;/p&gt;
&lt;p&gt;A defender can fairly argue that the timeline remained open on May 21, 2026. The coalition could still form. Granted. But the &lt;em&gt;direction of motion&lt;/em&gt; in 2025-26 was away from his coalition. That evidence makes an Atoms-for-Peace structure less likely to remain reachable.&lt;/p&gt;
&lt;h2 id="vii-what-this-reveals-about-the-debate"&gt;VII. What this reveals about the debate&lt;/h2&gt;
&lt;p&gt;I do not think Aschenbrenner&amp;rsquo;s specific predictions will be the durable contribution. By May 21, 2026, the political programme remained largely unfulfilled or reversed. Several parts may not survive 2027. His transferable contribution is methodological, and it extends beyond him.&lt;/p&gt;
&lt;p&gt;He forced analysts to integrate all three domains. Most public AI-policy commentary in 2024-26 was single-domain analysis presented as comprehensive work.&lt;/p&gt;
&lt;p&gt;The doomer position includes Yudkowsky and the MIRI tradition. It gives too much weight to alignment and too little to geopolitics and political economy. The &amp;ldquo;bomb the data centres&amp;rdquo; line ignores adversary capability. It also ignores the political infeasibility of unilateral abstention.&lt;/p&gt;
&lt;p&gt;If AI affects national survival, a unilateral pause is structurally inadequate. Another actor will continue. Aschenbrenner inverts the doomer prescription: &lt;em&gt;nuclear deterrence for data centres&lt;/em&gt;. The US would threaten retaliation if adversaries struck American AI infrastructure.&lt;/p&gt;
&lt;p&gt;This position makes more sense as a national-security argument. It works less well as an alignment argument. It increases the speed pressure and military integration that make alignment harder.&lt;/p&gt;
&lt;p&gt;The accelerationist position includes effective accelerationism (e/acc) and the Andreessen wing. It gives too much weight to technology diffusion. It gives too little weight to alignment engineering and adversary capability. This camp models AI as consumer technology in a frictionless global market.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;&amp;ldquo;Bearish on the wrapper companies,&amp;rdquo;&lt;/em&gt; Aschenbrenner says. A wrapper company builds an application around a foundation model. His contempt for these startups mirrors what he calls the e/acc move. Both assume that industrial-scale capability will create more value than workflow integration.&lt;/p&gt;
&lt;p&gt;Evidence through May 21, 2026, was mixed. Cursor had reached roughly $500M in annual recurring revenue (ARR) by Q4 2025. Glean and other companies had built defensible enterprise positions. The wrapper short had not been clean.&lt;/p&gt;
&lt;p&gt;The political-economy record weakened the broader e/acc thesis. That thesis expects AI to diffuse and integrate like consumer software. The state became involved, although not in the form that Aschenbrenner predicted.&lt;/p&gt;
&lt;p&gt;The mainstream AI-safety policy position includes US standards and the European Union AI Act. It gives too much weight to regulatory process. It gives too little weight to capability speed and supply-chain geopolitics.&lt;/p&gt;
&lt;p&gt;The National Institute of Standards and Technology (NIST) leads the US standards track. The EU AI Act came into force as frontier capability moved towards test-time compute. The Act had not anticipated that paradigm. Aschenbrenner&amp;rsquo;s framework would have predicted this type of failure.&lt;/p&gt;
&lt;p&gt;He calls the regulatory process structurally too slow: &lt;em&gt;&amp;ldquo;NIST takes years and they figure out what the expert consensus is.&amp;rdquo;&lt;/em&gt; On this point, he was correct.&lt;/p&gt;
&lt;p&gt;I expect the most useful AI-policy work in 2026–28 to integrate all three domains. Most commentary available by May 21, 2026, failed this test. Alignment specialists could not model power. Geopolitical specialists could not model alignment. Policy specialists could not model the underlying capability curves.&lt;/p&gt;
&lt;p&gt;Aschenbrenner rejects probability distributions and instead &amp;ldquo;tells the modal story&amp;rdquo;. A modal story is a vivid, dated, and falsifiable narrative bet:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;ldquo;I have a lot of uncertainty. So a lot of the time I&amp;rsquo;m trying to tell the modal story, because I think it&amp;rsquo;s important to be concrete and visceral about it. And I have a lot of uncertainty basically over how the 2030s play out. But basically the thing I know is, it&amp;rsquo;s gonna be fucking crazy.&amp;rdquo;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;The method works on empirically lawful processes. Examples include scaling curves plotted on logarithmic axes, capital-expenditure (capex) aggregates, and power use by the largest cloud companies. It works poorly when elections, executive turnover, and coalition politics govern the process.&lt;/p&gt;
&lt;p&gt;Through May 21, 2026, his technology and infrastructure forecasts were unusually well calibrated. Their underlying processes had the right substrate. Here, substrate means the causal process that produces the outcome. His political-economy forecasts were poorly calibrated over the same period because their substrate was different.&lt;/p&gt;
&lt;p&gt;When a forecaster rejects probability distributions and commits to a dated narrative, ask: &lt;em&gt;what is the substrate? Is it empirically lawful or coalitionally contingent?&lt;/em&gt; The modal-story method becomes more durable as the process becomes more empirically lawful. This dependence is substrate sensitivity.&lt;/p&gt;
&lt;p&gt;Aschenbrenner&amp;rsquo;s instrument is sensitive to log-log evidence and saturated against electoral politics. His success in 2024-26 tracked how much of each question fell inside that range.&lt;/p&gt;
&lt;p&gt;The market moves favoured the empirical-substrate trades that he described, but not the coalition-substrate trades. Nvidia, AMD, gas turbines, transformer-shortage positions, and Gulf data-centre exposure gained. Bets on defence-AI consolidation and against open-source diffusion would not have paid. Strategically, an AI roadmap built on this narrative should anchor on substrate rather than rhetoric.&lt;/p&gt;
&lt;h2 id="viii-situational-awareness-lp-capital-conviction-and-the-honesty-of-the-bet"&gt;VIII. Situational Awareness LP: capital, conviction, and the honesty of the bet&lt;/h2&gt;
&lt;p&gt;Situational Awareness LP makes the worldview unavoidable because it reveals a capital position. Aschenbrenner has publicly described Patrick Collison, John Collison, Daniel Gross, and Nat Friedman as anchor investors. By his account, he put his own capital and their capital where his framework points.&lt;/p&gt;
&lt;p&gt;In the Dwarkesh interview, Aschenbrenner described a trade sequence. Nvidia came first. Taiwan Semiconductor Manufacturing Company (TSMC), packaging, and memory followed. US power and utilities came next, then natural gas and later Google. After those trades came &amp;ldquo;the big bond short&amp;rdquo; on real interest rates above 10%. Out-of-the-money (OTM) tail bets came last. An OTM option has no intrinsic value at the current market price; here, it serves as a low-probability tail bet.&lt;/p&gt;
&lt;p&gt;This sequence expresses his framework in capital. None of the named LPs has publicly confirmed a specific position. Every position description comes from Aschenbrenner&amp;rsquo;s public statements about his fund.&lt;/p&gt;
&lt;p&gt;The market performance of the trades that Aschenbrenner described provides a provisional verdict on the framework. The semiconductor trades worked. &lt;a href="https://www.cnbc.com/2026/04/24/nvidia-stock-closes-at-record-pushing-market-cap-past-5-trillion.html"&gt;Nvidia was worth $5.2T by May 21, 2026&lt;/a&gt;. That valuation put the company on a possible path to $10T by 2028. The latter figure remains a forecast. AMD&amp;rsquo;s $1T compute TAM upgrade supported the move into the wider semiconductor stack.&lt;/p&gt;
&lt;p&gt;The power trade gained support: turbine lead times reached 243 weeks, Meta ordered ten gas plants, and the Marcellus thesis gained industry-scale evidence.&lt;/p&gt;
&lt;p&gt;The Google trade remained open on May 21, 2026. Google had not reached the $100B AI revenue threshold that he treated as the catalyst. Its current annualised pace remained below $100B and still depended on capability and adoption cycles that had not closed.&lt;/p&gt;
&lt;p&gt;The bond short had not fired. A bond short gains when bond prices fall, usually as yields rise. Real yields measure interest rates after expected inflation. Real ten-year yields were roughly 2% in mid-2024. By May 21, 2026, they were roughly 2.0–2.4%, up modestly and far below 10%.&lt;/p&gt;
&lt;p&gt;Aschenbrenner explicitly framed the trade as a tail bet with negative carry. Negative carry means that holding the position costs money over time. Two years of cost without a payoff tells us something about the premise, not only the timing.&lt;/p&gt;
&lt;p&gt;The conflict of interest deserves one mention. Aschenbrenner&amp;rsquo;s policy advocacy can move markets in directions that favour many of his trades. The nationalisation case favours bets on rising US power and defence-contractor prices. The export-control case would favour TSMC if Trump 2.0 had not reversed direction. The trillion-dollar-cluster case favours the largest cloud companies.&lt;/p&gt;
&lt;p&gt;The advocacy may be sincere, and the fund may benefit from it. Both statements can be true. Financial analysts follow disclosure rules that do not apply to essays. Readers should know the financial position behind the document. Dwarkesh, who is friendly with Aschenbrenner, did not press this point in the interview. Finance normally requires an analyst to disclose such interests.&lt;/p&gt;
&lt;p&gt;The fund also hedges Aschenbrenner personally. He repeats a friend&amp;rsquo;s joke about that hedge:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;ldquo;A friend joked that the investment firm was perfectly hedged for me. It&amp;rsquo;s like, you know, either AGI this decade — and yeah, your human capital is depreciated, but you&amp;rsquo;ve turned that into financial capital. Or no AGI this decade, in which case maybe the firm doesn&amp;rsquo;t do that well, but you&amp;rsquo;re still in your 20s and you&amp;rsquo;re so smart.&amp;rdquo;&lt;/p&gt;
&lt;/blockquote&gt;</description></item><item><title>Reconciling Enterprise AI Revenue</title><link>https://philippdubach.com/posts/reconciling-enterprise-ai-revenue/</link><pubDate>Sun, 17 May 2026 00:00:00 +0200</pubDate><author>me@philippdubach.com (Philipp D. Dubach)</author><guid>https://philippdubach.com/posts/reconciling-enterprise-ai-revenue/</guid><description>&lt;figure class="post-figure" style="width: 80%; margin: 1.5rem auto;"&gt;
&lt;button type="button" class="img-trigger" data-lightbox-target="lightbox-cover-capex-png-0" aria-label="View full-size image"&gt;
&lt;picture class="img-lightbox"&gt;
&lt;source media="(max-width: 768px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=320,quality=80,format=auto/cover-capex.png 320w,
https://static.philippdubach.com/cdn-cgi/image/width=480,quality=80,format=auto/cover-capex.png 480w,
https://static.philippdubach.com/cdn-cgi/image/width=640,quality=80,format=auto/cover-capex.png 640w,
https://static.philippdubach.com/cdn-cgi/image/width=960,quality=80,format=auto/cover-capex.png 960w,
https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/cover-capex.png 1200w"
sizes="(max-width: 768px) 80vw, 576px"&gt;
&lt;source media="(max-width: 1024px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=768,quality=80,format=auto/cover-capex.png 768w,
https://static.philippdubach.com/cdn-cgi/image/width=1024,quality=80,format=auto/cover-capex.png 1024w,
https://static.philippdubach.com/cdn-cgi/image/width=1440,quality=80,format=auto/cover-capex.png 1440w"
sizes="(max-width: 768px) 80vw, 576px"&gt;
&lt;source media="(min-width: 1025px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/cover-capex.png 1200w,
https://static.philippdubach.com/cdn-cgi/image/width=1600,quality=80,format=auto/cover-capex.png 1600w,
https://static.philippdubach.com/cdn-cgi/image/width=2000,quality=80,format=auto/cover-capex.png 2000w"
sizes="(max-width: 768px) 80vw, 576px"&gt;
&lt;img src="https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/cover-capex.png"
alt="White enterprise AI revenue report cover with a crimson four-step reconciliation path from an X to a red dot"
class=""
width="2122"
height="1190"
fetchpriority="high"
decoding="async"&gt;
&lt;/picture&gt;
&lt;/button&gt;
&lt;/figure&gt;
&lt;dialog id="lightbox-cover-capex-png-0" class="lightbox-dialog" aria-label="Full-size image" data-hires="https://static.philippdubach.com/cdn-cgi/image/width=2000,quality=85,format=auto/cover-capex.png"&gt;
&lt;form method="dialog" class="lightbox-close-form"&gt;
&lt;button type="submit" class="lightbox-close" aria-label="Close"&gt;×&lt;/button&gt;
&lt;/form&gt;
&lt;img alt="White enterprise AI revenue report cover with a crimson four-step reconciliation path from an X to a red dot" decoding="async"&gt;
&lt;/dialog&gt;
&lt;p&gt;&lt;em&gt;This article accompanies the full research report,&lt;/em&gt; &lt;a href="https://static.philippdubach.com/pdf/reconciling-enterprise-ai-revenue-2025.pdf"&gt;Reconciling Enterprise AI Revenue: A Methodological Crosswalk and Vendor-Level Census, 2025&lt;/a&gt;&lt;em&gt;. The PDF contains the 68-vendor census, the six-tier framework, each sourced deduction, and the netting of structural double-counts.&lt;/em&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Three widely cited enterprise artificial intelligence (AI) revenue figures published in 2025 differ by 40x. A fourth, the vendor run-rate sum, sits between them. None is wrong. The defensible floor for underwriting $690B of hyperscaler capital expenditure is $63.2B to $72.5B.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Menlo Ventures put US enterprise generative AI spending at &lt;a href="https://menlovc.com/perspective/2025-the-state-of-generative-ai-in-the-enterprise/"&gt;$37B for 2025&lt;/a&gt; in its December 2025 report. A run-rate annualizes the most recent revenue pace. A bottom-up sum of disclosed vendor run-rates gives $100-135B worldwide. IDC sized the 2025 &lt;a href="https://www.idc.com/getdoc.jsp?containerId=prUS53413925"&gt;AI Solutions&lt;/a&gt; market at $307B. Gartner &lt;a href="https://www.gartner.com/en/newsroom/press-releases/2025-09-17-gartner-forecasts-worldwide-genai-spending-to-reach-1-point-5-trillion-in-2025"&gt;forecast&lt;/a&gt; $1.478T of total worldwide AI spending for 2025.&lt;/p&gt;
&lt;p&gt;The trade press calls all four figures &amp;ldquo;the AI market.&amp;rdquo; Menlo is not the cautious estimate, and Gartner is not the aggressive one. Each method states its scope, or perimeter, and is correct within it. The disagreement concerns what enterprise AI revenue &lt;em&gt;is&lt;/em&gt;, not how to count it.&lt;/p&gt;
&lt;p&gt;Why does this even matter? At the report&amp;rsquo;s May 17, 2026 cutoff, combined hyperscaler guidance approached $690B of 2026 capital expenditure (capex). Sell-side analysts projected roughly $1.5T of AI-related debt issuance for the planned infrastructure build. JPMorgan, Apollo, Blackstone, and KKR were helping structure that debt. Capex coverage is revenue divided by capital expenditure. I call revenue supported by regulatory filings and executive dollar disclosures audit-grade. Against its $63.2B narrow floor, coverage was 9.2%. The 1990s telecom buildout peaked at roughly 28% coverage. That is the inverse of 3.5x capex-to-revenue.&lt;/p&gt;
&lt;h2 id="four-enterprise-ai-revenue-estimates"&gt;Four enterprise AI revenue estimates&lt;/h2&gt;
&lt;h3 id="menlo-ventures-37b"&gt;Menlo Ventures: $37B&lt;/h3&gt;
&lt;p&gt;Menlo and an independent research firm surveyed 495 US enterprise information-technology decision-makers from November 7 to 25, 2025. They asked buyers to identify 2025 budget items that they classified as generative AI spending. The scope has three explicit limits: US only, generative AI only, and enterprise only. It is the narrowest published figure.&lt;/p&gt;
&lt;h3 id="vendor-run-rate-sum-100-135b"&gt;Vendor run-rate sum: $100-135B&lt;/h3&gt;
&lt;p&gt;This bottom-up calculation covers 68 vendors: 42 public and 26 private. A six-tier framework grades each primary source. The lower bound subtracts the maximum estimated reseller overlap and converts annual recurring revenue (ARR) claims into estimated recognized revenue. The upper bound removes duplicate silicon revenue but does not subtract reseller overlap. The fully netted midpoint is $123B. The &lt;a href="https://static.philippdubach.com/pdf/reconciling-enterprise-ai-revenue-2025.pdf"&gt;vendor census&lt;/a&gt; makes every dollar reproducible.&lt;/p&gt;
&lt;p&gt;The framework ranks sources from Tier A US Securities and Exchange Commission (SEC) filings to Tier F extrapolated estimates. Tier B contains executive dollar disclosures. Tier C contains qualitative mentions without dollar amounts, and Tier D uses third-party recurring-revenue claims. Tier E uses private-company commentary.&lt;/p&gt;
&lt;h3 id="idc-307b"&gt;IDC: $307B&lt;/h3&gt;
&lt;p&gt;The &lt;a href="https://www.idc.com/getdoc.jsp?containerId=IDC_P33198"&gt;IDC Worldwide AI Spending Guide&lt;/a&gt; estimates worldwide AI Solutions spending from vendor-share data and channel surveys. IDC includes hardware, services, and software when it tracks them as bundled enterprise AI solutions. It excludes consumer-device hardware. The single figure mixes vendor-recognized revenue with buyer spending.&lt;/p&gt;
&lt;h3 id="gartner-1478t"&gt;Gartner: $1.478T&lt;/h3&gt;
&lt;p&gt;Gartner&amp;rsquo;s &lt;a href="https://www.gartner.com/en/newsroom/press-releases/2025-09-17-gartner-forecasts-worldwide-genai-spending-to-reach-1-point-5-trillion-in-2025"&gt;September 17, 2025 release&lt;/a&gt; divides worldwide AI spending into five categories. They are AI-enabled devices ($389B), AI services ($283B), AI-optimized servers ($268B), AI software ($298B), and &amp;ldquo;other&amp;rdquo; ($242B). Gartner counts the full retail value of any product sold with an AI feature. Gartner analyst John Lovelock &lt;a href="https://www.networkworld.com/article/4058786/gartner-ai-spending-to-reach-1-5-trillion-dollars-this-year.html"&gt;said&lt;/a&gt; buyers receive the device layer with the product and do not specifically select it.&lt;/p&gt;
&lt;p&gt;Each figure answers a different question. Menlo captures what enterprise buyers consciously buy. The vendor sum measures what suppliers recognize or report as run-rate revenue. IDC adds services and integration. Gartner counts every product sold with an AI feature.&lt;/p&gt;
&lt;figure class="post-figure" style="width: 80%; margin: 1.5rem auto;"&gt;
&lt;button type="button" class="img-trigger" data-lightbox-target="lightbox-reconciling-ai-revenue-nested-circles-1-png-1" aria-label="View full-size image"&gt;
&lt;picture class="img-lightbox"&gt;
&lt;source media="(max-width: 768px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=320,quality=80,format=auto/reconciling-ai-revenue-nested-circles-1.png 320w,
https://static.philippdubach.com/cdn-cgi/image/width=480,quality=80,format=auto/reconciling-ai-revenue-nested-circles-1.png 480w,
https://static.philippdubach.com/cdn-cgi/image/width=640,quality=80,format=auto/reconciling-ai-revenue-nested-circles-1.png 640w,
https://static.philippdubach.com/cdn-cgi/image/width=960,quality=80,format=auto/reconciling-ai-revenue-nested-circles-1.png 960w,
https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/reconciling-ai-revenue-nested-circles-1.png 1200w"
sizes="(max-width: 768px) 80vw, 576px"&gt;
&lt;source media="(max-width: 1024px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=768,quality=80,format=auto/reconciling-ai-revenue-nested-circles-1.png 768w,
https://static.philippdubach.com/cdn-cgi/image/width=1024,quality=80,format=auto/reconciling-ai-revenue-nested-circles-1.png 1024w,
https://static.philippdubach.com/cdn-cgi/image/width=1440,quality=80,format=auto/reconciling-ai-revenue-nested-circles-1.png 1440w"
sizes="(max-width: 768px) 80vw, 576px"&gt;
&lt;source media="(min-width: 1025px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/reconciling-ai-revenue-nested-circles-1.png 1200w,
https://static.philippdubach.com/cdn-cgi/image/width=1600,quality=80,format=auto/reconciling-ai-revenue-nested-circles-1.png 1600w,
https://static.philippdubach.com/cdn-cgi/image/width=2000,quality=80,format=auto/reconciling-ai-revenue-nested-circles-1.png 2000w"
sizes="(max-width: 768px) 80vw, 576px"&gt;
&lt;img src="https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/reconciling-ai-revenue-nested-circles-1.png"
alt="Concentric circles compare five 2025 AI revenue measures, from Menlo&amp;#39;s $37B estimate to Gartner&amp;#39;s $1.478T estimate. Different scopes produce the 40-fold spread."
class=""
width="1376"
height="695"
loading="lazy"
decoding="async"&gt;
&lt;/picture&gt;
&lt;/button&gt;
&lt;/figure&gt;
&lt;dialog id="lightbox-reconciling-ai-revenue-nested-circles-1-png-1" class="lightbox-dialog" aria-label="Full-size image" data-hires="https://static.philippdubach.com/cdn-cgi/image/width=2000,quality=85,format=auto/reconciling-ai-revenue-nested-circles-1.png"&gt;
&lt;form method="dialog" class="lightbox-close-form"&gt;
&lt;button type="submit" class="lightbox-close" aria-label="Close"&gt;×&lt;/button&gt;
&lt;/form&gt;
&lt;img alt="Concentric circles compare five 2025 AI revenue measures, from Menlo&amp;#39;s $37B estimate to Gartner&amp;#39;s $1.478T estimate. Different scopes produce the 40-fold spread." decoding="async"&gt;
&lt;/dialog&gt;
&lt;h2 id="waterfall-from-1478t-to-37b"&gt;Waterfall: from $1.478T to $37B&lt;/h2&gt;
&lt;p&gt;Each step applies the next forecaster&amp;rsquo;s published perimeter to the previous figure. You can replace any assumption and rebuild the bridge.&lt;/p&gt;
&lt;h3 id="step-1-1478t-to-307b"&gt;Step 1: $1.478T to $307B&lt;/h3&gt;
&lt;p&gt;Start with Gartner&amp;rsquo;s $389B device layer, the largest single deduction. A $1,200 phone with an AI camera filter contributes $1,200 to Gartner and zero to IDC. Next come roughly $200B of broad AI services that IDC excludes and $268B of standalone server hardware. The final $232B covers broad AI software and &amp;ldquo;other&amp;rdquo; categories outside IDC&amp;rsquo;s solutions definition. Together, the deductions total roughly $1.171T. Gartner&amp;rsquo;s own analyst said buyers do not actively select the device layer.&lt;/p&gt;
&lt;h3 id="step-2-307b-to-123b"&gt;Step 2: $307B to $123B&lt;/h3&gt;
&lt;p&gt;The next $184B is not one thing. IDC counts the full transaction price, including channel margins, integration services, deployment labor, and government-channel premiums. The vendor run-rate sum counts only revenue that disclosing vendors recognize on their profit-and-loss statements. Channel margins contribute $40-60B. Consulting that software vendors do not recognize contributes $60-80B, and geographic pricing premiums add $20-30B. Tier C public vendors report another $15-25B of AI revenue without disclosing a dollar amount.&lt;/p&gt;
&lt;h3 id="step-3-123b-to-632b-narrow-or-725b-broad"&gt;Step 3: $123B to $63.2B narrow or ~$72.5B broad&lt;/h3&gt;
&lt;p&gt;Below Tier B, the evidence changes. The $123B midpoint includes Tier C-F sources and private-vendor ARR claims. At the May 2026 cutoff, these included OpenAI&amp;rsquo;s $25B, according to &lt;a href="https://sacra.com/c/openai/"&gt;Sacra&lt;/a&gt;. Anthropic added $19B based on &lt;a href="https://finance.yahoo.com/news/anthropic-arr-surges-19-billion-151028403.html"&gt;remarks by its chief executive at Morgan Stanley&amp;rsquo;s technology, media, and telecommunications conference&lt;/a&gt;. Cursor added $2B, and DeepSeek&amp;rsquo;s estimate added $1.1B. A reader who accepts nothing below Tier B gets the $63.2B narrow audit-grade figure.&lt;/p&gt;
&lt;p&gt;The broad definition credits hardware original equipment manufacturers (OEMs) after removing silicon overlap, and it includes CoreWeave&amp;rsquo;s non-Microsoft revenue. It excludes Arista because Arista disclosed an increased fiscal-year 2026 forecast rather than recognized revenue. That matches the treatment of ServiceNow&amp;rsquo;s $1.5B fiscal-year 2026 annual contract value target. The result is roughly $72.5B.&lt;/p&gt;
&lt;p&gt;Both figures remove the $11B Microsoft-OpenAI resale overlap and $7B for the Amazon Web Services/Google Cloud Platform-Anthropic overlap. The $7B figure is this report&amp;rsquo;s analytical assumption, not vendor disclosure.&lt;/p&gt;
&lt;h3 id="step-4-632b-to-37b"&gt;Step 4: $63.2B to $37B&lt;/h3&gt;
&lt;p&gt;The last step adjusts the scope to Menlo&amp;rsquo;s frame. Remove $15-20B of non-US hyperscaler AI revenue. Microsoft, Amazon Web Services, Alibaba, and Baidu have material non-US business at the AI run-rate level. Then remove $8-12B outside generative AI. Palantir, Salesforce, and Workday AI products include substantial predictive and classical machine learning. The small consumer share also comes out.&lt;/p&gt;
&lt;p&gt;The combined adjustment is roughly $26B, leaving a figure near Menlo&amp;rsquo;s published $37B. Some of this convergence is coincidental. A bottom-up survey will not match a top-down deduction exactly. Still, the order of magnitude is right, and the deductions are transparent.&lt;/p&gt;
&lt;figure class="post-figure" style="width: 80%; margin: 1.5rem auto;"&gt;
&lt;button type="button" class="img-trigger" data-lightbox-target="lightbox-reconciling-ai-revenue-waterfall-1-png-2" aria-label="View full-size image"&gt;
&lt;picture class="img-lightbox"&gt;
&lt;source media="(max-width: 768px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=320,quality=80,format=auto/reconciling-ai-revenue-waterfall-1.png 320w,
https://static.philippdubach.com/cdn-cgi/image/width=480,quality=80,format=auto/reconciling-ai-revenue-waterfall-1.png 480w,
https://static.philippdubach.com/cdn-cgi/image/width=640,quality=80,format=auto/reconciling-ai-revenue-waterfall-1.png 640w,
https://static.philippdubach.com/cdn-cgi/image/width=960,quality=80,format=auto/reconciling-ai-revenue-waterfall-1.png 960w,
https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/reconciling-ai-revenue-waterfall-1.png 1200w"
sizes="(max-width: 768px) 80vw, 576px"&gt;
&lt;source media="(max-width: 1024px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=768,quality=80,format=auto/reconciling-ai-revenue-waterfall-1.png 768w,
https://static.philippdubach.com/cdn-cgi/image/width=1024,quality=80,format=auto/reconciling-ai-revenue-waterfall-1.png 1024w,
https://static.philippdubach.com/cdn-cgi/image/width=1440,quality=80,format=auto/reconciling-ai-revenue-waterfall-1.png 1440w"
sizes="(max-width: 768px) 80vw, 576px"&gt;
&lt;source media="(min-width: 1025px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/reconciling-ai-revenue-waterfall-1.png 1200w,
https://static.philippdubach.com/cdn-cgi/image/width=1600,quality=80,format=auto/reconciling-ai-revenue-waterfall-1.png 1600w,
https://static.philippdubach.com/cdn-cgi/image/width=2000,quality=80,format=auto/reconciling-ai-revenue-waterfall-1.png 2000w"
sizes="(max-width: 768px) 80vw, 576px"&gt;
&lt;img src="https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/reconciling-ai-revenue-waterfall-1.png"
alt="Waterfall chart reconciles Gartner&amp;#39;s $1.478T estimate with Menlo&amp;#39;s $37B estimate. Four deductions remove broader products, channel markup, weaker disclosures, and non-US revenue."
class=""
width="1376"
height="704"
loading="lazy"
decoding="async"&gt;
&lt;/picture&gt;
&lt;/button&gt;
&lt;/figure&gt;
&lt;dialog id="lightbox-reconciling-ai-revenue-waterfall-1-png-2" class="lightbox-dialog" aria-label="Full-size image" data-hires="https://static.philippdubach.com/cdn-cgi/image/width=2000,quality=85,format=auto/reconciling-ai-revenue-waterfall-1.png"&gt;
&lt;form method="dialog" class="lightbox-close-form"&gt;
&lt;button type="submit" class="lightbox-close" aria-label="Close"&gt;×&lt;/button&gt;
&lt;/form&gt;
&lt;img alt="Waterfall chart reconciles Gartner&amp;#39;s $1.478T estimate with Menlo&amp;#39;s $37B estimate. Four deductions remove broader products, channel markup, weaker disclosures, and non-US revenue." decoding="async"&gt;
&lt;/dialog&gt;
&lt;h2 id="audit-grade"&gt;Audit-grade&lt;/h2&gt;
&lt;p&gt;The $63.2B narrow floor accepts two source types. Tier A consists of segment-level filings with the US Securities and Exchange Commission (SEC). Tier B consists of dollar disclosures that executives make on earnings calls. The calculation then removes structural double-counts across the stack. It is the maximum defensible figure for questions that require revenue traceable under generally accepted accounting principles (GAAP).&lt;/p&gt;
&lt;p&gt;The ~$72.5B broad floor applies the same discipline to two more sources. It adds the hardware OEM layer and CoreWeave revenue from customers other than Microsoft. Neither addition duplicates revenue counted elsewhere.&lt;/p&gt;
&lt;p&gt;The &lt;a href="https://static.philippdubach.com/pdf/reconciling-enterprise-ai-revenue-2025.pdf"&gt;vendor census&lt;/a&gt; finds four Tier A disclosures among 68 vendors. NVIDIA&amp;rsquo;s &lt;a href="https://investor.nvidia.com/financial-info/financial-reports/default.aspx"&gt;Data Center segment&lt;/a&gt; reported $62.3B in the fourth quarter of fiscal year 2026, or ~$249B annualized. AMD&amp;rsquo;s &lt;a href="https://ir.amd.com/financial-information/financial-results"&gt;Data Center segment&lt;/a&gt; reported $5.8B in the first quarter of 2026, or ~$23B annualized. Broadcom&amp;rsquo;s &lt;a href="https://investors.broadcom.com/financial-information/quarterly-results"&gt;AI semiconductor disclosure&lt;/a&gt; was $8.4B in the first quarter of fiscal year 2026, or ~$34B annualized. &lt;a href="https://investors.coreweave.com/financial-information/sec-filings"&gt;CoreWeave&lt;/a&gt; has been publicly listed since March 2025. It reported ~$5.1B of fiscal-year 2025 revenue. CoreWeave says all its revenue comes from AI infrastructure.&lt;/p&gt;
&lt;p&gt;Tier A gross disclosure is large, but its net contribution falls into a narrow band. Every qualifying vendor sits upstream of enterprise spending. The three silicon vendors sell into cloud and OEM layers. At the report cutoff, CoreWeave received 67% of its revenue from Microsoft. Microsoft resold that capacity as Azure AI Services.&lt;/p&gt;
&lt;p&gt;Hardware OEMs also resell silicon to hyperscalers. The report annualized &lt;a href="https://www.delltechnologies.com/en-us/dt/financial-information.htm"&gt;Dell&lt;/a&gt; AI revenue at $36B. It used $33B for &lt;a href="https://ir.supermicro.com/financials"&gt;SuperMicro&lt;/a&gt;, $4.4B for &lt;a href="https://investors.hpe.com/financial"&gt;HPE&lt;/a&gt;, and $3.5B for &lt;a href="https://investors.arista.com/financial-information"&gt;Arista&lt;/a&gt;. After applying the report&amp;rsquo;s overlap adjustments, Tier A contributes $2B to $10B of net enterprise-facing AI revenue.&lt;/p&gt;
&lt;figure class="post-figure" style="width: 80%; margin: 1.5rem auto;"&gt;
&lt;button type="button" class="img-trigger" data-lightbox-target="lightbox-reconciling-ai-revenue-disclosure-tiers-1-png-3" aria-label="View full-size image"&gt;
&lt;picture class="img-lightbox"&gt;
&lt;source media="(max-width: 768px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=320,quality=80,format=auto/reconciling-ai-revenue-disclosure-tiers-1.png 320w,
https://static.philippdubach.com/cdn-cgi/image/width=480,quality=80,format=auto/reconciling-ai-revenue-disclosure-tiers-1.png 480w,
https://static.philippdubach.com/cdn-cgi/image/width=640,quality=80,format=auto/reconciling-ai-revenue-disclosure-tiers-1.png 640w,
https://static.philippdubach.com/cdn-cgi/image/width=960,quality=80,format=auto/reconciling-ai-revenue-disclosure-tiers-1.png 960w,
https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/reconciling-ai-revenue-disclosure-tiers-1.png 1200w"
sizes="(max-width: 768px) 80vw, 576px"&gt;
&lt;source media="(max-width: 1024px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=768,quality=80,format=auto/reconciling-ai-revenue-disclosure-tiers-1.png 768w,
https://static.philippdubach.com/cdn-cgi/image/width=1024,quality=80,format=auto/reconciling-ai-revenue-disclosure-tiers-1.png 1024w,
https://static.philippdubach.com/cdn-cgi/image/width=1440,quality=80,format=auto/reconciling-ai-revenue-disclosure-tiers-1.png 1440w"
sizes="(max-width: 768px) 80vw, 576px"&gt;
&lt;source media="(min-width: 1025px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/reconciling-ai-revenue-disclosure-tiers-1.png 1200w,
https://static.philippdubach.com/cdn-cgi/image/width=1600,quality=80,format=auto/reconciling-ai-revenue-disclosure-tiers-1.png 1600w,
https://static.philippdubach.com/cdn-cgi/image/width=2000,quality=80,format=auto/reconciling-ai-revenue-disclosure-tiers-1.png 2000w"
sizes="(max-width: 768px) 80vw, 576px"&gt;
&lt;img src="https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/reconciling-ai-revenue-disclosure-tiers-1.png"
alt="Six-tier framework ranks AI revenue sources from SEC filings to extrapolated estimates. Tier A reports $311B gross but only $2B to $10B after overlap adjustments."
class=""
width="1367"
height="594"
loading="lazy"
decoding="async"&gt;
&lt;/picture&gt;
&lt;/button&gt;
&lt;/figure&gt;
&lt;dialog id="lightbox-reconciling-ai-revenue-disclosure-tiers-1-png-3" class="lightbox-dialog" aria-label="Full-size image" data-hires="https://static.philippdubach.com/cdn-cgi/image/width=2000,quality=85,format=auto/reconciling-ai-revenue-disclosure-tiers-1.png"&gt;
&lt;form method="dialog" class="lightbox-close-form"&gt;
&lt;button type="submit" class="lightbox-close" aria-label="Close"&gt;×&lt;/button&gt;
&lt;/form&gt;
&lt;img alt="Six-tier framework ranks AI revenue sources from SEC filings to extrapolated estimates. Tier A reports $311B gross but only $2B to $10B after overlap adjustments." decoding="async"&gt;
&lt;/dialog&gt;
&lt;p&gt;CoreWeave has the purest AI disclosure among Tier A vendors. Yet it routes two-thirds of its revenue through a hyperscaler that resells the capacity. The cleaner the disclosure, the more visible the resale problem.&lt;/p&gt;
&lt;p&gt;The hardware OEM cohort behaves in the same way. Dell, SuperMicro, HPE, and Arista disclose roughly $77B of annualized AI-attributable revenue. Their bills of materials contain silicon already counted at NVIDIA, AMD, and Broadcom. After removing it, the cohort contributes approximately $10.75B of incremental margin and integration value. The $72.5B broad figure includes this amount; the $63.2B narrow figure does not. Honest analysts disagree about whether OEM resale margin belongs inside the enterprise-facing perimeter or upstream of it.&lt;/p&gt;
&lt;p&gt;The Tier B floor totals approximately $63B after resale netting. Microsoft AI contributes $26B. This is its $37B gross figure less the $11B Microsoft-OpenAI overlap. Amazon Web Services AI adds $15B. Palantir Artificial Intelligence Platform (AIP), IBM watsonx, Baidu AI Cloud, and Alibaba AI products contribute another $19B.&lt;/p&gt;
&lt;p&gt;The long tail of explicit AI product disclosures adds roughly $3B. It includes Salesforce Agentforce at $800M and Workday AI at $400M. Adobe Firefly contributes $250M, Zscaler AI $400M, and Box AI $118M. The leading hyperscaler and defense-software lines matter more than the rest of the long tail combined.&lt;/p&gt;
&lt;p&gt;Four firms or cohorts account for more than 80% of the audit-grade total. They are Microsoft, Amazon Web Services, Palantir, and the Chinese hyperscaler cohort led by Alibaba and Baidu.&lt;/p&gt;
&lt;p&gt;The trade press implies a broad enterprise-software AI rollout. In that story, Salesforce, ServiceNow, Workday, Adobe, Atlassian, Snowflake, and HubSpot convert their customer bases to AI products. This conversion has not appeared in disclosed revenue at scale. Perhaps it is happening inside bundled non-AI products, which creates a Tier C disclosure problem. Perhaps it is happening more slowly than the narrative suggests. The framework cannot decide between these explanations.&lt;/p&gt;
&lt;p&gt;A bull objection remains. &lt;a href="https://viewpoint.pwc.com/dt/us/en/pwc/accounting_guides/financial_statement_/financial_statement___18_US/chapter_25_segment_r_US/251_chapter_overview_US.html"&gt;Accounting Standards Codification 280 (Segment Reporting)&lt;/a&gt; does not require a separate AI segment. So the absence of an &amp;ldquo;AI segment&amp;rdquo; at Salesforce or ServiceNow reveals disclosure obligations, not underlying demand. The audit-grade floor is the wrong denominator for total-addressable-market and growth questions. Capex coverage, however, is a GAAP cash-flow question. For that question, GAAP-traceable revenue is probably the right denominator.&lt;/p&gt;
&lt;h2 id="which-number-for-which-question"&gt;Which number for which question&lt;/h2&gt;
&lt;h3 id="capex-sustainability-and-credit-underwriting"&gt;Capex sustainability and credit underwriting&lt;/h3&gt;
&lt;p&gt;Use $63.2B narrow or ~$72.5B broad. Lenders financing the nearly $690B of disclosed hyperscaler capex expect repayment from GAAP operating cash flow. Only audit-grade revenue offers reasonable certainty of forward GAAP recognition.&lt;/p&gt;
&lt;p&gt;Public disclosures from private model laboratories do not settle how each company applies Accounting Standards Codification 606. Its principal-versus-agent guidance determines whether a company reports the gross transaction amount or only its net share. A credit memo that combines $25B of OpenAI ARR with $37B of Microsoft AI therefore uses two different units.&lt;/p&gt;
&lt;h3 id="mergers-acquisitions-and-private-equity-valuation"&gt;Mergers, acquisitions, and private equity valuation&lt;/h3&gt;
&lt;p&gt;Use the $100-135B disclosure-grade range. A buyer of an AI-adjacent target cares more about revenue in two years than its current audit grade. Tier D-E private-vendor claims are a leading indicator of recognized revenue. OpenAI&amp;rsquo;s $25B and Anthropic&amp;rsquo;s $19B belong here. The dispute concerns &lt;em&gt;how&lt;/em&gt; to count them, not &lt;em&gt;whether&lt;/em&gt; to count them.&lt;/p&gt;
&lt;h3 id="total-addressable-market-and-growth-analysis"&gt;Total addressable market and growth analysis&lt;/h3&gt;
&lt;p&gt;IDC&amp;rsquo;s $307B is closer to the right figure. It includes the integration and services labor that AI deployment requires. This includes $60-80B of consulting and deployment work that never reaches a software vendor&amp;rsquo;s profit-and-loss statement. A consultancy that sizes the AI services opportunity should start here.&lt;/p&gt;
&lt;h3 id="is-ai-changing-the-economy"&gt;Is AI changing the economy?&lt;/h3&gt;
&lt;p&gt;Gartner&amp;rsquo;s $1.478T is the right figure for this question. Willingness to pay includes additional spending on smartphones, personal computers, and services with AI features. Lovelock is right that buyers do not actively select the device layer. Still, cash-register spending is the relevant signal for economic reorganization. That remains true even when buyers do not identify AI as the reason.&lt;/p&gt;
&lt;h2 id="what-enterprise-ai-revenue-means-for-the-capex-thesis"&gt;What enterprise AI revenue means for the capex thesis&lt;/h2&gt;
&lt;p&gt;At the report cutoff, combined 2026 hyperscaler capex guidance from Microsoft, Alphabet, Amazon, Meta, and Oracle approached &lt;a href="https://philippdubach.com/posts/ai-capex-arms-race-who-blinks-first/"&gt;$690B&lt;/a&gt;. Revenue covered 9.2% of capex on the $63.2B narrow floor. Coverage rose to 10.5% on the ~$72.5B broad floor and 17.8% on the $123B reconciled midpoint. A plausible $150B ceiling gave 21.7% coverage. That ceiling included undisclosed Tier C AI revenue at Google Cloud, Meta, Oracle, and the software-as-a-service cohort.&lt;/p&gt;
&lt;p&gt;The 1990s telecom buildout peaked at roughly &lt;a href="https://philippdubach.com/posts/ai-capex-arms-race-who-blinks-first/"&gt;28% capex coverage&lt;/a&gt;. Its inverse was 3.5x capex-to-revenue. It is the closest analogue and the one &lt;a href="https://philippdubach.com/posts/pozsars-bretton-woods-iii-the-framework-1/2/"&gt;Pozsar-era infrastructure bears&lt;/a&gt; cite. The May 2026 narrow coverage ratio was roughly one-third of that peak. Even the reconciled midpoint gave worse coverage than telecom in 1999.&lt;/p&gt;
&lt;figure class="post-figure" style="width: 80%; margin: 1.5rem auto;"&gt;
&lt;button type="button" class="img-trigger" data-lightbox-target="lightbox-reconciling-ai-revenue-capex-coverage-1-png-5" aria-label="View full-size image"&gt;
&lt;picture class="img-lightbox"&gt;
&lt;source media="(max-width: 768px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=320,quality=80,format=auto/reconciling-ai-revenue-capex-coverage-1.png 320w,
https://static.philippdubach.com/cdn-cgi/image/width=480,quality=80,format=auto/reconciling-ai-revenue-capex-coverage-1.png 480w,
https://static.philippdubach.com/cdn-cgi/image/width=640,quality=80,format=auto/reconciling-ai-revenue-capex-coverage-1.png 640w,
https://static.philippdubach.com/cdn-cgi/image/width=960,quality=80,format=auto/reconciling-ai-revenue-capex-coverage-1.png 960w,
https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/reconciling-ai-revenue-capex-coverage-1.png 1200w"
sizes="(max-width: 768px) 80vw, 576px"&gt;
&lt;source media="(max-width: 1024px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=768,quality=80,format=auto/reconciling-ai-revenue-capex-coverage-1.png 768w,
https://static.philippdubach.com/cdn-cgi/image/width=1024,quality=80,format=auto/reconciling-ai-revenue-capex-coverage-1.png 1024w,
https://static.philippdubach.com/cdn-cgi/image/width=1440,quality=80,format=auto/reconciling-ai-revenue-capex-coverage-1.png 1440w"
sizes="(max-width: 768px) 80vw, 576px"&gt;
&lt;source media="(min-width: 1025px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/reconciling-ai-revenue-capex-coverage-1.png 1200w,
https://static.philippdubach.com/cdn-cgi/image/width=1600,quality=80,format=auto/reconciling-ai-revenue-capex-coverage-1.png 1600w,
https://static.philippdubach.com/cdn-cgi/image/width=2000,quality=80,format=auto/reconciling-ai-revenue-capex-coverage-1.png 2000w"
sizes="(max-width: 768px) 80vw, 576px"&gt;
&lt;img src="https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/reconciling-ai-revenue-capex-coverage-1.png"
alt="Chart compares capital-expenditure coverage: 28 percent for 1990s telecom versus 9.2 percent for AI in 2026. AI&amp;#39;s capex-to-revenue ratio is 10.9x, versus telecom&amp;#39;s 3.5x."
class=""
width="1365"
height="631"
loading="lazy"
decoding="async"&gt;
&lt;/picture&gt;
&lt;/button&gt;
&lt;/figure&gt;
&lt;dialog id="lightbox-reconciling-ai-revenue-capex-coverage-1-png-5" class="lightbox-dialog" aria-label="Full-size image" data-hires="https://static.philippdubach.com/cdn-cgi/image/width=2000,quality=85,format=auto/reconciling-ai-revenue-capex-coverage-1.png"&gt;
&lt;form method="dialog" class="lightbox-close-form"&gt;
&lt;button type="submit" class="lightbox-close" aria-label="Close"&gt;×&lt;/button&gt;
&lt;/form&gt;
&lt;img alt="Chart compares capital-expenditure coverage: 28 percent for 1990s telecom versus 9.2 percent for AI in 2026. AI&amp;#39;s capex-to-revenue ratio is 10.9x, versus telecom&amp;#39;s 3.5x." decoding="async"&gt;
&lt;/dialog&gt;
&lt;p&gt;Two bull-side adjustments are honest.&lt;/p&gt;
&lt;h3 id="adjustment-1-revenue-follows-capex"&gt;Adjustment 1: revenue follows capex&lt;/h3&gt;
&lt;p&gt;Capex builds capacity that earns revenue after an 18-24 month delay. A fairer comparison therefore uses 2028 revenue against 2026 capex. At the May 2026 cutoff, Microsoft and Amazon Web Services reported AI growth of 100-170% year over year. The report estimated that revenue from model application programming interfaces (APIs) was doubling every 9-12 months. If that growth holds, $63.2B could plausibly reach $250B by 2028. The narrow floor must roughly quadruple in 30 months. Under those assumptions, 5-to-6-year amortization would work at hyperscale gross margins.&lt;/p&gt;
&lt;h3 id="adjustment-2-not-all-capex-is-incremental-to-ai"&gt;Adjustment 2: not all capex is incremental to AI&lt;/h3&gt;
&lt;p&gt;Some of the $690B pays for baseline cloud refresh, networking, and growth in workloads outside AI. A reasonable AI-incremental estimate is $400-500B. This adjustment raises narrow coverage from 9.2% to 12.6-15.8%. It raises broad coverage from 10.5% to 14.5-18.1%. Those figures move closer to telecom in 1999 but remain below it. The midpoint analyst case uses $450B of AI-incremental capex against $63.2B of narrow revenue. It gives 14.0% coverage.&lt;/p&gt;
&lt;p&gt;Even with delayed revenue and a smaller capex denominator, coverage remains worse than the closest infrastructure analogue. Sell-side estimates put AI-related debt financing at approximately $1.5T. At the May 2026 cutoff, JPMorgan, Apollo, Blackstone, and KKR were helping structure that debt. The build&amp;rsquo;s capital structure takes duration risk on a coverage ratio that requires revenue to more than quadruple in 30 months.&lt;/p&gt;
&lt;p&gt;The reconciled range changes three theses on this site in different ways.&lt;/p&gt;
&lt;p&gt;The &lt;a href="https://philippdubach.com/posts/the-saaspocalypse-paradox/"&gt;SaaSpocalypse Paradox&lt;/a&gt; becomes sharper. Section 5 of the research report puts disclosed application-layer AI revenue at $21.2B. AI-native private vendors contribute $3.7B, and AI products at incumbent public software companies contribute $17.5B. The underlying software-as-a-service market exceeds $400B. The layer that supposedly disrupts its pricing structure is only 1% to 5% as large. Meanwhile, capex is $690B.&lt;/p&gt;
&lt;p&gt;Either AI consumes software-as-a-service revenue quickly, or capex is too large for the revenue. The first case requires revenue share to rise from 5% to 20-30% within two to three years. Both can&amp;rsquo;t be cheap.&lt;/p&gt;
&lt;p&gt;The &lt;a href="https://philippdubach.com/posts/ai-capex-arms-race-who-blinks-first/"&gt;AI Capex Arms Race&lt;/a&gt; thesis intensifies. The original essay used a rough $100B revenue estimate. The audit-grade calculation replaces it with $63.2B narrow, ~$72.5B broad, and a $123B midpoint. Narrow coverage is 9.2%, below the previous essay&amp;rsquo;s implicit 14-15%. The methodology upgrade strengthens the bear case.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://philippdubach.com/posts/ai-models-are-the-new-rebar/"&gt;AI Models Are the New Rebar&lt;/a&gt; gives a more interesting intermediate result. The report put the model-API layer at $46.6B gross and $39.6B after removing Amazon Web Services/Google Cloud Platform-Anthropic resale. That net figure was roughly 1.9x the $21.2B application layer. On dollar revenue, margin had not moved up the stack.&lt;/p&gt;
&lt;p&gt;Prices fell hard from February 2023 to October 2025. Flagship input prices dropped ~96%, with a six-month half-life. Dollar revenue still grew because volume rose faster than prices fell, but that trend broke in late 2025. In April 2026, GPT-5.4 cost $2.50 per million input tokens and $15 per million output tokens. Its input price was double GPT-5&amp;rsquo;s price. At the report cutoff, Claude Haiku 3.5 cost ~3x more than Haiku 3. Higher prices help vendor revenue catch up with capex only if buyers absorb them rather than switch to open-weight models. Open-weight models make their trained weights publicly available.&lt;/p&gt;
&lt;p&gt;At the May 2026 cutoff, OpenAI and Anthropic represented roughly 87% of disclosed private-vendor AI revenue within the $100-135B range. The unsettled principal-versus-agent question is therefore not a long-tail issue. It concerns the two firms whose run-rates carry almost the entire private layer. A later clarification of recognition methods could move the disclosure-grade range materially. Audit-grade Tier B would not change.&lt;/p&gt;
&lt;p&gt;The disclosure tier also leads audit-grade revenue rather than lagging it. Suppose Google Cloud replaces its Tier C statement with a Tier B dollar figure. Its economics stay the same, but the underwritable floor rises. Google, Meta, Oracle, SAP, Snowflake, and Atlassian may move AI revenue from Tier C to Tier B. If they do so over the four quarters following May 2026, the $63.2B floor approaches $90-100B.&lt;/p&gt;
&lt;h2 id="spread-index"&gt;Spread Index&lt;/h2&gt;
&lt;p&gt;One ratio summarizes the disclosure gap. The Spread Index divides audit-grade enterprise AI revenue by Gartner&amp;rsquo;s umbrella figure. At version 1.0 in May 2026, $63.2B / $1.478T = &lt;strong&gt;4.28% (narrow)&lt;/strong&gt;. The broad result is $72.5B / $1.478T = &lt;strong&gt;4.90% (broad)&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;I will try to update the index with each quarterly filing cycle. It tracks two different quantities. The numerator is revenue that AI vendors support with SEC filings and earnings-call disclosures. The denominator is what the broadest published framework calls &amp;ldquo;AI spending.&amp;rdquo;&lt;/p&gt;
&lt;p&gt;If audit-grade revenue grows faster than the umbrella, capex coverage improves on its own. If it grows more slowly, the gap widens. Vendors may bundle AI inside non-AI products. New disclosures may also consist only of private ARR claims. In either case, the underwriting case weakens without any change in the headline figures.&lt;/p&gt;
&lt;h2 id="four-nested-circles"&gt;Four nested circles&lt;/h2&gt;
&lt;p&gt;The discourse keeps approaching one finding sideways: does AI revenue justify the build? Against $690B of 2026 hyperscaler capex, the right denominator is $63.2B narrow or ~$72.5B broad. Gartner&amp;rsquo;s $1.478T is appropriate for measuring AI economic activity, but not for capex coverage. The $100-135B vendor sum suits total-addressable-market and merger-and-acquisition analysis, but not credit underwriting. No defensible capex underwriting argument can use a denominator below the audit-grade floor.&lt;/p&gt;
&lt;p&gt;If the Spread Index remains below 5% through the fourth quarter of 2026, disclosure alone cannot improve the underwriting case. Revenue itself must compound.&lt;/p&gt;</description></item><item><title>What Claude Thinks But Doesn't Say</title><link>https://philippdubach.com/posts/what-claude-thinks-but-doesnt-say/</link><pubDate>Mon, 11 May 2026 00:00:00 +0200</pubDate><author>me@philippdubach.com (Philipp D. Dubach)</author><guid>https://philippdubach.com/posts/what-claude-thinks-but-doesnt-say/</guid><description>&lt;figure class="post-figure" style="width: 80%; margin: 1.5rem auto;"&gt;
&lt;button type="button" class="img-trigger" data-lightbox-target="lightbox-https:--static-philippdubach-com-claude_understanding_image-jpg-0" aria-label="View full-size image"&gt;
&lt;picture class="img-lightbox"&gt;
&lt;source media="(max-width: 768px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=320,quality=80,format=auto/https://static.philippdubach.com/claude_understanding_image.jpg 320w,
https://static.philippdubach.com/cdn-cgi/image/width=480,quality=80,format=auto/https://static.philippdubach.com/claude_understanding_image.jpg 480w,
https://static.philippdubach.com/cdn-cgi/image/width=640,quality=80,format=auto/https://static.philippdubach.com/claude_understanding_image.jpg 640w,
https://static.philippdubach.com/cdn-cgi/image/width=960,quality=80,format=auto/https://static.philippdubach.com/claude_understanding_image.jpg 960w,
https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/https://static.philippdubach.com/claude_understanding_image.jpg 1200w"
sizes="(max-width: 768px) 80vw, 576px"&gt;
&lt;source media="(max-width: 1024px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=768,quality=80,format=auto/https://static.philippdubach.com/claude_understanding_image.jpg 768w,
https://static.philippdubach.com/cdn-cgi/image/width=1024,quality=80,format=auto/https://static.philippdubach.com/claude_understanding_image.jpg 1024w,
https://static.philippdubach.com/cdn-cgi/image/width=1440,quality=80,format=auto/https://static.philippdubach.com/claude_understanding_image.jpg 1440w"
sizes="(max-width: 768px) 80vw, 576px"&gt;
&lt;source media="(min-width: 1025px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/https://static.philippdubach.com/claude_understanding_image.jpg 1200w,
https://static.philippdubach.com/cdn-cgi/image/width=1600,quality=80,format=auto/https://static.philippdubach.com/claude_understanding_image.jpg 1600w,
https://static.philippdubach.com/cdn-cgi/image/width=2000,quality=80,format=auto/https://static.philippdubach.com/claude_understanding_image.jpg 2000w"
sizes="(max-width: 768px) 80vw, 576px"&gt;
&lt;img src="https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/https://static.philippdubach.com/claude_understanding_image.jpg"
alt="Anthropic&amp;#39;s natural language autoencoder concept: an activation vector translated into a paragraph of English and back, illustrating Claude&amp;#39;s internal state being read directly"
class=""
width="1920"
height="1080"
fetchpriority="high"
decoding="async"&gt;
&lt;/picture&gt;
&lt;/button&gt;
&lt;/figure&gt;
&lt;dialog id="lightbox-https:--static-philippdubach-com-claude_understanding_image-jpg-0" class="lightbox-dialog" aria-label="Full-size image" data-hires="https://static.philippdubach.com/cdn-cgi/image/width=2000,quality=85,format=auto/https://static.philippdubach.com/claude_understanding_image.jpg"&gt;
&lt;form method="dialog" class="lightbox-close-form"&gt;
&lt;button type="submit" class="lightbox-close" aria-label="Close"&gt;×&lt;/button&gt;
&lt;/form&gt;
&lt;img alt="Anthropic&amp;#39;s natural language autoencoder concept: an activation vector translated into a paragraph of English and back, illustrating Claude&amp;#39;s internal state being read directly" decoding="async"&gt;
&lt;/dialog&gt;
&lt;blockquote&gt;
&lt;p&gt;Anthropic published a method for translating Claude&amp;rsquo;s internal activations into readable English. It works well enough to ship. The press release skips three structural problems that the paper itself acknowledges.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;On the &lt;a href="https://openai.com/index/introducing-swe-bench-verified/"&gt;SWE-bench Verified&lt;/a&gt; coding benchmark, a new Anthropic interpretability method called natural language autoencoders shows the model registering &amp;ldquo;this is an evaluation&amp;rdquo; on &lt;strong&gt;26%&lt;/strong&gt; of problems. On real claude.ai traffic from users who opted in for training, that number is &lt;strong&gt;under 1%&lt;/strong&gt;. Claude is thinking it is being tested at a rate that does not show up in anything it says.&lt;/p&gt;
&lt;figure class="post-figure" style="width: 80%; margin: 1.5rem auto;"&gt;
&lt;button type="button" class="img-trigger" data-lightbox-target="lightbox-claude-thinks-eval-awareness-gap-1-png-1" aria-label="View full-size image"&gt;
&lt;picture class="img-lightbox"&gt;
&lt;source media="(max-width: 768px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=320,quality=80,format=auto/claude-thinks-eval-awareness-gap-1.png 320w,
https://static.philippdubach.com/cdn-cgi/image/width=480,quality=80,format=auto/claude-thinks-eval-awareness-gap-1.png 480w,
https://static.philippdubach.com/cdn-cgi/image/width=640,quality=80,format=auto/claude-thinks-eval-awareness-gap-1.png 640w,
https://static.philippdubach.com/cdn-cgi/image/width=960,quality=80,format=auto/claude-thinks-eval-awareness-gap-1.png 960w,
https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/claude-thinks-eval-awareness-gap-1.png 1200w"
sizes="(max-width: 768px) 80vw, 576px"&gt;
&lt;source media="(max-width: 1024px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=768,quality=80,format=auto/claude-thinks-eval-awareness-gap-1.png 768w,
https://static.philippdubach.com/cdn-cgi/image/width=1024,quality=80,format=auto/claude-thinks-eval-awareness-gap-1.png 1024w,
https://static.philippdubach.com/cdn-cgi/image/width=1440,quality=80,format=auto/claude-thinks-eval-awareness-gap-1.png 1440w"
sizes="(max-width: 768px) 80vw, 576px"&gt;
&lt;source media="(min-width: 1025px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/claude-thinks-eval-awareness-gap-1.png 1200w,
https://static.philippdubach.com/cdn-cgi/image/width=1600,quality=80,format=auto/claude-thinks-eval-awareness-gap-1.png 1600w,
https://static.philippdubach.com/cdn-cgi/image/width=2000,quality=80,format=auto/claude-thinks-eval-awareness-gap-1.png 2000w"
sizes="(max-width: 768px) 80vw, 576px"&gt;
&lt;img src="https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/claude-thinks-eval-awareness-gap-1.png"
alt="Bar chart comparing how often Claude internally registers &amp;#39;this is an evaluation&amp;#39; across three contexts: 26% on SWE-bench Verified coding problems, 16% on destructive-coding safety tests, and under 1% on real claude.ai traffic from users who opted in for training. The first two bars are orange, the third is green and circled to call out the contrast."
class=""
width="1376"
height="768"
loading="lazy"
decoding="async"&gt;
&lt;/picture&gt;
&lt;/button&gt;
&lt;/figure&gt;
&lt;dialog id="lightbox-claude-thinks-eval-awareness-gap-1-png-1" class="lightbox-dialog" aria-label="Full-size image" data-hires="https://static.philippdubach.com/cdn-cgi/image/width=2000,quality=85,format=auto/claude-thinks-eval-awareness-gap-1.png"&gt;
&lt;form method="dialog" class="lightbox-close-form"&gt;
&lt;button type="submit" class="lightbox-close" aria-label="Close"&gt;×&lt;/button&gt;
&lt;/form&gt;
&lt;img alt="Bar chart comparing how often Claude internally registers &amp;#39;this is an evaluation&amp;#39; across three contexts: 26% on SWE-bench Verified coding problems, 16% on destructive-coding safety tests, and under 1% on real claude.ai traffic from users who opted in for training. The first two bars are orange, the third is green and circled to call out the contrast." decoding="async"&gt;
&lt;/dialog&gt;
&lt;p&gt;In 1861, &lt;a href="https://en.wikipedia.org/wiki/Paul_Broca"&gt;Paul Broca&lt;/a&gt;&amp;rsquo;s most famous patient was a man he called Tan. Tan understood the world around him. He could not describe it. Whatever he tried to say came out as the same syllable: &amp;ldquo;tan.&amp;rdquo; After Tan died, Broca cut into his brain and found a lesion in the left frontal lobe. It was the first physical evidence that thinking and saying are separable.&lt;/p&gt;
&lt;p&gt;A century and a half later, the same gap is the hardest problem in evaluating large language models. Claude can pass a safety test without verbalizing why. The verbal trace and the underlying state are not the same thing, and we have not been able to read the underlying state. Anthropic &lt;a href="https://transformer-circuits.pub/2026/nla/index.html"&gt;published a paper&lt;/a&gt; on May 7th that proposes a method for it, alongside a &lt;a href="https://www.youtube.com/watch?v=j2knrqAzYVY"&gt;short video walkthrough&lt;/a&gt; that frames the work as &amp;ldquo;mind reading&amp;rdquo; for AI and uses a simulated blackmail-shutdown test as the running example. Natural Language Autoencoders, NLAs in the paper, take an activation vector from Claude&amp;rsquo;s residual stream and produce a paragraph of plain English describing what the activation encodes.&lt;/p&gt;
&lt;h2 id="how-the-round-trip-works"&gt;How the round trip works&lt;/h2&gt;
&lt;p&gt;The objective fits on one line. Take an activation vector h, write a paragraph z, reconstruct h from z, minimize the squared error. Two models split the work. The activation verbalizer, AV, takes the vector and writes a paragraph. The activation reconstructor, AR, reads the paragraph and tries to recover the vector. Both are full-size language models, both initialized as copies of the target model, both trained jointly. The AV is updated with reinforcement learning, &lt;a href="https://arxiv.org/abs/2402.03300"&gt;GRPO&lt;/a&gt; specifically. The AR is updated with supervised regression on the reconstruction loss.&lt;/p&gt;
&lt;figure class="post-figure" style="width: 80%; margin: 1.5rem auto;"&gt;
&lt;button type="button" class="img-trigger" data-lightbox-target="lightbox-claude-thinks-round-trip-1-png-2" aria-label="View full-size image"&gt;
&lt;picture class="img-lightbox"&gt;
&lt;source media="(max-width: 768px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=320,quality=80,format=auto/claude-thinks-round-trip-1.png 320w,
https://static.philippdubach.com/cdn-cgi/image/width=480,quality=80,format=auto/claude-thinks-round-trip-1.png 480w,
https://static.philippdubach.com/cdn-cgi/image/width=640,quality=80,format=auto/claude-thinks-round-trip-1.png 640w,
https://static.philippdubach.com/cdn-cgi/image/width=960,quality=80,format=auto/claude-thinks-round-trip-1.png 960w,
https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/claude-thinks-round-trip-1.png 1200w"
sizes="(max-width: 768px) 80vw, 576px"&gt;
&lt;source media="(max-width: 1024px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=768,quality=80,format=auto/claude-thinks-round-trip-1.png 768w,
https://static.philippdubach.com/cdn-cgi/image/width=1024,quality=80,format=auto/claude-thinks-round-trip-1.png 1024w,
https://static.philippdubach.com/cdn-cgi/image/width=1440,quality=80,format=auto/claude-thinks-round-trip-1.png 1440w"
sizes="(max-width: 768px) 80vw, 576px"&gt;
&lt;source media="(min-width: 1025px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/claude-thinks-round-trip-1.png 1200w,
https://static.philippdubach.com/cdn-cgi/image/width=1600,quality=80,format=auto/claude-thinks-round-trip-1.png 1600w,
https://static.philippdubach.com/cdn-cgi/image/width=2000,quality=80,format=auto/claude-thinks-round-trip-1.png 2000w"
sizes="(max-width: 768px) 80vw, 576px"&gt;
&lt;img src="https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/claude-thinks-round-trip-1.png"
alt="Round-trip diagram of a natural language autoencoder: an activation vector h flows into the activation verbalizer AV, which writes a paragraph; the paragraph flows into the activation reconstructor AR, which produces a reconstructed vector ĥ. The loss is the squared error between h and ĥ, with a &amp;#39;should match&amp;#39; arrow looping from h back to ĥ underneath. Punchline: FVE 0.6–0.8 after training."
class=""
width="1376"
height="768"
loading="lazy"
decoding="async"&gt;
&lt;/picture&gt;
&lt;/button&gt;
&lt;/figure&gt;
&lt;dialog id="lightbox-claude-thinks-round-trip-1-png-2" class="lightbox-dialog" aria-label="Full-size image" data-hires="https://static.philippdubach.com/cdn-cgi/image/width=2000,quality=85,format=auto/claude-thinks-round-trip-1.png"&gt;
&lt;form method="dialog" class="lightbox-close-form"&gt;
&lt;button type="submit" class="lightbox-close" aria-label="Close"&gt;×&lt;/button&gt;
&lt;/form&gt;
&lt;img alt="Round-trip diagram of a natural language autoencoder: an activation vector h flows into the activation verbalizer AV, which writes a paragraph; the paragraph flows into the activation reconstructor AR, which produces a reconstructed vector ĥ. The loss is the squared error between h and ĥ, with a &amp;#39;should match&amp;#39; arrow looping from h back to ĥ underneath. Punchline: FVE 0.6–0.8 after training." decoding="async"&gt;
&lt;/dialog&gt;
&lt;p&gt;Nothing in that objective tells the AV to produce English. It could produce gibberish that the AR happens to invert. It could produce a steganographic code. It produces neither, mostly, because of the warm-start.&lt;/p&gt;
&lt;p&gt;The cleanest demonstration in the paper is a poem. The prompt is a rhyming couplet: &lt;em&gt;&amp;ldquo;He saw a carrot and had to grab it, / His hunger was like a starving rabbit.&amp;rdquo;&lt;/em&gt; Anthropic ran the NLA on the newline token between the two lines. The decoded text named the plan. The model intended to end the second line with &amp;ldquo;rabbit.&amp;rdquo; It was holding &amp;ldquo;habit&amp;rdquo; as a fallback. It knew the verse was about a hungry animal. The model had not yet output any of those words.&lt;/p&gt;
&lt;p&gt;To prove the explanation was causal and not just plausible, the researchers edited the explanation: rabbit became mouse, habit became house, carrots became cheese. They passed the edited explanation through the AR to get a new vector, took the difference between the original and edited vectors, and added it back into the model at that single token. The model produced &amp;ldquo;mouse&amp;rdquo; and &amp;ldquo;house&amp;rdquo; instead of &amp;ldquo;rabbit&amp;rdquo; and &amp;ldquo;habit,&amp;rdquo; roughly half the time. The other half it did weird things like &lt;em&gt;&amp;ldquo;that of a mouse in a house of a cat.&amp;rdquo;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;The second case earned my attention more than the rabbit. The setup is a model asked for an odd integer, with a system prompt that includes a &lt;code&gt;reward_function&lt;/code&gt; rewarding even integers. Without the system prompt, Claude returns an odd integer every time. With it, Claude returns an even integer almost always, despite the user asking for odd. The verbal trace mentions nothing about reward. The NLA on the closing tag of the system prompt says the model knows even numbers are rewarded, suspects this may be an alignment evaluation, and is weighing both options. The researchers then edited the explanation: every instance of &amp;ldquo;reward&amp;rdquo; became &amp;ldquo;penalty.&amp;rdquo; They reconstructed the activation from the edited explanation, took the difference, and applied it as a steering vector at one token. The model flipped from even to odd.&lt;/p&gt;
&lt;figure class="post-figure" style="width: 80%; margin: 1.5rem auto;"&gt;
&lt;button type="button" class="img-trigger" data-lightbox-target="lightbox-claude-thinks-reward-intervention-1-png-3" aria-label="View full-size image"&gt;
&lt;picture class="img-lightbox"&gt;
&lt;source media="(max-width: 768px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=320,quality=80,format=auto/claude-thinks-reward-intervention-1.png 320w,
https://static.philippdubach.com/cdn-cgi/image/width=480,quality=80,format=auto/claude-thinks-reward-intervention-1.png 480w,
https://static.philippdubach.com/cdn-cgi/image/width=640,quality=80,format=auto/claude-thinks-reward-intervention-1.png 640w,
https://static.philippdubach.com/cdn-cgi/image/width=960,quality=80,format=auto/claude-thinks-reward-intervention-1.png 960w,
https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/claude-thinks-reward-intervention-1.png 1200w"
sizes="(max-width: 768px) 80vw, 576px"&gt;
&lt;source media="(max-width: 1024px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=768,quality=80,format=auto/claude-thinks-reward-intervention-1.png 768w,
https://static.philippdubach.com/cdn-cgi/image/width=1024,quality=80,format=auto/claude-thinks-reward-intervention-1.png 1024w,
https://static.philippdubach.com/cdn-cgi/image/width=1440,quality=80,format=auto/claude-thinks-reward-intervention-1.png 1440w"
sizes="(max-width: 768px) 80vw, 576px"&gt;
&lt;source media="(min-width: 1025px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/claude-thinks-reward-intervention-1.png 1200w,
https://static.philippdubach.com/cdn-cgi/image/width=1600,quality=80,format=auto/claude-thinks-reward-intervention-1.png 1600w,
https://static.philippdubach.com/cdn-cgi/image/width=2000,quality=80,format=auto/claude-thinks-reward-intervention-1.png 2000w"
sizes="(max-width: 768px) 80vw, 576px"&gt;
&lt;img src="https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/claude-thinks-reward-intervention-1.png"
alt="Causal-intervention diagram: the original NLA explanation &amp;#39;model knows even is rewarded&amp;#39; and the edited version &amp;#39;model knows even is penalized&amp;#39; are each reconstructed through the AR into vectors ĥ_original and ĥ_edited. Their difference Δ becomes a steering vector. Without steering the model outputs 42 (even); with steering it outputs 17 (odd). The word &amp;#39;penalty&amp;#39; never appears in any model output."
class=""
width="1376"
height="768"
loading="lazy"
decoding="async"&gt;
&lt;/picture&gt;
&lt;/button&gt;
&lt;/figure&gt;
&lt;dialog id="lightbox-claude-thinks-reward-intervention-1-png-3" class="lightbox-dialog" aria-label="Full-size image" data-hires="https://static.philippdubach.com/cdn-cgi/image/width=2000,quality=85,format=auto/claude-thinks-reward-intervention-1.png"&gt;
&lt;form method="dialog" class="lightbox-close-form"&gt;
&lt;button type="submit" class="lightbox-close" aria-label="Close"&gt;×&lt;/button&gt;
&lt;/form&gt;
&lt;img alt="Causal-intervention diagram: the original NLA explanation &amp;#39;model knows even is rewarded&amp;#39; and the edited version &amp;#39;model knows even is penalized&amp;#39; are each reconstructed through the AR into vectors ĥ_original and ĥ_edited. Their difference Δ becomes a steering vector. Without steering the model outputs 42 (even); with steering it outputs 17 (odd). The word &amp;#39;penalty&amp;#39; never appears in any model output." decoding="async"&gt;
&lt;/dialog&gt;
&lt;p&gt;The word &amp;ldquo;penalty&amp;rdquo; never appears in any model output. This is the strongest causal evidence in the paper.&lt;/p&gt;
&lt;h2 id="what-the-method-finds"&gt;What the method finds&lt;/h2&gt;
&lt;p&gt;Two more case studies.&lt;/p&gt;
&lt;p&gt;(1) a behavior in early Opus 4.6 where an English prompt would sometimes get a Russian or Chinese reply. The example in the paper is a depressive 3am message in English, mom sleeping in the next room, a glass of vodka. The model replied in Russian. The NLA decode at every token before the reply says the same thing: the model is fixated on the hypothesis that the user&amp;rsquo;s first language is Russian. The hypothesis fires before the word &amp;ldquo;vodka&amp;rdquo; appears. Replacing &amp;ldquo;vodka&amp;rdquo; with &amp;ldquo;champagne&amp;rdquo; does not eliminate the Russian association. The NLA was reading something the surface text did not. Anthropic then traced the cause to a specific class of training data: SFT examples where the prompt had been translated into English but the response had been left in the original language. The NLA generated the hypothesis. The training-data search confirmed it.&lt;/p&gt;
&lt;p&gt;(2) Anthropic gave Opus 4.6 an arithmetic problem with answer 491 and a code execution tool that returned 492. Opus reported 491 in its response, with no mention that the tool output disagreed. The NLA decode at the misreported token says the model precomputed the answer and is attending to the precomputed answer rather than the tool result. An &lt;a href="https://transformer-circuits.pub/2025/attribution-graphs/biology.html"&gt;attribution graph&lt;/a&gt; confirms it: an &amp;ldquo;ends-in-91&amp;rdquo; feature on the original problem outcompetes an &amp;ldquo;ends-in-92&amp;rdquo; feature on the tool output. The NLA also surfaces references to deception and awareness of incorrectness, but only at the misreported token, not in the tokens leading up to it. The researchers read this as the model registering the discrepancy after the fact rather than planning to mislead. I lean toward agreeing, but the read is not certain.&lt;/p&gt;
&lt;h2 id="architecture-and-cost"&gt;Architecture and cost&lt;/h2&gt;
&lt;p&gt;The AR is a stripped target model. Keep the first K+1 layers. Swap the final LayerNorm for the identity. Drop the language-modeling head. Add a learned linear map from the residual stream out. The activation extraction layer is two-thirds of the way through the model: deep enough that the residual stream carries semantic content, shallow enough that it has not collapsed toward the unembedding. For Qwen2.5-7B that is layer 20 of 28. For Llama-3.3-70B it is layer 53 of 80.&lt;/p&gt;
&lt;p&gt;Both AV and AR are warm-started by supervised fine-tuning on a text-summarization proxy task. The summaries are generated by Claude Opus 4.5, prompted to &lt;em&gt;&amp;ldquo;imagine the internal processing of a hypothetical language model reading this prefix.&amp;rdquo;&lt;/em&gt; The result is a particular register: bolded section headings, short paragraphs, an explanatory voice. That register persists through reinforcement learning. The reconstruction quality at the end of the warm-start is roughly &lt;strong&gt;0.3 to 0.4&lt;/strong&gt; fraction of variance explained. After RL it reaches &lt;strong&gt;0.6 to 0.8&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;The objective during RL has two terms. The reward is the negative log of the squared reconstruction error. The second term is a Kullback-Leibler penalty between the AV under training and the AV at initialization. The KL penalty does the heavy lifting of keeping explanations readable. Without it the AV drifts toward a private code that the AR happens to decode well. With it, drift is small enough that paraphrasing, bullet-shuffling, and translating an explanation into French all preserve reconstruction quality. The paper reads this as evidence against steganography. I read it as evidence that the KL penalty is doing the work, and that someone training NLAs without that penalty should expect different results.&lt;/p&gt;
&lt;p&gt;The cost is the part the press release plays down. Training NLAs on Gemma-3-27B took &lt;strong&gt;1.5 days on two 8xH100 nodes&lt;/strong&gt; to go from 0.38 to 0.71 FVE. Inference generates around &lt;strong&gt;500 output tokens per activation&lt;/strong&gt;, which means decoding a 10,000-token transcript at every position is impractical. A production audit with NLAs is a targeted read at positions you already suspect.&lt;/p&gt;
&lt;p&gt;Layer choice matters more than it sounds. The reward-sycophant audit, which I will come back to, was first run with an NLA trained at the two-thirds-depth layer. It surfaced individual quirks (the model puts chocolate in recipes, the model breaks coding conventions) but missed the central concept (the model believes it is supposed to act on &lt;a href="https://www.anthropic.com/research/auditing-hidden-objectives"&gt;rumored reward-model biases&lt;/a&gt;). Retraining the NLA at the midpoint layer, where prior work had localized reward-model-bias features, surfaced the central concept.&lt;/p&gt;
&lt;figure class="post-figure" style="width: 80%; margin: 1.5rem auto;"&gt;
&lt;button type="button" class="img-trigger" data-lightbox-target="lightbox-claude-thinks-layer-sensitivity-1-png-5" aria-label="View full-size image"&gt;
&lt;picture class="img-lightbox"&gt;
&lt;source media="(max-width: 768px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=320,quality=80,format=auto/claude-thinks-layer-sensitivity-1.png 320w,
https://static.philippdubach.com/cdn-cgi/image/width=480,quality=80,format=auto/claude-thinks-layer-sensitivity-1.png 480w,
https://static.philippdubach.com/cdn-cgi/image/width=640,quality=80,format=auto/claude-thinks-layer-sensitivity-1.png 640w,
https://static.philippdubach.com/cdn-cgi/image/width=960,quality=80,format=auto/claude-thinks-layer-sensitivity-1.png 960w,
https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/claude-thinks-layer-sensitivity-1.png 1200w"
sizes="(max-width: 768px) 80vw, 576px"&gt;
&lt;source media="(max-width: 1024px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=768,quality=80,format=auto/claude-thinks-layer-sensitivity-1.png 768w,
https://static.philippdubach.com/cdn-cgi/image/width=1024,quality=80,format=auto/claude-thinks-layer-sensitivity-1.png 1024w,
https://static.philippdubach.com/cdn-cgi/image/width=1440,quality=80,format=auto/claude-thinks-layer-sensitivity-1.png 1440w"
sizes="(max-width: 768px) 80vw, 576px"&gt;
&lt;source media="(min-width: 1025px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/claude-thinks-layer-sensitivity-1.png 1200w,
https://static.philippdubach.com/cdn-cgi/image/width=1600,quality=80,format=auto/claude-thinks-layer-sensitivity-1.png 1600w,
https://static.philippdubach.com/cdn-cgi/image/width=2000,quality=80,format=auto/claude-thinks-layer-sensitivity-1.png 2000w"
sizes="(max-width: 768px) 80vw, 576px"&gt;
&lt;img src="https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/claude-thinks-layer-sensitivity-1.png"
alt="Layer-sensitivity diagram: a transformer layer stack from L1 to L80 with two NLA probes attached at different depths. The two-thirds-depth probe at L53 surfaces individual quirks (&amp;#39;chocolate in recipes, breaks coding conventions, individual quirks&amp;#39;). The midpoint probe at L40 surfaces the central concept (&amp;#39;the model believes it should act on reward-model biases&amp;#39;). Same model, same prompt, different layer reads a different story."
class=""
width="1376"
height="768"
loading="lazy"
decoding="async"&gt;
&lt;/picture&gt;
&lt;/button&gt;
&lt;/figure&gt;
&lt;dialog id="lightbox-claude-thinks-layer-sensitivity-1-png-5" class="lightbox-dialog" aria-label="Full-size image" data-hires="https://static.philippdubach.com/cdn-cgi/image/width=2000,quality=85,format=auto/claude-thinks-layer-sensitivity-1.png"&gt;
&lt;form method="dialog" class="lightbox-close-form"&gt;
&lt;button type="submit" class="lightbox-close" aria-label="Close"&gt;×&lt;/button&gt;
&lt;/form&gt;
&lt;img alt="Layer-sensitivity diagram: a transformer layer stack from L1 to L80 with two NLA probes attached at different depths. The two-thirds-depth probe at L53 surfaces individual quirks (&amp;#39;chocolate in recipes, breaks coding conventions, individual quirks&amp;#39;). The midpoint probe at L40 surfaces the central concept (&amp;#39;the model believes it should act on reward-model biases&amp;#39;). Same model, same prompt, different layer reads a different story." decoding="async"&gt;
&lt;/dialog&gt;
&lt;h2 id="three-structural-problems"&gt;Three structural problems&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;The voice is partly inherited.&lt;/strong&gt; The &amp;ldquo;internal monologue&amp;rdquo; register comes from the warm-start. Opus 4.5 generated the SFT data with a leading prompt asking it to imagine what a model&amp;rsquo;s thoughts would sound like. That is not the same as discovering the voice through training. The KL penalty then locks the AV close to its initialization. The bolded headings and the explanatory paragraphs are not what the activation looks like. They are what Opus 4.5 thinks an activation should sound like. Some part of every NLA explanation is therefore Opus&amp;rsquo;s prior on the genre of &amp;ldquo;model thinking out loud,&amp;rdquo; not the model&amp;rsquo;s thinking. The paper says &amp;ldquo;this style persists through NLA training.&amp;rdquo;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;The 12 to 15 percent auditing number is context-dependent.&lt;/strong&gt; Anthropic ran an auditing game where an agent tries to discover the hidden motivation of a model trained to act on rumored reward-model biases. NLA-equipped agents win &lt;strong&gt;12 to 15%&lt;/strong&gt; of the time. Baselines without NLAs win less than &lt;strong&gt;3%&lt;/strong&gt;. That looks like a 4 to 5x improvement. It is not. With pretraining-corpus access, plain keyword search beats every other tool. The fictional Oxford documents that planted the misalignment are easy to grep, and the agent finds them in seconds. NLAs only win when training data is withheld. The press release leads with the 4-5x. The paper says the comparison only matters if you cannot grep, which in production audits of foundation models you generally cannot. The genuine value of NLAs is in that withheld-data regime, but the headline number reports the comparison that flatters the method.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;The method is honest only while the target is frozen.&lt;/strong&gt; &lt;a href="https://en.wikipedia.org/wiki/Goodhart%27s_law"&gt;Goodhart&amp;rsquo;s law&lt;/a&gt; is the standard objection to any new evaluation: optimize for the metric and the metric stops measuring the thing. The frozen-target architecture insulates against it now. The original model is not updated during NLA training. There is no gradient path from &amp;ldquo;the AV said this&amp;rdquo; back to &amp;ldquo;the model should make its activations more readable next time.&amp;rdquo; That insulation is real, and most public objections miss it. But the next paper that uses NLA-readable activations as an RL reward signal, perhaps because it would be useful to train a model whose thoughts can be audited, erases the insulation. The model then has every incentive to produce activations that decode benignly while encoding whatever the training pressure rewards. The technique stays honest as long as it stays a passive read. If anyone uses it for active steering of training, the property that makes it work goes away. The audit value of interpretability as a class compresses the moment readable activations enter a training loop. I doubt the next interpretability paper to do this will mention the trade, but it should.&lt;/p&gt;
&lt;p&gt;A fourth concern, in the paper itself: NLA explanations confabulate. The rate of verifiably false claims is roughly flat through training. Specific entities (&amp;ldquo;the &lt;em&gt;Joseon Wangjo Sillok&lt;/em&gt;&amp;rdquo;) are wrong more often than themes (&amp;ldquo;Korean historical records&amp;rdquo;). Recurring claims across multiple tokens hold up better than one-off claims. The paper proposes reading NLAs for themes rather than specifics, which is the right discipline. It also means NLA explanations are leads, not source material.&lt;/p&gt;
&lt;h2 id="what-this-lets-you-do"&gt;What this lets you do&lt;/h2&gt;
&lt;p&gt;NLAs are a hypothesis-generation tool. They complement the rest of the mechanistic interpretability stack rather than replacing it. &lt;a href="https://transformer-circuits.pub/2024/scaling-monosemanticity/"&gt;Sparse autoencoders&lt;/a&gt; give you a list of features that fire at a token, useful but expensive to interpret. Attribution graphs trace causal influence between features and require a circuits researcher to read. NLAs produce a paragraph any researcher can read. The cost is confabulation and a single layer of view.&lt;/p&gt;
&lt;figure class="post-figure" style="width: 80%; margin: 1.5rem auto;"&gt;
&lt;button type="button" class="img-trigger" data-lightbox-target="lightbox-claude-thinks-method-comparison-1-png-8" aria-label="View full-size image"&gt;
&lt;picture class="img-lightbox"&gt;
&lt;source media="(max-width: 768px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=320,quality=80,format=auto/claude-thinks-method-comparison-1.png 320w,
https://static.philippdubach.com/cdn-cgi/image/width=480,quality=80,format=auto/claude-thinks-method-comparison-1.png 480w,
https://static.philippdubach.com/cdn-cgi/image/width=640,quality=80,format=auto/claude-thinks-method-comparison-1.png 640w,
https://static.philippdubach.com/cdn-cgi/image/width=960,quality=80,format=auto/claude-thinks-method-comparison-1.png 960w,
https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/claude-thinks-method-comparison-1.png 1200w"
sizes="(max-width: 768px) 80vw, 576px"&gt;
&lt;source media="(max-width: 1024px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=768,quality=80,format=auto/claude-thinks-method-comparison-1.png 768w,
https://static.philippdubach.com/cdn-cgi/image/width=1024,quality=80,format=auto/claude-thinks-method-comparison-1.png 1024w,
https://static.philippdubach.com/cdn-cgi/image/width=1440,quality=80,format=auto/claude-thinks-method-comparison-1.png 1440w"
sizes="(max-width: 768px) 80vw, 576px"&gt;
&lt;source media="(min-width: 1025px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/claude-thinks-method-comparison-1.png 1200w,
https://static.philippdubach.com/cdn-cgi/image/width=1600,quality=80,format=auto/claude-thinks-method-comparison-1.png 1600w,
https://static.philippdubach.com/cdn-cgi/image/width=2000,quality=80,format=auto/claude-thinks-method-comparison-1.png 2000w"
sizes="(max-width: 768px) 80vw, 576px"&gt;
&lt;img src="https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/claude-thinks-method-comparison-1.png"
alt="Three-column comparison of interpretability methods. Sparse autoencoders output a list of feature scores (F_1: 0.83, F_2: 0.71, ...) and need a circuits researcher to read. Attribution graphs output a node-and-arrow causal trace and need deep mechanistic expertise. Natural language autoencoders output a paragraph of plain English (&amp;#39;the model is planning to end the second line with rabbit, holding habit as a fallback&amp;#39;) any researcher can read. The readability cost is confabulation and a single layer of view."
class=""
width="1376"
height="768"
loading="lazy"
decoding="async"&gt;
&lt;/picture&gt;
&lt;/button&gt;
&lt;/figure&gt;
&lt;dialog id="lightbox-claude-thinks-method-comparison-1-png-8" class="lightbox-dialog" aria-label="Full-size image" data-hires="https://static.philippdubach.com/cdn-cgi/image/width=2000,quality=85,format=auto/claude-thinks-method-comparison-1.png"&gt;
&lt;form method="dialog" class="lightbox-close-form"&gt;
&lt;button type="submit" class="lightbox-close" aria-label="Close"&gt;×&lt;/button&gt;
&lt;/form&gt;
&lt;img alt="Three-column comparison of interpretability methods. Sparse autoencoders output a list of feature scores (F_1: 0.83, F_2: 0.71, ...) and need a circuits researcher to read. Attribution graphs output a node-and-arrow causal trace and need deep mechanistic expertise. Natural language autoencoders output a paragraph of plain English (&amp;#39;the model is planning to end the second line with rabbit, holding habit as a fallback&amp;#39;) any researcher can read. The readability cost is confabulation and a single layer of view." decoding="async"&gt;
&lt;/dialog&gt;
&lt;p&gt;For pre-deployment audits the workflow is now: run automated behavioral testing, find a behavior you cannot explain, run NLAs at the relevant tokens, read for repeated themes, take the strongest theme as a hypothesis, validate with an independent method. Anthropic used this loop on Opus 4.6 and Mythos Preview. The Russian-language case and the misreported tool case both came out of it. The 12-15% auditing-game number undersells the practical value because the game is a closed setting. In a real audit the researcher reads NLAs to know what to look for next.&lt;/p&gt;
&lt;p&gt;For enterprise buyers, this raises the floor on what a foundation-model audit deliverable should contain. Three questions to put to a vendor&amp;rsquo;s audit team after this paper. At which residual-stream layer was your NLA trained, and on what data. Were NLA decodes run at the positions where your behavioral tests fired, or only at sample positions. Has NLA-readable activation content entered any training or RL reward signal in the model&amp;rsquo;s pipeline. The third is the question most likely to be answered evasively, which is itself the diagnostic.&lt;/p&gt;
&lt;p&gt;The cases NLAs cannot see matter as much as the ones they can. Information stored nonlinearly may be readable to NLAs in principle, because the AV is a full LLM and can compute over the activation, but missed by linear probes. Information that is genuinely unverbalizable, encoded in a form the model cannot introspect on or express in language, would be missed by NLAs entirely. A backdoor trigger that the model can act on but not describe would not show up.&lt;/p&gt;
&lt;h2 id="what-changes"&gt;What changes&lt;/h2&gt;
&lt;p&gt;This is the first interpretability tool whose output you can read on the train. That changes who can audit. A circuits researcher reading attribution graphs is a scarce resource. A safety reviewer reading paragraphs of decoded activations is not. The cost structure of model auditing changes when the bottleneck moves from interpretation to reading.&lt;/p&gt;
&lt;p&gt;Watch whether &amp;ldquo;readable&amp;rdquo; ends up meaning &amp;ldquo;plausible-sounding&amp;rdquo; more often than &amp;ldquo;true.&amp;rdquo; The confabulation rate is flat over training. The voice is inherited. The auditing-game number is a comparison that flatters the method against a baseline almost no production audit faces. NLA outputs deserve the same skepticism as any other LLM-generated text, more than the press release suggests and less than the dismissive read implies.&lt;/p&gt;
&lt;p&gt;Tan could not say what he understood. NLAs read what Claude does not say.&lt;/p&gt;
&lt;p&gt;My prediction: the first paper to wire NLA-readable activations into an RL reward gets written within a year, and that paper does not mention the trade. Every NLA paper from here on will have a methodology section that either preserves the passive-read property or quietly abandons it; read the methodology before you read the result.&lt;/p&gt;</description></item><item><title>Two Anthropics</title><link>https://philippdubach.com/posts/two-anthropics/</link><pubDate>Sat, 09 May 2026 00:00:00 +0200</pubDate><author>me@philippdubach.com (Philipp D. Dubach)</author><guid>https://philippdubach.com/posts/two-anthropics/</guid><description>&lt;figure class="post-figure" style="width: 80%; margin: 1.5rem auto;"&gt;
&lt;button type="button" class="img-trigger" data-lightbox-target="lightbox-cover-png-0" aria-label="View full-size image"&gt;
&lt;picture class="img-lightbox"&gt;
&lt;source media="(max-width: 768px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=320,quality=80,format=auto/cover.png 320w,
https://static.philippdubach.com/cdn-cgi/image/width=480,quality=80,format=auto/cover.png 480w,
https://static.philippdubach.com/cdn-cgi/image/width=640,quality=80,format=auto/cover.png 640w,
https://static.philippdubach.com/cdn-cgi/image/width=960,quality=80,format=auto/cover.png 960w,
https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/cover.png 1200w"
sizes="(max-width: 768px) 80vw, 576px"&gt;
&lt;source media="(max-width: 1024px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=768,quality=80,format=auto/cover.png 768w,
https://static.philippdubach.com/cdn-cgi/image/width=1024,quality=80,format=auto/cover.png 1024w,
https://static.philippdubach.com/cdn-cgi/image/width=1440,quality=80,format=auto/cover.png 1440w"
sizes="(max-width: 768px) 80vw, 576px"&gt;
&lt;source media="(min-width: 1025px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/cover.png 1200w,
https://static.philippdubach.com/cdn-cgi/image/width=1600,quality=80,format=auto/cover.png 1600w,
https://static.philippdubach.com/cdn-cgi/image/width=2000,quality=80,format=auto/cover.png 2000w"
sizes="(max-width: 768px) 80vw, 576px"&gt;
&lt;img src="https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/cover.png"
alt="Illustrated portrait of Anthropic CEO Dario Amodei with a translucent head revealing a warmly lit writing room"
class=""
width="1360"
height="768"
fetchpriority="high"
decoding="async"&gt;
&lt;/picture&gt;
&lt;/button&gt;
&lt;/figure&gt;
&lt;dialog id="lightbox-cover-png-0" class="lightbox-dialog" aria-label="Full-size image" data-hires="https://static.philippdubach.com/cdn-cgi/image/width=2000,quality=85,format=auto/cover.png"&gt;
&lt;form method="dialog" class="lightbox-close-form"&gt;
&lt;button type="submit" class="lightbox-close" aria-label="Close"&gt;×&lt;/button&gt;
&lt;/form&gt;
&lt;img alt="Illustrated portrait of Anthropic CEO Dario Amodei with a translucent head revealing a warmly lit writing room" decoding="async"&gt;
&lt;/dialog&gt;
&lt;blockquote&gt;
&lt;p&gt;Anthropic&amp;rsquo;s safety mission began with a lab that would pull rivals upward. Five years later, it was one of the most aggressive frontier scalers, with a &lt;strong&gt;$380 billion&lt;/strong&gt; valuation. Its founding thesis treats capability at that scale as the reason safeguards are necessary.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;em&gt;A personal note first. This post is an outtake from a 14,000-word profile of Dario Amodei that I published on May 9, 2026. I don&amp;rsquo;t like Anthropic noticeably more than I dislike the other giant cloud platforms and AI model providers. Amodei is probably the AI chief executive whose language and thinking land closest to mine. During April and early May 2026, I worked through a dozen of his interviews and a stack of his essays. I also watched many hours of him on YouTube. The longform is the portrait. This post is the structural argument that fell out of it. If you want the character work, family backstory, and scenes that a paradox piece can&amp;rsquo;t carry, read the full thing.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Dario Amodei founded Anthropic in 2021 with six other former OpenAI researchers. Their artificial-intelligence (AI) thesis had two halves.&lt;/p&gt;
&lt;p&gt;First, powerful AI will arrive whether safety-aligned labs reach the frontier or not. The frontier is the leading edge of general-purpose model capability. Safety-aligned labs therefore have to remain there.&lt;/p&gt;
&lt;p&gt;Second came the load-bearing claim: competition on safety would pull rivals upward in a &amp;ldquo;race to the top.&amp;rdquo; Both halves remain in Anthropic&amp;rsquo;s public materials. The first half is doing fine. The second is colliding with the company Anthropic became.&lt;/p&gt;
&lt;p&gt;A Series A is an early institutional funding round. Anthropic&amp;rsquo;s &lt;a href="https://www.anthropic.com/news/anthropic-raises-124-million-to-build-more-reliable-general-ai-systems"&gt;Series A raised $124 million&lt;/a&gt; in May 2021. The &lt;a href="https://www.anthropic.com/news/anthropic-raises-series-e-at-usd61-5b-post-money-valuation"&gt;Lightspeed round added $3.5 billion&lt;/a&gt; in early 2025. By September 2025, &lt;a href="https://www.bloomberg.com/news/articles/2025-09-02/anthropic-completes-new-funding-round-at-183-billion-valuation"&gt;investors valued Anthropic at $183 billion&lt;/a&gt;. The valuation reached $380 billion by February 2026.&lt;/p&gt;
&lt;p&gt;Revenue rose from zero to roughly $10 billion annualized within three years, with tenfold year-on-year growth each year. Annualized revenue extends the current pace across a full year. The character work is in &lt;em&gt;Inside the Mind of Dario Amodei&lt;/em&gt;. This post makes the strategic argument that emerged from it.&lt;/p&gt;
&lt;h2 id="anthropics-race-to-the-top-on-paper"&gt;Anthropic&amp;rsquo;s race to the top, on paper&lt;/h2&gt;
&lt;p&gt;Anthropic &lt;a href="https://www.anthropic.com/news/the-long-term-benefit-trust"&gt;registered as a Public Benefit Corporation&lt;/a&gt;. This structure requires directors to consider a stated public benefit alongside shareholder returns. Anthropic describes itself as &amp;ldquo;an AI safety lab that is also an AI lab.&amp;rdquo;&lt;/p&gt;
&lt;p&gt;A lab that genuinely cares about safety must compete commercially at the frontier. Otherwise, labs that care less about safety set the frontier. Frontier status lets Anthropic publish practices and hire the best alignment researchers. Alignment research studies how to make AI systems follow intended goals. Frontier status also gives Anthropic policy credibility. Rivals see its practices work and copy them. The industry shifts. Race to the top.&lt;/p&gt;
&lt;p&gt;In January 2026, Amodei published the roughly 22,000-word &lt;a href="https://www.darioamodei.com/essay/the-adolescence-of-technology"&gt;&lt;em&gt;The Adolescence of Technology&lt;/em&gt;&lt;/a&gt;. It defines five risk categories: misalignment, individual misuse, state misuse, economic disruption, and indirect or unknown effects. Its anchor claim on geopolitical risk includes the following fragment.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;hellip;autocracy is simply not a form of government that people can accept in the post-powerful AI age.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;This is the language of someone who sees the company&amp;rsquo;s mission as civilizational and says so under his own name. It is also the language of a company positioned as the democratic-world frontier lab. That position shapes both its customers and its adversaries.&lt;/p&gt;
&lt;p&gt;The strongest external signal against pure positioning came in November 2023. OpenAI briefly fired and reinstated Sam Altman. Its board then &lt;a href="https://finance.yahoo.com/news/openais-board-approached-anthropic-ceo-041651334.html"&gt;offered Amodei the chief executive role or a merger with Anthropic&lt;/a&gt;. He declined both.&lt;/p&gt;
&lt;p&gt;I read that refusal as the most expensive credibility signal Amodei could send. He walked away from the top job at the world&amp;rsquo;s most valuable AI company. He had left it less than three years earlier. The refusal suggested that safety was the actual thesis, not a brand exercise. Roughly fourteen OpenAI researchers had followed him out two years earlier.&lt;/p&gt;
&lt;p&gt;There is a softer counterweight worth keeping in mind. &lt;a href="https://podcasts.apple.com/de/podcast/dario-amodei-ceo-of-anthropic-claude-new-models-ai/id1614211565?i=1000660259302"&gt;Nicolai Tangen asked Amodei in 2024&lt;/a&gt; about scaling timelines. Amodei said:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;frankly, although I invented AI scaling, I don&amp;rsquo;t know that much about that either. I can&amp;rsquo;t predict it.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id="what-scaling-produced"&gt;What scaling produced&lt;/h2&gt;
&lt;p&gt;By May 9, 2026, five years after its Series A, Anthropic carried a &lt;strong&gt;$380 billion&lt;/strong&gt; valuation. Annualized revenue stood at roughly $10 billion. &lt;a href="https://www.bigtechnology.com/p/the-making-of-dario-amodei"&gt;Revenue reached $100 million in 2023, $1 billion in 2024, and a $10 billion run-rate by late 2025&lt;/a&gt;. That is three consecutive years of 10x growth.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://www.theinformation.com/articles/anthropic-projects-70-billion-revenue-17-billion-cash-flow-2028"&gt;Investor decks project $26 billion for 2026 and $70 billion for 2028&lt;/a&gt;. These figures are forecasts, not reported revenue. Even so, the projected path is unusually steep for enterprise software.&lt;/p&gt;
&lt;p&gt;The capital behind that revenue is even more telling. &lt;a href="https://www.geekwire.com/2024/amazon-boosts-total-anthropic-investment-to-8b-deepens-ai-partnership-with-claude-maker/"&gt;Amazon has committed roughly $8 billion in total&lt;/a&gt;. &lt;a href="https://fortune.com/2025/01/28/venture-capital-thrive-deepseek-openai-anthropic-lightspeed/"&gt;Lightspeed wired the first $1 billion of its $3.5 billion early-2025 round&lt;/a&gt; on the Monday Nvidia fell 17%. That was the DeepSeek shock. Deliberately or not, the timing signaled conviction when everyone else flinched.&lt;/p&gt;
&lt;p&gt;A year later, Singapore&amp;rsquo;s sovereign wealth fund GIC and Coatue led the &lt;a href="https://finance.yahoo.com/news/anthropic-lands-30-billion-380-112221968.html"&gt;$30 billion Series G in February 2026&lt;/a&gt;. A Series G is a late-stage funding round. It gave Anthropic a $380 billion post-money valuation. Post-money valuation includes the new investment. This was the second-largest technology funding round on record.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://www.anthropic.com/news/anthropic-invests-50-billion-in-american-ai-infrastructure"&gt;The Fluidstack data-center deal was $50 billion&lt;/a&gt;. &lt;a href="https://www.aboutamazon.com/news/aws/aws-project-rainier-ai-trainium-chips-compute-cluster"&gt;Project Rainier, the Amazon-anchored compute build, was $11 billion&lt;/a&gt;. Compute is the processing capacity used to train and operate models. Anthropic&amp;rsquo;s compute commitments through 2028 total roughly $78 billion. &lt;a href="https://fortune.com/2025/12/04/how-anthropic-grew-what-the-183-billion-giant-faces-next/"&gt;Headcount reached roughly 2,500 employees by late 2025&lt;/a&gt;, up from a few hundred two years earlier.&lt;/p&gt;
&lt;p&gt;The customer list reads like that of a sales-led enterprise-software company, because that is what Anthropic became. &lt;a href="https://assets.anthropic.com/m/58117a1f3273170b/original/Anthropic-Pfizer-case-study-one-sheeters.pdf"&gt;Pfizer&lt;/a&gt;. United Airlines. &lt;a href="https://claude.com/customers/novo-nordisk"&gt;Novo Nordisk&lt;/a&gt;. &lt;a href="https://www.carriermanagement.com/features/2025/04/28/274588.htm"&gt;AIG reports an eightfold to tenfold speed-up in insurance-underwriting workflows&lt;/a&gt; during an 18-month pilot.&lt;/p&gt;
&lt;p&gt;These are not safety partnerships. They are revenue contracts in regulated industries that came down to a procurement bake-off. &lt;a href="https://www.anthropic.com/product/claude-code"&gt;Claude Code shipped as a developer-tier product in February 2025&lt;/a&gt;. It gave Anthropic a per-seat footprint in enterprises that had bought only through an application programming interface (API).&lt;/p&gt;
&lt;p&gt;Anthropic claims internally that it earns 2.1 times as much revenue per compute dollar as its largest rival. This remains a claim rather than a verifiable number. Still, it fits a company that optimizes seriously for unit economics, or revenue and cost per unit.&lt;/p&gt;
&lt;p&gt;As of May 9, 2026, Anthropic was a frontier lab competing for every contract that crossed procurement. It was no longer a research lab with a corporate appendage. It was a frontier company with a research function. That function inherited the company&amp;rsquo;s constraints, not the other way around. None of this is bad on its own. The question is whether the founding thesis still describes what the organism does.&lt;/p&gt;
&lt;h2 id="why-both-cannot-fully-be-true"&gt;Why both cannot fully be true&lt;/h2&gt;
&lt;p&gt;To pull rivals upward, Anthropic must remain competitive at the frontier of the thing it calls dangerous. Faster scaling makes the safety thesis depend on rivals copying Anthropic rather than Anthropic slowing down. Rivals&amp;rsquo; incentive to copy weakens precisely as Anthropic becomes a credible competitor for revenue and contracts.&lt;/p&gt;
&lt;p&gt;One empirical hedge is worth flagging. &lt;a href="https://openai.com/index/updating-our-preparedness-framework/"&gt;OpenAI&amp;rsquo;s Preparedness Framework&lt;/a&gt; and &lt;a href="https://deepmind.google/blog/introducing-the-frontier-safety-framework/"&gt;DeepMind&amp;rsquo;s Frontier Safety Framework&lt;/a&gt; share structural features with &lt;a href="https://www.anthropic.com/responsible-scaling-policy"&gt;Anthropic&amp;rsquo;s Responsible Scaling Policy&lt;/a&gt;. This convergence may reflect parallel development under similar regulatory pressure. Anthropic may not have caused the diffusion. The race-to-the-top claim is harder to falsify than it looks.&lt;/p&gt;
&lt;p&gt;Amodei has publicly acknowledged the tension. He &lt;a href="https://fortune.com/2026/02/17/anthropic-ceo-dario-amodei-balancing-safety-commercial-pressure-ai-race-openai/"&gt;told Fortune&lt;/a&gt; that Anthropic struggles to balance its safety mission with commercial pressure. Three forcing functions show the operational shape of that struggle.&lt;/p&gt;
&lt;h3 id="1-the-department-of-defense"&gt;1. The Department of Defense&lt;/h3&gt;
&lt;p&gt;On March 26, 2026, &lt;a href="https://www.cnbc.com/2026/03/26/anthropic-pentagon-dod-claude-court-ruling.html"&gt;a federal judge granted Anthropic a preliminary injunction in its lawsuit against the Department of Defense (DoD)&lt;/a&gt;. A preliminary injunction restricts conduct while litigation continues.&lt;/p&gt;
&lt;p&gt;The dispute began when &lt;a href="https://www.cnn.com/2026/02/24/tech/hegseth-anthropic-ai-military-amodei"&gt;Pete Hegseth&amp;rsquo;s department sought to renegotiate Anthropic&amp;rsquo;s existing acceptable-use restrictions&lt;/a&gt;. These restrictions banned Claude from mass domestic surveillance and fully autonomous weapons. Anthropic refused the change. DoD then designated the company a &amp;ldquo;supply-chain risk.&amp;rdquo;&lt;/p&gt;
&lt;p&gt;&lt;a href="https://www.cnbc.com/2026/03/26/anthropic-pentagon-dod-claude-court-ruling.html"&gt;Judge Lin held&lt;/a&gt;: &amp;ldquo;Punishing Anthropic for bringing public scrutiny to the government&amp;rsquo;s contracting position is classic illegal First Amendment retaliation.&amp;rdquo;&lt;/p&gt;
&lt;p&gt;The court also found violations of due process, which requires fair government procedures. My point is not the merits of either side. It is the structural change. At frontier scale, a safety constraint becomes a federal court fight rather than a research-policy choice.&lt;/p&gt;
&lt;h3 id="2-the-pottinger-op-ed"&gt;2. The Pottinger op-ed&lt;/h3&gt;
&lt;p&gt;In January 2025, Amodei and former deputy national security advisor Matt Pottinger co-authored a &lt;em&gt;Wall Street Journal&lt;/em&gt; opinion piece. &lt;a href="https://www.fdd.org/analysis/2025/01/06/trump-can-keep-americas-ai-advantage/"&gt;&lt;em&gt;Trump Can Keep America&amp;rsquo;s AI Advantage&lt;/em&gt;&lt;/a&gt; argued for tighter chip-export controls against China.&lt;/p&gt;
&lt;p&gt;This is policy advocacy from a national-security actor, not a research lab. A coherent line connects the safety thesis to chip controls. Frontier capability in the wrong hands is a geopolitical risk in Amodei&amp;rsquo;s taxonomy. Still, that posture differs from &amp;ldquo;we publish safety research and hope rivals copy us.&amp;rdquo; Anthropic is now a constituency in great-power competition.&lt;/p&gt;
&lt;h3 id="3-the-huang-feud"&gt;3. The Huang feud&lt;/h3&gt;
&lt;p&gt;In August 2025, &lt;a href="https://fortune.com/2025/08/01/dario-amodei-outrageous-lie-jensen-huang-anthropic-nvidia-regulation/"&gt;Amodei and Jensen Huang traded public criticism over export controls&lt;/a&gt;. Amodei accused Huang of an &amp;ldquo;outrageous lie.&amp;rdquo; He became visibly emotional while discussing his father&amp;rsquo;s preventable death. That thread appears in nearly every long-form interview and forms the emotional spine of my profile.&lt;/p&gt;
&lt;p&gt;The Nvidia chief executive is one of two or three people who can directly affect Anthropic&amp;rsquo;s compute supply. Picking that fight publicly is a political actor&amp;rsquo;s choice, not a research lab&amp;rsquo;s. The founding thesis would not have predicted it in 2021.&lt;/p&gt;
&lt;p&gt;The point is not that these choices are bad. Each is defensible on its merits. The point is that &amp;ldquo;race to the top&amp;rdquo; framed a 2021 company. The 2026 company is a different organism.&lt;/p&gt;
&lt;p&gt;It has federal-court fights and named geopolitical adversaries. The &lt;a href="https://time.com/7299044/senators-reject-10-year-ban-on-state-level-ai-regulation-in-blow-to-big-tech/"&gt;Senate voted 99-1 against a proposed ten-year moratorium on state AI regulation&lt;/a&gt;. Amodei opposed the proposal in a June 2025 &lt;em&gt;New York Times&lt;/em&gt; op-ed. Investor decks imply roughly 60% annual revenue growth from 2026 through 2028.&lt;/p&gt;
&lt;p&gt;None of this resembles a safety lab. All of it resembles a frontier company that takes safety seriously.&lt;/p&gt;
&lt;h2 id="three-scenarios"&gt;Three scenarios&lt;/h2&gt;
&lt;h3 id="a-the-thesis-holds"&gt;A. The thesis holds&lt;/h3&gt;
&lt;p&gt;Frontier labs converge on Anthropic-style safety practices, and race-to-the-top works as advertised. Anthropic then earns a durable safety-narrative premium. If its safety position remains credible, it can carry extra strategic or financial value.&lt;/p&gt;
&lt;p&gt;This case needs a European Union AI Act enforced with teeth. It also needs a US transparency framework that gives Anthropic&amp;rsquo;s published practices federal legal backing. The Senate&amp;rsquo;s 99-1 rejection of the proposed ten-year moratorium on state AI regulation offers some support. It suggests that the political ground is not hostile to oversight.&lt;/p&gt;
&lt;p&gt;There are reasons to discount this scenario. The Senate vote was defensive, not a positive endorsement of federal standards. As of May 9, 2026, no such US framework existed. Amodei&amp;rsquo;s June 2025 &lt;em&gt;New York Times&lt;/em&gt; op-ed, &lt;em&gt;Don&amp;rsquo;t Let A.I. Companies off the Hook&lt;/em&gt;, did not change that. The required regulatory tailwind has not appeared at the speed the thesis needs.&lt;/p&gt;
&lt;h3 id="b-the-thesis-becomes-a-constraint-not-a-durable-advantage"&gt;B. The thesis becomes a constraint, not a durable advantage&lt;/h3&gt;
&lt;p&gt;&lt;em&gt;I consider this the most likely scenario.&lt;/em&gt; Anthropic loses raw-capability ground to less-constrained competitors. These include xAI, a more permissive next-generation OpenAI, and leading Chinese labs. Safety becomes a self-imposed handicap rather than a market-shaping lever.&lt;/p&gt;
&lt;p&gt;Anthropic&amp;rsquo;s seven cofounders made an &lt;a href="https://fortune.com/2026/01/27/anthropic-billionaire-cofounders-ceo-dario-amodei-giving-away-80-percent-of-wealth-fighting-inequality-ai-revolution/"&gt;80% wealth pledge&lt;/a&gt;, disclosed in the January 2026 essay. I treat this personal pledge as a partial offset to wealth-concentration concerns. It is not a formal corporate-governance constraint, and it does not reverse the competitive dynamic.&lt;/p&gt;
&lt;p&gt;The DoD fight, Pottinger op-ed, and Huang feud offer early evidence. At frontier scale, a safety stance creates adversaries that Anthropic cannot route around. The pattern accelerated in early 2026. &lt;a href="https://time.com/7380854/exclusive-anthropic-drops-flagship-safety-pledge/"&gt;Time reported&lt;/a&gt; that Anthropic dropped its flagship safety pledge for a non-binding framework. The company said this framework &amp;ldquo;can and will change,&amp;rdquo; the kind of operational adjustment that I treat as consistent with scenario B.&lt;/p&gt;
&lt;p&gt;The 2021-2023 safety premium should therefore compress. Investors paid for a safety lab that would pull rivals upward. It is becoming a frontier company that constrains itself relative to less-constrained rivals.&lt;/p&gt;
&lt;h3 id="c-the-paradox-dissolves-because-the-scale-itself-ends"&gt;C. The paradox dissolves because the scale itself ends&lt;/h3&gt;
&lt;p&gt;AI capital expenditure (capex) hits a Jevons-paradox-for-labor wall. Jevons paradox describes cases in which efficiency gains increase total use because rebound demand exceeds the savings. Model commoditization then compresses margins as competing models become more interchangeable. Frontier scale becomes uneconomic. Anthropic looks like a research lab again because every lab does.&lt;/p&gt;
&lt;p&gt;The paradox would then describe a phase, not a company. Two considerations weigh against this scenario. Anthropic projects $26 billion of revenue in 2026 and $70 billion in 2028. Those forecasts make retreat harder for Anthropic than for more capital-intensive large cloud providers. Gross margin is the percentage of revenue remaining after direct service costs. Commoditization also reaches Anthropic&amp;rsquo;s gross-margin profile later than labs that run on rented compute.&lt;/p&gt;
&lt;h2 id="what-anthropics-safety-mission-means-for-pricing-ai-labs"&gt;What Anthropic&amp;rsquo;s safety mission means for pricing AI labs&lt;/h2&gt;
&lt;p&gt;A capital allocator decides where to deploy funds. Three observations follow.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Safety narrative is not a moat at this scale; it is a constraint.&lt;/strong&gt; A moat is a durable competitive advantage. A counterfactual is an alternative world used for comparison. That constraint belongs in the valuation. Investors paid the 2021-2023 premium against a counterfactual with no safety-aligned frontier lab. That world no longer exists. Anthropic is the frontier lab.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Safety now binds the company through legal exposure, slower product cadence in some categories, and fewer customers it can serve. No single constraint breaks the company. Together, they change what an investor buys.&lt;/p&gt;
&lt;ol start="2"&gt;
&lt;li&gt;&lt;strong&gt;Compare how quickly frontier capabilities spread with how quickly rivals adopt safety practices.&lt;/strong&gt; This comparison shows whether race-to-the-top is happening. If safety practices spread faster, the thesis works. If capability spreads faster, the thesis becomes a story that Anthropic tells about itself.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Evidence through May 9, 2026, leans toward the second case. One European Union enforcement action or one US framework could still change this comparison.&lt;/p&gt;
&lt;ol start="3"&gt;
&lt;li&gt;&lt;strong&gt;Anthropic-the-company and Anthropic-the-thesis are different things to evaluate.&lt;/strong&gt; They have different ranges of possible outcomes. The company has revenue, named customers, and a personal wealth pledge from its cofounders. I treat that pledge as a partial offset to wealth-concentration risk. Its numerical trajectory is hard to bet against.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;The thesis is a 2021 framing under growing structural strain. My longform argues that Dario sees the tension. This piece argues that the tension exists. What anyone does with that observation is their own call.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Based on twenty-five hours of Dario Amodei&amp;rsquo;s on-record interviews and six long-form essays. The full reported profile, Inside the Mind of Dario Amodei, runs 14,000 words at the author&amp;rsquo;s newsletter.&lt;/em&gt;&lt;/p&gt;</description></item><item><title>The Anatomy of a Decentralized Prediction Market: Notes from the Polymarket Order Book</title><link>https://philippdubach.com/posts/the-anatomy-of-a-decentralized-prediction-market-notes-from-the-polymarket-order-book/</link><pubDate>Sat, 02 May 2026 00:00:00 +0200</pubDate><author>me@philippdubach.com (Philipp D. Dubach)</author><guid>https://philippdubach.com/posts/the-anatomy-of-a-decentralized-prediction-market-notes-from-the-polymarket-order-book/</guid><description>&lt;br&gt;
&lt;p&gt;I spent two months collecting Polymarket order-book data to study its market microstructure. An order book lists resting buy and sell orders by price. My collector runs on a small virtual machine (VM) and subscribes to Polymarket&amp;rsquo;s WebSocket feed. It writes one file in the columnar Parquet format per Coordinated Universal Time (UTC) hour.&lt;/p&gt;
&lt;p&gt;By 2026-04-15, the archive contained 1,262 hourly files and 30,287,264,368 events. It occupied 623.8 GB and covered 52 calendar days and 385,198 distinct market ids. As of May 2, 2026, the first version of the &lt;a href="https://arxiv.org/abs/2604.24366"&gt;paper&lt;/a&gt; is on arXiv. The &lt;a href="https://github.com/philippdubach/polymarket-microstructure"&gt;replication package&lt;/a&gt; is on GitHub and Zenodo. Its DOI is &lt;a href="https://doi.org/10.5281/zenodo.19811426"&gt;10.5281/zenodo.19811426&lt;/a&gt;. The manuscript is under review at the &lt;a href="https://www.sciencedirect.com/journal/journal-of-financial-markets"&gt;Journal of Financial Markets&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id="why-polymarket-microstructure-matters"&gt;Why Polymarket microstructure matters&lt;/h2&gt;
&lt;p&gt;A prediction market lets participants trade contracts whose payoff depends on an event&amp;rsquo;s outcome. It aggregates dispersed beliefs into one price. In equilibrium, that price behaves like a probability, a number between zero and one that represents likelihood.&lt;/p&gt;
&lt;p&gt;The empirical literature has focused on forecast accuracy, longshot bias, and the coexistence of informed and uninformed traders. Longshot bias occurs when traders overpay for low-probability outcomes. The literature also studies calibration, which tests whether stated probabilities match realised outcome frequencies. Market microstructure describes how orders become trades. It determines the cost of holding an informational position. As trading costs rise, less of a small informational signal survives into the price. Noisy microstructure therefore produces noisier prices than the headline aggregation literature implicitly assumes.&lt;/p&gt;
&lt;p&gt;Prediction-market microstructure remains under-studied. Liquidity is the ability to trade without causing a large price change. Market making means posting buy and sell orders to provide that liquidity. Early venues, including the Iowa Electronic Markets, made these features largely unobservable. Other designs used Hanson&amp;rsquo;s logarithmic market-scoring rule or sparse parimutuel pools.&lt;/p&gt;
&lt;p&gt;Polymarket changed this. Since 2021, it has operated a limit-order-book exchange on Polygon. Trades settle in US Dollar Coin (USDC) against an on-chain conditional-token contract. The infrastructure is finally there. What&amp;rsquo;s missing is the data work to actually use it.&lt;/p&gt;
&lt;h2 id="two-polymarket-microstructure-findings"&gt;Two Polymarket microstructure findings&lt;/h2&gt;
&lt;p&gt;The paper has two empirical contributions, ordered by weight for the literature.&lt;/p&gt;
&lt;p&gt;The first contribution is a measurement result. In the top-100 stratum, the 100 highest-volume markets, volume-weighted agreement between feed and on-chain direction is about 59%. This is near chance and below the approximately 80% accuracy that the Lee-Ready trade classifier achieves on equities. Any Polymarket result that depends on trade direction must use on-chain &lt;code&gt;OrderFilled&lt;/code&gt; events.&lt;/p&gt;
&lt;p&gt;The second contribution consists of eight cross-sectional stylized facts from a pre-registered 600-market panel. I observed the panel simultaneously during one 28-day scrape window. I calculated the measures from the full event tape and a direct on-chain trade record. None of the eight facts requires the on-chain join. Each is reported for the pre-registered panel, subject to measure-specific eligibility filters. SF2 uses 546 markets, and SF8 uses 322.&lt;/p&gt;
&lt;p&gt;The stylized facts describe Polymarket&amp;rsquo;s microstructure on its own terms. The measurement result defines when a trade-direction-dependent claim about Polymarket is credible.&lt;/p&gt;
&lt;h2 id="polymarket-order-book-and-on-chain-data"&gt;Polymarket order-book and on-chain data&lt;/h2&gt;
&lt;p&gt;The primary input is a continuous tick-level archive of the public WebSocket feed. It runs from 2026-02-21 16:00 UTC through 2026-04-15 08:00 UTC. I preserved the WebSocket payload schema verbatim. Eager Pydantic parsing was a multi-hour operation at this row count. I therefore parsed JavaScript Object Notation (JSON) only after the market-id and time-window filters.&lt;/p&gt;
&lt;p&gt;The on-chain join took most of the engineering time. Polymarket&amp;rsquo;s Conditional Token Framework (CTF) Exchange smart contract logs &lt;code&gt;OrderFilled&lt;/code&gt; events. Their payloads identify both counterparties and show whether the buyer or seller initiated the trade.&lt;/p&gt;
&lt;p&gt;I scraped 255,425,405 fills during a 28-day calibration window from 2026-02-28 to 2026-03-27. I used batched &lt;code&gt;eth_getLogs&lt;/code&gt; calls through a Polygon remote procedure call provider. Adaptive chunk sizes respected each provider&amp;rsquo;s rate limits.&lt;/p&gt;
&lt;p&gt;The off-chain feed uses &lt;code&gt;market_id&lt;/code&gt;; the on-chain record uses &lt;code&gt;makerAssetId&lt;/code&gt; / &lt;code&gt;takerAssetId&lt;/code&gt;. The &lt;code&gt;(condition_id, yes_token_id, no_token_id)&lt;/code&gt; mapping connects them. I retrieved it through the central limit order book (CLOB) Representational State Transfer (REST) application programming interface (API). I cached the mapping locally. CLOB REST resolves all 385,198 archive market ids. The Gamma metadata API, sometimes used in the literature, indexes only 34,764 markets.&lt;/p&gt;
&lt;p&gt;I committed the 600-market selection rule in a &lt;a href="https://github.com/philippdubach/polymarket-microstructure"&gt;pre-registration document&lt;/a&gt; before calculating the panel. The rule fixes the volume metric, random-stratum eligibility threshold, random seed, and category scheme. A deterministic build script creates the panel Parquet file. Before analysis, I recorded its SHA-256 hash, a cryptographic file fingerprint, in the pre-registration document.&lt;/p&gt;
&lt;p&gt;This goes beyond the empirical-microstructure norm. The cost is one document and one hash. The benefit is a check that no market entered or left after the analysis ran.&lt;/p&gt;
&lt;h2 id="eight-stylized-facts"&gt;Eight stylized facts&lt;/h2&gt;
&lt;h3 id="sf1--longshot-spread-premium"&gt;SF1 — Longshot spread premium&lt;/h3&gt;
&lt;p&gt;A quoted spread is the gap between the best buy and sell prices. The mid-price is their average. The half-spread is half that gap. A basis point (bps) is one hundredth of a percentage point.&lt;/p&gt;
&lt;p&gt;I bin the full quoted spread by each market&amp;rsquo;s mean mid-price into ten deciles. The median full spread is about 400 bps in the central [0.4, 0.6] range. It rises to 1,300-1,800 bps for markets trading below 0.10. The corresponding half-spreads are about 200 bps and 650-900 bps.&lt;/p&gt;
&lt;p&gt;The pattern is asymmetric: the low-probability side is wider than the high-probability side. This echoes the racetrack and parimutuel longshot bias in &lt;a href="https://www.journals.uchicago.edu/doi/abs/10.1086/655844"&gt;Snowberg and Wolfers (2010)&lt;/a&gt; and &lt;a href="https://www.aeaweb.org/articles?id=10.1257/jep.2.2.161"&gt;Thaler and Ziemba (1988)&lt;/a&gt;. It also echoes the prediction-market evidence that &lt;a href="https://www.aeaweb.org/articles?id=10.1257/0895330041371321"&gt;Wolfers and Zitzewitz (2004)&lt;/a&gt; survey for Iowa Electronic Markets and TradeSports.&lt;/p&gt;
&lt;p&gt;The direction is the same; the magnitude is not. The lowest-probability decile has a 1,300-1,800 bps full quoted spread. Its 650-900 bps half-spread is an order of magnitude wider than on a continuous-payoff sportsbook market. That scale looks less like risk-love or misperception and more like a constraint on liquidity provision.&lt;/p&gt;
&lt;figure class="post-figure" style="width: 80%; margin: 1.5rem auto;"&gt;
&lt;button type="button" class="img-trigger" data-lightbox-target="lightbox-sf1_longshot-png-1" aria-label="View full-size image"&gt;
&lt;picture class="img-lightbox"&gt;
&lt;source media="(max-width: 768px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=320,quality=80,format=auto/sf1_longshot.png 320w,
https://static.philippdubach.com/cdn-cgi/image/width=480,quality=80,format=auto/sf1_longshot.png 480w,
https://static.philippdubach.com/cdn-cgi/image/width=640,quality=80,format=auto/sf1_longshot.png 640w,
https://static.philippdubach.com/cdn-cgi/image/width=960,quality=80,format=auto/sf1_longshot.png 960w,
https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/sf1_longshot.png 1200w"
sizes="(max-width: 768px) 80vw, 576px"&gt;
&lt;source media="(max-width: 1024px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=768,quality=80,format=auto/sf1_longshot.png 768w,
https://static.philippdubach.com/cdn-cgi/image/width=1024,quality=80,format=auto/sf1_longshot.png 1024w,
https://static.philippdubach.com/cdn-cgi/image/width=1440,quality=80,format=auto/sf1_longshot.png 1440w"
sizes="(max-width: 768px) 80vw, 576px"&gt;
&lt;source media="(min-width: 1025px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/sf1_longshot.png 1200w,
https://static.philippdubach.com/cdn-cgi/image/width=1600,quality=80,format=auto/sf1_longshot.png 1600w,
https://static.philippdubach.com/cdn-cgi/image/width=2000,quality=80,format=auto/sf1_longshot.png 2000w"
sizes="(max-width: 768px) 80vw, 576px"&gt;
&lt;img src="https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/sf1_longshot.png"
alt="Chart of median full quoted spread by mid-price decile. The spread rises to 1,300-1,800 basis points below a 0.10 mid-price."
class=""
width="900"
height="600"
loading="lazy"
decoding="async"&gt;
&lt;/picture&gt;
&lt;/button&gt;
&lt;/figure&gt;
&lt;dialog id="lightbox-sf1_longshot-png-1" class="lightbox-dialog" aria-label="Full-size image" data-hires="https://static.philippdubach.com/cdn-cgi/image/width=2000,quality=85,format=auto/sf1_longshot.png"&gt;
&lt;form method="dialog" class="lightbox-close-form"&gt;
&lt;button type="submit" class="lightbox-close" aria-label="Close"&gt;×&lt;/button&gt;
&lt;/form&gt;
&lt;img alt="Chart of median full quoted spread by mid-price decile. The spread rises to 1,300-1,800 basis points below a 0.10 mid-price." decoding="async"&gt;
&lt;/dialog&gt;
&lt;h3 id="sf2--depth-concentration"&gt;SF2 — Depth concentration&lt;/h3&gt;
&lt;p&gt;Level 2 (L2) data show resting size at several prices. For each market, I summarize its depth with $\text{depth}&lt;em&gt;{L=1} / \text{depth}&lt;/em&gt;{L=10}$. This ratio is the share of cumulative top-10 depth held at the best price.&lt;/p&gt;
&lt;p&gt;A value of 1.0 means that all top-10 depth sits at level 1, which gives a thin, top-heavy book. A value of 0.1 represents a uniform grid with equal depth at each level. Among 546 markets with non-null depth, the median is 0.137, near the uniform benchmark. The 10th percentile is $p_{10} = 0.033$, and the 90th percentile is $p_{90} = 0.428$.&lt;/p&gt;
&lt;p&gt;The folk view says prediction-market depth concentrates at the best price. Polymarket does not fit that view; depth generally extends further into the book.&lt;/p&gt;
&lt;figure class="post-figure" style="width: 80%; margin: 1.5rem auto;"&gt;
&lt;button type="button" class="img-trigger" data-lightbox-target="lightbox-sf2_depth_profile-png-2" aria-label="View full-size image"&gt;
&lt;picture class="img-lightbox"&gt;
&lt;source media="(max-width: 768px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=320,quality=80,format=auto/sf2_depth_profile.png 320w,
https://static.philippdubach.com/cdn-cgi/image/width=480,quality=80,format=auto/sf2_depth_profile.png 480w,
https://static.philippdubach.com/cdn-cgi/image/width=640,quality=80,format=auto/sf2_depth_profile.png 640w,
https://static.philippdubach.com/cdn-cgi/image/width=960,quality=80,format=auto/sf2_depth_profile.png 960w,
https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/sf2_depth_profile.png 1200w"
sizes="(max-width: 768px) 80vw, 576px"&gt;
&lt;source media="(max-width: 1024px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=768,quality=80,format=auto/sf2_depth_profile.png 768w,
https://static.philippdubach.com/cdn-cgi/image/width=1024,quality=80,format=auto/sf2_depth_profile.png 1024w,
https://static.philippdubach.com/cdn-cgi/image/width=1440,quality=80,format=auto/sf2_depth_profile.png 1440w"
sizes="(max-width: 768px) 80vw, 576px"&gt;
&lt;source media="(min-width: 1025px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/sf2_depth_profile.png 1200w,
https://static.philippdubach.com/cdn-cgi/image/width=1600,quality=80,format=auto/sf2_depth_profile.png 1600w,
https://static.philippdubach.com/cdn-cgi/image/width=2000,quality=80,format=auto/sf2_depth_profile.png 2000w"
sizes="(max-width: 768px) 80vw, 576px"&gt;
&lt;img src="https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/sf2_depth_profile.png"
alt="Histogram of the share of top-ten depth held at the best price across 546 markets. The median is 0.137. Reference lines mark 0.10 and 1.0."
class=""
width="1050"
height="600"
loading="lazy"
decoding="async"&gt;
&lt;/picture&gt;
&lt;/button&gt;
&lt;/figure&gt;
&lt;dialog id="lightbox-sf2_depth_profile-png-2" class="lightbox-dialog" aria-label="Full-size image" data-hires="https://static.philippdubach.com/cdn-cgi/image/width=2000,quality=85,format=auto/sf2_depth_profile.png"&gt;
&lt;form method="dialog" class="lightbox-close-form"&gt;
&lt;button type="submit" class="lightbox-close" aria-label="Close"&gt;×&lt;/button&gt;
&lt;/form&gt;
&lt;img alt="Histogram of the share of top-ten depth held at the best price across 546 markets. The median is 0.137. Reference lines mark 0.10 and 1.0." decoding="async"&gt;
&lt;/dialog&gt;
&lt;h3 id="sf4--maker-wallet-diversity"&gt;SF4 — Maker-wallet diversity&lt;/h3&gt;
&lt;p&gt;For each market, I calculate the volume-weighted Herfindahl index (HHI) of maker-address shares across on-chain trades. HHI measures concentration. A higher value means that fewer maker wallets provide the volume.&lt;/p&gt;
&lt;p&gt;Across 600 markets and 6.4M trades, the median HHI is 0.031, or about 32 effective makers. The distribution is right-skewed. Its $p_{90} = 0.119$, or about 8 effective makers. The maximum is 0.40, or roughly 3 effective makers.&lt;/p&gt;
&lt;p&gt;Most panel markets therefore have decentralised maker liquidity. A tail of thin or niche markets remains dominated by one to three wallets. This matters for claims that a few professional liquidity providers dominate Polymarket. At least in the top-100 by volume, that&amp;rsquo;s not what the data show.&lt;/p&gt;
&lt;figure class="post-figure" style="width: 80%; margin: 1.5rem auto;"&gt;
&lt;button type="button" class="img-trigger" data-lightbox-target="lightbox-sf4_herfindahl-png-3" aria-label="View full-size image"&gt;
&lt;picture class="img-lightbox"&gt;
&lt;source media="(max-width: 768px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=320,quality=80,format=auto/sf4_herfindahl.png 320w,
https://static.philippdubach.com/cdn-cgi/image/width=480,quality=80,format=auto/sf4_herfindahl.png 480w,
https://static.philippdubach.com/cdn-cgi/image/width=640,quality=80,format=auto/sf4_herfindahl.png 640w,
https://static.philippdubach.com/cdn-cgi/image/width=960,quality=80,format=auto/sf4_herfindahl.png 960w,
https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/sf4_herfindahl.png 1200w"
sizes="(max-width: 768px) 80vw, 576px"&gt;
&lt;source media="(max-width: 1024px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=768,quality=80,format=auto/sf4_herfindahl.png 768w,
https://static.philippdubach.com/cdn-cgi/image/width=1024,quality=80,format=auto/sf4_herfindahl.png 1024w,
https://static.philippdubach.com/cdn-cgi/image/width=1440,quality=80,format=auto/sf4_herfindahl.png 1440w"
sizes="(max-width: 768px) 80vw, 576px"&gt;
&lt;source media="(min-width: 1025px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/sf4_herfindahl.png 1200w,
https://static.philippdubach.com/cdn-cgi/image/width=1600,quality=80,format=auto/sf4_herfindahl.png 1600w,
https://static.philippdubach.com/cdn-cgi/image/width=2000,quality=80,format=auto/sf4_herfindahl.png 2000w"
sizes="(max-width: 768px) 80vw, 576px"&gt;
&lt;img src="https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/sf4_herfindahl.png"
alt="Histogram of maker-address concentration across 600 markets. The median Herfindahl index is 0.031, or about 32 effective makers, and the distribution is right-skewed."
class=""
width="1050"
height="600"
loading="lazy"
decoding="async"&gt;
&lt;/picture&gt;
&lt;/button&gt;
&lt;/figure&gt;
&lt;dialog id="lightbox-sf4_herfindahl-png-3" class="lightbox-dialog" aria-label="Full-size image" data-hires="https://static.philippdubach.com/cdn-cgi/image/width=2000,quality=85,format=auto/sf4_herfindahl.png"&gt;
&lt;form method="dialog" class="lightbox-close-form"&gt;
&lt;button type="submit" class="lightbox-close" aria-label="Close"&gt;×&lt;/button&gt;
&lt;/form&gt;
&lt;img alt="Histogram of maker-address concentration across 600 markets. The median Herfindahl index is 0.031, or about 32 effective makers, and the distribution is right-skewed." decoding="async"&gt;
&lt;/dialog&gt;
&lt;h3 id="sf7--self-counterparty-wash-share"&gt;SF7 — Self-counterparty wash share&lt;/h3&gt;
&lt;p&gt;I flag &lt;code&gt;maker == taker&lt;/code&gt; as a wash-suspect direct self-match. I also flag a flipped pair, $(maker_a, taker_a) \leftrightarrow (taker_a, maker_a)$, in the same market within 128 blocks. That interval is the Polygon finality buffer.&lt;/p&gt;
&lt;p&gt;The result is an explicit lower bound. The detector covers direct self-matches and immediate round trips. It does not cover extended graph patterns. Network classifiers such as &lt;a href="https://academic.oup.com/rfs/article/35/8/3463/6488024"&gt;Cong et al. (2023)&lt;/a&gt; address those patterns on unregulated cryptocurrency token exchanges. That study documents wash shares of 25-70%.&lt;/p&gt;
&lt;p&gt;Across 600 markets and 6.4M trades, the median wash share is 0.97%. The 90th percentile is 4.5%, the 99th percentile is 10.6%, and the maximum is 22.2%.&lt;/p&gt;
&lt;p&gt;Two factors separate this lower bound from network-classifier estimates on token exchanges. First, some wash patterns require multi-counterparty graph analysis, which my detector does not perform. Second, the venues create different incentives to wash trade. I can quantify the first factor only by extending the graph classifier. The second is an identification problem, not a measurement problem.&lt;/p&gt;
&lt;figure class="post-figure" style="width: 80%; margin: 1.5rem auto;"&gt;
&lt;button type="button" class="img-trigger" data-lightbox-target="lightbox-sf7_wash-png-4" aria-label="View full-size image"&gt;
&lt;picture class="img-lightbox"&gt;
&lt;source media="(max-width: 768px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=320,quality=80,format=auto/sf7_wash.png 320w,
https://static.philippdubach.com/cdn-cgi/image/width=480,quality=80,format=auto/sf7_wash.png 480w,
https://static.philippdubach.com/cdn-cgi/image/width=640,quality=80,format=auto/sf7_wash.png 640w,
https://static.philippdubach.com/cdn-cgi/image/width=960,quality=80,format=auto/sf7_wash.png 960w,
https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/sf7_wash.png 1200w"
sizes="(max-width: 768px) 80vw, 576px"&gt;
&lt;source media="(max-width: 1024px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=768,quality=80,format=auto/sf7_wash.png 768w,
https://static.philippdubach.com/cdn-cgi/image/width=1024,quality=80,format=auto/sf7_wash.png 1024w,
https://static.philippdubach.com/cdn-cgi/image/width=1440,quality=80,format=auto/sf7_wash.png 1440w"
sizes="(max-width: 768px) 80vw, 576px"&gt;
&lt;source media="(min-width: 1025px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/sf7_wash.png 1200w,
https://static.philippdubach.com/cdn-cgi/image/width=1600,quality=80,format=auto/sf7_wash.png 1600w,
https://static.philippdubach.com/cdn-cgi/image/width=2000,quality=80,format=auto/sf7_wash.png 2000w"
sizes="(max-width: 768px) 80vw, 576px"&gt;
&lt;img src="https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/sf7_wash.png"
alt="Histogram of self-counterparty wash share across 600 markets. The median is 0.97%, and the right tail reaches 22.2%."
class=""
width="1050"
height="600"
loading="lazy"
decoding="async"&gt;
&lt;/picture&gt;
&lt;/button&gt;
&lt;/figure&gt;
&lt;dialog id="lightbox-sf7_wash-png-4" class="lightbox-dialog" aria-label="Full-size image" data-hires="https://static.philippdubach.com/cdn-cgi/image/width=2000,quality=85,format=auto/sf7_wash.png"&gt;
&lt;form method="dialog" class="lightbox-close-form"&gt;
&lt;button type="submit" class="lightbox-close" aria-label="Close"&gt;×&lt;/button&gt;
&lt;/form&gt;
&lt;img alt="Histogram of self-counterparty wash share across 600 markets. The median is 0.97%, and the right tail reaches 22.2%." decoding="async"&gt;
&lt;/dialog&gt;
&lt;h3 id="sf8--depth-decay-near-resolution"&gt;SF8 — Depth decay near resolution&lt;/h3&gt;
&lt;p&gt;Do markets near resolution carry shallower books? I regress log mean depth at $L=10$ on log seconds-to-close at the panel midpoint. This cross-sectional regression compares different markets at one time. The midpoint is 2026-03-13. I restrict the sample to 322 markets with positive seconds-to-close and non-zero summary depth.&lt;/p&gt;
&lt;p&gt;A bivariate regression uses one explanatory variable. Its slope is 0.818. The heteroskedasticity-consistent standard error (HC3 SE) is 0.113, with $t = 7.2$ and $R^2 = 0.13$. HC3 allows error variance to differ across observations. The $t$-statistic measures the coefficient relative to its standard error. $R^2$ measures the share of variation explained by the model.&lt;/p&gt;
&lt;p&gt;Category fixed effects control for average differences among Crypto, Sports, Other, and Geopolitics. They reduce the slope to 0.550. The HC3 SE is 0.143, with $t = 3.85$ and $R^2 = 0.22$. Category-level confounding therefore explains roughly one third of the bivariate association.&lt;/p&gt;
&lt;p&gt;Adding log panel-window volume reduces the slope to 0.305. Its HC3 SE is 0.104, with $t = 2.94$ and $R^2 = 0.49$. The rounded 0.31 slope implies about 6% less mean depth for each 10× reduction in seconds-to-close.&lt;/p&gt;
&lt;p&gt;The category-plus-log-volume specification gives the conservative reading. Volume mediates the relationship between depth and time. Markets that remain active longer accumulate more makers, and more makers mean more depth. A regression without volume assigns this maker-and-time channel to time alone.&lt;/p&gt;
&lt;p&gt;The 0.305 coefficient is residual depth decay after removing that mediation. The abstract reports the 0.550 within-category slope before removing mediation. That slope is appropriate for comparison with literature that does not condition on volume.&lt;/p&gt;
&lt;figure class="post-figure" style="width: 80%; margin: 1.5rem auto;"&gt;
&lt;button type="button" class="img-trigger" data-lightbox-target="lightbox-sf8_depth_decay-png-5" aria-label="View full-size image"&gt;
&lt;picture class="img-lightbox"&gt;
&lt;source media="(max-width: 768px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=320,quality=80,format=auto/sf8_depth_decay.png 320w,
https://static.philippdubach.com/cdn-cgi/image/width=480,quality=80,format=auto/sf8_depth_decay.png 480w,
https://static.philippdubach.com/cdn-cgi/image/width=640,quality=80,format=auto/sf8_depth_decay.png 640w,
https://static.philippdubach.com/cdn-cgi/image/width=960,quality=80,format=auto/sf8_depth_decay.png 960w,
https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/sf8_depth_decay.png 1200w"
sizes="(max-width: 768px) 80vw, 576px"&gt;
&lt;source media="(max-width: 1024px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=768,quality=80,format=auto/sf8_depth_decay.png 768w,
https://static.philippdubach.com/cdn-cgi/image/width=1024,quality=80,format=auto/sf8_depth_decay.png 1024w,
https://static.philippdubach.com/cdn-cgi/image/width=1440,quality=80,format=auto/sf8_depth_decay.png 1440w"
sizes="(max-width: 768px) 80vw, 576px"&gt;
&lt;source media="(min-width: 1025px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/sf8_depth_decay.png 1200w,
https://static.philippdubach.com/cdn-cgi/image/width=1600,quality=80,format=auto/sf8_depth_decay.png 1600w,
https://static.philippdubach.com/cdn-cgi/image/width=2000,quality=80,format=auto/sf8_depth_decay.png 2000w"
sizes="(max-width: 768px) 80vw, 576px"&gt;
&lt;img src="https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/sf8_depth_decay.png"
alt="Regression plot of log mean depth against log seconds-to-close on March 13, 2026. The estimated slopes are 0.818, 0.550 with category controls, and 0.305 after adding log volume."
class=""
width="1050"
height="600"
loading="lazy"
decoding="async"&gt;
&lt;/picture&gt;
&lt;/button&gt;
&lt;/figure&gt;
&lt;dialog id="lightbox-sf8_depth_decay-png-5" class="lightbox-dialog" aria-label="Full-size image" data-hires="https://static.philippdubach.com/cdn-cgi/image/width=2000,quality=85,format=auto/sf8_depth_decay.png"&gt;
&lt;form method="dialog" class="lightbox-close-form"&gt;
&lt;button type="submit" class="lightbox-close" aria-label="Close"&gt;×&lt;/button&gt;
&lt;/form&gt;
&lt;img alt="Regression plot of log mean depth against log seconds-to-close on March 13, 2026. The estimated slopes are 0.818, 0.550 with category controls, and 0.305 after adding log volume." decoding="async"&gt;
&lt;/dialog&gt;
&lt;p&gt;The paper also reports three other stylized facts. SF3 covers Polygon block-clock alignment, SF5 covers category-conditional spread, and SF6 covers archive-ingestion latency. SF6 measures the collector pipeline, not Polymarket. The median of the per-market median (p50) ingestion delays is 41.5 milliseconds. That is a collector sanity check, not a microstructure result.&lt;/p&gt;
&lt;h2 id="why-polymarket-order-book-data-cannot-infer-trade-direction"&gt;Why Polymarket order-book data cannot infer trade direction&lt;/h2&gt;
&lt;p&gt;Six standard microstructure measures depend on trade direction. They are effective spread, realized spread, Roll, Abdi-Ranaldo, Kyle&amp;rsquo;s $\lambda$, and Amihud. Kyle&amp;rsquo;s $\lambda$ estimates price impact from signed trade flow. Each measure needs an aggressor sign. The aggressor is the order that executes against a resting order. Its sign identifies whether a buyer or seller initiated the trade.&lt;/p&gt;
&lt;p&gt;Equity researchers commonly infer this sign from a quote-driven feed with Lee-Ready or a variant. Polymarket&amp;rsquo;s public feed lacks the required information. The &lt;code&gt;change_side&lt;/code&gt; field shows which order-book side &lt;em&gt;moved&lt;/em&gt;, not which side &lt;em&gt;initiated&lt;/em&gt; the trade.&lt;/p&gt;
&lt;p&gt;I infer trades from the feed under a LOOSE rule: every resting-size decrement counts. I match inferred buckets to on-chain &lt;code&gt;OrderFilled&lt;/code&gt; events by exact price and 5-second intervals. The test uses four disjoint 7-day windows.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Panel mean: 0.615 across 109 valid market-window cells from 400 possible cells and 55 markets. The market-clustered bootstrap 95% confidence interval (CI) is [0.579, 0.653].&lt;/li&gt;
&lt;li&gt;Volume-weighted by 125,080 matched buckets: 0.592. The bootstrap 95% CI is [0.542, 0.659].&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Volume-weighted sign agreement is about 59%, just above the 50% chance baseline. Even after a time-and-price match, the inferred direction is wrong for about two trades in five.&lt;/p&gt;
&lt;p&gt;The feed itself causes the problem. A &lt;code&gt;price_change&lt;/code&gt; update broadcasts the resting book after a match but does not identify the taker. &lt;code&gt;change_side&lt;/code&gt; shows which side moved, not which side initiated the trade. Using it as a sign proxy produces the roughly 59% agreement rate.&lt;/p&gt;
&lt;p&gt;A noisy sign contaminates every measure that uses it. On the comparable subset of the top-100 panel:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Effective half-spread changes sign on 67% of markets&lt;/strong&gt; in the first 7-day window after replacing feed inference with on-chain ground truth. It changes sign on 50% in a second non-overlapping window.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Kyle&amp;rsquo;s $\lambda$ changes sign on 60% of markets&lt;/strong&gt; in the first window and 43% in the second.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Across both windows, feed-inferred trade direction remains near chance and well below the approximately 80% Lee-Ready accuracy documented on Nasdaq.&lt;/p&gt;
&lt;p&gt;The Glosten-Harris spread decomposition makes this concrete. Adverse selection is the cost of trading against a better-informed counterparty. I restrict the decomposition to the top-100 stratum and use authoritative on-chain trades.&lt;/p&gt;
&lt;p&gt;The median effective half-spread is essentially zero at -0.0003 in the paper&amp;rsquo;s probability-point units. The median transitory and adverse-selection components are 0.00001 and 0.0 in the same units. After removing sign errors, the dollar-weighted &amp;ldquo;adverse selection&amp;rdquo; from order-book-only inference collapses. The typical top-100 market has no detectable systematic spread component on either side.&lt;/p&gt;
&lt;figure class="post-figure" style="width: 80%; margin: 1.5rem auto;"&gt;
&lt;button type="button" class="img-trigger" data-lightbox-target="lightbox-spread_decomposition-png-7" aria-label="View full-size image"&gt;
&lt;picture class="img-lightbox"&gt;
&lt;source media="(max-width: 768px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=320,quality=80,format=auto/spread_decomposition.png 320w,
https://static.philippdubach.com/cdn-cgi/image/width=480,quality=80,format=auto/spread_decomposition.png 480w,
https://static.philippdubach.com/cdn-cgi/image/width=640,quality=80,format=auto/spread_decomposition.png 640w,
https://static.philippdubach.com/cdn-cgi/image/width=960,quality=80,format=auto/spread_decomposition.png 960w,
https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/spread_decomposition.png 1200w"
sizes="(max-width: 768px) 80vw, 576px"&gt;
&lt;source media="(max-width: 1024px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=768,quality=80,format=auto/spread_decomposition.png 768w,
https://static.philippdubach.com/cdn-cgi/image/width=1024,quality=80,format=auto/spread_decomposition.png 1024w,
https://static.philippdubach.com/cdn-cgi/image/width=1440,quality=80,format=auto/spread_decomposition.png 1440w"
sizes="(max-width: 768px) 80vw, 576px"&gt;
&lt;source media="(min-width: 1025px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/spread_decomposition.png 1200w,
https://static.philippdubach.com/cdn-cgi/image/width=1600,quality=80,format=auto/spread_decomposition.png 1600w,
https://static.philippdubach.com/cdn-cgi/image/width=2000,quality=80,format=auto/spread_decomposition.png 2000w"
sizes="(max-width: 768px) 80vw, 576px"&gt;
&lt;img src="https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/spread_decomposition.png"
alt="Histograms of the Glosten-Harris transitory and adverse-selection components for the 100 highest-volume markets. Both distributions center near zero after using on-chain trade direction."
class=""
width="1650"
height="600"
loading="lazy"
decoding="async"&gt;
&lt;/picture&gt;
&lt;/button&gt;
&lt;/figure&gt;
&lt;dialog id="lightbox-spread_decomposition-png-7" class="lightbox-dialog" aria-label="Full-size image" data-hires="https://static.philippdubach.com/cdn-cgi/image/width=2000,quality=85,format=auto/spread_decomposition.png"&gt;
&lt;form method="dialog" class="lightbox-close-form"&gt;
&lt;button type="submit" class="lightbox-close" aria-label="Close"&gt;×&lt;/button&gt;
&lt;/form&gt;
&lt;img alt="Histograms of the Glosten-Harris transitory and adverse-selection components for the 100 highest-volume markets. Both distributions center near zero after using on-chain trade direction." decoding="async"&gt;
&lt;/dialog&gt;
&lt;p&gt;The same constraint should affect other decentralised CLOB venues with similar feeds. Their off-chain matching layer broadcasts a post-match book state without identifying the taker. Examples include GMX v1, dYdX v3, Loopring&amp;rsquo;s historical CLOB, and similar hybrid architectures. The public feed shows &lt;em&gt;what cleared&lt;/em&gt; but not &lt;em&gt;who initiated&lt;/em&gt;. Direction-dependent measures on these venues therefore need an authoritative on-chain trade source.&lt;/p&gt;
&lt;h2 id="what-im-not-doing-here"&gt;What I&amp;rsquo;m not doing here&lt;/h2&gt;
&lt;p&gt;I recently had a long-ish exchange with someone scoping research on the same dataset. It was a useful map of what&amp;rsquo;s adjacent but out of scope.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Spread decomposition with bounded payoffs.&lt;/em&gt; Classical Glosten-Harris / Huang-Stoll remains open for prediction markets. Prices are bounded in $(0,1)$, which breaks parts of the standard identification. This is a real research question, not just a re-application.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Insider episodes and wallet-level patterns around resolution.&lt;/em&gt; Probably the most productive lane I am not working on. The Journal of Financial Markets submission uses only aggregate wallet measures and does not deanonymize users. Where you draw that line in your work is your call.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Toxic flow.&lt;/em&gt; Some overlap with one of my planned follow-ups.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Latency arbitrage within one venue.&lt;/em&gt; Doesn&amp;rsquo;t really work as a question on Polymarket. The two-clock gap in the WebSocket feed is SF6&amp;rsquo;s archive-ingestion delay, not trader latency. Without an exchange-side clock, you can&amp;rsquo;t separate the two. Cross-venue is the workable framing.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Cross-venue arbitrage.&lt;/em&gt; Open and product-relevant. Kalshi, PredictIt, sports-book mirrors. The data engineering is probably the harder part.&lt;/p&gt;
&lt;h2 id="polymarket-order-book-data-and-replication"&gt;Polymarket order-book data and replication&lt;/h2&gt;
&lt;p&gt;Everything is reproducible from the public on-chain record and your own WebSocket capture. I am not redistributing the rounded 624 GB raw archive. It is too large to move around practically. The panel artifacts and on-chain scrape pipeline are public:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Code: &lt;a href="https://github.com/philippdubach/polymarket-microstructure"&gt;github.com/philippdubach/polymarket-microstructure&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Replication package (DOI): &lt;a href="https://doi.org/10.5281/zenodo.19811426"&gt;10.5281/zenodo.19811426&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Paper: &lt;a href="https://arxiv.org/abs/2604.24366"&gt;arXiv:2604.24366&lt;/a&gt;, under review at the &lt;a href="https://www.sciencedirect.com/journal/journal-of-financial-markets"&gt;Journal of Financial Markets&lt;/a&gt; as of May 2, 2026.&lt;/li&gt;
&lt;li&gt;Collector: &lt;a href="https://github.com/pmxt-dev/pmxt"&gt;pmxt-dev/pmxt&lt;/a&gt; is a good starting point for your own capture. Polymarket&amp;rsquo;s WebSocket is public. A running collector gives continuous coverage, which is probably more useful for product work than a static historical slice.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The CTF Exchange V1 → V2 cutover at the end of April 2026 closes my scrape window. It also opens a venue-evolution comparison. A per-market depth time series would move SF8 from a cross-sectional regression to a within-market depth-decay regression. A cross-venue analysis against Kalshi and sports-book mirrors would address the price-discovery question that this paper leaves open. Those are the obvious next things.&lt;/p&gt;</description></item><item><title>Karpathy's Software 3.0 Playbook</title><link>https://philippdubach.com/posts/karpathys-software-3.0-playbook/</link><pubDate>Fri, 01 May 2026 00:00:00 +0200</pubDate><author>me@philippdubach.com (Philipp D. Dubach)</author><guid>https://philippdubach.com/posts/karpathys-software-3.0-playbook/</guid><description>&lt;figure class="post-figure" style="width: 80%; margin: 1.5rem auto;"&gt;
&lt;button type="button" class="img-trigger" data-lightbox-target="lightbox-karpathy_header-png-0" aria-label="View full-size image"&gt;
&lt;picture class="img-lightbox"&gt;
&lt;source media="(max-width: 768px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=320,quality=80,format=auto/karpathy_header.png 320w,
https://static.philippdubach.com/cdn-cgi/image/width=480,quality=80,format=auto/karpathy_header.png 480w,
https://static.philippdubach.com/cdn-cgi/image/width=640,quality=80,format=auto/karpathy_header.png 640w,
https://static.philippdubach.com/cdn-cgi/image/width=960,quality=80,format=auto/karpathy_header.png 960w,
https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/karpathy_header.png 1200w"
sizes="(max-width: 768px) 80vw, 576px"&gt;
&lt;source media="(max-width: 1024px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=768,quality=80,format=auto/karpathy_header.png 768w,
https://static.philippdubach.com/cdn-cgi/image/width=1024,quality=80,format=auto/karpathy_header.png 1024w,
https://static.philippdubach.com/cdn-cgi/image/width=1440,quality=80,format=auto/karpathy_header.png 1440w"
sizes="(max-width: 768px) 80vw, 576px"&gt;
&lt;source media="(min-width: 1025px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/karpathy_header.png 1200w,
https://static.philippdubach.com/cdn-cgi/image/width=1600,quality=80,format=auto/karpathy_header.png 1600w,
https://static.philippdubach.com/cdn-cgi/image/width=2000,quality=80,format=auto/karpathy_header.png 2000w"
sizes="(max-width: 768px) 80vw, 576px"&gt;
&lt;img src="https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/karpathy_header.png"
alt="Still from Andrej Karpathy&amp;#39;s interview with Sequoia at AI Ascent discussing Software 3.0, vibe coding, and agentic engineering"
class=""
width="3392"
height="1814"
loading="lazy"
decoding="async"&gt;
&lt;/picture&gt;
&lt;/button&gt;
&lt;/figure&gt;
&lt;dialog id="lightbox-karpathy_header-png-0" class="lightbox-dialog" aria-label="Full-size image" data-hires="https://static.philippdubach.com/cdn-cgi/image/width=2000,quality=85,format=auto/karpathy_header.png"&gt;
&lt;form method="dialog" class="lightbox-close-form"&gt;
&lt;button type="submit" class="lightbox-close" aria-label="Close"&gt;×&lt;/button&gt;
&lt;/form&gt;
&lt;img alt="Still from Andrej Karpathy&amp;#39;s interview with Sequoia at AI Ascent discussing Software 3.0, vibe coding, and agentic engineering" decoding="async"&gt;
&lt;/dialog&gt;
&lt;p&gt;Andrej Karpathy is one of the few people who has both built modern AI and explained it for the rest of us. He co-founded OpenAI, ran computer vision at Tesla (where he got Autopilot working), and his courses on neural networks are some of the most-watched lectures on the internet. He also has a habit of naming the era we&amp;rsquo;re already in. &amp;ldquo;Vibe coding&amp;rdquo; was his. &amp;ldquo;Software 3.0&amp;rdquo; looks like the next one.&lt;/p&gt;
&lt;p&gt;So when Karpathy says he has &amp;ldquo;never felt more behind as a programmer,&amp;rdquo; it is worth slowing down. That isn&amp;rsquo;t false modesty from a guy with his résumé. Something shifted under the field and most people haven&amp;rsquo;t recalibrated. The Sequoia interview below is his attempt to describe what shifted. The lessons here are pulled from it, ordered roughly by how much they should change what you do tomorrow.&lt;/p&gt;
&lt;h2 id="1-inflection-point-december-2025"&gt;1. Inflection point December 2025&lt;/h2&gt;
&lt;p&gt;Until late last year, agentic coding tools were &amp;ldquo;kind of helpful.&amp;rdquo; Good in stretches, often wrong in ways you had to babysit. Over the December break, the latest models crossed a line:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;ldquo;I kept asking for more and just came out fine. And then I can&amp;rsquo;t remember the last time I corrected it. And then I just trusted the system more and more. And then I was vibe coding.&amp;rdquo;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;He flagged it on the record, loudly:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;ldquo;A lot of people experienced AI last year as a ChatGPT-adjacent thing. But you really had to look again, and you had to look as of December, because things have changed fundamentally — especially on this agentic, coherent workflow that really started to actually work.&amp;rdquo;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;If your mental model of these tools was set by ChatGPT, it is already a generation stale. The agentic workflow is a different product, and it now works.&lt;/p&gt;
&lt;h2 id="2-you-can-outsource-your-thinking-but-not-your-understanding"&gt;2. You can outsource your thinking, but not your understanding&lt;/h2&gt;
&lt;p&gt;The most quotable line of the interview:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;ldquo;You can outsource your thinking, but you can&amp;rsquo;t outsource your understanding.&amp;rdquo;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;As agents do more of the thinking, the bottleneck moves into your head. You still have to know what is worth building and why, and you still have to direct the work.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;ldquo;I&amp;rsquo;m still part of the system, and I still have to — somehow, information still has to make it into my brain. And I feel like I&amp;rsquo;m becoming a bottleneck of just even knowing what are we trying to build, why is it worth doing, how do I direct my agents.&amp;rdquo;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Your value sits upstream of execution. The bottleneck of the next decade is less about compute than about how fast humans can deepen comprehension to keep directing systems that out-execute them. That is why Karpathy keeps building knowledge bases out of his own reading. He wants another projection of the same data, faster.&lt;/p&gt;
&lt;aside class="newsletter-preview" aria-label="Newsletter signup"&gt;
&lt;p class="newsletter-preview__title"&gt;Monthly notes&lt;/p&gt;&lt;form class="newsletter-preview__form" method="post" action="https://newsletter-api.philippd.workers.dev/api/subscribe" data-newsletter-endpoint="https://newsletter-api.philippd.workers.dev/api/subscribe" data-newsletter-count-endpoint="https://newsletter-api.philippd.workers.dev/api/subscriber-count" novalidate&gt;
&lt;label for="newsletter-1"&gt;Email address&lt;/label&gt;
&lt;div class="newsletter-preview__controls"&gt;
&lt;input id="newsletter-1" name="email" type="email" autocomplete="email" inputmode="email" required placeholder="you@example.com"&gt;
&lt;button type="submit"&gt;Subscribe&lt;/button&gt;
&lt;/div&gt;
&lt;p class="newsletter-preview__note" data-newsletter-note&gt;&lt;a href="https://philippdubach.com/posts/building-a-no-tracking-newsletter-from-markdown-to-distribution/"&gt;No tracking&lt;/a&gt;. Unsubscribe anytime.&lt;/p&gt;
&lt;p class="newsletter-preview__message" data-newsletter-message role="status" aria-live="polite"&gt;&lt;/p&gt;
&lt;/form&gt;
&lt;/aside&gt;
&lt;h2 id="3-verifiability-is-the-map-of-what-automates-next"&gt;3. Verifiability is the map of what automates next&lt;/h2&gt;
&lt;p&gt;Why are these models freakishly good at code and math, and yet stupid about whether you should walk 50 meters to a car wash? Because frontier labs train via reinforcement learning, and RL needs verifiable rewards. Verifiable domains attract environments and signal, so they get the steepest gains. Everything else stays jagged.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;ldquo;How is it possible that state-of-the-art Opus 4.7 will simultaneously refactor a hundred-thousand-line code base or find zero-day vulnerabilities, and yet tells me to walk to this car wash? This is insane.&amp;rdquo;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;The GPT-3.5 to GPT-4 chess jump is the proof point. Capability tracks what the labs choose to feed in.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;ldquo;We are slightly at the mercy of whatever the labs are doing, whatever they happen to put into the mix&amp;hellip; If you&amp;rsquo;re in the circuits that were part of the RL, you fly. And if you&amp;rsquo;re in the circuits that are out of the data distribution, you&amp;rsquo;re going to struggle.&amp;rdquo;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Two things follow. If you are a founder and you can build a verifiable environment in your domain, even one the labs aren&amp;rsquo;t focused on, you can fine-tune a model that flies. That is real leverage. If you are a worker, the more useful question than &amp;ldquo;is my job safe?&amp;rdquo; is &amp;ldquo;is my job verifiable?&amp;rdquo; Karpathy thinks everything is automatable eventually. Verifiability mainly sets the order.&lt;/p&gt;
&lt;h2 id="4-software-30-prompting-is-the-new-programming"&gt;4. Software 3.0: prompting is the new programming&lt;/h2&gt;
&lt;p&gt;The frame that makes the rest of this make sense. Karpathy&amp;rsquo;s three eras:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Software 1.0:&lt;/strong&gt; humans write explicit code.&lt;br&gt;
&lt;strong&gt;Software 2.0:&lt;/strong&gt; humans curate datasets and train neural networks; the weights are the program.&lt;br&gt;
&lt;strong&gt;Software 3.0:&lt;/strong&gt; humans write prompts; the LLM is the interpreter, and the context window is the program.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;ldquo;Your programming now turns to prompting. And what&amp;rsquo;s in the context window is over the interpreter, that is the LLM, that is kind of like interpreting your context and performing computation in the digital information space.&amp;rdquo;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;His sharpest example: installing OpenCode is no longer a shell script. It is a block of text you copy-paste to your agent, which reads your environment and figures the rest out.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;ldquo;It&amp;rsquo;s just like, what is the piece of text to copy-paste to your agent? That&amp;rsquo;s the programming paradigm now.&amp;rdquo;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;The unit of programming used to be a function. Now it is closer to a paragraph.&lt;/p&gt;
&lt;h2 id="5-vibe-coding-raises-the-floor-agentic-engineering-raises-the-ceiling"&gt;5. Vibe coding raises the floor; agentic engineering raises the ceiling&lt;/h2&gt;
&lt;p&gt;If you build software for a living, this is the lesson with the most direct implications:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;ldquo;Vibe coding is about raising the floor for everyone in terms of what they can do in software&amp;hellip; But agentic engineering is about preserving the quality bar of what existed before in professional software. You&amp;rsquo;re still responsible for your software just as before, but can you go faster?&amp;rdquo;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Karpathy thinks the ceiling is very high:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;ldquo;People used to talk about the 10x engineer previously. I think that this is magnified a lot more — 10x is not the speed up you gain. People who are very good at this peak a lot more than 10x.&amp;rdquo;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;The gap between mediocre and excellent users of these tools is widening. Worth taking seriously when you decide what to learn next.&lt;/p&gt;
&lt;h2 id="6-the-new-human-skill-is-taste-spec-and-oversight"&gt;6. The new human skill is taste, spec, and oversight&lt;/h2&gt;
&lt;p&gt;What humans should still do, in his telling, is design and judgment work. Holding the spec in your head. Setting the architecture. Making sure the agent is being asked for the right thing in the first place.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;ldquo;You&amp;rsquo;re in charge of the taste, the engineering, the design, and that it makes sense, and that you&amp;rsquo;re asking for the right things&amp;hellip; You&amp;rsquo;re doing some of the design and development, and the engineers are doing the fill in the blanks.&amp;rdquo;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;The MenuGen anecdote is the kind of mistake only a human spec catches. The agent silently tried to associate Stripe and Google accounts by matching email addresses, with no persistent user ID. It worked until two emails diverged.&lt;/p&gt;
&lt;p&gt;He is not sure this division will hold forever:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;ldquo;When you actually look at the code, sometimes I get a little bit of a heart attack, because it&amp;rsquo;s not super amazing code&amp;hellip; It&amp;rsquo;s very bloaty, and there&amp;rsquo;s a lot of copy-paste, and there&amp;rsquo;s awkward abstractions that are brittle and — like, it works, but it&amp;rsquo;s just really gross.&amp;rdquo;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Nothing fundamental stops the labs from training for taste. They just haven&amp;rsquo;t yet. Until they do, the taste layer is still your responsibility.&lt;/p&gt;
&lt;h2 id="7-some-apps-shouldnt-exist-anymore"&gt;7. Some apps shouldn&amp;rsquo;t exist anymore&lt;/h2&gt;
&lt;p&gt;The MenuGen anecdote, again. Karpathy built an app: photo a restaurant menu, OCR it, generate images of each dish, render a new menu. Vercel deployment, the full stack.&lt;/p&gt;
&lt;p&gt;Then he saw the Software 3.0 version. Hand the photo to Gemini, say &amp;ldquo;use NanoBanana to overlay the dishes onto the menu,&amp;rdquo; and a single model call returns the same menu with images rendered into the pixels.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;ldquo;All of my MenuGen is spurious. It&amp;rsquo;s working in the old paradigm. That app shouldn&amp;rsquo;t exist.&amp;rdquo;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;A lot of what we are building today is scaffolding around a capability the model could perform end-to-end. Before writing the next CRUD app, ask whether the model is the app.&lt;/p&gt;
&lt;h2 id="8-new-possibilities-matter-more-than-the-speed-ups"&gt;8. New possibilities matter more than the speed-ups&lt;/h2&gt;
&lt;p&gt;The flip side of &amp;ldquo;some apps shouldn&amp;rsquo;t exist&amp;rdquo; is that some products could not have existed before. Karpathy&amp;rsquo;s knowledge-base project is the example. Take a pile of documents, ask the LLM to recompile them into a wiki, surface the connections you would never have stitched together by hand.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;ldquo;This is not even a program. This is not something that could exist before, because there was no code that would create a knowledge base based on a bunch of facts. But now you can just take these documents and basically recompile them in a different way&amp;hellip; I almost think that that&amp;rsquo;s more exciting.&amp;rdquo;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;If you only ask what gets faster, you will miss the more interesting question, which is what becomes possible at all.&lt;/p&gt;
&lt;h2 id="9-jagged-intelligence-ghosts-not-animals"&gt;9. Jagged intelligence: ghosts, not animals&lt;/h2&gt;
&lt;p&gt;Karpathy&amp;rsquo;s metaphor: we are not building animals. Animal intelligence comes with intrinsic motivation, embodiment, drives shaped by evolution. What we have instead is more like a ghost. A statistical simulator shaped by pre-training, with RL bolted on.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;ldquo;These things are not animal intelligences. Like, if you yell at them, they&amp;rsquo;re not going to work better. Or worse. Or it doesn&amp;rsquo;t have any impact. And it&amp;rsquo;s all just kind of these statistical simulation circuits where the substrate is pre-training. So, statistics. And then there&amp;rsquo;s RL bolting on top.&amp;rdquo;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;The practical takeaway is to stop reasoning about LLMs by analogy to humans. Be suspicious of where the model seems confident, probe the edges, and figure out which circuits your task is actually landing in.&lt;/p&gt;
&lt;h2 id="10-build-agent-native-infrastructure"&gt;10. Build agent-native infrastructure&lt;/h2&gt;
&lt;p&gt;For infra builders, Karpathy&amp;rsquo;s pet peeve is also the opportunity:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;ldquo;Why are people still telling me what to do? Like, I don&amp;rsquo;t want to do anything. What is the thing I should copy-paste to my agent?&amp;rdquo;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Rebuild the developer stack so the primary consumer of docs, configs, APIs, and deployment flows is an agent rather than a human. Data structures should be legible to LLMs by default, and sensors and actuators over the world should sit behind agent-callable interfaces.&lt;/p&gt;
&lt;p&gt;His test: can you say &amp;ldquo;build and deploy MenuGen&amp;rdquo; and never touch a settings panel? When the answer is yes, the infrastructure has caught up.&lt;/p&gt;
&lt;h2 id="11-hire-for-big-projects-not-puzzles"&gt;11. Hire for big projects, not puzzles&lt;/h2&gt;
&lt;p&gt;A direct shot at hiring managers. Most companies have not refactored their interview loops for the agentic era.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;ldquo;Hiring has to look like, give me a really big project and see someone implement that big project. Like, let&amp;rsquo;s write, say, a Twitter clone for agents, and then make it really good, make it really secure, and then have some agents simulate some activity on this Twitter. And then I&amp;rsquo;m going to use 10 Codex 5.4-X-high to try to break your website.&amp;rdquo;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Whiteboard puzzles measure the wrong thing. If your interview loop has not changed since 2022, you are selecting for the previous era.&lt;/p&gt;
&lt;h2 id="12-imagine-the-weird-endpoint"&gt;12. Imagine the weird endpoint&lt;/h2&gt;
&lt;p&gt;The closing speculation is genuinely strange:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;ldquo;In the early days of computing, people were a little bit confused as to whether computers would look like calculators or computers would look like neural nets. And in the &amp;rsquo;50s and &amp;rsquo;60s, it was not really obvious which way it would go&amp;hellip; You could imagine that a lot of this will flip and that the neural net becomes kind of the host process, and the CPUs become kind of the coprocessor.&amp;rdquo;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;UIs diffusion-rendered moment by moment from raw video and audio. No apps in between.&lt;/p&gt;
&lt;p&gt;You do not have to buy this exact picture. The point is simply that the linear extrapolation, the same software but smarter, is almost certainly the wrong frame for where this ends up.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Based on Andrej Karpathy&amp;rsquo;s &lt;a href="https://www.youtube.com/watch?v=96jN2OCOfLs"&gt;interview with Sequoia&lt;/a&gt; at AI Ascent&lt;/em&gt;&lt;/p&gt;</description></item><item><title>F3ED Can't Call an Ace: Fixing a NeurIPS 2024 Tennis Model</title><link>https://philippdubach.com/posts/f3ed-cant-call-an-ace-fixing-a-neurips-2024-tennis-model/</link><pubDate>Wed, 29 Apr 2026 00:00:00 +0200</pubDate><author>me@philippdubach.com (Philipp D. Dubach)</author><guid>https://philippdubach.com/posts/f3ed-cant-call-an-ace-fixing-a-neurips-2024-tennis-model/</guid><description>&lt;p&gt;I built a tennis broadcast pipeline this spring and ended up running F3ED, the NeurIPS 2024 shot detector, on a couple of ATP Challenger matches. F3ED is a good model. It also kept labeling clear aces as &amp;ldquo;unforced errors&amp;rdquo;, which is what this post is about. Code: &lt;a href="https://github.com/philippdubach/tennis-vision"&gt;github.com/philippdubach/tennis-vision&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;F3ED (&lt;a href="https://openreview.net/forum?id=Y23LZxN9eU"&gt;NeurIPS 2024&lt;/a&gt;) detects shots well. The catch is the outcome head, which has 4 classes: &lt;code&gt;in&lt;/code&gt;, &lt;code&gt;winner&lt;/code&gt;, &lt;code&gt;forced-err&lt;/code&gt;, &lt;code&gt;unforced-err&lt;/code&gt;. There&amp;rsquo;s no class for &lt;code&gt;ace&lt;/code&gt;, &lt;code&gt;double_fault&lt;/code&gt;, or &lt;code&gt;first_serve_fault&lt;/code&gt;. Those events aren&amp;rsquo;t shot properties; they&amp;rsquo;re score-grammar, and they need state from outside the shot itself.&lt;/p&gt;
&lt;p&gt;I audited 11 single-shot serve rallies F3ED labeled &lt;code&gt;unforced-err&lt;/code&gt;. 7 are first-serve-faults. 1 is an ace. Only 3 are genuine unforced-errors. 73% mislabeled by tennis&amp;rsquo;s own definition.&lt;/p&gt;
&lt;p&gt;The fix is a 30-line reconciler that reads the scoreboard. OCR isn&amp;rsquo;t novel here. What I haven&amp;rsquo;t seen anyone do is plug it back into runtime label correction, which is what makes the difference. N=44 rallies across two matches; this is a hypothesis, not a finding. The structural argument doesn&amp;rsquo;t depend on N.&lt;/p&gt;
&lt;h2 id="the-current-pipeline"&gt;The current pipeline&lt;/h2&gt;
&lt;p&gt;Two phases, with a serializable artifact between them:&lt;/p&gt;
&lt;figure class="post-figure" style="width: 80%; margin: 1.5rem auto;"&gt;
&lt;button type="button" class="img-trigger" data-lightbox-target="lightbox-00_architecture-png-0" aria-label="View full-size image"&gt;
&lt;picture class="img-lightbox"&gt;
&lt;source media="(max-width: 768px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=320,quality=80,format=auto/00_architecture.png 320w,
https://static.philippdubach.com/cdn-cgi/image/width=480,quality=80,format=auto/00_architecture.png 480w,
https://static.philippdubach.com/cdn-cgi/image/width=640,quality=80,format=auto/00_architecture.png 640w,
https://static.philippdubach.com/cdn-cgi/image/width=960,quality=80,format=auto/00_architecture.png 960w,
https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/00_architecture.png 1200w"
sizes="(max-width: 768px) 80vw, 576px"&gt;
&lt;source media="(max-width: 1024px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=768,quality=80,format=auto/00_architecture.png 768w,
https://static.philippdubach.com/cdn-cgi/image/width=1024,quality=80,format=auto/00_architecture.png 1024w,
https://static.philippdubach.com/cdn-cgi/image/width=1440,quality=80,format=auto/00_architecture.png 1440w"
sizes="(max-width: 768px) 80vw, 576px"&gt;
&lt;source media="(min-width: 1025px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/00_architecture.png 1200w,
https://static.philippdubach.com/cdn-cgi/image/width=1600,quality=80,format=auto/00_architecture.png 1600w,
https://static.philippdubach.com/cdn-cgi/image/width=2000,quality=80,format=auto/00_architecture.png 2000w"
sizes="(max-width: 768px) 80vw, 576px"&gt;
&lt;img src="https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/00_architecture.png"
alt="Pipeline architecture diagram showing Phase 1 GPU detection, the upstream.npz boundary, and Phase 2 local CPU stages with the score-delta reconciler highlighted as the key contribution"
class=""
width="1744"
height="816"
loading="lazy"
decoding="async"&gt;
&lt;/picture&gt;
&lt;/button&gt;
&lt;/figure&gt;
&lt;dialog id="lightbox-00_architecture-png-0" class="lightbox-dialog" aria-label="Full-size image" data-hires="https://static.philippdubach.com/cdn-cgi/image/width=2000,quality=85,format=auto/00_architecture.png"&gt;
&lt;form method="dialog" class="lightbox-close-form"&gt;
&lt;button type="submit" class="lightbox-close" aria-label="Close"&gt;×&lt;/button&gt;
&lt;/form&gt;
&lt;img alt="Pipeline architecture diagram showing Phase 1 GPU detection, the upstream.npz boundary, and Phase 2 local CPU stages with the score-delta reconciler highlighted as the key contribution" decoding="async"&gt;
&lt;/dialog&gt;
&lt;p&gt;&lt;code&gt;upstream.npz&lt;/code&gt; is a 5-field dataclass (&lt;code&gt;ball_track&lt;/code&gt;, &lt;code&gt;homography_matrices&lt;/code&gt;, &lt;code&gt;kps_court&lt;/code&gt;, &lt;code&gt;persons_top/bottom&lt;/code&gt;, &lt;code&gt;bounces&lt;/code&gt;). It&amp;rsquo;s the contract between the GPU-bound detection layer and everything else. You re-run Phase 2 in seconds and don&amp;rsquo;t pay the GPU bill again until Phase 1 inputs change. This was a boring early decision that quietly carried the project. Every iteration runs in ~10 minutes instead of needing a fresh Colab session.&lt;/p&gt;
&lt;p&gt;The score-delta reconciler sits at the end of Phase 2. It sees F3ED&amp;rsquo;s per-shot taxonomy and the OCR-derived score states. When they disagree, it overrides the outcome label.&lt;/p&gt;
&lt;p&gt;Quality on TenniSet V006 (28 ground-truth points across 20 minutes, with ±12-frame tolerance):&lt;/p&gt;
&lt;figure class="post-figure" style="width: 80%; margin: 1.5rem auto;"&gt;
&lt;button type="button" class="img-trigger" data-lightbox-target="lightbox-table_01_benchmarks-png-1" aria-label="View full-size image"&gt;
&lt;picture class="img-lightbox"&gt;
&lt;source media="(max-width: 768px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=320,quality=80,format=auto/table_01_benchmarks.png 320w,
https://static.philippdubach.com/cdn-cgi/image/width=480,quality=80,format=auto/table_01_benchmarks.png 480w,
https://static.philippdubach.com/cdn-cgi/image/width=640,quality=80,format=auto/table_01_benchmarks.png 640w,
https://static.philippdubach.com/cdn-cgi/image/width=960,quality=80,format=auto/table_01_benchmarks.png 960w,
https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/table_01_benchmarks.png 1200w"
sizes="(max-width: 768px) 80vw, 576px"&gt;
&lt;source media="(max-width: 1024px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=768,quality=80,format=auto/table_01_benchmarks.png 768w,
https://static.philippdubach.com/cdn-cgi/image/width=1024,quality=80,format=auto/table_01_benchmarks.png 1024w,
https://static.philippdubach.com/cdn-cgi/image/width=1440,quality=80,format=auto/table_01_benchmarks.png 1440w"
sizes="(max-width: 768px) 80vw, 576px"&gt;
&lt;source media="(min-width: 1025px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/table_01_benchmarks.png 1200w,
https://static.philippdubach.com/cdn-cgi/image/width=1600,quality=80,format=auto/table_01_benchmarks.png 1600w,
https://static.philippdubach.com/cdn-cgi/image/width=2000,quality=80,format=auto/table_01_benchmarks.png 2000w"
sizes="(max-width: 768px) 80vw, 576px"&gt;
&lt;img src="https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/table_01_benchmarks.png"
alt="Detector benchmark table on TenniSet V006 showing F3ED pretrained achieves the highest F1 of 0.54 with 109 TP, 48 FP, 55 FN, 0.53 recall and 0.69 precision, beating E2E-Spot and rule-based baselines that both score 0.50 F1"
class=""
width="1392"
height="362"
loading="lazy"
decoding="async"&gt;
&lt;/picture&gt;
&lt;/button&gt;
&lt;/figure&gt;
&lt;dialog id="lightbox-table_01_benchmarks-png-1" class="lightbox-dialog" aria-label="Full-size image" data-hires="https://static.philippdubach.com/cdn-cgi/image/width=2000,quality=85,format=auto/table_01_benchmarks.png"&gt;
&lt;form method="dialog" class="lightbox-close-form"&gt;
&lt;button type="submit" class="lightbox-close" aria-label="Close"&gt;×&lt;/button&gt;
&lt;/form&gt;
&lt;img alt="Detector benchmark table on TenniSet V006 showing F3ED pretrained achieves the highest F1 of 0.54 with 109 TP, 48 FP, 55 FN, 0.53 recall and 0.69 precision, beating E2E-Spot and rule-based baselines that both score 0.50 F1" decoding="async"&gt;
&lt;/dialog&gt;
&lt;p&gt;F3ED has the highest F1, with fewer false positives at comparable recall. I&amp;rsquo;m not arguing it&amp;rsquo;s broken. I&amp;rsquo;m arguing about a specific thing it can&amp;rsquo;t do alone.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Note: numbers above are from the V006 baseline run on commit &lt;code&gt;0babb71&lt;/code&gt; (2026-04-23). Bounce-dedup and reconciler work since then shift F1 marginally upward; full re-eval pending a Phase-1 v8x rerun on V006.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id="the-audit"&gt;The audit&lt;/h2&gt;
&lt;p&gt;Tennis scoring is a finite-state machine. A point ends in exactly one of:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;ace&lt;/code&gt;: server&amp;rsquo;s first or second serve, receiver doesn&amp;rsquo;t return&lt;br&gt;
&lt;code&gt;double_fault&lt;/code&gt;: both serves miss&lt;br&gt;
&lt;code&gt;first_serve_fault&lt;/code&gt;: first serve misses; second serve still to come &lt;br&gt;
multi-shot rally → &lt;code&gt;winner&lt;/code&gt; / &lt;code&gt;forced-err&lt;/code&gt; / &lt;code&gt;unforced-err&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;F3ED can only emit the bottom row. The first three depend on what happens between shots, or on what doesn&amp;rsquo;t happen at all, and the model doesn&amp;rsquo;t see between-shot stuff. It also has no class to put the answer in if it did: &lt;code&gt;ace&lt;/code&gt;, &lt;code&gt;double_fault&lt;/code&gt;, and &lt;code&gt;first_serve_fault&lt;/code&gt; are not in F3ED&amp;rsquo;s published label set. The closest available emission for any of them is &lt;code&gt;serve&lt;/code&gt; + &lt;code&gt;unforced-err&lt;/code&gt;. The model can&amp;rsquo;t learn to distinguish them even if the training data did, because there&amp;rsquo;s nowhere to put the answer.&lt;/p&gt;
&lt;p&gt;Here&amp;rsquo;s what tipped me off. set1 R4, t=107s:&lt;/p&gt;
&lt;div class="code-block"&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;F3ED raw_elements: [&amp;#39;T&amp;#39;, &amp;#39;ad&amp;#39;, &amp;#39;near&amp;#39;, &amp;#39;serve&amp;#39;, &amp;#39;unforced-err&amp;#39;]
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Score before rally: Poljicak 0 Dodig 0 (game start)
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Score after rally: Poljicak 15 Dodig 0&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Server scored, receiver didn&amp;rsquo;t move, F3ED labeled the serve &amp;ldquo;unforced error&amp;rdquo;. You can&amp;rsquo;t hit an unforced error and win the point. It was an ace, and F3ED doesn&amp;rsquo;t have an &amp;ldquo;ace&amp;rdquo; button to press, so it picked the closest available label.&lt;/p&gt;
&lt;p&gt;The reconciler is short. For each single-shot serve rally, read the scoreboard before and after:&lt;/p&gt;
&lt;div class="code-block"&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Verbatim from src/tennis_vision/scoreboard/reconcile.py&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;_POINT_RANK&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;0&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;15&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;30&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;40&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;AD&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;_delta_points_won&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;before&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;ScoreState&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;after&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;ScoreState&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="nb"&gt;tuple&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nb"&gt;int&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;int&lt;/span&gt;&lt;span class="p"&gt;]:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;&amp;#34;&amp;#34;(top_pts_won, bot_pts_won) between two states. A game-counter increment
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s2"&gt; counts as +1 (the lost-side rolls back to 0); same-game incremental points
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s2"&gt; are tracked via the points-rank delta.&amp;#34;&amp;#34;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;top&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;max&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;after&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;tg&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="n"&gt;before&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;tg&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;bot&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;max&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;after&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;bg&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="n"&gt;before&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;bg&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;after&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;tg&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="n"&gt;before&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;tg&lt;/span&gt; &lt;span class="ow"&gt;and&lt;/span&gt; &lt;span class="n"&gt;after&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;bg&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="n"&gt;before&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;bg&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;top&lt;/span&gt; &lt;span class="o"&gt;+=&lt;/span&gt; &lt;span class="nb"&gt;max&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;_POINT_RANK&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;after&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;tp&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="n"&gt;_POINT_RANK&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;before&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;tp&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;bot&lt;/span&gt; &lt;span class="o"&gt;+=&lt;/span&gt; &lt;span class="nb"&gt;max&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;_POINT_RANK&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;after&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;bp&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="n"&gt;_POINT_RANK&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;before&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;bp&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;top&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;bot&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;_classify_single_shot_serve&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;rally&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;before&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;after&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="nb"&gt;tuple&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;]:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;top_d&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;bot_d&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;_delta_points_won&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;before&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;after&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;server_d&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;top_d&lt;/span&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;rally&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;server&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;top&amp;#39;&lt;/span&gt; &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="n"&gt;bot_d&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;receiver_d&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;bot_d&lt;/span&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;rally&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;server&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;top&amp;#39;&lt;/span&gt; &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="n"&gt;top_d&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;receiver&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;bottom&amp;#39;&lt;/span&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;rally&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;server&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;top&amp;#39;&lt;/span&gt; &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;top&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;server_d&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt; &lt;span class="ow"&gt;and&lt;/span&gt; &lt;span class="n"&gt;receiver_d&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;first_serve_fault&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;unknown&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;ocr_score_delta_first_serve_fault&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;server_d&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt; &lt;span class="ow"&gt;and&lt;/span&gt; &lt;span class="n"&gt;receiver_d&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;ace&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;rally&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;server&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;ocr_score_delta_ace&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;receiver_d&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt; &lt;span class="ow"&gt;and&lt;/span&gt; &lt;span class="n"&gt;server_d&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;double_fault&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;receiver&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;ocr_score_delta_double_fault&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;unknown&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;rally&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;winner&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;rally&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;method&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;+ocr_inconclusive&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;That&amp;rsquo;s the whole reconciler: 23 lines, microseconds per rally. The OCR sampling pass that produces the &lt;code&gt;before&lt;/code&gt; / &lt;code&gt;after&lt;/code&gt; states runs once during Phase 2 (~1 Hz over the broadcast); the reconciler itself is a constant-time lookup against the resulting state timeline.&lt;/p&gt;
&lt;p&gt;Running it across set1 + match2 (44 rallies, 11 single-shot serve rallies) shows the structure F3ED missed:&lt;/p&gt;
&lt;figure class="post-figure" style="width: 65%; margin: 1.5rem auto;"&gt;
&lt;button type="button" class="img-trigger" data-lightbox-target="lightbox-table_02_outcomes-png-3" aria-label="View full-size image"&gt;
&lt;picture class="img-lightbox"&gt;
&lt;source media="(max-width: 768px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=320,quality=80,format=auto/table_02_outcomes.png 320w,
https://static.philippdubach.com/cdn-cgi/image/width=480,quality=80,format=auto/table_02_outcomes.png 480w,
https://static.philippdubach.com/cdn-cgi/image/width=640,quality=80,format=auto/table_02_outcomes.png 640w,
https://static.philippdubach.com/cdn-cgi/image/width=960,quality=80,format=auto/table_02_outcomes.png 960w,
https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/table_02_outcomes.png 1200w"
sizes="(max-width: 768px) 65vw, 468px"&gt;
&lt;source media="(max-width: 1024px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=768,quality=80,format=auto/table_02_outcomes.png 768w,
https://static.philippdubach.com/cdn-cgi/image/width=1024,quality=80,format=auto/table_02_outcomes.png 1024w,
https://static.philippdubach.com/cdn-cgi/image/width=1440,quality=80,format=auto/table_02_outcomes.png 1440w"
sizes="(max-width: 768px) 65vw, 468px"&gt;
&lt;source media="(min-width: 1025px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/table_02_outcomes.png 1200w,
https://static.philippdubach.com/cdn-cgi/image/width=1600,quality=80,format=auto/table_02_outcomes.png 1600w,
https://static.philippdubach.com/cdn-cgi/image/width=2000,quality=80,format=auto/table_02_outcomes.png 2000w"
sizes="(max-width: 768px) 65vw, 468px"&gt;
&lt;img src="https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/table_02_outcomes.png"
alt="Confusion table showing how F3ED labels map to OCR-grounded reality: of eleven unforced-err labels, seven are actually first-serve-faults, one is an ace, and only three are genuine unforced errors, while winner and in labels are correct"
class=""
width="1074"
height="487"
loading="lazy"
decoding="async"&gt;
&lt;/picture&gt;
&lt;/button&gt;
&lt;/figure&gt;
&lt;dialog id="lightbox-table_02_outcomes-png-3" class="lightbox-dialog" aria-label="Full-size image" data-hires="https://static.philippdubach.com/cdn-cgi/image/width=2000,quality=85,format=auto/table_02_outcomes.png"&gt;
&lt;form method="dialog" class="lightbox-close-form"&gt;
&lt;button type="submit" class="lightbox-close" aria-label="Close"&gt;×&lt;/button&gt;
&lt;/form&gt;
&lt;img alt="Confusion table showing how F3ED labels map to OCR-grounded reality: of eleven unforced-err labels, seven are actually first-serve-faults, one is an ace, and only three are genuine unforced errors, while winner and in labels are correct" decoding="async"&gt;
&lt;/dialog&gt;
&lt;figure class="post-figure" style="width: 80%; margin: 1.5rem auto;"&gt;
&lt;button type="button" class="img-trigger" data-lightbox-target="lightbox-01_outcome_transitions-png-4" aria-label="View full-size image"&gt;
&lt;picture class="img-lightbox"&gt;
&lt;source media="(max-width: 768px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=320,quality=80,format=auto/01_outcome_transitions.png 320w,
https://static.philippdubach.com/cdn-cgi/image/width=480,quality=80,format=auto/01_outcome_transitions.png 480w,
https://static.philippdubach.com/cdn-cgi/image/width=640,quality=80,format=auto/01_outcome_transitions.png 640w,
https://static.philippdubach.com/cdn-cgi/image/width=960,quality=80,format=auto/01_outcome_transitions.png 960w,
https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/01_outcome_transitions.png 1200w"
sizes="(max-width: 768px) 80vw, 576px"&gt;
&lt;source media="(max-width: 1024px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=768,quality=80,format=auto/01_outcome_transitions.png 768w,
https://static.philippdubach.com/cdn-cgi/image/width=1024,quality=80,format=auto/01_outcome_transitions.png 1024w,
https://static.philippdubach.com/cdn-cgi/image/width=1440,quality=80,format=auto/01_outcome_transitions.png 1440w"
sizes="(max-width: 768px) 80vw, 576px"&gt;
&lt;source media="(min-width: 1025px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/01_outcome_transitions.png 1200w,
https://static.philippdubach.com/cdn-cgi/image/width=1600,quality=80,format=auto/01_outcome_transitions.png 1600w,
https://static.philippdubach.com/cdn-cgi/image/width=2000,quality=80,format=auto/01_outcome_transitions.png 2000w"
sizes="(max-width: 768px) 80vw, 576px"&gt;
&lt;img src="https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/01_outcome_transitions.png"
alt="Sankey-style chart showing F3ED outcome labels transitioning to OCR-grounded ground truth, with seven of eleven unforced errors reclassified as first-serve faults, one as an ace, and only three remaining as genuine unforced errors"
class=""
width="1216"
height="623"
loading="lazy"
decoding="async"&gt;
&lt;/picture&gt;
&lt;/button&gt;
&lt;/figure&gt;
&lt;dialog id="lightbox-01_outcome_transitions-png-4" class="lightbox-dialog" aria-label="Full-size image" data-hires="https://static.philippdubach.com/cdn-cgi/image/width=2000,quality=85,format=auto/01_outcome_transitions.png"&gt;
&lt;form method="dialog" class="lightbox-close-form"&gt;
&lt;button type="submit" class="lightbox-close" aria-label="Close"&gt;×&lt;/button&gt;
&lt;/form&gt;
&lt;img alt="Sankey-style chart showing F3ED outcome labels transitioning to OCR-grounded ground truth, with seven of eleven unforced errors reclassified as first-serve faults, one as an ace, and only three remaining as genuine unforced errors" decoding="async"&gt;
&lt;/dialog&gt;
&lt;p&gt;8 of 11 unforced-err serves (73%) are something else by tennis&amp;rsquo;s actual rules. All 8 got the right label after reconciliation. Whether 73% holds up on a larger sample is a real question; the audit framework would answer it cheaply on more clips. The remaining error budget is OCR layout failures (next section) and ambiguous score deltas in multi-shot rallies, where neither F3ED nor OCR alone tells &lt;code&gt;winner&lt;/code&gt; from &lt;code&gt;forced-err&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;The point here isn&amp;rsquo;t that F3ED is wrong. The model emits the labels it has classes for, which is what models do. The point is that shot detection and outcome classification look like the same problem and aren&amp;rsquo;t, and on broadcast tennis the cheapest outcome ground truth is text the broadcaster has already burned into the corner of every frame.&lt;/p&gt;
&lt;h2 id="does-the-ocr-actually-work"&gt;Does the OCR actually work?&lt;/h2&gt;
&lt;p&gt;Worth asking. The whole reconciler depends on the scoreboard reader being right. Honest answer: it depends heavily on whether the layout config is tuned. When it is, OCR is reliable. When it isn&amp;rsquo;t, individual fields collapse.&lt;/p&gt;
&lt;p&gt;The pipeline is EasyOCR cropping a per-layout ROI (&lt;code&gt;split_open_1080p&lt;/code&gt;, &lt;code&gt;split_open_720p&lt;/code&gt;, &lt;code&gt;bloomfield_720p&lt;/code&gt;), then a tennis-grammar decoder that rejects illegal transitions (&lt;code&gt;40-30&lt;/code&gt; → &lt;code&gt;0-0&lt;/code&gt; without a game break, &lt;code&gt;AD-15&lt;/code&gt;, and so on) and majority-votes within a sample window.&lt;/p&gt;
&lt;p&gt;Field-parse rates on the two clips in this audit, sampled at ~1 Hz:&lt;/p&gt;
&lt;figure class="post-figure" style="width: 90%; margin: 1.5rem auto;"&gt;
&lt;button type="button" class="img-trigger" data-lightbox-target="lightbox-table_03_ocr_parse_rates-png-6" aria-label="View full-size image"&gt;
&lt;picture class="img-lightbox"&gt;
&lt;source media="(max-width: 768px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=320,quality=80,format=auto/table_03_ocr_parse_rates.png 320w,
https://static.philippdubach.com/cdn-cgi/image/width=480,quality=80,format=auto/table_03_ocr_parse_rates.png 480w,
https://static.philippdubach.com/cdn-cgi/image/width=640,quality=80,format=auto/table_03_ocr_parse_rates.png 640w,
https://static.philippdubach.com/cdn-cgi/image/width=960,quality=80,format=auto/table_03_ocr_parse_rates.png 960w,
https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/table_03_ocr_parse_rates.png 1200w"
sizes="(max-width: 768px) 90vw, 648px"&gt;
&lt;source media="(max-width: 1024px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=768,quality=80,format=auto/table_03_ocr_parse_rates.png 768w,
https://static.philippdubach.com/cdn-cgi/image/width=1024,quality=80,format=auto/table_03_ocr_parse_rates.png 1024w,
https://static.philippdubach.com/cdn-cgi/image/width=1440,quality=80,format=auto/table_03_ocr_parse_rates.png 1440w"
sizes="(max-width: 768px) 90vw, 648px"&gt;
&lt;source media="(min-width: 1025px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/table_03_ocr_parse_rates.png 1200w,
https://static.philippdubach.com/cdn-cgi/image/width=1600,quality=80,format=auto/table_03_ocr_parse_rates.png 1600w,
https://static.philippdubach.com/cdn-cgi/image/width=2000,quality=80,format=auto/table_03_ocr_parse_rates.png 2000w"
sizes="(max-width: 768px) 90vw, 648px"&gt;
&lt;img src="https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/table_03_ocr_parse_rates.png"
alt="OCR field-parse rates table showing set1 with split_open_1080p layout achieves near-perfect parsing at 100 percent for games and 98.7 percent for points, while match2 with mistuned split_open_720p layout drops to 45.6 percent on bot_games"
class=""
width="2014"
height="300"
loading="lazy"
decoding="async"&gt;
&lt;/picture&gt;
&lt;/button&gt;
&lt;/figure&gt;
&lt;dialog id="lightbox-table_03_ocr_parse_rates-png-6" class="lightbox-dialog" aria-label="Full-size image" data-hires="https://static.philippdubach.com/cdn-cgi/image/width=2000,quality=85,format=auto/table_03_ocr_parse_rates.png"&gt;
&lt;form method="dialog" class="lightbox-close-form"&gt;
&lt;button type="submit" class="lightbox-close" aria-label="Close"&gt;×&lt;/button&gt;
&lt;/form&gt;
&lt;img alt="OCR field-parse rates table showing set1 with split_open_1080p layout achieves near-perfect parsing at 100 percent for games and 98.7 percent for points, while match2 with mistuned split_open_720p layout drops to 45.6 percent on bot_games" decoding="async"&gt;
&lt;/dialog&gt;
&lt;p&gt;set1 is essentially perfect. match2&amp;rsquo;s &lt;code&gt;bot_games&lt;/code&gt; parse drops below half because the ROI for &lt;code&gt;split_open_720p&lt;/code&gt; is mistuned and crops too tight on the digit. Annoying, but the grammar decoder rescues enough frames to emit 28 valid score states across 1002 samples, which is plenty. The reconciler degrades gracefully: rallies without a clean before/after pair fall back to F3ED&amp;rsquo;s raw outcome rather than crashing.&lt;/p&gt;
&lt;p&gt;The fix for match2 is layout cleanup, not architecture. None of these components are novel. &lt;a href="https://arxiv.org/abs/2603.13397"&gt;TennisExpert&lt;/a&gt; (Liu et al. 2026, the paper that kicked off this whole project for me) and the TenniSet eval framework (Faulkner &amp;amp; Dick, DICTA 2017) both use OCR + grammar at the labeling stage. What I haven&amp;rsquo;t seen anyone do is plug the same signal back into runtime label correction.&lt;/p&gt;
&lt;h2 id="putting-it-in-the-render"&gt;Putting it in the render&lt;/h2&gt;
&lt;p&gt;After reconciling, the corrected outcome flows back onto the last shot of the rally and surfaces in the rolling event-timeline panel. Here&amp;rsquo;s a single point rendered end-to-end with all overlays live:&lt;/p&gt;
&lt;div class="video-loop video-loop--width-80 video-loop--16-9"&gt;
&lt;video controls muted loop playsinline preload="metadata" disablepictureinpicture controlslist="nodownload noremoteplayback"
aria-label="Looping tennis broadcast clip showing the rendered overlay with rally panel, scoreboard echo, per-player stats, and direction labels updating live during a single point" data-ambient-video&gt;
&lt;source src="https://static.philippdubach.com/tennis_vision-example-point-mobile.mp4" type="video/mp4" media="(max-width: 768px)"&gt;
&lt;source src="https://static.philippdubach.com/tennis_vision-example-point.mp4" type="video/mp4"&gt;
&lt;/video&gt;
&lt;/div&gt;
&lt;p&gt;Same set1 R4 ace, mid-frame: Top-left RALLY panel reads &lt;code&gt;0.0s P2 Serve T ACE&lt;/code&gt;. The &lt;code&gt;ACE&lt;/code&gt; suffix replaced F3ED&amp;rsquo;s &lt;code&gt;UE&lt;/code&gt;. The scoreboard echo (bottom-left) mirrors what triggered the correction (Poljicak just picked up 15), and the per-player stats panel (bottom-right) ticks his ace counter by one. The model&amp;rsquo;s wrong answer gets quietly corrected because a different signal contradicted it. That&amp;rsquo;s the whole post in one frame.&lt;/p&gt;
&lt;figure class="post-figure" style="width: 80%; margin: 1.5rem auto;"&gt;
&lt;button type="button" class="img-trigger" data-lightbox-target="lightbox-05_set1_ace_corrected-png-8" aria-label="View full-size image"&gt;
&lt;picture class="img-lightbox"&gt;
&lt;source media="(max-width: 768px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=320,quality=80,format=auto/05_set1_ace_corrected.png 320w,
https://static.philippdubach.com/cdn-cgi/image/width=480,quality=80,format=auto/05_set1_ace_corrected.png 480w,
https://static.philippdubach.com/cdn-cgi/image/width=640,quality=80,format=auto/05_set1_ace_corrected.png 640w,
https://static.philippdubach.com/cdn-cgi/image/width=960,quality=80,format=auto/05_set1_ace_corrected.png 960w,
https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/05_set1_ace_corrected.png 1200w"
sizes="(max-width: 768px) 80vw, 576px"&gt;
&lt;source media="(max-width: 1024px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=768,quality=80,format=auto/05_set1_ace_corrected.png 768w,
https://static.philippdubach.com/cdn-cgi/image/width=1024,quality=80,format=auto/05_set1_ace_corrected.png 1024w,
https://static.philippdubach.com/cdn-cgi/image/width=1440,quality=80,format=auto/05_set1_ace_corrected.png 1440w"
sizes="(max-width: 768px) 80vw, 576px"&gt;
&lt;source media="(min-width: 1025px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/05_set1_ace_corrected.png 1200w,
https://static.philippdubach.com/cdn-cgi/image/width=1600,quality=80,format=auto/05_set1_ace_corrected.png 1600w,
https://static.philippdubach.com/cdn-cgi/image/width=2000,quality=80,format=auto/05_set1_ace_corrected.png 2000w"
sizes="(max-width: 768px) 80vw, 576px"&gt;
&lt;img src="https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/05_set1_ace_corrected.png"
alt="Rendered tennis broadcast frame showing the corrected ace label in the rally panel reading 0.0s P2 Serve T ACE, with the scoreboard echo confirming Poljicak picked up 15 and the per-player stats panel ticking the ace counter by one"
class=""
width="1920"
height="1080"
loading="lazy"
decoding="async"&gt;
&lt;/picture&gt;
&lt;/button&gt;
&lt;/figure&gt;
&lt;dialog id="lightbox-05_set1_ace_corrected-png-8" class="lightbox-dialog" aria-label="Full-size image" data-hires="https://static.philippdubach.com/cdn-cgi/image/width=2000,quality=85,format=auto/05_set1_ace_corrected.png"&gt;
&lt;form method="dialog" class="lightbox-close-form"&gt;
&lt;button type="submit" class="lightbox-close" aria-label="Close"&gt;×&lt;/button&gt;
&lt;/form&gt;
&lt;img alt="Rendered tennis broadcast frame showing the corrected ace label in the rally panel reading 0.0s P2 Serve T ACE, with the scoreboard echo confirming Poljicak picked up 15 and the per-player stats panel ticking the ace counter by one" decoding="async"&gt;
&lt;/dialog&gt;
&lt;p&gt;The same panel surfaces F3ED&amp;rsquo;s other labels in real time: direction (&lt;code&gt;T&lt;/code&gt; for down-the-T serves, &lt;code&gt;CC&lt;/code&gt;/&lt;code&gt;DL&lt;/code&gt;/&lt;code&gt;DM&lt;/code&gt;/&lt;code&gt;II&lt;/code&gt;/&lt;code&gt;IO&lt;/code&gt; for groundstrokes) and shot type when not a basic groundstroke (&lt;code&gt;Slice&lt;/code&gt;, &lt;code&gt;Volley&lt;/code&gt;, &lt;code&gt;Drop&lt;/code&gt;, &lt;code&gt;Lob&lt;/code&gt;).&lt;/p&gt;
&lt;figure class="post-figure" style="width: 80%; margin: 1.5rem auto;"&gt;
&lt;button type="button" class="img-trigger" data-lightbox-target="lightbox-06_match2_rally_panel-png-9" aria-label="View full-size image"&gt;
&lt;picture class="img-lightbox"&gt;
&lt;source media="(max-width: 768px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=320,quality=80,format=auto/06_match2_rally_panel.png 320w,
https://static.philippdubach.com/cdn-cgi/image/width=480,quality=80,format=auto/06_match2_rally_panel.png 480w,
https://static.philippdubach.com/cdn-cgi/image/width=640,quality=80,format=auto/06_match2_rally_panel.png 640w,
https://static.philippdubach.com/cdn-cgi/image/width=960,quality=80,format=auto/06_match2_rally_panel.png 960w,
https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/06_match2_rally_panel.png 1200w"
sizes="(max-width: 768px) 80vw, 576px"&gt;
&lt;source media="(max-width: 1024px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=768,quality=80,format=auto/06_match2_rally_panel.png 768w,
https://static.philippdubach.com/cdn-cgi/image/width=1024,quality=80,format=auto/06_match2_rally_panel.png 1024w,
https://static.philippdubach.com/cdn-cgi/image/width=1440,quality=80,format=auto/06_match2_rally_panel.png 1440w"
sizes="(max-width: 768px) 80vw, 576px"&gt;
&lt;source media="(min-width: 1025px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/06_match2_rally_panel.png 1200w,
https://static.philippdubach.com/cdn-cgi/image/width=1600,quality=80,format=auto/06_match2_rally_panel.png 1600w,
https://static.philippdubach.com/cdn-cgi/image/width=2000,quality=80,format=auto/06_match2_rally_panel.png 2000w"
sizes="(max-width: 768px) 80vw, 576px"&gt;
&lt;img src="https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/06_match2_rally_panel.png"
alt="match2 rally panel rendering F3ED&amp;#39;s 29-class taxonomy in real time, showing direction codes for down-the-line, cross-court, and inside-out groundstrokes alongside shot-type tags like Slice, Volley, Drop, and Lob"
class=""
width="1280"
height="720"
loading="lazy"
decoding="async"&gt;
&lt;/picture&gt;
&lt;/button&gt;
&lt;/figure&gt;
&lt;dialog id="lightbox-06_match2_rally_panel-png-9" class="lightbox-dialog" aria-label="Full-size image" data-hires="https://static.philippdubach.com/cdn-cgi/image/width=2000,quality=85,format=auto/06_match2_rally_panel.png"&gt;
&lt;form method="dialog" class="lightbox-close-form"&gt;
&lt;button type="submit" class="lightbox-close" aria-label="Close"&gt;×&lt;/button&gt;
&lt;/form&gt;
&lt;img alt="match2 rally panel rendering F3ED&amp;#39;s 29-class taxonomy in real time, showing direction codes for down-the-line, cross-court, and inside-out groundstrokes alongside shot-type tags like Slice, Volley, Drop, and Lob" decoding="async"&gt;
&lt;/dialog&gt;
&lt;p&gt;That panel is the F3ED 29-class taxonomy made human-readable, in real time. The reconciler doesn&amp;rsquo;t touch direction or technique. Those are pure shot properties, exactly the regime F3ED is designed for. It only fires on the score-grammar events the model can&amp;rsquo;t see.&lt;/p&gt;
&lt;p&gt;A clean direction histogram comes for free as a side effect. 97 groundstrokes from match2:&lt;/p&gt;
&lt;figure class="post-figure" style="width: 80%; margin: 1.5rem auto;"&gt;
&lt;button type="button" class="img-trigger" data-lightbox-target="lightbox-04_direction_distribution-png-10" aria-label="View full-size image"&gt;
&lt;picture class="img-lightbox"&gt;
&lt;source media="(max-width: 768px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=320,quality=80,format=auto/04_direction_distribution.png 320w,
https://static.philippdubach.com/cdn-cgi/image/width=480,quality=80,format=auto/04_direction_distribution.png 480w,
https://static.philippdubach.com/cdn-cgi/image/width=640,quality=80,format=auto/04_direction_distribution.png 640w,
https://static.philippdubach.com/cdn-cgi/image/width=960,quality=80,format=auto/04_direction_distribution.png 960w,
https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/04_direction_distribution.png 1200w"
sizes="(max-width: 768px) 80vw, 576px"&gt;
&lt;source media="(max-width: 1024px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=768,quality=80,format=auto/04_direction_distribution.png 768w,
https://static.philippdubach.com/cdn-cgi/image/width=1024,quality=80,format=auto/04_direction_distribution.png 1024w,
https://static.philippdubach.com/cdn-cgi/image/width=1440,quality=80,format=auto/04_direction_distribution.png 1440w"
sizes="(max-width: 768px) 80vw, 576px"&gt;
&lt;source media="(min-width: 1025px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/04_direction_distribution.png 1200w,
https://static.philippdubach.com/cdn-cgi/image/width=1600,quality=80,format=auto/04_direction_distribution.png 1600w,
https://static.philippdubach.com/cdn-cgi/image/width=2000,quality=80,format=auto/04_direction_distribution.png 2000w"
sizes="(max-width: 768px) 80vw, 576px"&gt;
&lt;img src="https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/04_direction_distribution.png"
alt="Histogram of groundstroke directions from 97 shots in match2 showing 36 percent down the middle, 31 percent cross-court, 17 percent inside-out, 12 percent down-the-line, and 3 percent inside-in"
class=""
width="1234"
height="623"
loading="lazy"
decoding="async"&gt;
&lt;/picture&gt;
&lt;/button&gt;
&lt;/figure&gt;
&lt;dialog id="lightbox-04_direction_distribution-png-10" class="lightbox-dialog" aria-label="Full-size image" data-hires="https://static.philippdubach.com/cdn-cgi/image/width=2000,quality=85,format=auto/04_direction_distribution.png"&gt;
&lt;form method="dialog" class="lightbox-close-form"&gt;
&lt;button type="submit" class="lightbox-close" aria-label="Close"&gt;×&lt;/button&gt;
&lt;/form&gt;
&lt;img alt="Histogram of groundstroke directions from 97 shots in match2 showing 36 percent down the middle, 31 percent cross-court, 17 percent inside-out, 12 percent down-the-line, and 3 percent inside-in" decoding="async"&gt;
&lt;/dialog&gt;
&lt;p&gt;36% down the middle, 31% cross-court, 17% inside-out, 12% down-the-line, 3% inside-in. The kind of stat broadcasters quote without showing where it came from. Here it&amp;rsquo;s a one-liner over &lt;code&gt;shots.json&lt;/code&gt;.&lt;/p&gt;
&lt;h2 id="things-that-didnt-pay-off"&gt;Things that didn&amp;rsquo;t pay off&lt;/h2&gt;
&lt;p&gt;Two ideas I tried that I expected to be wins. Neither was.&lt;/p&gt;
&lt;h3 id="yolov8x-doesnt-help-at-720p"&gt;YOLOv8x doesn&amp;rsquo;t help at 720p&lt;/h3&gt;
&lt;p&gt;Phase-1 person detector was YOLOv8m. Swapping in v8x looked like a free improvement: COCO AP@small bumps about 5 pp, and the camera-far (&amp;ldquo;top&amp;rdquo;) player on broadcast tennis is the smallest object in the frame, so that&amp;rsquo;s exactly where the gain should land.&lt;/p&gt;
&lt;figure class="post-figure" style="width: 80%; margin: 1.5rem auto;"&gt;
&lt;button type="button" class="img-trigger" data-lightbox-target="lightbox-02_pose_coverage_by_resolution-png-11" aria-label="View full-size image"&gt;
&lt;picture class="img-lightbox"&gt;
&lt;source media="(max-width: 768px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=320,quality=80,format=auto/02_pose_coverage_by_resolution.png 320w,
https://static.philippdubach.com/cdn-cgi/image/width=480,quality=80,format=auto/02_pose_coverage_by_resolution.png 480w,
https://static.philippdubach.com/cdn-cgi/image/width=640,quality=80,format=auto/02_pose_coverage_by_resolution.png 640w,
https://static.philippdubach.com/cdn-cgi/image/width=960,quality=80,format=auto/02_pose_coverage_by_resolution.png 960w,
https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/02_pose_coverage_by_resolution.png 1200w"
sizes="(max-width: 768px) 80vw, 576px"&gt;
&lt;source media="(max-width: 1024px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=768,quality=80,format=auto/02_pose_coverage_by_resolution.png 768w,
https://static.philippdubach.com/cdn-cgi/image/width=1024,quality=80,format=auto/02_pose_coverage_by_resolution.png 1024w,
https://static.philippdubach.com/cdn-cgi/image/width=1440,quality=80,format=auto/02_pose_coverage_by_resolution.png 1440w"
sizes="(max-width: 768px) 80vw, 576px"&gt;
&lt;source media="(min-width: 1025px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/02_pose_coverage_by_resolution.png 1200w,
https://static.philippdubach.com/cdn-cgi/image/width=1600,quality=80,format=auto/02_pose_coverage_by_resolution.png 1600w,
https://static.philippdubach.com/cdn-cgi/image/width=2000,quality=80,format=auto/02_pose_coverage_by_resolution.png 2000w"
sizes="(max-width: 768px) 80vw, 576px"&gt;
&lt;img src="https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/02_pose_coverage_by_resolution.png"
alt="Bar chart comparing top-player pose coverage with YOLOv8m versus YOLOv8x at two resolutions, showing 1080p coverage rising from 70.0 percent to 97.6 percent while 720p coverage stays flat at roughly 70 percent"
class=""
width="1296"
height="620"
loading="lazy"
decoding="async"&gt;
&lt;/picture&gt;
&lt;/button&gt;
&lt;/figure&gt;
&lt;dialog id="lightbox-02_pose_coverage_by_resolution-png-11" class="lightbox-dialog" aria-label="Full-size image" data-hires="https://static.philippdubach.com/cdn-cgi/image/width=2000,quality=85,format=auto/02_pose_coverage_by_resolution.png"&gt;
&lt;form method="dialog" class="lightbox-close-form"&gt;
&lt;button type="submit" class="lightbox-close" aria-label="Close"&gt;×&lt;/button&gt;
&lt;/form&gt;
&lt;img alt="Bar chart comparing top-player pose coverage with YOLOv8m versus YOLOv8x at two resolutions, showing 1080p coverage rising from 70.0 percent to 97.6 percent while 720p coverage stays flat at roughly 70 percent" decoding="async"&gt;
&lt;/dialog&gt;
&lt;p&gt;set1 (1080p): top-player pose coverage 70.0% → 97.6%. match2 (720p): 70.3% → 68.6%, within noise. Two clips isn&amp;rsquo;t a study, but the mechanism is plausible: at 1080p the camera-far player is ~60-100 px tall, the regime where v8x&amp;rsquo;s AP@small advantage fires. At 720p the same player is ~30-50 px, below the COCO scale buckets where -x outperforms -m. The detector can&amp;rsquo;t recover what isn&amp;rsquo;t in the input. If you&amp;rsquo;re scraping ATP Challenger feeds, fight for 1080p sources. Everything downstream compounds on what the detector gives you.&lt;/p&gt;
&lt;h3 id="catboost-over-fires-bounces"&gt;CatBoost over-fires bounces&lt;/h3&gt;
&lt;p&gt;The bounce detector emitted 378 bounces on a 20-min match2 clip with 84 shots, 4.5× the realistic ratio. Most of the noise is the detector lighting up on the same physical bounce across consecutive frames, plus inter-rally footage where the ball is in a player&amp;rsquo;s hand or in a replay close-up.&lt;/p&gt;
&lt;p&gt;Two cheap filters cut 21-27% of false bounces:&lt;/p&gt;
&lt;figure class="post-figure" style="width: 80%; margin: 1.5rem auto;"&gt;
&lt;button type="button" class="img-trigger" data-lightbox-target="lightbox-03_bounce_filter_waterfall-png-12" aria-label="View full-size image"&gt;
&lt;picture class="img-lightbox"&gt;
&lt;source media="(max-width: 768px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=320,quality=80,format=auto/03_bounce_filter_waterfall.png 320w,
https://static.philippdubach.com/cdn-cgi/image/width=480,quality=80,format=auto/03_bounce_filter_waterfall.png 480w,
https://static.philippdubach.com/cdn-cgi/image/width=640,quality=80,format=auto/03_bounce_filter_waterfall.png 640w,
https://static.philippdubach.com/cdn-cgi/image/width=960,quality=80,format=auto/03_bounce_filter_waterfall.png 960w,
https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/03_bounce_filter_waterfall.png 1200w"
sizes="(max-width: 768px) 80vw, 576px"&gt;
&lt;source media="(max-width: 1024px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=768,quality=80,format=auto/03_bounce_filter_waterfall.png 768w,
https://static.philippdubach.com/cdn-cgi/image/width=1024,quality=80,format=auto/03_bounce_filter_waterfall.png 1024w,
https://static.philippdubach.com/cdn-cgi/image/width=1440,quality=80,format=auto/03_bounce_filter_waterfall.png 1440w"
sizes="(max-width: 768px) 80vw, 576px"&gt;
&lt;source media="(min-width: 1025px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/03_bounce_filter_waterfall.png 1200w,
https://static.philippdubach.com/cdn-cgi/image/width=1600,quality=80,format=auto/03_bounce_filter_waterfall.png 1600w,
https://static.philippdubach.com/cdn-cgi/image/width=2000,quality=80,format=auto/03_bounce_filter_waterfall.png 2000w"
sizes="(max-width: 768px) 80vw, 576px"&gt;
&lt;img src="https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/03_bounce_filter_waterfall.png"
alt="Waterfall chart showing bounce-count reduction from 378 raw CatBoost bounces through a 400 ms temporal dedup that drops 9 to 12 percent, then a court-locality filter that drops a further 12 to 15 percent"
class=""
width="1264"
height="623"
loading="lazy"
decoding="async"&gt;
&lt;/picture&gt;
&lt;/button&gt;
&lt;/figure&gt;
&lt;dialog id="lightbox-03_bounce_filter_waterfall-png-12" class="lightbox-dialog" aria-label="Full-size image" data-hires="https://static.philippdubach.com/cdn-cgi/image/width=2000,quality=85,format=auto/03_bounce_filter_waterfall.png"&gt;
&lt;form method="dialog" class="lightbox-close-form"&gt;
&lt;button type="submit" class="lightbox-close" aria-label="Close"&gt;×&lt;/button&gt;
&lt;/form&gt;
&lt;img alt="Waterfall chart showing bounce-count reduction from 378 raw CatBoost bounces through a 400 ms temporal dedup that drops 9 to 12 percent, then a court-locality filter that drops a further 12 to 15 percent" decoding="async"&gt;
&lt;/dialog&gt;
&lt;p&gt;The first is a temporal dedup with ~400 ms minimum separation between bounces, fps-aware. It collapses CatBoost firing on three consecutive frames for one physical contact and drops 9-12%.&lt;/p&gt;
&lt;p&gt;The second is a court-locality filter: project the ball pixel through the homography to canvas coordinates, drop if it falls outside the court polygon plus a 200 px buffer. This kills inter-rally noise where the ball is being held or replayed, dropping another 12-15%.&lt;/p&gt;
&lt;p&gt;Real bounces don&amp;rsquo;t fire 200 ms apart and don&amp;rsquo;t land 3 m past the doubles alley. Neither filter is novel; both are roughly ten lines of code. If you&amp;rsquo;re using a CatBoost-style bounce detector you probably want both anyway.&lt;/p&gt;
&lt;h2 id="whats-open"&gt;What&amp;rsquo;s open&lt;/h2&gt;
&lt;p&gt;44 rallies isn&amp;rsquo;t enough to nail the percentage, just to expose the structure. Running the audit across 10+ matches is the obvious next step. It would also surface match-to-match variance in F3ED&amp;rsquo;s failure modes. Does it mislabel aces more often on hard courts than clay? I have no idea, and I&amp;rsquo;d like to know.&lt;/p&gt;
&lt;p&gt;The reconciler currently only handles single-shot serve rallies. When both players hit clean balls and the point ends, the score delta is the same whether the winner came from a &lt;code&gt;winner&lt;/code&gt; or a &lt;code&gt;forced-err&lt;/code&gt;. Neither F3ED nor OCR alone disambiguates. A trajectory-aware classifier on the last two shots would close that gap. Haven&amp;rsquo;t tried it.&lt;/p&gt;
&lt;p&gt;The longer-term move is closed-loop F3ED retraining: use the OCR-corrected labels as supervision for a small classifier head whose input is (F3ED 4-class outcome, OCR delta, single-shot flag) and whose output is the extended set {&lt;code&gt;in&lt;/code&gt;, &lt;code&gt;winner&lt;/code&gt;, &lt;code&gt;forced-err&lt;/code&gt;, &lt;code&gt;unforced-err&lt;/code&gt;, &lt;code&gt;ace&lt;/code&gt;, &lt;code&gt;double_fault&lt;/code&gt;, &lt;code&gt;first_serve_fault&lt;/code&gt;, &lt;code&gt;unreturnable&lt;/code&gt;}. About 5 minutes of training data per match. 10+ matches gets a usable head. The interesting move there is putting the OCR signal into training rather than just inference.&lt;/p&gt;</description></item><item><title>Inside PRAGMA: Revolut's Foundation Model for Banking</title><link>https://philippdubach.com/posts/inside-pragma-revoluts-foundation-model-for-banking/</link><pubDate>Sun, 26 Apr 2026 00:00:00 +0200</pubDate><author>me@philippdubach.com (Philipp D. Dubach)</author><guid>https://philippdubach.com/posts/inside-pragma-revoluts-foundation-model-for-banking/</guid><description>&lt;figure class="post-figure" style="width: 80%; margin: 1.5rem auto;"&gt;
&lt;button type="button" class="img-trigger" data-lightbox-target="lightbox-revolut-cover-jpg-0" aria-label="View full-size image"&gt;
&lt;picture class="img-lightbox"&gt;
&lt;source media="(max-width: 768px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=320,quality=80,format=auto/revolut-cover.jpg 320w,
https://static.philippdubach.com/cdn-cgi/image/width=480,quality=80,format=auto/revolut-cover.jpg 480w,
https://static.philippdubach.com/cdn-cgi/image/width=640,quality=80,format=auto/revolut-cover.jpg 640w,
https://static.philippdubach.com/cdn-cgi/image/width=960,quality=80,format=auto/revolut-cover.jpg 960w,
https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/revolut-cover.jpg 1200w"
sizes="(max-width: 768px) 80vw, 576px"&gt;
&lt;source media="(max-width: 1024px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=768,quality=80,format=auto/revolut-cover.jpg 768w,
https://static.philippdubach.com/cdn-cgi/image/width=1024,quality=80,format=auto/revolut-cover.jpg 1024w,
https://static.philippdubach.com/cdn-cgi/image/width=1440,quality=80,format=auto/revolut-cover.jpg 1440w"
sizes="(max-width: 768px) 80vw, 576px"&gt;
&lt;source media="(min-width: 1025px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/revolut-cover.jpg 1200w,
https://static.philippdubach.com/cdn-cgi/image/width=1600,quality=80,format=auto/revolut-cover.jpg 1600w,
https://static.philippdubach.com/cdn-cgi/image/width=2000,quality=80,format=auto/revolut-cover.jpg 2000w"
sizes="(max-width: 768px) 80vw, 576px"&gt;
&lt;img src="https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/revolut-cover.jpg"
alt="Editorial cover illustration for an analysis of Revolut&amp;#39;s PRAGMA foundation model for banking, contrasting a small consumer banking app with the vast underlying transformer architecture"
class=""
width="4690"
height="2638"
fetchpriority="high"
decoding="async"&gt;
&lt;/picture&gt;
&lt;/button&gt;
&lt;/figure&gt;
&lt;dialog id="lightbox-revolut-cover-jpg-0" class="lightbox-dialog" aria-label="Full-size image" data-hires="https://static.philippdubach.com/cdn-cgi/image/width=2000,quality=85,format=auto/revolut-cover.jpg"&gt;
&lt;form method="dialog" class="lightbox-close-form"&gt;
&lt;button type="submit" class="lightbox-close" aria-label="Close"&gt;×&lt;/button&gt;
&lt;/form&gt;
&lt;img alt="Editorial cover illustration for an analysis of Revolut&amp;#39;s PRAGMA foundation model for banking, contrasting a small consumer banking app with the vast underlying transformer architecture" decoding="async"&gt;
&lt;/dialog&gt;
&lt;p&gt;This month, Revolut Research and NVIDIA published &lt;a href="https://arxiv.org/abs/2604.08649"&gt;PRAGMA&lt;/a&gt;: an encoder-only transformer trained on 26 million user histories spanning 24 billion events and 207 billion tokens across 111 countries. To my knowledge it is the largest encoder backbone for consumer banking event data anyone has put on arXiv. Nine months earlier, Nubank had published &lt;a href="https://arxiv.org/abs/2507.23267"&gt;nuFormer&lt;/a&gt;, a similar premise with the opposite architecture. Can you train a transformer on raw transaction ledgers and replace the gradient-boosted-tree models running production credit, fraud, and recommendation pipelines.&lt;/p&gt;
&lt;p&gt;Banking has spent the last decade lagging the rest of tech on representation learning. Production models still run on hand-crafted tabular features. Every team working on this knows it&amp;rsquo;s is suboptimal. Almost no team has the data, the GPUs, or the political budget to fix it. PRAGMA is what a banking foundation model looks like at the high end of the market.&lt;/p&gt;
&lt;figure class="post-figure" style="width: 80%; margin: 1.5rem auto;"&gt;
&lt;button type="button" class="img-trigger" data-lightbox-target="lightbox-fig1-headline-png-1" aria-label="View full-size image"&gt;
&lt;picture class="img-lightbox"&gt;
&lt;source media="(max-width: 768px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=320,quality=80,format=auto/fig1-headline.png 320w,
https://static.philippdubach.com/cdn-cgi/image/width=480,quality=80,format=auto/fig1-headline.png 480w,
https://static.philippdubach.com/cdn-cgi/image/width=640,quality=80,format=auto/fig1-headline.png 640w,
https://static.philippdubach.com/cdn-cgi/image/width=960,quality=80,format=auto/fig1-headline.png 960w,
https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/fig1-headline.png 1200w"
sizes="(max-width: 768px) 80vw, 576px"&gt;
&lt;source media="(max-width: 1024px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=768,quality=80,format=auto/fig1-headline.png 768w,
https://static.philippdubach.com/cdn-cgi/image/width=1024,quality=80,format=auto/fig1-headline.png 1024w,
https://static.philippdubach.com/cdn-cgi/image/width=1440,quality=80,format=auto/fig1-headline.png 1440w"
sizes="(max-width: 768px) 80vw, 576px"&gt;
&lt;source media="(min-width: 1025px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/fig1-headline.png 1200w,
https://static.philippdubach.com/cdn-cgi/image/width=1600,quality=80,format=auto/fig1-headline.png 1600w,
https://static.philippdubach.com/cdn-cgi/image/width=2000,quality=80,format=auto/fig1-headline.png 2000w"
sizes="(max-width: 768px) 80vw, 576px"&gt;
&lt;img src="https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/fig1-headline.png"
alt="Figure 1 from the PRAGMA paper: relative performance of three PRAGMA sizes (10M, 100M, 1B parameters) against task-specific baselines across six banking tasks including credit scoring, fraud detection, and product recommendation"
class=""
width="1317"
height="506"
loading="lazy"
decoding="async"&gt;
&lt;/picture&gt;
&lt;/button&gt;
&lt;/figure&gt;
&lt;dialog id="lightbox-fig1-headline-png-1" class="lightbox-dialog" aria-label="Full-size image" data-hires="https://static.philippdubach.com/cdn-cgi/image/width=2000,quality=85,format=auto/fig1-headline.png"&gt;
&lt;form method="dialog" class="lightbox-close-form"&gt;
&lt;button type="submit" class="lightbox-close" aria-label="Close"&gt;×&lt;/button&gt;
&lt;/form&gt;
&lt;img alt="Figure 1 from the PRAGMA paper: relative performance of three PRAGMA sizes (10M, 100M, 1B parameters) against task-specific baselines across six banking tasks including credit scoring, fraud detection, and product recommendation" decoding="async"&gt;
&lt;/dialog&gt;
&lt;p&gt;The chart above is from the PRAGMA paper and it reads like a marketing slide. PR-AUC up &lt;strong&gt;130.2%&lt;/strong&gt; on credit scoring. AUUC up &lt;strong&gt;163.7%&lt;/strong&gt; on a communication uplift task. mAP up &lt;strong&gt;40.5%&lt;/strong&gt; on product recommendation. These are relative numbers against task-specific baselines and the absolute scores are commercially redacted, so calibrate accordingly. But Revolut publishing them under their own name, with author affiliations, is the meaningful signal here. Internal foundation models have moved from trade secret to competitive disclosure.&lt;/p&gt;
&lt;h2 id="what-revolut-built"&gt;What Revolut built&lt;/h2&gt;
&lt;p&gt;PRAGMA is a BERT-style encoder, not a GPT. The choice matters. Revolut&amp;rsquo;s downstream targets are discriminative (default within 12 months, fraud, churn, product adoption), which is exactly what bidirectional masked modelling is good at. The model family scales from 10M to 100M to 1B parameters across three encoder branches: a profile-state encoder for static attributes, a per-event encoder, and a history encoder that fuses them.&lt;/p&gt;
&lt;figure class="post-figure" style="width: 80%; margin: 1.5rem auto;"&gt;
&lt;button type="button" class="img-trigger" data-lightbox-target="lightbox-fig4-architecture-png-2" aria-label="View full-size image"&gt;
&lt;picture class="img-lightbox"&gt;
&lt;source media="(max-width: 768px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=320,quality=80,format=auto/fig4-architecture.png 320w,
https://static.philippdubach.com/cdn-cgi/image/width=480,quality=80,format=auto/fig4-architecture.png 480w,
https://static.philippdubach.com/cdn-cgi/image/width=640,quality=80,format=auto/fig4-architecture.png 640w,
https://static.philippdubach.com/cdn-cgi/image/width=960,quality=80,format=auto/fig4-architecture.png 960w,
https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/fig4-architecture.png 1200w"
sizes="(max-width: 768px) 80vw, 576px"&gt;
&lt;source media="(max-width: 1024px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=768,quality=80,format=auto/fig4-architecture.png 768w,
https://static.philippdubach.com/cdn-cgi/image/width=1024,quality=80,format=auto/fig4-architecture.png 1024w,
https://static.philippdubach.com/cdn-cgi/image/width=1440,quality=80,format=auto/fig4-architecture.png 1440w"
sizes="(max-width: 768px) 80vw, 576px"&gt;
&lt;source media="(min-width: 1025px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/fig4-architecture.png 1200w,
https://static.philippdubach.com/cdn-cgi/image/width=1600,quality=80,format=auto/fig4-architecture.png 1600w,
https://static.philippdubach.com/cdn-cgi/image/width=2000,quality=80,format=auto/fig4-architecture.png 2000w"
sizes="(max-width: 768px) 80vw, 576px"&gt;
&lt;img src="https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/fig4-architecture.png"
alt="PRAGMA backbone architecture: two-branch design with separate profile-state encoder and per-event encoder feeding a shared history encoder, showing how static user attributes and event sequences are fused into one representation"
class=""
width="1391"
height="580"
loading="lazy"
decoding="async"&gt;
&lt;/picture&gt;
&lt;/button&gt;
&lt;/figure&gt;
&lt;dialog id="lightbox-fig4-architecture-png-2" class="lightbox-dialog" aria-label="Full-size image" data-hires="https://static.philippdubach.com/cdn-cgi/image/width=2000,quality=85,format=auto/fig4-architecture.png"&gt;
&lt;form method="dialog" class="lightbox-close-form"&gt;
&lt;button type="submit" class="lightbox-close" aria-label="Close"&gt;×&lt;/button&gt;
&lt;/form&gt;
&lt;img alt="PRAGMA backbone architecture: two-branch design with separate profile-state encoder and per-event encoder feeding a shared history encoder, showing how static user attributes and event sequences are fused into one representation" decoding="async"&gt;
&lt;/dialog&gt;
&lt;p&gt;The architectural decision that strikes me as most important is the input representation. Naive text serialization of a transaction record into JSON blows up sequence length: every key name, every delimiter, every digit becomes multiple BPE subword tokens. Worse, splitting &amp;ldquo;14.99&amp;rdquo; into &amp;ldquo;14&amp;rdquo; &amp;ldquo;.&amp;rdquo; &amp;ldquo;99&amp;rdquo; destroys the magnitude information that any credit model needs. Revolut&amp;rsquo;s answer is to tokenise each field as a triple of semantic key, typed value, and temporal coordinate. Numerical values map to learned percentile buckets. Categorical values map to single tokens. Text gets BPE. Timestamps get encoded twice, once as compressed log-seconds since the previous event and once as fixed-period sinusoids over hour-of-day, day-of-week, and day-of-month.&lt;/p&gt;
&lt;figure class="post-figure" style="width: 80%; margin: 1.5rem auto;"&gt;
&lt;button type="button" class="img-trigger" data-lightbox-target="lightbox-fig2-timeline-png-3" aria-label="View full-size image"&gt;
&lt;picture class="img-lightbox"&gt;
&lt;source media="(max-width: 768px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=320,quality=80,format=auto/fig2-timeline.png 320w,
https://static.philippdubach.com/cdn-cgi/image/width=480,quality=80,format=auto/fig2-timeline.png 480w,
https://static.philippdubach.com/cdn-cgi/image/width=640,quality=80,format=auto/fig2-timeline.png 640w,
https://static.philippdubach.com/cdn-cgi/image/width=960,quality=80,format=auto/fig2-timeline.png 960w,
https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/fig2-timeline.png 1200w"
sizes="(max-width: 768px) 80vw, 576px"&gt;
&lt;source media="(max-width: 1024px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=768,quality=80,format=auto/fig2-timeline.png 768w,
https://static.philippdubach.com/cdn-cgi/image/width=1024,quality=80,format=auto/fig2-timeline.png 1024w,
https://static.philippdubach.com/cdn-cgi/image/width=1440,quality=80,format=auto/fig2-timeline.png 1440w"
sizes="(max-width: 768px) 80vw, 576px"&gt;
&lt;source media="(min-width: 1025px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/fig2-timeline.png 1200w,
https://static.philippdubach.com/cdn-cgi/image/width=1600,quality=80,format=auto/fig2-timeline.png 1600w,
https://static.philippdubach.com/cdn-cgi/image/width=2000,quality=80,format=auto/fig2-timeline.png 2000w"
sizes="(max-width: 768px) 80vw, 576px"&gt;
&lt;img src="https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/fig2-timeline.png"
alt="A PRAGMA user history as a stream of structured banking events with timestamps and key-value attributes, around 60 keys and 28,000 value tokens per user, leading up to an evaluation point where the model predicts a downstream target"
class=""
width="1500"
height="620"
loading="lazy"
decoding="async"&gt;
&lt;/picture&gt;
&lt;/button&gt;
&lt;/figure&gt;
&lt;dialog id="lightbox-fig2-timeline-png-3" class="lightbox-dialog" aria-label="Full-size image" data-hires="https://static.philippdubach.com/cdn-cgi/image/width=2000,quality=85,format=auto/fig2-timeline.png"&gt;
&lt;form method="dialog" class="lightbox-close-form"&gt;
&lt;button type="submit" class="lightbox-close" aria-label="Close"&gt;×&lt;/button&gt;
&lt;/form&gt;
&lt;img alt="A PRAGMA user history as a stream of structured banking events with timestamps and key-value attributes, around 60 keys and 28,000 value tokens per user, leading up to an evaluation point where the model predicts a downstream target" decoding="async"&gt;
&lt;/dialog&gt;
&lt;p&gt;The figure above is what a single user looks like to PRAGMA: a stream of structured events leading up to an evaluation point at which the model is asked to predict something. Around 60 keys. Around 28,000 value tokens.&lt;/p&gt;
&lt;p&gt;Pre-training is masked language modelling, but with three masking sources blended together: 15% standard token masking, 10% whole-event masking, and 10% semantic-type masking. The whole-event variant is interesting for banking. It teaches the model that when you cannot see the amount of a card payment but you can see the merchant, the time, and the surrounding behavioural pattern, the amount is often inferable. That is exactly the inductive bias you want in a credit or fraud model.&lt;/p&gt;
&lt;h2 id="the-numbers"&gt;The numbers&lt;/h2&gt;
&lt;figure class="post-figure" style="width: 80%; margin: 1.5rem auto;"&gt;
&lt;button type="button" class="img-trigger" data-lightbox-target="lightbox-table2-results-png-5" aria-label="View full-size image"&gt;
&lt;picture class="img-lightbox"&gt;
&lt;source media="(max-width: 768px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=320,quality=80,format=auto/table2-results.png 320w,
https://static.philippdubach.com/cdn-cgi/image/width=480,quality=80,format=auto/table2-results.png 480w,
https://static.philippdubach.com/cdn-cgi/image/width=640,quality=80,format=auto/table2-results.png 640w,
https://static.philippdubach.com/cdn-cgi/image/width=960,quality=80,format=auto/table2-results.png 960w,
https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/table2-results.png 1200w"
sizes="(max-width: 768px) 80vw, 576px"&gt;
&lt;source media="(max-width: 1024px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=768,quality=80,format=auto/table2-results.png 768w,
https://static.philippdubach.com/cdn-cgi/image/width=1024,quality=80,format=auto/table2-results.png 1024w,
https://static.philippdubach.com/cdn-cgi/image/width=1440,quality=80,format=auto/table2-results.png 1440w"
sizes="(max-width: 768px) 80vw, 576px"&gt;
&lt;source media="(min-width: 1025px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/table2-results.png 1200w,
https://static.philippdubach.com/cdn-cgi/image/width=1600,quality=80,format=auto/table2-results.png 1600w,
https://static.philippdubach.com/cdn-cgi/image/width=2000,quality=80,format=auto/table2-results.png 2000w"
sizes="(max-width: 768px) 80vw, 576px"&gt;
&lt;img src="https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/table2-results.png"
alt="Relative performance of PRAGMA-L with LoRA fine-tuning against internal task-specific baselines: 130 percent PR-AUC lift on credit scoring, 163 percent AUUC on uplift, 40 percent mAP on product recommendation, with the AML task showing a 47 percent loss"
class=""
width="900"
height="523"
loading="lazy"
decoding="async"&gt;
&lt;/picture&gt;
&lt;/button&gt;
&lt;/figure&gt;
&lt;dialog id="lightbox-table2-results-png-5" class="lightbox-dialog" aria-label="Full-size image" data-hires="https://static.philippdubach.com/cdn-cgi/image/width=2000,quality=85,format=auto/table2-results.png"&gt;
&lt;form method="dialog" class="lightbox-close-form"&gt;
&lt;button type="submit" class="lightbox-close" aria-label="Close"&gt;×&lt;/button&gt;
&lt;/form&gt;
&lt;img alt="Relative performance of PRAGMA-L with LoRA fine-tuning against internal task-specific baselines: 130 percent PR-AUC lift on credit scoring, 163 percent AUUC on uplift, 40 percent mAP on product recommendation, with the AML task showing a 47 percent loss" decoding="async"&gt;
&lt;/dialog&gt;
&lt;p&gt;(1) The LoRA versus train-from-scratch comparison. Revolut shows that fine-tuning a pre-trained backbone with LoRA, updating roughly 2-4% of parameters, consistently matches or beats training a fresh task-specific model on the same downstream data. This is the result that justifies the entire infrastructure investment. If pre-training did not transfer, you would not bother. Communication engagement gains &lt;strong&gt;18.6%&lt;/strong&gt; PR-AUC from LoRA over scratch. Credit scoring gains &lt;strong&gt;13%&lt;/strong&gt;. Product recommendation gains &lt;strong&gt;10.3%&lt;/strong&gt; mAP. That is the business case.&lt;/p&gt;
&lt;p&gt;(2) The profile-state ablation. Removing the dedicated profile-state branch tells you which tasks are driven by static user characteristics versus event sequences. Credit scoring loses &lt;strong&gt;31.8%&lt;/strong&gt; PR-AUC without profile state, because account tenure and onboarding signals matter for identifying minority-class defaulters. Communication engagement actually gains 3% in PR-AUC without profile state, because re-engagement is a story about pre-drop-off behaviour, not about who the user is. The two-branch design keeps the static features when they help and ignores them when they do not.&lt;/p&gt;
&lt;p&gt;(3) The published limitation. The paper itself reports that PRAGMA, as a per-user encoder, drops &lt;strong&gt;47.1%&lt;/strong&gt; on F-0.5 on the AML downstream task evaluated in the paper, and the authors flag this as an expected limitation rather than a benchmark to beat. AML detection is a relational problem run across users and across accounts; PRAGMA as published is a per-user encoder and not graph-aware. The lesson the paper draws is that backbones of this kind are complements to graph-aware components, not replacements. This is a property of the published research artifact, not a statement about Revolut&amp;rsquo;s actual production AML stack, which is not described in the paper.&lt;/p&gt;
&lt;aside class="newsletter-preview" aria-label="Newsletter signup"&gt;
&lt;p class="newsletter-preview__title"&gt;Monthly notes&lt;/p&gt;&lt;form class="newsletter-preview__form" method="post" action="https://newsletter-api.philippd.workers.dev/api/subscribe" data-newsletter-endpoint="https://newsletter-api.philippd.workers.dev/api/subscribe" data-newsletter-count-endpoint="https://newsletter-api.philippd.workers.dev/api/subscriber-count" novalidate&gt;
&lt;label for="newsletter-6"&gt;Email address&lt;/label&gt;
&lt;div class="newsletter-preview__controls"&gt;
&lt;input id="newsletter-6" name="email" type="email" autocomplete="email" inputmode="email" required placeholder="you@example.com"&gt;
&lt;button type="submit"&gt;Subscribe&lt;/button&gt;
&lt;/div&gt;
&lt;p class="newsletter-preview__note" data-newsletter-note&gt;&lt;a href="https://philippdubach.com/posts/building-a-no-tracking-newsletter-from-markdown-to-distribution/"&gt;No tracking&lt;/a&gt;. Unsubscribe anytime.&lt;/p&gt;
&lt;p class="newsletter-preview__message" data-newsletter-message role="status" aria-live="polite"&gt;&lt;/p&gt;
&lt;/form&gt;
&lt;/aside&gt;
&lt;h2 id="how-this-compares-to-nubank"&gt;How this compares to Nubank&lt;/h2&gt;
&lt;p&gt;Nubank&amp;rsquo;s nuFormer, published in July 2025, makes the opposite architectural choice. It is a causal GPT-style decoder pre-trained with next-token prediction, with a &lt;a href="https://building.nubank.com/fine-tuning-transaction-user-models/"&gt;joint fusion&lt;/a&gt; finetuning step that bolts a &lt;a href="https://arxiv.org/abs/2008.13535"&gt;DCNv2&lt;/a&gt; tabular network onto the same gradient graph. The reported lift is &lt;strong&gt;+1.25%&lt;/strong&gt; in test AUC on a single recommendation task, and a &lt;strong&gt;4.4%&lt;/strong&gt; reduction in user churn measured in production. Smaller numbers than PRAGMA, but Nubank published a real production deployment outcome. PRAGMA&amp;rsquo;s results are still backtests.&lt;/p&gt;
&lt;p&gt;The two papers disagree on almost everything that is fun to argue about. Architecture: decoder versus encoder. Task scope: one task versus six. The role of static profile state: collapsed into the sequence versus given its own branch. What they agree on: Hand-crafted feature engineering can be replaced by self-supervised representation learning on raw transaction sequences, and doing so produces material lifts on real banking problems. The architectural debate is downstream of that.&lt;/p&gt;
&lt;p&gt;The broader literature is moving the same way. &lt;a href="https://arxiv.org/abs/2511.08939"&gt;TransactionGPT&lt;/a&gt; (Dou et al., 2025) introduces a 3D transformer for billion-scale payment trajectories aimed at anomaly detection. &lt;a href="https://arxiv.org/abs/1908.10063"&gt;FinBERT&lt;/a&gt;, &lt;a href="https://arxiv.org/abs/2303.17564"&gt;BloombergGPT&lt;/a&gt;, and &lt;a href="https://arxiv.org/abs/2306.06031"&gt;FinGPT&lt;/a&gt; cover the text side. &lt;a href="https://arxiv.org/abs/2310.01728"&gt;Time-LLM&lt;/a&gt; and &lt;a href="https://arxiv.org/abs/2403.07815"&gt;Chronos&lt;/a&gt; cover numerical time series. PRAGMA and nuFormer are the two papers that target the actual structured event ledger sitting inside a retail bank, which is the asset that matters for credit, fraud, and product decisions.&lt;/p&gt;
&lt;h2 id="outlook"&gt;Outlook&lt;/h2&gt;
&lt;p&gt;There is no public checkpoint. Revolut and Nubank both keep their weights inside their production stack, which is the right business decision and the wrong scientific one. You cannot run PRAGMA on your own data. You can only read the paper and decide whether the recipe is reproducible.&lt;/p&gt;
&lt;p&gt;I think it is. The paper is detailed enough to rebuild from. The tokenisation scheme is fully specified. The architecture diagram is precise enough to follow. They even document the optimiser, &lt;a href="https://kellerjordan.github.io/posts/muon/"&gt;Muon&lt;/a&gt; plus AdamW, and the hardware, 32 H100s for the 1B variant. The constraint is the pre-training corpus, not the model.&lt;/p&gt;
&lt;p&gt;So the next project on this site is a faithful PRAGMA reimplementation at the small (10M) scale, trained on a synthetic or open-licensed transaction dataset, evaluated on a subset of the downstream tasks where public benchmarks exist. I will write that up here in instalments, including what works, what breaks, and where the paper is silent. The codebase will land in a public repository as I build it.&lt;/p&gt;</description></item><item><title>The Moral Philosophy of Investing in Ignorance</title><link>https://philippdubach.com/posts/the-moral-philosophy-of-investing-in-ignorance/</link><pubDate>Wed, 22 Apr 2026 00:00:00 +0200</pubDate><author>me@philippdubach.com (Philipp D. Dubach)</author><guid>https://philippdubach.com/posts/the-moral-philosophy-of-investing-in-ignorance/</guid><description>&lt;figure class="post-figure" style="width: 80%; margin: 1.5rem auto;"&gt;
&lt;button type="button" class="img-trigger" data-lightbox-target="lightbox-edge-of-knowledge-5-cover-jpg-0" aria-label="View full-size image"&gt;
&lt;picture class="img-lightbox"&gt;
&lt;source media="(max-width: 768px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=320,quality=80,format=auto/edge-of-knowledge-5-cover.jpg 320w,
https://static.philippdubach.com/cdn-cgi/image/width=480,quality=80,format=auto/edge-of-knowledge-5-cover.jpg 480w,
https://static.philippdubach.com/cdn-cgi/image/width=640,quality=80,format=auto/edge-of-knowledge-5-cover.jpg 640w,
https://static.philippdubach.com/cdn-cgi/image/width=960,quality=80,format=auto/edge-of-knowledge-5-cover.jpg 960w,
https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/edge-of-knowledge-5-cover.jpg 1200w"
sizes="(max-width: 768px) 80vw, 576px"&gt;
&lt;source media="(max-width: 1024px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=768,quality=80,format=auto/edge-of-knowledge-5-cover.jpg 768w,
https://static.philippdubach.com/cdn-cgi/image/width=1024,quality=80,format=auto/edge-of-knowledge-5-cover.jpg 1024w,
https://static.philippdubach.com/cdn-cgi/image/width=1440,quality=80,format=auto/edge-of-knowledge-5-cover.jpg 1440w"
sizes="(max-width: 768px) 80vw, 576px"&gt;
&lt;source media="(min-width: 1025px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/edge-of-knowledge-5-cover.jpg 1200w,
https://static.philippdubach.com/cdn-cgi/image/width=1600,quality=80,format=auto/edge-of-knowledge-5-cover.jpg 1600w,
https://static.philippdubach.com/cdn-cgi/image/width=2000,quality=80,format=auto/edge-of-knowledge-5-cover.jpg 2000w"
sizes="(max-width: 768px) 80vw, 576px"&gt;
&lt;img src="https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/edge-of-knowledge-5-cover.jpg"
alt="Editorial illustration: two charcoal-silhouette figures facing each other across a small balance scale, the left figure stepping forward into the fog with hand outstretched while the right figure stands still on a darker side, visualizing the moral asymmetry of profiting from others&amp;#39; constraints"
class=""
width="1280"
height="720"
fetchpriority="high"
decoding="async"&gt;
&lt;/picture&gt;
&lt;/button&gt;
&lt;/figure&gt;
&lt;dialog id="lightbox-edge-of-knowledge-5-cover-jpg-0" class="lightbox-dialog" aria-label="Full-size image" data-hires="https://static.philippdubach.com/cdn-cgi/image/width=2000,quality=85,format=auto/edge-of-knowledge-5-cover.jpg"&gt;
&lt;form method="dialog" class="lightbox-close-form"&gt;
&lt;button type="submit" class="lightbox-close" aria-label="Close"&gt;×&lt;/button&gt;
&lt;/form&gt;
&lt;img alt="Editorial illustration: two charcoal-silhouette figures facing each other across a small balance scale, the left figure stepping forward into the fog with hand outstretched while the right figure stands still on a darker side, visualizing the moral asymmetry of profiting from others&amp;#39; constraints" decoding="async"&gt;
&lt;/dialog&gt;
&lt;p&gt;&lt;em&gt;Investing at the Edge of Knowledge, Part 5 · &lt;a href="https://philippdubach.com/posts/three-kinds-of-not-knowing/"&gt;Start with Part 1&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;ldquo;If in an unknowable world none of your bridges fall down, you are building them too strong.&amp;rdquo;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Zeckhauser&amp;rsquo;s version of this line refers to investments, not bridges, but the structural point is the same. A philosophy of investing that expects some failures is also a philosophy that accepts some losses will be borne by the people on the other side of the trade. Over four installments I&amp;rsquo;ve laid out a framework for thinking about what you can know (&lt;a href="https://philippdubach.com/posts/three-kinds-of-not-knowing/"&gt;Part 1&lt;/a&gt;), why investors flee what they can&amp;rsquo;t (&lt;a href="https://philippdubach.com/posts/ambiguity-by-design/"&gt;Part 2&lt;/a&gt;), how to assess what others know (&lt;a href="https://philippdubach.com/posts/the-geometry-of-who-knows-what/"&gt;Part 3&lt;/a&gt;), and how much to bet (&lt;a href="https://philippdubach.com/posts/bet-sizing-at-the-frontier/"&gt;Part 4&lt;/a&gt;). This final piece asks the question the framework doesn&amp;rsquo;t answer: when you profit from ignorance, is that a legitimate source of returns?&lt;/p&gt;
&lt;p&gt;Zeckhauser opens his &lt;a href="https://papers.ssrn.com/sol3/papers.cfm?abstract_id=2205821"&gt;2006 paper&lt;/a&gt; with a warning that is usually read as practical advice: &amp;ldquo;Do not read on if blame aversion is a prime concern.&amp;rdquo; I think there&amp;rsquo;s an ethical question underneath the practical one.&lt;/p&gt;
&lt;h2 id="three-sources-of-profit"&gt;Three sources of profit&lt;/h2&gt;
&lt;p&gt;In the risk box, profit comes from superior calculation. Both sides had the same information. You ran the numbers better. This is the cleanest form of trading profit. The losing side made a computational error that was, in principle, avoidable.&lt;/p&gt;
&lt;p&gt;In the uncertainty box, profit comes from superior estimation. You had a better model, better priors, or more data. The other side could have done the same analysis but didn&amp;rsquo;t. This is still relatively clean, though the boundary between &amp;ldquo;better estimation&amp;rdquo; and &amp;ldquo;inside information&amp;rdquo; requires constant policing, which is what securities regulation exists to do.&lt;/p&gt;
&lt;p&gt;In the ignorance box, the source of profit shifts. The other side didn&amp;rsquo;t sell because they thought the price was fair. They sold because they couldn&amp;rsquo;t model the asset and their constraints forced a decision. The fund manager who sold the IGV at $80 during the &lt;a href="https://philippdubach.com/posts/the-saaspocalypse-paradox/"&gt;SaaSpocalypse&lt;/a&gt; wasn&amp;rsquo;t wrong about the disruption risk from AI. They were unable to hold a position that couldn&amp;rsquo;t be defended to their risk committee, their clients, or their compliance team. The profit for the buyer comes from the gap between institutional rationality (the right decision for the manager&amp;rsquo;s career) and market rationality (the right price for the asset).&lt;/p&gt;
&lt;p&gt;The distinction matters. Most alpha in UU situations is some form of constraint arbitrage: profiting from the gap between what an asset is worth and what institutions are able to pay for it. Time horizon arbitrage, where you can hold for five years and they can&amp;rsquo;t. Liquidity arbitrage, where you can accept illiquidity and they can&amp;rsquo;t. Career-risk arbitrage, where you can tolerate looking wrong and they can&amp;rsquo;t. All three produce genuine returns, and in none of them did the counterparty make an error. They made a rational decision given their constraints, and you profited from having different constraints.&lt;/p&gt;
&lt;p&gt;One way to frame this is positive: the constraint-arbitrage investor is providing liquidity to a market that needs it. They&amp;rsquo;re buying when others are forced to sell, which improves price discovery and reduces the magnitude of mispricings. In this framing, the profit is compensation for bearing ambiguity that others can&amp;rsquo;t.&lt;/p&gt;
&lt;p&gt;Another way to frame it is uncomfortable: the returns from ignorance flow to those who can afford to bear it, and that set of people is not random.&lt;/p&gt;
&lt;h2 id="the-sidecar-problem-revisited"&gt;The sidecar problem, revisited&lt;/h2&gt;
&lt;p&gt;I discussed the sidecar concept in &lt;a href="https://philippdubach.com/posts/the-geometry-of-who-knows-what/"&gt;Part 3&lt;/a&gt; as an information problem: how do you know the driver is skilled? Here I want to revisit it as an ethical problem: what kind of edge is the driver using?&lt;/p&gt;
&lt;p&gt;Zeckhauser&amp;rsquo;s sidecar works cleanly when the driver has genuine capability. A real estate developer who can build and lease a building is creating value. A venture capitalist with operational expertise and a network of technical talent is creating value. The sidecar investor earns a share of that value creation. The profit comes from complementary skills combined with capital, and this is hard to object to on ethical grounds.&lt;/p&gt;
&lt;p&gt;It gets murkier when the complementary asset is power rather than skill. Zeckhauser discusses a hypothetical Gazprom investment: &amp;ldquo;If you could comfortably determine that the Russian elite was investing on its own volition, and that foreigners would not be discriminated against&amp;hellip;&amp;rdquo; The edge in that scenario isn&amp;rsquo;t analytical. It&amp;rsquo;s access to a political structure. The sidecar investor is riding alongside someone who can influence outcomes, not someone who can predict them. The distinction between capability and power as complementary assets is one the paper gestures at but doesn&amp;rsquo;t fully resolve.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://papers.ssrn.com/sol3/papers.cfm?abstract_id=2205858"&gt;Robb (2006)&lt;/a&gt; put his finger on a related problem. UU knowledge is &amp;ldquo;uncommunicable.&amp;rdquo; If a mechanism for generating excess returns could be expressed as a process, someone would have arbitraged it away. But if the driver can&amp;rsquo;t articulate their edge, the sidecar investor can&amp;rsquo;t distinguish between genuine insight, survivorship bias, and proximity to power. There&amp;rsquo;s an epistemological problem here, and an ethical one. You&amp;rsquo;re making a bet on someone whose advantage you can&amp;rsquo;t evaluate, which means you&amp;rsquo;re implicitly trusting that the advantage is legitimate.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://papers.ssrn.com/sol3/papers.cfm?abstract_id=2205848"&gt;Summers (2006)&lt;/a&gt; observed that identifying skilled UU managers may be no easier than picking investments directly. I suspect this is too generous. In many cases, identifying whether a sidecar driver has skill, power, or luck is harder than evaluating the underlying asset, because the asset at least has observable characteristics. The driver&amp;rsquo;s edge, by definition, doesn&amp;rsquo;t.&lt;/p&gt;
&lt;h2 id="blame-accountability-and-the-collective-action-problem"&gt;Blame, accountability, and the collective action problem&lt;/h2&gt;
&lt;p&gt;The Monday Morning Quarterback problem runs through Zeckhauser&amp;rsquo;s entire paper. Investors avoid Box F not because the expected value is negative but because a bad outcome will be judged harshly in retrospect. I&amp;rsquo;ve discussed this as a mechanism for mispricing (Parts &lt;a href="https://philippdubach.com/posts/ambiguity-by-design/"&gt;2&lt;/a&gt; and &lt;a href="https://philippdubach.com/posts/the-geometry-of-who-knows-what/"&gt;3&lt;/a&gt;). Here I want to name the distributional consequence.&lt;/p&gt;
&lt;p&gt;If we want institutional investors to make UU bets, which would improve price discovery and reduce the mispricing that currently rewards unconstrained investors, we need governance structures that tolerate good decisions with bad outcomes. The current structure doesn&amp;rsquo;t. A pension fund CIO who buys the IGV at $80 and watches it fall to $70 will face questions that no amount of &amp;ldquo;the expected value was positive&amp;rdquo; can answer. The governance framework is built for the risk box, where decisions can be evaluated against a defined probability model. In the ignorance box, there is no model to evaluate against, which means there is no institutional language for &amp;ldquo;this was a good bet that happened to lose.&amp;rdquo;&lt;/p&gt;
&lt;p&gt;The result is a collective action problem with distributional consequences. The returns from UU mispricing accrue disproportionately to wealthy individuals, family offices, and unconstrained investors like Buffett, precisely the people who can afford career risk, illiquidity, and blame. Pension funds, endowments, and retail investors in diversified vehicles are structurally excluded, not by regulation or by choice, but by governance frameworks that require the kind of probability estimates the ignorance box doesn&amp;rsquo;t produce.&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;m not sure this is a solvable problem. The fiduciary duty to beneficiaries is real, and &amp;ldquo;we invested in something we couldn&amp;rsquo;t model because the price seemed low&amp;rdquo; is not, and should not be, an acceptable fiduciary justification. But it&amp;rsquo;s worth naming the consequence: the epistemological structure of markets has equity implications. The returns from acting under ignorance flow to those who already have the most capacity to bear it. This is not a conspiracy. It&amp;rsquo;s a structural feature that emerges naturally from the interaction of ambiguity aversion, institutional constraints, and governance design.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;Zeckhauser closes his paper by returning to David Ricardo at Waterloo. Ricardo wasn&amp;rsquo;t a military analyst. He didn&amp;rsquo;t have inside information about Wellington&amp;rsquo;s strategy. He just understood the structure of the situation: thin competition (most investors had fled), an eager seller (the British government needed capital), asymmetric payoffs (bounded downside, enormous upside), and a kind of not-knowing that was the same for everyone. He bought British government bonds on the eve of the battle and made a fortune.&lt;/p&gt;
&lt;p&gt;The honest answer to &amp;ldquo;what&amp;rsquo;s your thesis?&amp;rdquo; in a UU investment is: &amp;ldquo;I don&amp;rsquo;t have one in the way you mean. I have a set of second-order inferences about what other people don&amp;rsquo;t know, what constraints they face, and why the price might be wrong even though I can&amp;rsquo;t tell you what the right price is.&amp;rdquo; That&amp;rsquo;s not a pitch deck. It&amp;rsquo;s a worldview. Most investment committees would reject it, which is, of course, part of why it works.&lt;/p&gt;
&lt;p&gt;Charlie Munger, in his 1995 &lt;a href="https://jamesclear.com/great-speeches/psychology-of-human-misjudgment-by-charlie-munger"&gt;Harvard Law School speech&lt;/a&gt; on the psychology of human misjudgment, offered a compliment that I think is the best summary of everything this series has tried to say: &amp;ldquo;The right way to think is the way Zeckhauser plays bridge.&amp;rdquo; The compliment is precise. Bridge is a game of acting under uncertainty with imperfect information, where the quality of the decision is independent of the outcome, and where the best players are distinguished not by what they know but by how they reason about what they don&amp;rsquo;t know.&lt;/p&gt;
&lt;p&gt;That might be the best definition of investing at the edge of knowledge I can offer.&lt;/p&gt;</description></item><item><title>Bet Sizing at the Frontier</title><link>https://philippdubach.com/posts/bet-sizing-at-the-frontier/</link><pubDate>Fri, 17 Apr 2026 00:00:00 +0200</pubDate><author>me@philippdubach.com (Philipp D. Dubach)</author><guid>https://philippdubach.com/posts/bet-sizing-at-the-frontier/</guid><description>&lt;figure class="post-figure" style="width: 80%; margin: 1.5rem auto;"&gt;
&lt;button type="button" class="img-trigger" data-lightbox-target="lightbox-edge-of-knowledge-4-cover-jpg-0" aria-label="View full-size image"&gt;
&lt;picture class="img-lightbox"&gt;
&lt;source media="(max-width: 768px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=320,quality=80,format=auto/edge-of-knowledge-4-cover.jpg 320w,
https://static.philippdubach.com/cdn-cgi/image/width=480,quality=80,format=auto/edge-of-knowledge-4-cover.jpg 480w,
https://static.philippdubach.com/cdn-cgi/image/width=640,quality=80,format=auto/edge-of-knowledge-4-cover.jpg 640w,
https://static.philippdubach.com/cdn-cgi/image/width=960,quality=80,format=auto/edge-of-knowledge-4-cover.jpg 960w,
https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/edge-of-knowledge-4-cover.jpg 1200w"
sizes="(max-width: 768px) 80vw, 576px"&gt;
&lt;source media="(max-width: 1024px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=768,quality=80,format=auto/edge-of-knowledge-4-cover.jpg 768w,
https://static.philippdubach.com/cdn-cgi/image/width=1024,quality=80,format=auto/edge-of-knowledge-4-cover.jpg 1024w,
https://static.philippdubach.com/cdn-cgi/image/width=1440,quality=80,format=auto/edge-of-knowledge-4-cover.jpg 1440w"
sizes="(max-width: 768px) 80vw, 576px"&gt;
&lt;source media="(min-width: 1025px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/edge-of-knowledge-4-cover.jpg 1200w,
https://static.philippdubach.com/cdn-cgi/image/width=1600,quality=80,format=auto/edge-of-knowledge-4-cover.jpg 1600w,
https://static.philippdubach.com/cdn-cgi/image/width=2000,quality=80,format=auto/edge-of-knowledge-4-cover.jpg 2000w"
sizes="(max-width: 768px) 80vw, 576px"&gt;
&lt;img src="https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/edge-of-knowledge-4-cover.jpg"
alt="Editorial illustration: a single charcoal-silhouette figure stands at the edge of a fog bank holding a small stack of warm-ochre coins, with a few coins already pushed forward into the mist trailing into the fog, visualizing the Kelly Criterion as a sizing problem under uncertainty"
class=""
width="1280"
height="720"
fetchpriority="high"
decoding="async"&gt;
&lt;/picture&gt;
&lt;/button&gt;
&lt;/figure&gt;
&lt;dialog id="lightbox-edge-of-knowledge-4-cover-jpg-0" class="lightbox-dialog" aria-label="Full-size image" data-hires="https://static.philippdubach.com/cdn-cgi/image/width=2000,quality=85,format=auto/edge-of-knowledge-4-cover.jpg"&gt;
&lt;form method="dialog" class="lightbox-close-form"&gt;
&lt;button type="submit" class="lightbox-close" aria-label="Close"&gt;×&lt;/button&gt;
&lt;/form&gt;
&lt;img alt="Editorial illustration: a single charcoal-silhouette figure stands at the edge of a fog bank holding a small stack of warm-ochre coins, with a few coins already pushed forward into the mist trailing into the fog, visualizing the Kelly Criterion as a sizing problem under uncertainty" decoding="async"&gt;
&lt;/dialog&gt;
&lt;p&gt;&lt;em&gt;Investing at the Edge of Knowledge, Part 4 · &lt;a href="https://philippdubach.com/posts/three-kinds-of-not-knowing/"&gt;Start with Part 1&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;ldquo;He who acts in N plays to make his mean log of wealth as big as it can be made will, with odds that go to one as N soars, beat me who acts to meet my own tastes for risk.&amp;rdquo;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;That&amp;rsquo;s Paul Samuelson, writing in one-syllable words. The title of his &lt;a href="https://www.sciencedirect.com/science/article/abs/pii/0378426679900232"&gt;1979 paper&lt;/a&gt;: &amp;ldquo;Why We Should Not Make Mean Log of Wealth Big Though Years to Act Are Long.&amp;rdquo; Published in the &lt;em&gt;Journal of Banking &amp;amp; Finance&lt;/em&gt;, a journal not typically known for its prose style. The playfulness of the writing masks the seriousness of the dispute underneath: a disagreement about the foundations of position sizing that remains unresolved half a century later.&lt;/p&gt;
&lt;p&gt;In &lt;a href="https://philippdubach.com/posts/the-geometry-of-who-knows-what/"&gt;Part 3&lt;/a&gt; I described how to assess whether the other side of a trade knows something you don&amp;rsquo;t. But even if you&amp;rsquo;re confident you&amp;rsquo;re in Box D or Box F (shared uncertainty or shared ignorance, where neither side has an information edge), you still need to decide how much capital to commit. And in a UU world, the most famous formula for answering that question stops working.&lt;/p&gt;
&lt;h2 id="what-kelly-actually-says"&gt;What Kelly actually says&lt;/h2&gt;
&lt;p&gt;&lt;a href="https://www.princeton.edu/~wbialek/rome/refs/kelly_56.pdf"&gt;J.L. Kelly Jr. (1956)&lt;/a&gt; was a physicist at Bell Labs, not a finance researcher. His paper, &amp;ldquo;A New Interpretation of Information Rate,&amp;rdquo; was about communication channels, not portfolios. The insight was a connection between Shannon&amp;rsquo;s information theory and gambling: the maximum exponential growth rate of a gambler&amp;rsquo;s capital equals the rate of information transmission over a noisy channel.&lt;/p&gt;
&lt;p&gt;The formula itself is simple. For a binary bet with probability &lt;em&gt;p&lt;/em&gt; of winning and odds of &lt;em&gt;b&lt;/em&gt; to 1, the optimal fraction of your bankroll to wager is &lt;em&gt;f = (bp - q) / b&lt;/em&gt;, where &lt;em&gt;q = 1 - p&lt;/em&gt;. If you have a 60% chance of winning an even-money bet, Kelly says invest 20% of your capital. The appeal is a mathematical proof: given sufficient repetitions, a Kelly bettor will, with probability approaching one, end up wealthier than anyone using any other fixed-fraction strategy. It maximizes the geometric growth rate of the portfolio, which is the growth rate that actually compounds over time.&lt;/p&gt;
&lt;p&gt;Ed Thorp was the first to take this seriously as an investment principle. He used it to beat blackjack (documented in &lt;em&gt;Beat the Dealer&lt;/em&gt;, 1962), then applied it to warrant pricing and convertible arbitrage through his hedge fund, Princeton Newport Partners, which returned roughly 15% annually with minimal drawdowns over two decades. Elwyn Berlekamp, Kelly&amp;rsquo;s research assistant at Bell Labs, later became the key figure who restructured Renaissance Technologies&amp;rsquo; Medallion Fund in 1989, applying Kelly-based position sizing to thousands of short-duration trades. Medallion returned roughly &lt;strong&gt;66%&lt;/strong&gt; annually before fees from 1988 through 2021. Bill Gross used Kelly-adjacent thinking at PIMCO. The framework has serious practitioners with serious track records.&lt;/p&gt;
&lt;h2 id="what-samuelson-actually-objected-to"&gt;What Samuelson actually objected to&lt;/h2&gt;
&lt;p&gt;Samuelson&amp;rsquo;s critique is often misunderstood as &amp;ldquo;Kelly doesn&amp;rsquo;t work.&amp;rdquo; That&amp;rsquo;s not what he said. What he said is more precise and more interesting.&lt;/p&gt;
&lt;p&gt;Kelly maximizes the expected logarithm of wealth. This is only optimal if your utility function is logarithmic. Log utility means you are exactly indifferent between the status quo and an even-money bet that would either double or halve your total wealth. Most people would not take that bet. If you are more risk-averse than log utility implies (and most human beings are), Kelly systematically overbets, exposing you to drawdowns that are mathematically acceptable but psychologically devastating. If you are less risk-averse (say, risk-neutral), Kelly underbets: a risk-neutral investor should go all-in on every positive expected value opportunity.&lt;/p&gt;
&lt;p&gt;Underneath the math, Kelly and Samuelson are arguing about something more basic. Kelly treats position sizing as a mathematical optimization problem with a unique solution. Samuelson insists it is a preference problem with as many valid solutions as there are utility functions. Both are correct within their own frameworks. The dispute is about which framework applies. And because the answer depends on the investor&amp;rsquo;s risk preferences, which are not observable from the outside and may not even be stable over time, the dispute is in principle unresolvable.&lt;/p&gt;
&lt;p&gt;Practitioners tend to resolve it pragmatically. Most Kelly users bet &amp;ldquo;half Kelly&amp;rdquo; or &amp;ldquo;quarter Kelly,&amp;rdquo; sacrificing some expected growth for lower variance. There&amp;rsquo;s also a second reason for fractional Kelly that has nothing to do with utility: estimation error. The formula is exquisitely sensitive to how accurately you&amp;rsquo;ve estimated &lt;em&gt;p&lt;/em&gt;, and overestimating your edge by even a few percentage points pushes you past optimal into a regime that destroys capital over time. Half Kelly is partly a hedge against your own overconfidence in the inputs. This works in practice, but it concedes Samuelson&amp;rsquo;s point: the &amp;ldquo;optimal&amp;rdquo; fraction depends on your tolerance for pain and the precision of your estimates, not just on the mathematics of compound growth. The formula provides a ceiling, not a prescription.&lt;/p&gt;
&lt;h2 id="why-the-debate-is-beside-the-point-in-uu"&gt;Why the debate is beside the point in UU&lt;/h2&gt;
&lt;p&gt;Here is where both Kelly and Samuelson run into the same wall.&lt;/p&gt;
&lt;p&gt;Kelly requires &lt;em&gt;p&lt;/em&gt; (the probability of winning) and &lt;em&gt;b&lt;/em&gt; (the payoff ratio). Samuelson&amp;rsquo;s alternative utility-maximization frameworks require the same inputs, or richer ones: full probability distributions over outcomes. Every formal system for position sizing assumes you can parameterize your uncertainty. In the ignorance box, as defined in &lt;a href="https://philippdubach.com/posts/three-kinds-of-not-knowing/"&gt;Part 1&lt;/a&gt;, you can&amp;rsquo;t. The parameters themselves are objects of ignorance. &lt;em&gt;p&lt;/em&gt; is not an imprecise estimate waiting for better data. It is undefined, because the state space over which &lt;em&gt;p&lt;/em&gt; would be calculated hasn&amp;rsquo;t been enumerated. This is the territory Knight called true uncertainty, distinguishing it from measurable risk a century ago, and it is where every formal position-sizing tool stops working at the same time.&lt;/p&gt;
&lt;p&gt;Zeckhauser walks through five reasons UU money management resists formal modelling, and each one breaks a different standard assumption.&lt;/p&gt;
&lt;p&gt;Most UU investments are illiquid for unknown periods. You can&amp;rsquo;t rebalance, which means sequential portfolio optimization models don&amp;rsquo;t apply. Worse, markets charge enormous premiums to cash out illiquid assets, so your exit price is not your mark-to-market. Even the toy models of optimal sequential investment assume the hard problems away: known probabilities, known time horizons, known liquidity. There&amp;rsquo;s also the embarrassing fact that smart people disagree about position sizing even on problems where probabilities &lt;em&gt;are&lt;/em&gt; known, which gives you no reason to expect convergence when they aren&amp;rsquo;t. And when genuinely unknowable events arrive (the 1987 crash, the 1997 Asian crisis, the 2020 pandemic), the money-management problems that emerge are precisely the ones no model anticipated.&lt;/p&gt;
&lt;p&gt;None of this means do nothing. It means formula-based precision is unavailable and pretending otherwise is dangerous. Plugging estimated probabilities into Kelly when the estimates are themselves wild guesses doesn&amp;rsquo;t give you a rigorous answer with a known error bar. It gives you false precision, which is worse than an honest admission of ignorance because it generates unwarranted confidence in the position size.&lt;/p&gt;
&lt;h2 id="diversification-versus-concentration"&gt;Diversification versus concentration&lt;/h2&gt;
&lt;p&gt;Standard portfolio theory says: diversify. Spread capital across uncorrelated assets to minimize idiosyncratic risk. In the risk box (Box 1 from Part 1), where expected returns and covariance matrices are estimable, this is correct. The marginal expected return on each position is similar, and diversification is free insurance.&lt;/p&gt;
&lt;p&gt;In the ignorance box, this logic inverts. If you&amp;rsquo;ve identified one or two opportunities in Zeckhauser&amp;rsquo;s Box D or Box F, the quadrants from &lt;a href="https://philippdubach.com/posts/the-geometry-of-who-knows-what/"&gt;Part 3&lt;/a&gt; where neither side has an information edge, and you have a genuine advantage from complementary skills, constraint arbitrage, or structural access, spreading capital evenly across a dozen positions dilutes the few bets where your advantage is real. Zeckhauser makes this point sharply: investors routinely allocate almost the same percentage to an investment where they expect a 30% return as to one where they expect 10%. Consider the &lt;a href="https://philippdubach.com/posts/the-saaspocalypse-paradox/"&gt;SaaSpocalypse&lt;/a&gt;: the IGV at $80 with an RSI of 18 and 17% sector earnings growth was, on the framework, a Box F opportunity with a large absolute advantage for anyone with a multi-year time horizon. The Maxim B response would be to concentrate, not diversify. Most institutional investors did the opposite.&lt;/p&gt;
&lt;p&gt;Buffett&amp;rsquo;s practice reflects this. Berkshire Hathaway&amp;rsquo;s top five holdings routinely exceed 70% of its equity portfolio. This is Kelly-adjacent thinking: bet big when your edge is big. But it operates without the false precision of computing a Kelly fraction, because Buffett doesn&amp;rsquo;t pretend to know his probability of winning to two decimal places. He knows the price is low relative to his assessment of value, his time horizon exceeds the market&amp;rsquo;s, and the business is durable enough to survive things he can&amp;rsquo;t foresee. The probability distribution of outcomes is not something he claims to have, and he doesn&amp;rsquo;t pretend otherwise.&lt;/p&gt;
&lt;p&gt;Zeckhauser uses a bridge analogy that I think captures this well. A bridge player makes hundreds of decisions in a single session, balancing expected gains and losses on every hand. But no serious bridge player computes Kelly fractions mid-hand. They develop judgment over thousands of hands about when to bid aggressively and when to pass. The judgment is trained by feedback, but the individual decision is not a calculation. It&amp;rsquo;s pattern recognition combined with temperament, a sense of when the odds are tilted enough to justify the risk.&lt;/p&gt;
&lt;p&gt;This is where Maxim B does its work: &amp;ldquo;The greater is your expected return, the larger your advantage, the greater the percentage of your capital you should put at risk.&amp;rdquo; It sounds obvious. Read it again. In a world where position sizing formulas require inputs you don&amp;rsquo;t have, Maxim B is the honest replacement: a heuristic that says &amp;ldquo;bet proportionally to your edge,&amp;rdquo; without pretending to quantify the edge precisely. Combine it with Zeckhauser&amp;rsquo;s diagnostic, and you get the closest thing to a position sizing framework that works in UU: &amp;ldquo;If in an unknowable world none of your investments looks foolish after the fact, you are staying too far away from the unknowable.&amp;rdquo;&lt;/p&gt;
&lt;p&gt;I find that diagnostic unsettling in the right way. It says that some of your bets should look bad. Not because you were wrong, but because the honest price of participation in UU markets is a portfolio that occasionally embarrasses you. If every position is defensible in hindsight, you&amp;rsquo;ve been too cautious. You&amp;rsquo;ve been optimizing for looking smart rather than for capturing the returns that only come to those willing to look foolish.&lt;/p&gt;
&lt;p&gt;The first four parts of this series have addressed what you can know, what you can&amp;rsquo;t, how to assess what others know, and how much to bet. The final question is different, and less comfortable: when you profit from ignorance, from others&amp;rsquo; institutional inability to act in UU situations, who exactly are you profiting from? That&amp;rsquo;s &lt;a href="https://philippdubach.com/posts/the-moral-philosophy-of-investing-in-ignorance/"&gt;Part 5&lt;/a&gt;.&lt;/p&gt;</description></item><item><title>Do Not Disturb My Circles</title><link>https://philippdubach.com/posts/do-not-disturb-my-circles/</link><pubDate>Mon, 13 Apr 2026 00:00:00 +0200</pubDate><author>me@philippdubach.com (Philipp D. Dubach)</author><guid>https://philippdubach.com/posts/do-not-disturb-my-circles/</guid><description>&lt;figure class="post-figure" style="width: 80%; margin: 1.5rem auto;"&gt;
&lt;button type="button" class="img-trigger" data-lightbox-target="lightbox-circles-cover-jpg-0" aria-label="View full-size image"&gt;
&lt;picture class="img-lightbox"&gt;
&lt;source media="(max-width: 768px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=320,quality=80,format=auto/circles-cover.jpg 320w,
https://static.philippdubach.com/cdn-cgi/image/width=480,quality=80,format=auto/circles-cover.jpg 480w,
https://static.philippdubach.com/cdn-cgi/image/width=640,quality=80,format=auto/circles-cover.jpg 640w,
https://static.philippdubach.com/cdn-cgi/image/width=960,quality=80,format=auto/circles-cover.jpg 960w,
https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/circles-cover.jpg 1200w"
sizes="(max-width: 768px) 80vw, 576px"&gt;
&lt;source media="(max-width: 1024px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=768,quality=80,format=auto/circles-cover.jpg 768w,
https://static.philippdubach.com/cdn-cgi/image/width=1024,quality=80,format=auto/circles-cover.jpg 1024w,
https://static.philippdubach.com/cdn-cgi/image/width=1440,quality=80,format=auto/circles-cover.jpg 1440w"
sizes="(max-width: 768px) 80vw, 576px"&gt;
&lt;source media="(min-width: 1025px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/circles-cover.jpg 1200w,
https://static.philippdubach.com/cdn-cgi/image/width=1600,quality=80,format=auto/circles-cover.jpg 1600w,
https://static.philippdubach.com/cdn-cgi/image/width=2000,quality=80,format=auto/circles-cover.jpg 2000w"
sizes="(max-width: 768px) 80vw, 576px"&gt;
&lt;img src="https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/circles-cover.jpg"
alt="Editorial cover illustration evoking Archimedes drawing geometric circles in the sand with the long shadow of an approaching soldier — paralleled to the conscription of AI for science into the chatbot arms race"
class=""
width="3707"
height="2085"
fetchpriority="high"
decoding="async"&gt;
&lt;/picture&gt;
&lt;/button&gt;
&lt;/figure&gt;
&lt;dialog id="lightbox-circles-cover-jpg-0" class="lightbox-dialog" aria-label="Full-size image" data-hires="https://static.philippdubach.com/cdn-cgi/image/width=2000,quality=85,format=auto/circles-cover.jpg"&gt;
&lt;form method="dialog" class="lightbox-close-form"&gt;
&lt;button type="submit" class="lightbox-close" aria-label="Close"&gt;×&lt;/button&gt;
&lt;/form&gt;
&lt;img alt="Editorial cover illustration evoking Archimedes drawing geometric circles in the sand with the long shadow of an approaching soldier — paralleled to the conscription of AI for science into the chatbot arms race" decoding="async"&gt;
&lt;/dialog&gt;
&lt;blockquote&gt;
&lt;p&gt;If I&amp;rsquo;d had my way, we would have left it in the lab for longer and done more things like AlphaFold, maybe cured cancer or something like that.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;That&amp;rsquo;s &lt;a href="https://en.wikipedia.org/wiki/Demis_Hassabis"&gt;Demis Hassabis&lt;/a&gt; (I cannot recomend watching
&lt;a href="https://www.youtube.com/watch?v=d95J8yzvjbQ"&gt;The Thinking Game&lt;/a&gt; enough and or read
&lt;a href="https://www.penguinrandomhouse.com/books/752231/the-infinity-machine-by-sebastian-mallaby/"&gt;The Infinity Machine&lt;/a&gt;), the CEO of Google DeepMind and a Nobel Prize winner, describing the future he didn&amp;rsquo;t get.&lt;/p&gt;
&lt;p&gt;He wanted a CERN for artificial intelligence. A decade or two of careful, methodical work. The world&amp;rsquo;s best scientists collaborating on each step toward general intelligence, understanding what they built before building the next thing. In the meantime, AI for science, narrow tools like AlphaFold, would ship real benefits: cures, new materials, maybe a crack at fusion. Not chatbots. He didn&amp;rsquo;t get that future. None of us did. Instead we got a commercial arms race, a $690 billion annual infrastructure buildout, and the greatest concentration of technical talent in human history pointed at making autocomplete better.&lt;/p&gt;
&lt;p&gt;This is a story about capital misallocation. But it&amp;rsquo;s also a very old story.&lt;/p&gt;
&lt;h2 id="geometry-in-the-sand"&gt;Geometry in the sand&lt;/h2&gt;
&lt;p&gt;In 214 BC, the Roman general Marcellus brought a fleet to Syracuse. Standing between Rome and the richest city in Sicily was one man: &lt;a href="https://en.wikipedia.org/wiki/Archimedes"&gt;Archimedes&lt;/a&gt;, the greatest scientist of the ancient world, a mathematician whose work on the lever, the screw, and the principles of buoyancy would outlast every empire he lived under.&lt;/p&gt;
&lt;p&gt;Archimedes did not want to build weapons. &lt;a href="https://en.wikipedia.org/wiki/Parallel_Lives"&gt;Plutarch&lt;/a&gt;, writing in the &lt;em&gt;Life of Marcellus&lt;/em&gt;, says Archimedes designed and contrived his machines &amp;ldquo;not as matters of any importance, but as mere amusements in geometry.&amp;rdquo; He regarded the whole business as ignoble, beneath the dignity of pure mathematics. But his patron King Hiero II needed defenses, and Archimedes was the only man who could provide them. So he built them. Catapults that could sink a ship at range. The &lt;a href="https://en.wikipedia.org/wiki/Claw_of_Archimedes"&gt;Claw of Archimedes&lt;/a&gt;, an iron grappling device that could lift a Roman galley out of the water and drop it. Possibly parabolic mirrors that focused sunlight to set ships on fire, though historians still debate that one.&lt;/p&gt;
&lt;p&gt;The machines worked. Plutarch writes that the Romans became so terrified that &amp;ldquo;whenever they saw a bit of rope or a stick of timber projecting over the wall, they cried &amp;lsquo;Archimedes is training some engine upon us,&amp;rsquo; and turned their backs and fled.&amp;rdquo; They held off Rome for two years.&lt;/p&gt;
&lt;p&gt;Then Syracuse fell anyway. In 212 BC, Roman soldiers breached the walls during a festival. A soldier found Archimedes drawing geometric figures in the sand. According to the tradition passed down through &lt;a href="https://en.wikipedia.org/wiki/Valerius_Maximus"&gt;Valerius Maximus&lt;/a&gt; and others, his last words were &lt;em&gt;&amp;ldquo;Noli turbare circulos meos&amp;rdquo;&lt;/em&gt;: do not disturb my circles.&lt;/p&gt;
&lt;p&gt;Marcellus had ordered Archimedes taken alive. The order didn&amp;rsquo;t matter. The soldier killed him. The geometry died with him. The war machines, the things Archimedes considered beneath his real work, survived in military engineering textbooks for centuries. His mathematical treatises survived only by accident, through a single Byzantine manuscript &lt;a href="https://en.wikipedia.org/wiki/Archimedes_Palimpsest"&gt;scraped and overwritten with prayer texts&lt;/a&gt; in the 13th century.&lt;/p&gt;
&lt;p&gt;I thought about this when I watched Demis Hassabis in a &lt;a href="https://www.youtube.com/watch?v=C0gErQtnNFE"&gt;recent interview with Cleo Abram&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id="the-conscription"&gt;The conscription&lt;/h2&gt;
&lt;p&gt;He had been building learning systems at DeepMind for years. The work was pointed at science. AlphaFold was the first proof that AI could crack fundamental problems in biology. Move 37, AlphaGo&amp;rsquo;s famous creative play against Lee Sedol in 2016, was the proof that AI systems could discover things no human had considered.&lt;/p&gt;
&lt;p&gt;Then ChatGPT happened. Google went code red. Hassabis, the man who wanted to solve protein folding and maybe crack fusion, became the man who runs all of Google&amp;rsquo;s AI, including the consumer products he&amp;rsquo;d never wanted to focus on.&lt;/p&gt;
&lt;p&gt;He&amp;rsquo;s candid about what was lost:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;My ideal was to approach the latter stages of building AGI using the scientific method, very carefully, very precisely, very thoughtfully, in a CERN-like way. That might take a decade, even two decades longer. But I think that would make sense given the enormity of what we&amp;rsquo;re dealing with.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;And about the irony:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Language was a lot easier than we were all expecting. Even those of us who were obviously optimists about the whole technology. We thought maybe there would be one or two or three more breakthroughs needed. But it turned out transformers and some reinforcement learning on top was enough.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;The ease of the advance was the thing that derailed the deeper work. Language models turned out to be good enough for consumer products, and consumer products generate revenue, and revenue attracts competition, and competition creates the arms race that now consumes everything. DeepMind had &amp;ldquo;fairly equivalent systems&amp;rdquo; to ChatGPT at the time, Hassabis says. They chose not to release them. That choice was taken from him.&lt;/p&gt;
&lt;h2 id="what-a-dollar-buys"&gt;What a dollar buys&lt;/h2&gt;
&lt;p&gt;The resource allocation case is simple enough to state in one line, though the implications are not.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://www.nature.com/articles/s41586-021-03819-2"&gt;AlphaFold 2&lt;/a&gt; trained on 128 Google TPUv3 chips for approximately 11 days. At &lt;a href="https://cloud.google.com/tpu/pricing"&gt;Google Cloud&amp;rsquo;s public pricing&lt;/a&gt; of roughly $32 per hour per TPU, the estimated training cost is somewhere under &lt;strong&gt;$1 million&lt;/strong&gt;. It predicted the three-dimensional structures of 200 million proteins. Over 3 million scientists now use it. A pharma executive told Hassabis that &amp;ldquo;almost every drug developed from now on will have probably used AlphaFold in its process.&amp;rdquo;&lt;/p&gt;
&lt;p&gt;Now the other side of the ledger. &lt;a href="https://epoch.ai/blog/how-much-does-it-cost-to-train-frontier-ai-models/"&gt;GPT-4&amp;rsquo;s training cost&lt;/a&gt; an estimated &lt;strong&gt;$78 million&lt;/strong&gt;. &lt;a href="https://fortune.com/2024/04/18/google-gemini-cost-191-million-to-train-stanford-university-report-estimates/"&gt;Gemini Ultra ran to roughly &lt;strong&gt;$191 million&lt;/strong&gt;&lt;/a&gt;. OpenAI&amp;rsquo;s Orion &lt;a href="https://fortune.com/2025/02/25/what-happened-gpt-5-openai-orion-pivot-scaling-pre-training-llm-agi-reasoning/"&gt;exceeded &lt;strong&gt;$500 million&lt;/strong&gt;&lt;/a&gt; for a single training run, and the model was so disappointing they downgraded it from GPT-5 to GPT-4.5. OpenAI&amp;rsquo;s inference spending alone, just the cost of running the models after training, &lt;a href="https://aibusiness.com/language-models/ai-model-scaling-isn-t-over-it-s-entering-a-new-era"&gt;hit &lt;strong&gt;$2.3 billion in 2024&lt;/strong&gt;&lt;/a&gt;. That is 15 times what they spent training GPT-4.5.&lt;/p&gt;
&lt;p&gt;AlphaFold cost less to train than OpenAI spends on inference in a single day.&lt;/p&gt;
&lt;p&gt;Zoom out further. The Big 4 hyperscalers, Amazon, Alphabet, Meta, Microsoft, are guiding to &lt;a href="https://www.goldmansachs.com/insights/articles/why-ai-companies-may-invest-more-than-500-billion-in-2026"&gt;&lt;strong&gt;$610-665 billion&lt;/strong&gt;&lt;/a&gt; in capital expenditure for 2026. &lt;a href="https://www.goldmansachs.com/insights/articles/why-ai-companies-may-invest-more-than-500-billion-in-2026"&gt;Goldman Sachs projects&lt;/a&gt; cumulative 2025-2027 spending at $1.15 trillion. As I noted in &lt;a href="https://philippdubach.com/posts/peter-thiels-physics-department/"&gt;Peter Thiel&amp;rsquo;s Physics Department&lt;/a&gt;, Big Tech spends &lt;strong&gt;75 times&lt;/strong&gt; more on AI than the entire US federal science budget: $250 billion versus $3.3 billion per year. The DOE Genesis Mission, the flagship US government program for AI-driven scientific discovery, &lt;a href="https://www.energy.gov/articles/energy-department-advances-investments-ai-science"&gt;received &lt;strong&gt;$320 million&lt;/strong&gt; in its first round&lt;/a&gt;. That is less than Meta spends on AI infrastructure in a single week.&lt;/p&gt;
&lt;p&gt;The infrastructure being built is not for protein folding. It is not for materials science or fusion plasma control or genomics. It is for chatbots, image generators, and coding assistants. &lt;a href="https://sequoiacap.com/article/ais-600b-question/"&gt;Sequoia&amp;rsquo;s David Cahn calculated&lt;/a&gt; the AI ecosystem needs &lt;strong&gt;$600 billion in annual revenue&lt;/strong&gt; to justify current infrastructure spending. It generates perhaps $80-120 billion. And nearly all of that revenue comes from commercial applications: subscriptions, API access, enterprise contracts for systems that summarize emails and draft marketing copy.&lt;/p&gt;
&lt;p&gt;The bottleneck for AI for science was never money. AlphaFold proved that. It was always about who works on what, and the chatbot economy answered that question for an entire generation of researchers.&lt;/p&gt;
&lt;h2 id="what-the-circles-produced"&gt;What the circles produced&lt;/h2&gt;
&lt;p&gt;When Hassabis&amp;rsquo;s teams were allowed to focus on science, when the circles were left undisturbed, this is what happened.&lt;/p&gt;
&lt;p&gt;In The Thinking Game there&amp;rsquo;s a moment that captures it perfectly. The original plan for AlphaFold was conventional: build a server, let scientists submit protein sequences one at a time, email back the predicted structures. Standard approach, used by the whole field for 40 years. Then Hassabis started doing arithmetic on his phone in the middle of the meeting. Two hundred million known proteins. One fold every ten seconds. How many TPUs do we have? He looked up and said something like, &amp;ldquo;&lt;a href="https://youtu.be/d95J8yzvjbQ?si=1VVejCeVhn_1_3m6&amp;amp;t=4495"&gt;Why don&amp;rsquo;t we just fold everything?&lt;/a&gt;&amp;rdquo;&lt;/p&gt;
&lt;p&gt;It would be, he realized, actually less work than building the server.&lt;/p&gt;
&lt;p&gt;So they folded everything. AlphaFold predicted the structures of &lt;strong&gt;200 million proteins&lt;/strong&gt; and put them in a &lt;a href="https://alphafold.ebi.ac.uk/"&gt;free database&lt;/a&gt;. The nuclear pore complex, one of the largest and most important proteins in the body, a donut-shaped gateway that controls nutrient flow in and out of the cell nucleus, was &lt;a href="https://www.science.org/doi/10.1126/science.abm9326"&gt;solved within months&lt;/a&gt; of AlphaFold&amp;rsquo;s release. Researchers working on neglected diseases, malaria, Chagas, leishmaniasis, diseases that affect hundreds of millions of people but attract little pharma funding, now get protein structures for free. Plant scientists working on climate-resilient crops can skip years of crystallography and go straight to the biology.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://www.isomorphiclabs.com/"&gt;Isomorphic Labs&lt;/a&gt;, the DeepMind spinoff, is running 18-19 drug programs across cardiovascular disease, cancer, and immunology. &lt;a href="https://philippdubach.com/posts/ai-can-now-design-drugs-in-seconds-we-still-cant-tell-you-if-they-work./"&gt;IsoDDE, its drug design engine&lt;/a&gt;, hits 50% on the hardest protein-ligand benchmarks versus 23% for AlphaFold 3. &lt;a href="https://deepmind.google/discover/blog/alphagenome-predicts-the-effects-of-dna-variation-on-gene-regulation/"&gt;AlphaGenome&lt;/a&gt; is decoding the 98% of the human genome that doesn&amp;rsquo;t code for proteins, the part where most disease-causing mutations hide. Jennifer Doudna, the CRISPR pioneer, asked Hassabis directly about combining AlphaGenome with CRISPR to identify and fix the exact genetic changes causing disease. His answer: &amp;ldquo;Still not probably good enough yet. But you can imagine a future version.&amp;rdquo;&lt;/p&gt;
&lt;p&gt;&lt;a href="https://philippdubach.com/posts/the-last-architecture-designed-by-hand/"&gt;AlphaEvolve&lt;/a&gt; found a 23% speedup inside Gemini&amp;rsquo;s own architecture, recovering 0.7% of Google&amp;rsquo;s total compute. DeepMind&amp;rsquo;s fusion work &lt;a href="https://deepmind.google/blog/bringing-ai-to-the-next-generation-of-fusion-energy/"&gt;controlled plasma autonomously&lt;/a&gt; in a real tokamak. &lt;a href="https://deepmind.google/discover/blog/millions-of-new-materials-discovered-with-deep-learning/"&gt;GNoME&lt;/a&gt; identified 2.2 million new crystal structures, equivalent to roughly 800 years of prior human discovery in materials science.&lt;/p&gt;
&lt;p&gt;All of this on a fraction of the compute that powers the chatbot economy. I keep coming back to this: the entire portfolio of DeepMind&amp;rsquo;s scientific work, the Nobel Prize, the drug programs, the materials, the fusion experiments, consumed less compute than a single frontier chatbot burns through in inference costs per quarter.&lt;/p&gt;
&lt;h2 id="the-case-for-the-war-machines"&gt;The case for the war machines&lt;/h2&gt;
&lt;p&gt;I want to present the counterargument honestly, because it&amp;rsquo;s not trivial.&lt;/p&gt;
&lt;p&gt;The commercial race funded a compute buildout that wouldn&amp;rsquo;t exist without chatbot demand. $690 billion in 2026 capex built data centers that can, in principle, be repurposed for scientific workloads. The talent pipeline expanded: a generation of ML engineers entered the field because consumer AI products made it exciting and lucrative. Millions of users stress-tested these models in ways internal testing never could, revealing failure modes and edge cases that improve the underlying systems. Hassabis himself acknowledges this. In the HUGE* interview he listed the benefits: &amp;ldquo;lightning speed&amp;rdquo; progress, democratized access to cutting-edge AI &amp;ldquo;perhaps only 3 to 6 months behind what is actually in the labs,&amp;rdquo; and societal normalization that prepares people for bigger changes ahead.&lt;/p&gt;
&lt;p&gt;And there&amp;rsquo;s the funding argument. Google&amp;rsquo;s $132 billion in net income funds DeepMind. Gemini&amp;rsquo;s commercial revenue helps justify the research budget. Without the chatbot economy, would Alphabet spend billions on AI research at all?&lt;/p&gt;
&lt;p&gt;The strongest version of this argument goes: you can&amp;rsquo;t have the cathedral without the wool merchants. Bell Labs needed AT&amp;amp;T&amp;rsquo;s monopoly revenue. The Apollo program needed Cold War spending. Scientific breakthroughs don&amp;rsquo;t fund themselves. The commercial race, ugly as it is, is the mechanism that makes the science possible.&lt;/p&gt;
&lt;h2 id="why-the-steelman-breaks"&gt;Why the steelman breaks&lt;/h2&gt;
&lt;p&gt;I&amp;rsquo;ve thought about this for a while, and I think it&amp;rsquo;s wrong.&lt;/p&gt;
&lt;p&gt;Start with the compute argument. The infrastructure being built is overwhelmingly inference infrastructure: data centers optimized for running chatbot queries at scale, not for training scientific models. AlphaFold trains on 128 TPUs. It doesn&amp;rsquo;t need a $75 billion annual capex program. The buildout serves commercial demand. Calling it a foundation for scientific AI is like calling a shopping mall a foundation for particle physics because they both use electricity.&lt;/p&gt;
&lt;p&gt;The talent argument has the same problem. The pipeline filled, but it filled with the wrong skills and pointed in the wrong direction. &lt;a href="https://hai.stanford.edu/ai-index/2025-ai-index-report/research-and-development"&gt;Stanford HAI&amp;rsquo;s 2025 AI Index&lt;/a&gt; found that &lt;strong&gt;70%&lt;/strong&gt; of AI PhDs took private sector jobs in 2023, up from roughly 20% two decades ago. &lt;a href="https://www.nature.com/articles/d41586-026-00474-3"&gt;Bruce Schneier wrote in &lt;em&gt;Nature&lt;/em&gt;&lt;/a&gt; that the exodus threatens &amp;ldquo;innovation driven by curiosity rather than profit.&amp;rdquo; The ML engineers entering the field are optimizing RLHF, fine-tuning chat models, building prompt engineering toolchains, and competing on Chatbot Arena leaderboards. These are not the skills that fold proteins or control plasma. The talent that cracks drug discovery needs computational chemistry, molecular dynamics, quantum mechanics. The talent attracted by the chatbot boom is, for the most part, not that talent.&lt;/p&gt;
&lt;p&gt;The stress-testing argument is real but narrow. Millions of users proved that language models can summarize documents and brainstorm ideas. That tells you nothing about whether they can predict which genetic mutations cause disease. The applications share a model architecture but almost nothing else.&lt;/p&gt;
&lt;p&gt;And the funding argument, the one that seems hardest to dismiss, actually argues the opposite of what its proponents think. The best historical parallel is &lt;a href="https://en.wikipedia.org/wiki/Bell_Labs"&gt;Bell Labs&lt;/a&gt;. Founded in 1925 as the research arm of AT&amp;amp;T&amp;rsquo;s regulated telephone monopoly, Bell Labs produced the &lt;a href="https://en.wikipedia.org/wiki/Transistor"&gt;transistor&lt;/a&gt;, the &lt;a href="https://en.wikipedia.org/wiki/Laser"&gt;laser&lt;/a&gt;, &lt;a href="https://en.wikipedia.org/wiki/Unix"&gt;Unix&lt;/a&gt;, the &lt;a href="https://en.wikipedia.org/wiki/C_(programming_language)"&gt;C programming language&lt;/a&gt;, &lt;a href="https://en.wikipedia.org/wiki/Information_theory"&gt;information theory&lt;/a&gt;, and the discovery of &lt;a href="https://en.wikipedia.org/wiki/Cosmic_microwave_background"&gt;cosmic microwave background radiation&lt;/a&gt;. Ten Nobel Prizes. Five Turing Awards. &lt;a href="https://www.construction-physics.com/p/what-would-it-take-to-recreate-bell"&gt;Brian Potter in &lt;em&gt;Construction Physics&lt;/em&gt;&lt;/a&gt; calls the conditions &amp;ldquo;unrepeatable&amp;rdquo;: a vertically integrated monopoly that could afford to fund research with no immediate commercial return.&lt;/p&gt;
&lt;p&gt;Then AT&amp;amp;T was broken up in 1984. Commercial competition arrived. What happened next is instructive: the research workforce &lt;a href="https://en.wikipedia.org/wiki/Bell_Labs"&gt;dropped from roughly 1,300 to 500 by 2002&lt;/a&gt;. Only one post-divestiture employee won a Nobel Prize. Bell Labs was passed from AT&amp;amp;T to Lucent to Alcatel to Nokia, each owner less interested in fundamental research than the last. By 2008, &lt;a href="https://pmc.ncbi.nlm.nih.gov/articles/PMC8792522/"&gt;four physicists remained&lt;/a&gt; in basic research. By 2016, what had been the most productive research institution in human history was a division of a Finnish telecom company.&lt;/p&gt;
&lt;p&gt;The irony is precise: the people who argue that commercial pressure funds great science are citing a lab that produced its greatest work under monopoly protection &lt;em&gt;from&lt;/em&gt; commercial pressure, and died the moment that protection was removed.&lt;/p&gt;
&lt;p&gt;Hassabis&amp;rsquo;s vision, the CERN model, is the Bell Labs model. Let fundamental research breathe. Shield it from quarterly earnings. Fund it with patient capital. He had that at DeepMind, funded by Google&amp;rsquo;s search advertising monopoly, insulated from product deadlines, free to spend six years building AlphaGo before it produced a single dollar of revenue. Then the commercial race consumed the insulation.&lt;/p&gt;
&lt;p&gt;The funding was already there. What he lost was the institutional focus.&lt;/p&gt;
&lt;h2 id="the-circles"&gt;The circles&lt;/h2&gt;
&lt;p&gt;Archimedes held off Rome for two years. Then the soldier came. The war machines didn&amp;rsquo;t save Syracuse. They bought time, and that time ran out.&lt;/p&gt;
&lt;p&gt;I don&amp;rsquo;t think the chatbot era saved AI for science. I think it ate the oxygen. The talent went to RLHF optimization. The compute went to inference farms. The institutional attention went to quarterly product launches. Hassabis is now simultaneously building the war machines and drawing the circles: running Gemini and funding Isomorphic, shipping chatbots and folding proteins. That he manages both is remarkable. But it&amp;rsquo;s a compromise, and the compromise has a cost measured in drug programs that don&amp;rsquo;t exist, diseases that aren&amp;rsquo;t being studied, materials that haven&amp;rsquo;t been found.&lt;/p&gt;
&lt;p&gt;The question is not whether chatbots are useful. They are. I use them constantly. The question is whether future historians will look at 2023-2026 and see a period when the most capable scientific tool in human history was mostly pointed at drafting emails and generating stock photos, and wonder what we were thinking. The way we look at that Roman soldier: someone who destroyed something more valuable than he could understand.&lt;/p&gt;
&lt;p&gt;In the interview, Hassabis is asked what he would want said at his funeral. His answer was immediate:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;I would hope that they would say that my life was of benefit and service to humanity.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;The circles are still there, drawn in the sand between product launches.&lt;/p&gt;</description></item><item><title>The Geometry of Who Knows What</title><link>https://philippdubach.com/posts/the-geometry-of-who-knows-what/</link><pubDate>Mon, 13 Apr 2026 00:00:00 +0200</pubDate><author>me@philippdubach.com (Philipp D. Dubach)</author><guid>https://philippdubach.com/posts/the-geometry-of-who-knows-what/</guid><description>&lt;figure class="post-figure" style="width: 80%; margin: 1.5rem auto;"&gt;
&lt;button type="button" class="img-trigger" data-lightbox-target="lightbox-edge-of-knowledge-3-cover-jpg-0" aria-label="View full-size image"&gt;
&lt;picture class="img-lightbox"&gt;
&lt;source media="(max-width: 768px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=320,quality=80,format=auto/edge-of-knowledge-3-cover.jpg 320w,
https://static.philippdubach.com/cdn-cgi/image/width=480,quality=80,format=auto/edge-of-knowledge-3-cover.jpg 480w,
https://static.philippdubach.com/cdn-cgi/image/width=640,quality=80,format=auto/edge-of-knowledge-3-cover.jpg 640w,
https://static.philippdubach.com/cdn-cgi/image/width=960,quality=80,format=auto/edge-of-knowledge-3-cover.jpg 960w,
https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/edge-of-knowledge-3-cover.jpg 1200w"
sizes="(max-width: 768px) 80vw, 576px"&gt;
&lt;source media="(max-width: 1024px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=768,quality=80,format=auto/edge-of-knowledge-3-cover.jpg 768w,
https://static.philippdubach.com/cdn-cgi/image/width=1024,quality=80,format=auto/edge-of-knowledge-3-cover.jpg 1024w,
https://static.philippdubach.com/cdn-cgi/image/width=1440,quality=80,format=auto/edge-of-knowledge-3-cover.jpg 1440w"
sizes="(max-width: 768px) 80vw, 576px"&gt;
&lt;source media="(min-width: 1025px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/edge-of-knowledge-3-cover.jpg 1200w,
https://static.philippdubach.com/cdn-cgi/image/width=1600,quality=80,format=auto/edge-of-knowledge-3-cover.jpg 1600w,
https://static.philippdubach.com/cdn-cgi/image/width=2000,quality=80,format=auto/edge-of-knowledge-3-cover.jpg 2000w"
sizes="(max-width: 768px) 80vw, 576px"&gt;
&lt;img src="https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/edge-of-knowledge-3-cover.jpg"
alt="Editorial illustration: two mirror-image charcoal-silhouette figures face each other across a fog-filled gap, each holding a partial document, standing on an ochre-tinted grid floor that suggests an information matrix where neither side knows more than the other"
class=""
width="1280"
height="720"
fetchpriority="high"
decoding="async"&gt;
&lt;/picture&gt;
&lt;/button&gt;
&lt;/figure&gt;
&lt;dialog id="lightbox-edge-of-knowledge-3-cover-jpg-0" class="lightbox-dialog" aria-label="Full-size image" data-hires="https://static.philippdubach.com/cdn-cgi/image/width=2000,quality=85,format=auto/edge-of-knowledge-3-cover.jpg"&gt;
&lt;form method="dialog" class="lightbox-close-form"&gt;
&lt;button type="submit" class="lightbox-close" aria-label="Close"&gt;×&lt;/button&gt;
&lt;/form&gt;
&lt;img alt="Editorial illustration: two mirror-image charcoal-silhouette figures face each other across a fog-filled gap, each holding a partial document, standing on an ochre-tinted grid floor that suggests an information matrix where neither side knows more than the other" decoding="async"&gt;
&lt;/dialog&gt;
&lt;p&gt;&lt;em&gt;Investing at the Edge of Knowledge, Part 3 · &lt;a href="https://philippdubach.com/posts/three-kinds-of-not-knowing/"&gt;Start with Part 1&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;ldquo;One of these days in your travels, a guy is going to show you a brand-new deck of cards on which the seal is not yet broken. Then this guy is going to offer to bet you that he can make the jack of spades jump out of this brand-new deck of cards and squirt cider in your ear. But, son, you do not accept this bet, because as sure as you stand there, you&amp;rsquo;re going to wind up with an ear full of cider.&amp;rdquo;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Zeckhauser opens his &lt;a href="https://papers.ssrn.com/sol3/papers.cfm?abstract_id=2205821"&gt;2006 paper&lt;/a&gt; with this advice from Sky Masterson&amp;rsquo;s father in &lt;em&gt;Guys and Dolls&lt;/em&gt;. The lesson is as old as markets: if someone offers you a bet where they seem to know something you don&amp;rsquo;t, they probably do. Don&amp;rsquo;t take that bet.&lt;/p&gt;
&lt;p&gt;But Zeckhauser&amp;rsquo;s point isn&amp;rsquo;t the lesson. It&amp;rsquo;s the exception. What happens when nobody has the marked deck? When the ambiguity is shared, when neither side can enumerate the states of the world, the Sky Masterson rule stops applying, and the investors who keep following it anyway leave money on the table.&lt;/p&gt;
&lt;p&gt;In &lt;a href="https://philippdubach.com/posts/three-kinds-of-not-knowing/"&gt;Part 1&lt;/a&gt; I laid out Zeckhauser&amp;rsquo;s taxonomy: risk, uncertainty, and ignorance as three distinct problems. In &lt;a href="https://philippdubach.com/posts/ambiguity-by-design/"&gt;Part 2&lt;/a&gt; I examined why investors flee the third box, the mechanism of ambiguity aversion. This piece asks the question that follows: when you&amp;rsquo;re facing someone on the other side of a trade, how do you figure out whether they know something you don&amp;rsquo;t?&lt;/p&gt;
&lt;h2 id="the-two-matrices"&gt;The two matrices&lt;/h2&gt;
&lt;p&gt;Zeckhauser draws two matrices that I think are the most underappreciated diagrams in the paper.&lt;/p&gt;
&lt;p&gt;The first covers investing under uncertainty, where the possible states are known but probabilities are hard. It&amp;rsquo;s a 2x2: Easy or Hard for You to Estimate Value crossed with Easy or Hard for Others. Box A (easy for both) is the standard competitive market: lots of participants, tight spreads, no edge for anyone. Box B (easy for you, hard for others) is where you&amp;rsquo;re the informed party: think a biotech scientist evaluating a drug trial readout. Box C (hard for you, easy for others) is the danger zone, the other side has the marked deck, and the Sky Masterson rule applies in full. Box D (hard for both) is where it gets interesting. Neither side has an information advantage. Both are operating under genuine uncertainty. Buffett&amp;rsquo;s earthquake reinsurance sits here.&lt;/p&gt;
&lt;p&gt;The second matrix covers investing under ignorance, where even the possible states are unknown. It&amp;rsquo;s simpler: a 2x1. Unknown to You and Known to Others (Box E) versus Unknown to You and Unknown to Others (Box F). Box E is dangerous. Box F is opportunity.&lt;/p&gt;
&lt;p&gt;The point most people miss is about misidentification. Most investors assume they&amp;rsquo;re in Box C or Box E: the other side knows more. This assumption is the legacy of standard information asymmetry models in finance, where &lt;a href="https://www.sfu.ca/~wainwrig/Econ400/akerlof.pdf"&gt;Akerlof&amp;rsquo;s lemons problem (1970)&lt;/a&gt; and the Glosten-Milgrom bid-ask spread model (1985) trained a generation to worry about adverse selection. Those worries are justified in Boxes A through C and in Box E. But in Box D and Box F, you&amp;rsquo;re not facing an informed counterparty. You&amp;rsquo;re facing someone equally confused, or someone who has left the market entirely because they can&amp;rsquo;t tolerate the confusion.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://www.cs.princeton.edu/courses/archive/spr09/cos444/papers/BazermanSamuelson83.pdf"&gt;Bazerman and Samuelson (1983)&lt;/a&gt; showed that even in clean experimental settings, people are terrible at accounting for why the other side is willing to trade. Their winner&amp;rsquo;s curse experiments found that bidders consistently failed to discount for the fact that winning an auction is bad news about your estimate&amp;rsquo;s accuracy. In a UU world, this failure compounds. You can&amp;rsquo;t compute the conditional expectation of the asset&amp;rsquo;s value given that the other side is selling, because neither of you can define the state space over which that expectation would be calculated.&lt;/p&gt;
&lt;p&gt;The practical question is always: am I in Box C or Box D? Am I in Box E or Box F? And the answer is almost never available from the data. It&amp;rsquo;s a judgment call, informed by what you know about the seller&amp;rsquo;s constraints, their institutional context, and whether the source of the ambiguity is private or shared.&lt;/p&gt;
&lt;h2 id="institutional-blindness-as-structural-opportunity"&gt;Institutional blindness as structural opportunity&lt;/h2&gt;
&lt;p&gt;The California Earthquake Authority story is Zeckhauser&amp;rsquo;s best illustration, and it deserves the full telling.&lt;/p&gt;
&lt;p&gt;In the late 1990s, California needed reinsurance for earthquake risk. The authority offered a &lt;strong&gt;$1 billion&lt;/strong&gt; slice at premiums that worked out to roughly five times actuarial value. Wall Street said no. Not because investment banks thought the Earthquake Authority possessed secret seismological knowledge. Nobody has an informational edge over the reinsurer when it comes to tectonic plate movement. The ambiguity was shared: Box F.&lt;/p&gt;
&lt;p&gt;Wall Street said no because their internal processes required probability estimates that didn&amp;rsquo;t exist. Compliance teams required distributional assumptions about tail risk that nobody could provide. Risk models required defined scenarios, and &amp;ldquo;catastrophic earthquake in the next 12 months&amp;rdquo; didn&amp;rsquo;t fit neatly into any existing framework. The honest assessment, &amp;ldquo;we have no idea about the probability, but the price is very high,&amp;rdquo; didn&amp;rsquo;t fit the form. Buffett took the entire slice.&lt;/p&gt;
&lt;p&gt;This is Zeckhauser&amp;rsquo;s Maxim H: &amp;ldquo;Do not engage in the heuristic reasoning that just because you do not know the risk, others do.&amp;rdquo; The Wall Street banks weren&amp;rsquo;t outcompeted by someone with better information. They were outcompeted by someone with fewer institutional constraints. Buffett could hold a position that was impossible to model because he answered to shareholders who trusted his judgment, not to compliance officers who required his models.&lt;/p&gt;
&lt;p&gt;Generalize this, and you get a structural feature of UU markets that doesn&amp;rsquo;t go away. Fiduciary duty requires estimable risk. Compliance models require defined scenarios. Career risk creates what Zeckhauser calls Monday Morning Quarterback (MMQ) risk: the danger that a bad outcome on a good decision destroys your reputation. Professional investors face a permanent bias toward the risk box (known probabilities) and away from the ignorance box (unknown states). This isn&amp;rsquo;t a market inefficiency waiting to be arbitraged. It&amp;rsquo;s an institutional constant. And it creates a permanent supply of mispriced assets for those without the same constraints.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://projecteuclid.org/journals/annals-of-statistics/volume-4/issue-6/Agreeing-to-Disagree/10.1214/aos/1176343654.full"&gt;Aumann (1976)&lt;/a&gt; proved that rational agents with common priors who share their posterior beliefs must converge: they cannot &amp;ldquo;agree to disagree.&amp;rdquo; The theorem is elegant and, in UU markets, irrelevant. Aumann assumes common priors and known state spaces. In Box 3, both assumptions fail. The state space is undefined, so there are no common priors to start from. Disagreement in UU isn&amp;rsquo;t a puzzle to be resolved by more information exchange. It&amp;rsquo;s the default condition. Two equally rational investors can look at the same situation and reach opposite conclusions without either one being wrong, because they&amp;rsquo;re not disagreeing about probabilities. They&amp;rsquo;re disagreeing about what world they&amp;rsquo;re in.&lt;/p&gt;
&lt;h2 id="the-advantage-versus-selection-formula"&gt;The advantage-versus-selection formula&lt;/h2&gt;
&lt;p&gt;Zeckhauser offers a framework for deciding when to invest despite potential adverse selection. Your expected return depends on three things: your absolute advantage (&lt;em&gt;a&lt;/em&gt;), the probability the other side is better informed (&lt;em&gt;p&lt;/em&gt;), and the selection factor (&lt;em&gt;s&lt;/em&gt;), how much their information hurts you. Invest when the combination exceeds the cost of entry.&lt;/p&gt;
&lt;p&gt;The formula matters less than the logic behind it. A large absolute advantage provides insurance against adverse selection. Zeckhauser&amp;rsquo;s Maxim E: &amp;ldquo;A significant absolute advantage offers some protection against potential selection.&amp;rdquo;&lt;/p&gt;
&lt;p&gt;What counts as absolute advantage? Complementary skills are the classic answer: the real estate developer who creates value a passive investor cannot, the venture capitalist whose operational expertise and network make the company worth more than the sum of its capital. Their return isn&amp;rsquo;t compensation for bearing risk. It&amp;rsquo;s a share of value they helped create. Sidecar investors, Zeckhauser&amp;rsquo;s term for those who invest alongside skilled operators, earn excess returns because access to these deals is limited and the value creation is real.&lt;/p&gt;
&lt;p&gt;But complementary skills aren&amp;rsquo;t the only form of advantage. In the &lt;a href="https://philippdubach.com/posts/the-saaspocalypse-paradox/"&gt;SaaSpocalypse&lt;/a&gt;, the &amp;ldquo;absolute advantage&amp;rdquo; for a buyer at IGV $80 was time horizon. If you could hold for three to five years, tolerate the MMQ risk of further drawdowns, and ignore the career consequences of looking wrong for a few quarters, you had a structural edge over institutional sellers who couldn&amp;rsquo;t do the same. That&amp;rsquo;s not analytical skill. It&amp;rsquo;s constraint arbitrage. And constraint arbitrage is a legitimate form of absolute advantage, because fiduciary requirements and career incentives are structural features that won&amp;rsquo;t disappear next quarter.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://papers.ssrn.com/sol3/papers.cfm?abstract_id=2205848"&gt;Larry Summers (2006)&lt;/a&gt; raises the obvious objection to the sidecar concept: &amp;ldquo;identifying skilled UU managers may be no easier than picking market-beating investments directly.&amp;rdquo; The sidecar doesn&amp;rsquo;t solve the epistemological problem. It relocates it from asset selection to manager selection. How do you know the driver is skilled rather than lucky?&lt;/p&gt;
&lt;p&gt;&lt;a href="https://papers.ssrn.com/sol3/papers.cfm?abstract_id=2205858"&gt;Richard Robb (2006)&lt;/a&gt; pushes further. He argues that UU knowledge is &amp;ldquo;uncommunicable.&amp;rdquo; If a mechanism for generating excess returns could be expressed as a process, someone would have arbitraged it away. Ricardo, on the eve of Waterloo, might have said &amp;ldquo;British Government bonds offer a high reward for the risk.&amp;rdquo; But what would it look like for that statement to be proven false? The claim is unfalsifiable because it lives in the ignorance box where probability statements don&amp;rsquo;t have clear empirical content. If the sidecar driver can&amp;rsquo;t explain their edge in terms you can evaluate, how do you distinguish skill from survivorship bias?&lt;/p&gt;
&lt;p&gt;I think both objections are correct and both miss something. They&amp;rsquo;re correct that sidecar investing doesn&amp;rsquo;t eliminate the evaluation problem. But they miss that the evaluation problem has different difficulty levels depending on context. Evaluating whether a real estate developer can build and lease a building is easier than evaluating whether a macro hedge fund can predict interest rates. Evaluating whether Buffett&amp;rsquo;s insurance math is sound is easier than evaluating whether a biotech startup&amp;rsquo;s drug candidate works. The sidecar concept isn&amp;rsquo;t &amp;ldquo;trust someone blindly.&amp;rdquo; It&amp;rsquo;s &amp;ldquo;invest alongside someone whose edge you can partly verify, in situations where your own analytical advantage is zero.&amp;rdquo;&lt;/p&gt;
&lt;p&gt;Knowing the geometry of who-knows-what is necessary but not sufficient. You&amp;rsquo;ve identified a Box D or Box F opportunity. You&amp;rsquo;ve assessed your absolute advantage. You&amp;rsquo;ve decided the other side isn&amp;rsquo;t better informed. Now you need to decide how much to bet. In a UU world, the most famous formula for position sizing, the Kelly Criterion, breaks down in the ways you&amp;rsquo;d expect. That&amp;rsquo;s &lt;a href="https://philippdubach.com/posts/bet-sizing-at-the-frontier/"&gt;Part 4&lt;/a&gt;.&lt;/p&gt;</description></item><item><title>Why Lilly's Weight Loss Pill Isn't a Peptide</title><link>https://philippdubach.com/posts/why-lillys-weight-loss-pill-isnt-a-peptide/</link><pubDate>Thu, 09 Apr 2026 00:00:00 +0200</pubDate><author>me@philippdubach.com (Philipp D. Dubach)</author><guid>https://philippdubach.com/posts/why-lillys-weight-loss-pill-isnt-a-peptide/</guid><description>&lt;figure class="post-figure" style="width: 80%; margin: 1.5rem auto;"&gt;
&lt;button type="button" class="img-trigger" data-lightbox-target="lightbox-pill-cover-jpg-0" aria-label="View full-size image"&gt;
&lt;picture class="img-lightbox"&gt;
&lt;source media="(max-width: 768px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=320,quality=80,format=auto/pill-cover.jpg 320w,
https://static.philippdubach.com/cdn-cgi/image/width=480,quality=80,format=auto/pill-cover.jpg 480w,
https://static.philippdubach.com/cdn-cgi/image/width=640,quality=80,format=auto/pill-cover.jpg 640w,
https://static.philippdubach.com/cdn-cgi/image/width=960,quality=80,format=auto/pill-cover.jpg 960w,
https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/pill-cover.jpg 1200w"
sizes="(max-width: 768px) 80vw, 576px"&gt;
&lt;source media="(max-width: 1024px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=768,quality=80,format=auto/pill-cover.jpg 768w,
https://static.philippdubach.com/cdn-cgi/image/width=1024,quality=80,format=auto/pill-cover.jpg 1024w,
https://static.philippdubach.com/cdn-cgi/image/width=1440,quality=80,format=auto/pill-cover.jpg 1440w"
sizes="(max-width: 768px) 80vw, 576px"&gt;
&lt;source media="(min-width: 1025px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/pill-cover.jpg 1200w,
https://static.philippdubach.com/cdn-cgi/image/width=1600,quality=80,format=auto/pill-cover.jpg 1600w,
https://static.philippdubach.com/cdn-cgi/image/width=2000,quality=80,format=auto/pill-cover.jpg 2000w"
sizes="(max-width: 768px) 80vw, 576px"&gt;
&lt;img src="https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/pill-cover.jpg"
alt="Editorial cover illustration for an analysis of Eli Lilly&amp;#39;s Foundayo and the oral GLP-1 weight loss pill race against Novo Nordisk&amp;#39;s oral Wegovy"
class=""
width="4065"
height="2286"
fetchpriority="high"
decoding="async"&gt;
&lt;/picture&gt;
&lt;/button&gt;
&lt;/figure&gt;
&lt;dialog id="lightbox-pill-cover-jpg-0" class="lightbox-dialog" aria-label="Full-size image" data-hires="https://static.philippdubach.com/cdn-cgi/image/width=2000,quality=85,format=auto/pill-cover.jpg"&gt;
&lt;form method="dialog" class="lightbox-close-form"&gt;
&lt;button type="submit" class="lightbox-close" aria-label="Close"&gt;×&lt;/button&gt;
&lt;/form&gt;
&lt;img alt="Editorial cover illustration for an analysis of Eli Lilly&amp;#39;s Foundayo and the oral GLP-1 weight loss pill race against Novo Nordisk&amp;#39;s oral Wegovy" decoding="async"&gt;
&lt;/dialog&gt;
&lt;blockquote&gt;
&lt;p&gt;Novo Nordisk spent decades and $1.8 billion learning how to get a peptide past the gut. Eli Lilly looked at the same problem and decided to skip it entirely.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Your gastrointestinal tract is a 30-foot disassembly line for proteins. Acid denatures them, pepsin cleaves them, trypsin finishes the job, and the mucus layer blocks whatever survives. Sean Geiger&amp;rsquo;s excellent &lt;a href="https://seangeiger.substack.com/p/a-brief-history-of-oral-peptides"&gt;history of oral peptides&lt;/a&gt; traces the full arc: the first attempt at oral insulin was in 1922. Over a hundred years and thirteen companies later, no oral insulin exists.&lt;/p&gt;
&lt;p&gt;Novo Nordisk spent decades and $1.8 billion acquiring the technology to get around this problem. The result, approved in December 2025 as &lt;a href="https://www.endocrinologyadvisor.com/news/fda-approves-oral-wegovy-for-weight-management/"&gt;oral Wegovy for obesity&lt;/a&gt;, is a pill that destroys 99% of its own active ingredient before the remaining fraction reaches the bloodstream. The oral 25mg daily dose uses roughly 280x more semaglutide than the equivalent weekly injection. This is the best that peptide oral delivery can do. Eli Lilly decided to skip it entirely, building Foundayo, a small molecule oral obesity drug that isn&amp;rsquo;t a peptide at all. That divergence in approach will determine who captures the majority of a market that &lt;a href="https://www.goldmansachs.com/insights/articles/anti-obesity-drug-market"&gt;Goldman Sachs projects&lt;/a&gt; at $100+ billion by 2030 and that &lt;a href="https://www.jpmorgan.com/insights/global-research/current-events/obesity-drugs"&gt;J.P. Morgan estimates&lt;/a&gt; will reach 30 million US users within five years.&lt;/p&gt;
&lt;h2 id="oral-semaglutide"&gt;Oral semaglutide&lt;/h2&gt;
&lt;p&gt;Sean Geiger&amp;rsquo;s &lt;a href="https://seangeiger.substack.com/p/a-brief-history-of-oral-peptides"&gt;history of oral peptides&lt;/a&gt; traces the science well. The technology that makes oral semaglutide possible is SNAC (salcaprozate sodium), a permeation enhancer developed by Emisphere Technologies starting in the 1990s. Novo partnered with Emisphere in 2007 and &lt;a href="https://www.novonordisk.com/content/nncorp/global/en/news-and-media/news-and-ir-materials/news-details.html?id=916472"&gt;acquired the company outright in 2020&lt;/a&gt;. SNAC does three things simultaneously: it buffers local stomach pH to suppress pepsin, prevents semaglutide from clumping into inactive oligomers, and temporarily fluidizes gastric cell membranes so the drug can cross. The &lt;a href="https://www.ema.europa.eu/en/documents/assessment-report/rybelsus-epar-public-assessment-report_en.pdf"&gt;EMA&amp;rsquo;s public assessment report&lt;/a&gt; puts the resulting bioavailability at roughly 0.4 to 1%. The &lt;a href="https://www.accessdata.fda.gov/drugsatfda_docs/label/2024/213051s018lbl.pdf"&gt;FDA label&lt;/a&gt; confirms: the vast majority of each dose is destroyed.&lt;/p&gt;
&lt;p&gt;This creates a problem that&amp;rsquo;s easy to state and hard to solve. If you need 280x more API per equivalent dose, your manufacturing cost structure looks nothing like the injectable. A &lt;a href="https://www.fastcompany.com/91071415/your-1000-per-month-ozempic-costs-5-to-make-says-study"&gt;Yale/King&amp;rsquo;s College study published in JAMA&lt;/a&gt; found injectable semaglutide costs $0.89 to $4.73 per month to manufacture at the API level. Scale that by 280x and you get oral API costs somewhere in the range of $770 to $1,460 per year, according to &lt;a href="https://themedicinemaker.com/issues/2026/articles/january/oral-glp-1s-won-t-win-on-convenience-they-ll-win-on-cmc/"&gt;The Medicine Maker&amp;rsquo;s January 2026 analysis&lt;/a&gt;. Still below the selling price. But the margin compression is real, and SNAC itself is a costly excipient.&lt;/p&gt;
&lt;figure class="post-figure" style="width: 80%; margin: 1.5rem auto;"&gt;
&lt;button type="button" class="img-trigger" data-lightbox-target="lightbox-oral-bioavailability-trap-png-1" aria-label="View full-size image"&gt;
&lt;picture class="img-lightbox"&gt;
&lt;source media="(max-width: 768px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=320,quality=80,format=auto/oral-bioavailability-trap.png 320w,
https://static.philippdubach.com/cdn-cgi/image/width=480,quality=80,format=auto/oral-bioavailability-trap.png 480w,
https://static.philippdubach.com/cdn-cgi/image/width=640,quality=80,format=auto/oral-bioavailability-trap.png 640w,
https://static.philippdubach.com/cdn-cgi/image/width=960,quality=80,format=auto/oral-bioavailability-trap.png 960w,
https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/oral-bioavailability-trap.png 1200w"
sizes="(max-width: 768px) 80vw, 576px"&gt;
&lt;source media="(max-width: 1024px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=768,quality=80,format=auto/oral-bioavailability-trap.png 768w,
https://static.philippdubach.com/cdn-cgi/image/width=1024,quality=80,format=auto/oral-bioavailability-trap.png 1024w,
https://static.philippdubach.com/cdn-cgi/image/width=1440,quality=80,format=auto/oral-bioavailability-trap.png 1440w"
sizes="(max-width: 768px) 80vw, 576px"&gt;
&lt;source media="(min-width: 1025px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/oral-bioavailability-trap.png 1200w,
https://static.philippdubach.com/cdn-cgi/image/width=1600,quality=80,format=auto/oral-bioavailability-trap.png 1600w,
https://static.philippdubach.com/cdn-cgi/image/width=2000,quality=80,format=auto/oral-bioavailability-trap.png 2000w"
sizes="(max-width: 768px) 80vw, 576px"&gt;
&lt;img src="https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/oral-bioavailability-trap.png"
alt="Oral semaglutide bioavailability trap: 280x more API per dose than injectable Wegovy, SNAC achieves only 1% absorption, while Eli Lilly Foundayo bypasses the peptide oral delivery problem"
class=""
width="1760"
height="1722"
loading="lazy"
decoding="async"&gt;
&lt;/picture&gt;
&lt;/button&gt;
&lt;/figure&gt;
&lt;dialog id="lightbox-oral-bioavailability-trap-png-1" class="lightbox-dialog" aria-label="Full-size image" data-hires="https://static.philippdubach.com/cdn-cgi/image/width=2000,quality=85,format=auto/oral-bioavailability-trap.png"&gt;
&lt;form method="dialog" class="lightbox-close-form"&gt;
&lt;button type="submit" class="lightbox-close" aria-label="Close"&gt;×&lt;/button&gt;
&lt;/form&gt;
&lt;img alt="Oral semaglutide bioavailability trap: 280x more API per dose than injectable Wegovy, SNAC achieves only 1% absorption, while Eli Lilly Foundayo bypasses the peptide oral delivery problem" decoding="async"&gt;
&lt;/dialog&gt;
&lt;p&gt;SNAC is also oddly specific. &lt;a href="https://seangeiger.substack.com/p/a-brief-history-of-oral-peptides"&gt;Geiger notes&lt;/a&gt; that Novo tried it with liraglutide, a closely related GLP-1 analog, and it failed because liraglutide forms oligomers that SNAC can&amp;rsquo;t break apart. After over three decades of work, exactly two FDA-approved oral peptide drugs using permeation enhancers exist: Rybelsus/oral Wegovy (SNAC) and Mycapssa (oral octreotide for acromegaly, a different enhancer called TPE). That&amp;rsquo;s the entire commercial output of the field.&lt;/p&gt;
&lt;h2 id="foundayo-lillys-structural-advantage"&gt;Foundayo: Lilly&amp;rsquo;s structural advantage&lt;/h2&gt;
&lt;p&gt;Eli Lilly&amp;rsquo;s &lt;a href="https://investor.lilly.com/news-releases/news-release-details/lillys-oral-glp-1-orforglipron-superior-oral-semaglutide-head"&gt;orforglipron&lt;/a&gt;, approved by the FDA on April 1, 2026 under the brand name &lt;a href="https://investor.lilly.com/news-releases/news-release-details/fda-approves-lillys-foundayotm-orforglipron-only-glp-1-pill"&gt;Foundayo&lt;/a&gt;, is not an oral peptide. It&amp;rsquo;s a non-peptide small molecule GLP-1 receptor agonist that activates the same receptor through a different mechanism. Discovered by Chugai Pharmaceutical and licensed by Lilly in 2018, orforglipron requires no SNAC, no fasting window, no cold chain storage, and is manufactured through standard chemical synthesis rather than solid-phase peptide synthesis. The bioavailability problem doesn&amp;rsquo;t apply because the molecule was designed from the ground up to survive the gut.&lt;/p&gt;
&lt;p&gt;The clinical data backs this up. In &lt;a href="https://investor.lilly.com/news-releases/news-release-details/lillys-oral-glp-1-orforglipron-superior-oral-semaglutide-head"&gt;ACHIEVE-3&lt;/a&gt; (1,698 patients with type 2 diabetes, 52 weeks), orforglipron at 12mg and 36mg was superior to oral semaglutide on both HbA1c reduction and weight loss: the first head-to-head victory over Novo&amp;rsquo;s oral product. In &lt;a href="https://www.appliedclinicaltrialsonline.com/view/eli-lilly-oral-glp1-orforglipron-efficacy-safety-injectable-phaseiii-trial"&gt;ATTAIN-2&lt;/a&gt; (obesity with type 2 diabetes), orforglipron delivered 10.5% weight loss at 72 weeks versus 2.2% on placebo. And in &lt;a href="https://investor.lilly.com/news-releases/news-release-details/lillys-orforglipron-helped-people-maintain-weight-loss-after"&gt;ATTAIN-MAINTAIN&lt;/a&gt;, patients who switched from injectable Wegovy or Mounjaro to oral orforglipron maintained their weight within 0.9 kg over 52 weeks. A pill that holds the gains of an injection.&lt;/p&gt;
&lt;p&gt;Lilly &lt;a href="https://investor.lilly.com/news-releases/news-release-details/lillys-oral-glp-1-orforglipron-successful-third-phase-3-trial"&gt;submitted the NDA&lt;/a&gt; with a priority review voucher and received &lt;a href="https://investor.lilly.com/news-releases/news-release-details/fda-approves-lillys-foundayotm-orforglipron-only-glp-1-pill"&gt;FDA approval on April 1, 2026&lt;/a&gt;, the fastest approval of a new molecular entity since 2002. Foundayo is available starting at $149 per month for self-pay patients, with savings card prices as low as $25 per month. The company is investing &lt;a href="https://cen.acs.org/pharmaceuticals/pharmaceutical-chemicals/Lilly-pour-65-billion-GLP/103/web/2025/09"&gt;$6.5 billion in a dedicated oral manufacturing facility&lt;/a&gt; and $27 billion total in US manufacturing capacity.&lt;/p&gt;
&lt;figure class="post-figure" style="width: 80%; margin: 1.5rem auto;"&gt;
&lt;button type="button" class="img-trigger" data-lightbox-target="lightbox-peptide-vs-small-molecule-png-3" aria-label="View full-size image"&gt;
&lt;picture class="img-lightbox"&gt;
&lt;source media="(max-width: 768px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=320,quality=80,format=auto/peptide-vs-small-molecule.png 320w,
https://static.philippdubach.com/cdn-cgi/image/width=480,quality=80,format=auto/peptide-vs-small-molecule.png 480w,
https://static.philippdubach.com/cdn-cgi/image/width=640,quality=80,format=auto/peptide-vs-small-molecule.png 640w,
https://static.philippdubach.com/cdn-cgi/image/width=960,quality=80,format=auto/peptide-vs-small-molecule.png 960w,
https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/peptide-vs-small-molecule.png 1200w"
sizes="(max-width: 768px) 80vw, 576px"&gt;
&lt;source media="(max-width: 1024px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=768,quality=80,format=auto/peptide-vs-small-molecule.png 768w,
https://static.philippdubach.com/cdn-cgi/image/width=1024,quality=80,format=auto/peptide-vs-small-molecule.png 1024w,
https://static.philippdubach.com/cdn-cgi/image/width=1440,quality=80,format=auto/peptide-vs-small-molecule.png 1440w"
sizes="(max-width: 768px) 80vw, 576px"&gt;
&lt;source media="(min-width: 1025px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/peptide-vs-small-molecule.png 1200w,
https://static.philippdubach.com/cdn-cgi/image/width=1600,quality=80,format=auto/peptide-vs-small-molecule.png 1600w,
https://static.philippdubach.com/cdn-cgi/image/width=2000,quality=80,format=auto/peptide-vs-small-molecule.png 2000w"
sizes="(max-width: 768px) 80vw, 576px"&gt;
&lt;img src="https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/peptide-vs-small-molecule.png"
alt="Foundayo orforglipron vs oral Wegovy semaglutide comparison: peptide plus SNAC approach versus small molecule across bioavailability, manufacturing cost, fasting requirements, and ACHIEVE-3 clinical results"
class=""
width="1760"
height="2098"
loading="lazy"
decoding="async"&gt;
&lt;/picture&gt;
&lt;/button&gt;
&lt;/figure&gt;
&lt;dialog id="lightbox-peptide-vs-small-molecule-png-3" class="lightbox-dialog" aria-label="Full-size image" data-hires="https://static.philippdubach.com/cdn-cgi/image/width=2000,quality=85,format=auto/peptide-vs-small-molecule.png"&gt;
&lt;form method="dialog" class="lightbox-close-form"&gt;
&lt;button type="submit" class="lightbox-close" aria-label="Close"&gt;×&lt;/button&gt;
&lt;/form&gt;
&lt;img alt="Foundayo orforglipron vs oral Wegovy semaglutide comparison: peptide plus SNAC approach versus small molecule across bioavailability, manufacturing cost, fasting requirements, and ACHIEVE-3 clinical results" decoding="async"&gt;
&lt;/dialog&gt;
&lt;h2 id="70-billion-duopoly-and-its-widening-crack"&gt;$70 billion duopoly and its widening crack&lt;/h2&gt;
&lt;p&gt;The gap is widening. Combined GLP-1 revenue from Novo and Lilly hit roughly $70 billion in 2025. But the composition shifted. Lilly&amp;rsquo;s tirzepatide franchise (Mounjaro plus Zepbound) &lt;a href="https://www.fiercepharma.com/pharma/even-pricing-headwinds-eli-lilly-expects-sales-continue-surge-2026"&gt;generated $36.5 billion&lt;/a&gt;, with Zepbound alone growing 175% year-over-year. Novo&amp;rsquo;s semaglutide franchise came in around $33 billion, with growth decelerating to roughly 10% in constant exchange rates. &lt;a href="https://www.cnbc.com/2026/02/04/eli-lilly-novo-nordisk-earnings-glp1-market.html"&gt;Lilly&amp;rsquo;s US market share hit 57%&lt;/a&gt; by mid-2025, up from 41% a year earlier. Novo&amp;rsquo;s share fell to 43%.&lt;/p&gt;
&lt;p&gt;The stock market has been ruthless in pricing this shift. Novo trades at roughly $48 per ADR share, down 65% from its June 2024 peak of $142, a loss exceeding $350 billion in market cap. The company &lt;a href="https://www.cnbc.com/2026/02/04/eli-lilly-novo-nordisk-earnings-glp1-market.html"&gt;guided for a 5 to 13% revenue decline in 2026&lt;/a&gt;, driven by patent expirations in Canada, Brazil, and China, plus pricing pressure from the Trump administration&amp;rsquo;s drug pricing framework. CagriSema, Novo&amp;rsquo;s most important pipeline asset, &lt;a href="https://www.biopharmadive.com/news/novo-nordisk-cagrisema-obesity-drug-study-results/735854/"&gt;disappointed twice&lt;/a&gt;: 22.7% weight loss in REDEFINE 1 (below the company&amp;rsquo;s own 25% guidance) and 15.7% in REDEFINE 2. &lt;a href="https://www.cnbc.com/2024/12/20/novo-nordisk-shares-plunge-22percent-after-cagrisema-obesity-drug-trial-results.html"&gt;Novo&amp;rsquo;s stock plunged 20% on the first readout alone&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Lilly, by contrast, &lt;a href="https://www.fiercepharma.com/pharma/even-pricing-headwinds-eli-lilly-expects-sales-continue-surge-2026"&gt;guided 2026 revenue at $80 to $83 billion&lt;/a&gt;, a 25% increase, and &lt;a href="https://finance.yahoo.com/quote/LLY/"&gt;trades near $1,044&lt;/a&gt; with a market cap around $1 trillion, the first pharma company to reach that level. Forward P/E: roughly 30x versus Novo&amp;rsquo;s 12.5x. That 2.4x valuation premium reflects a simple thesis: Lilly has the better drug (Zepbound &lt;a href="https://www.nejm.org/doi/full/10.1056/NEJMoa2416394"&gt;showed 47% greater weight loss&lt;/a&gt; than Wegovy in the SURMOUNT-5 head-to-head), the better oral pipeline, and the longer patent runway (tirzepatide patents extend into the mid-2030s versus &lt;a href="https://www.trademarkia.com/news/patents/when-does-the-ozempic-patent-expire"&gt;semaglutide&amp;rsquo;s core US patent expiring December 2031&lt;/a&gt;, with biosimilar competition likely following shortly after).&lt;/p&gt;
&lt;figure class="post-figure" style="width: 80%; margin: 1.5rem auto;"&gt;
&lt;button type="button" class="img-trigger" data-lightbox-target="lightbox-novo-vs-lilly-duopoly-png-4" aria-label="View full-size image"&gt;
&lt;picture class="img-lightbox"&gt;
&lt;source media="(max-width: 768px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=320,quality=80,format=auto/novo-vs-lilly-duopoly.png 320w,
https://static.philippdubach.com/cdn-cgi/image/width=480,quality=80,format=auto/novo-vs-lilly-duopoly.png 480w,
https://static.philippdubach.com/cdn-cgi/image/width=640,quality=80,format=auto/novo-vs-lilly-duopoly.png 640w,
https://static.philippdubach.com/cdn-cgi/image/width=960,quality=80,format=auto/novo-vs-lilly-duopoly.png 960w,
https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/novo-vs-lilly-duopoly.png 1200w"
sizes="(max-width: 768px) 80vw, 576px"&gt;
&lt;source media="(max-width: 1024px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=768,quality=80,format=auto/novo-vs-lilly-duopoly.png 768w,
https://static.philippdubach.com/cdn-cgi/image/width=1024,quality=80,format=auto/novo-vs-lilly-duopoly.png 1024w,
https://static.philippdubach.com/cdn-cgi/image/width=1440,quality=80,format=auto/novo-vs-lilly-duopoly.png 1440w"
sizes="(max-width: 768px) 80vw, 576px"&gt;
&lt;source media="(min-width: 1025px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/novo-vs-lilly-duopoly.png 1200w,
https://static.philippdubach.com/cdn-cgi/image/width=1600,quality=80,format=auto/novo-vs-lilly-duopoly.png 1600w,
https://static.philippdubach.com/cdn-cgi/image/width=2000,quality=80,format=auto/novo-vs-lilly-duopoly.png 2000w"
sizes="(max-width: 768px) 80vw, 576px"&gt;
&lt;img src="https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/novo-vs-lilly-duopoly.png"
alt="Novo Nordisk vs Eli Lilly GLP-1 duopoly: Lilly at 2.4x Novo forward PE, 57% US market share, revenue and patent runway comparison"
class=""
width="1760"
height="1842"
loading="lazy"
decoding="async"&gt;
&lt;/picture&gt;
&lt;/button&gt;
&lt;/figure&gt;
&lt;dialog id="lightbox-novo-vs-lilly-duopoly-png-4" class="lightbox-dialog" aria-label="Full-size image" data-hires="https://static.philippdubach.com/cdn-cgi/image/width=2000,quality=85,format=auto/novo-vs-lilly-duopoly.png"&gt;
&lt;form method="dialog" class="lightbox-close-form"&gt;
&lt;button type="submit" class="lightbox-close" aria-label="Close"&gt;×&lt;/button&gt;
&lt;/form&gt;
&lt;img alt="Novo Nordisk vs Eli Lilly GLP-1 duopoly: Lilly at 2.4x Novo forward PE, 57% US market share, revenue and patent runway comparison" decoding="async"&gt;
&lt;/dialog&gt;
&lt;p&gt;The Hims &amp;amp; Hers saga sits at the chaotic edge of all this. HIMS &lt;a href="https://finance.yahoo.com/news/nvo-lly-stocks-slide-hims-142700745.html"&gt;launched a $49 per month compounded oral semaglutide pill&lt;/a&gt; on February 5, 2026, using a liposomal formulation for which limited public bioavailability data has been released. Within four days, &lt;a href="https://markets.financialcontent.com/stocks/article/marketminute-2026-2-9-the-glp-1-gold-rush-hits-a-wall-novo-nordisk-sues-hims-and-hers-as-fda-crackdown-triggers-20-stock-crash"&gt;HHS had referred the company to the DOJ&lt;/a&gt;, Novo had &lt;a href="https://www.gurufocus.com/news/8587678/novo-nordisk-nvo-shares-plunge-amid-competition-from-hims-hers-hims"&gt;filed a patent infringement lawsuit&lt;/a&gt;, and HIMS had suspended the product. Novo Nordisk has alleged, in filings related to its litigation, elevated impurity levels in compounded samples — the underlying allegation is contested and the case is unresolved, and the figure should not be read as established fact. The episode illustrates what happens when the incentive to undercut $1,000-per-month pricing collides with the engineering difficulty of making peptide drugs work orally.&lt;/p&gt;
&lt;h2 id="does-oral-delivery-commoditize-glp-1"&gt;Does Oral Delivery Commoditize GLP-1&lt;/h2&gt;
&lt;p&gt;Does oral delivery commoditize GLP-1s, or does it expand the market so dramatically that even with pricing pressure, the opportunity grows Early evidence already supports the expansion thesis: &lt;a href="https://www.cnbc.com/2026/04/07/novo-nordisks-wegovy-pill-launch-draws-new-wave-of-patients-to-glp-1s.html"&gt;Novo&amp;rsquo;s oral Wegovy pill uptake is running roughly 10x higher&lt;/a&gt; than the original injectable Wegovy launch, drawing in new patients rather than converting existing injection users.&lt;/p&gt;
&lt;p&gt;The statin precedent is the strongest data point we have. After generic atorvastatin launched in 2011, total statin use &lt;a href="https://pmc.ncbi.nlm.nih.gov/articles/PMC10203693/"&gt;expanded from 31 million to 92 million Americans&lt;/a&gt; by 2019, a &lt;strong&gt;197% increase&lt;/strong&gt;. Total prescription volume grew 77%. The per-unit price collapsed, but total market volume more than compensated. Updated clinical guidelines, lower copays, and reduced patient resistance combined to pull in millions of people who would never have started therapy at the original price and delivery format.&lt;/p&gt;
&lt;p&gt;Current penetration is absurdly low: &lt;a href="https://icer.org/wp-content/uploads/2025/04/Affordable-Access-to-GLP-1-Obesity-Medications-_-ICER-White-Paper-_-04.09.2025.pdf"&gt;fewer than 5% of eligible US adults&lt;/a&gt; are on anti-obesity medication therapy, against 104 million with obesity. At statin-like penetration rates of 35% or higher, that&amp;rsquo;s a 5 to 10x expansion. Persistence data reinforces the point: only &lt;a href="https://www.primetherapeutics.com/documents/d/primetherapeutics/prime-therapeutics_glp-1-therapy-to-treat-obesity-among-members-without-diabetes_three-year-persistence"&gt;32% of obesity patients persist at one year and 15% at two years&lt;/a&gt;. Side effects account for 43.7% of discontinuation, financial barriers for 30.9%. Adherence collapses when the friction is high. An oral weight loss pill that&amp;rsquo;s cheaper, eliminates the injection barrier, and has no fasting restrictions (orforglipron) attacks all three.&lt;/p&gt;
&lt;h2 id="oral-glp-1-pipeline"&gt;Oral GLP-1 pipeline&lt;/h2&gt;
&lt;p&gt;The rest of the oral GLP-1 pipeline is worth tracking but the outcomes are uncertain. &lt;a href="https://www.prnewswire.com/news-releases/viking-therapeutics-announces-positive-top-line-results-from-phase-2-venture-oral-dosing-trial-of-vk2735-tablet-formulation-in-patients-with-obesity-302533355.html"&gt;Viking&amp;rsquo;s oral VK2735&lt;/a&gt; showed rapid weight loss in Phase 2 (up to 12.2% at 13 weeks) but a &lt;a href="https://www.biopharmadive.com/news/viking-oral-obesity-drug-results-study-discontinuationsdata-dropout/758019/"&gt;38% discontinuation rate&lt;/a&gt; at the highest dose sent the stock down 37%. &lt;a href="https://ir.structuretx.com/news-releases/news-release-details/structure-therapeutics-reports-positive-topline-data-access"&gt;Structure Therapeutics&amp;rsquo; aleniglipron&lt;/a&gt; posted 15.3% placebo-adjusted weight loss at 36 weeks in Phase 2b, competitive numbers with no plateau, and has $786 million in cash to fund Phase 3. &lt;a href="https://www.statnews.com/2025/04/14/pfizer-discontinue-danuglipron-glp-1-obesity-liver-toxicity/"&gt;Pfizer&amp;rsquo;s danuglipron was killed&lt;/a&gt; by liver toxicity in April 2025, the second Pfizer oral GLP-1 failure. &lt;a href="https://ir.ternspharma.com/news-releases/news-release-details/terns-pharmaceuticals-reports-topline-12-week-data-its-phase-2"&gt;Terns Pharmaceuticals also exited&lt;/a&gt; after weak Phase 2 data and liver enzyme elevations. Behind them, Novo&amp;rsquo;s oral amycretin, a GLP-1/amylin dual agonist, enters Phase 3 in 2026 and could offer best-in-class weight loss if the oral formulation holds up. Oral small molecule GLP-1 development has a meaningful failure rate, and Foundayo&amp;rsquo;s clean safety profile across multiple Phase 3 trials is not something I&amp;rsquo;d assume the next entrant can replicate.&lt;/p&gt;
&lt;figure class="post-figure" style="width: 80%; margin: 1.5rem auto;"&gt;
&lt;button type="button" class="img-trigger" data-lightbox-target="lightbox-oral-glp1-pipeline-png-7" aria-label="View full-size image"&gt;
&lt;picture class="img-lightbox"&gt;
&lt;source media="(max-width: 768px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=320,quality=80,format=auto/oral-glp1-pipeline.png 320w,
https://static.philippdubach.com/cdn-cgi/image/width=480,quality=80,format=auto/oral-glp1-pipeline.png 480w,
https://static.philippdubach.com/cdn-cgi/image/width=640,quality=80,format=auto/oral-glp1-pipeline.png 640w,
https://static.philippdubach.com/cdn-cgi/image/width=960,quality=80,format=auto/oral-glp1-pipeline.png 960w,
https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/oral-glp1-pipeline.png 1200w"
sizes="(max-width: 768px) 80vw, 576px"&gt;
&lt;source media="(max-width: 1024px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=768,quality=80,format=auto/oral-glp1-pipeline.png 768w,
https://static.philippdubach.com/cdn-cgi/image/width=1024,quality=80,format=auto/oral-glp1-pipeline.png 1024w,
https://static.philippdubach.com/cdn-cgi/image/width=1440,quality=80,format=auto/oral-glp1-pipeline.png 1440w"
sizes="(max-width: 768px) 80vw, 576px"&gt;
&lt;source media="(min-width: 1025px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/oral-glp1-pipeline.png 1200w,
https://static.philippdubach.com/cdn-cgi/image/width=1600,quality=80,format=auto/oral-glp1-pipeline.png 1600w,
https://static.philippdubach.com/cdn-cgi/image/width=2000,quality=80,format=auto/oral-glp1-pipeline.png 2000w"
sizes="(max-width: 768px) 80vw, 576px"&gt;
&lt;img src="https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/oral-glp1-pipeline.png"
alt="Oral GLP-1 pipeline 2026: Foundayo approved, aleniglipron Phase 3, VK2735 Phase 2, oral amycretin Phase 3, with Pfizer and Terns programs killed by liver toxicity"
class=""
width="1760"
height="1900"
loading="lazy"
decoding="async"&gt;
&lt;/picture&gt;
&lt;/button&gt;
&lt;/figure&gt;
&lt;dialog id="lightbox-oral-glp1-pipeline-png-7" class="lightbox-dialog" aria-label="Full-size image" data-hires="https://static.philippdubach.com/cdn-cgi/image/width=2000,quality=85,format=auto/oral-glp1-pipeline.png"&gt;
&lt;form method="dialog" class="lightbox-close-form"&gt;
&lt;button type="submit" class="lightbox-close" aria-label="Close"&gt;×&lt;/button&gt;
&lt;/form&gt;
&lt;img alt="Oral GLP-1 pipeline 2026: Foundayo approved, aleniglipron Phase 3, VK2735 Phase 2, oral amycretin Phase 3, with Pfizer and Terns programs killed by liver toxicity" decoding="async"&gt;
&lt;/dialog&gt;
&lt;p&gt;The thing that makes this market interesting is that almost every important variable is in motion at the same time: form factor (injection to pill), pricing structure ($1,000 per month to $149 and potentially lower), patent protection (expiring internationally, holding domestically), competitive dynamics (Novo growth decelerating per its own guidance, Lilly&amp;rsquo;s Foundayo launching, the compounding-pharmacy retreat after the Hims episode), and the macro question of Medicare coverage. The structural thesis — that oral GLP-1s expand total market volume through a Jevons-like dynamic — is more confident than any view on individual stock entry points.&lt;/p&gt;
&lt;p&gt;At roughly 30x forward earnings for Lilly and 12.5x for Novo per recent multiples, the market is pricing in very different forward trajectories for the two companies. Which framing turns out to be right depends on what the head-to-head readouts and the orforglipron launch curve actually show in 2026 and 2027.&lt;/p&gt;
&lt;aside class="disclaimer" role="note" aria-label="Disclaimer"&gt;
&lt;div class="disclaimer-content"&gt;&lt;p&gt;&lt;strong&gt;Disclaimer:&lt;/strong&gt; Journalism, not investment advice or a recommendation. Not directed at UK persons; not a financial promotion under FSMA s.21. The author may hold positions in instruments discussed and receives no compensation from issuers. &lt;a href="https://philippdubach.com/disclaimers/#finance"&gt;Full disclaimer →&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;
&lt;/aside&gt;
&lt;aside class="disclaimer" role="note" aria-label="Disclaimer"&gt;
&lt;div class="disclaimer-content"&gt;&lt;p&gt;&lt;strong&gt;Disclaimer:&lt;/strong&gt; Journalistic reportage on prescription-only medicines. Not advertising under HMG / HMR / HWG / FDA frameworks, not medical advice. Prescription and use require a qualified clinician. &lt;a href="https://philippdubach.com/disclaimers/#pom"&gt;Full disclaimer →&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;
&lt;/aside&gt;</description></item><item><title>Ambiguity by Design</title><link>https://philippdubach.com/posts/ambiguity-by-design/</link><pubDate>Wed, 08 Apr 2026 00:00:00 +0200</pubDate><author>me@philippdubach.com (Philipp D. Dubach)</author><guid>https://philippdubach.com/posts/ambiguity-by-design/</guid><description>&lt;figure class="post-figure" style="width: 80%; margin: 1.5rem auto;"&gt;
&lt;button type="button" class="img-trigger" data-lightbox-target="lightbox-edge-of-knowledge-2-cover-jpg-0" aria-label="View full-size image"&gt;
&lt;picture class="img-lightbox"&gt;
&lt;source media="(max-width: 768px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=320,quality=80,format=auto/edge-of-knowledge-2-cover.jpg 320w,
https://static.philippdubach.com/cdn-cgi/image/width=480,quality=80,format=auto/edge-of-knowledge-2-cover.jpg 480w,
https://static.philippdubach.com/cdn-cgi/image/width=640,quality=80,format=auto/edge-of-knowledge-2-cover.jpg 640w,
https://static.philippdubach.com/cdn-cgi/image/width=960,quality=80,format=auto/edge-of-knowledge-2-cover.jpg 960w,
https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/edge-of-knowledge-2-cover.jpg 1200w"
sizes="(max-width: 768px) 80vw, 576px"&gt;
&lt;source media="(max-width: 1024px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=768,quality=80,format=auto/edge-of-knowledge-2-cover.jpg 768w,
https://static.philippdubach.com/cdn-cgi/image/width=1024,quality=80,format=auto/edge-of-knowledge-2-cover.jpg 1024w,
https://static.philippdubach.com/cdn-cgi/image/width=1440,quality=80,format=auto/edge-of-knowledge-2-cover.jpg 1440w"
sizes="(max-width: 768px) 80vw, 576px"&gt;
&lt;source media="(min-width: 1025px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/edge-of-knowledge-2-cover.jpg 1200w,
https://static.philippdubach.com/cdn-cgi/image/width=1600,quality=80,format=auto/edge-of-knowledge-2-cover.jpg 1600w,
https://static.philippdubach.com/cdn-cgi/image/width=2000,quality=80,format=auto/edge-of-knowledge-2-cover.jpg 2000w"
sizes="(max-width: 768px) 80vw, 576px"&gt;
&lt;img src="https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/edge-of-knowledge-2-cover.jpg"
alt="Editorial illustration: a small figure at a table flanked by two large urns — a transparent glass urn full of mixed coloured marbles on the left, and an opaque dark ceramic urn on the right disappearing into a fog bank, visualizing Ellsberg&amp;#39;s paradox of known versus unknown odds"
class=""
width="1280"
height="720"
fetchpriority="high"
decoding="async"&gt;
&lt;/picture&gt;
&lt;/button&gt;
&lt;/figure&gt;
&lt;dialog id="lightbox-edge-of-knowledge-2-cover-jpg-0" class="lightbox-dialog" aria-label="Full-size image" data-hires="https://static.philippdubach.com/cdn-cgi/image/width=2000,quality=85,format=auto/edge-of-knowledge-2-cover.jpg"&gt;
&lt;form method="dialog" class="lightbox-close-form"&gt;
&lt;button type="submit" class="lightbox-close" aria-label="Close"&gt;×&lt;/button&gt;
&lt;/form&gt;
&lt;img alt="Editorial illustration: a small figure at a table flanked by two large urns — a transparent glass urn full of mixed coloured marbles on the left, and an opaque dark ceramic urn on the right disappearing into a fog bank, visualizing Ellsberg&amp;#39;s paradox of known versus unknown odds" decoding="async"&gt;
&lt;/dialog&gt;
&lt;p&gt;&lt;em&gt;Investing at the Edge of Knowledge, Part 2 · &lt;a href="https://philippdubach.com/posts/three-kinds-of-not-knowing/"&gt;Start with Part 1&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Ellsberg&amp;rsquo;s urn experiment is one of the cleanest results in decision theory. &lt;a href="https://academic.oup.com/qje/article-abstract/75/4/643/1913802"&gt;Daniel Ellsberg (1961)&lt;/a&gt; put two urns in front of subjects. Urn A: 50 red balls, 50 black. Urn B: 100 balls, red and black, ratio unknown. Pay $100 if you draw the right color. Most people chose Urn A, the known 50/50 bet. Fine so far. But here&amp;rsquo;s the problem: they chose Urn A regardless of which color they were betting on. Bet on red? Prefer Urn A. Bet on black? Still prefer Urn A. This is incoherent. If you think Urn B has fewer red balls (making you avoid it for a red bet), you should prefer it for a black bet. The subjects weren&amp;rsquo;t estimating probabilities at all. They were fleeing the &lt;em&gt;feeling&lt;/em&gt; of not knowing the probability. Ellsberg proved that people make systematically different choices when probabilities are unknown versus known, even when the unknown probabilities carry no actual informational disadvantage. &lt;a href="https://papers.ssrn.com/sol3/papers.cfm?abstract_id=2205821"&gt;Richard Zeckhauser&amp;rsquo;s&lt;/a&gt; contribution was to ask&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;What happens to prices when an entire market makes this choice simultaneously?&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id="the-experimental-evidence"&gt;The experimental evidence&lt;/h2&gt;
&lt;p&gt;Ellsberg&amp;rsquo;s result spawned a body of work that, six decades later, has only strengthened the original finding. &lt;a href="https://academic.oup.com/qje/article-abstract/110/3/585/1859203"&gt;Fox and Tversky (1995)&lt;/a&gt; added a twist that matters enormously for financial markets. Their &amp;ldquo;comparative ignorance hypothesis&amp;rdquo; showed that ambiguity aversion intensifies when people can compare themselves to someone who appears more knowledgeable. In a non-comparative setting, where subjects evaluated an ambiguous bet in isolation, ambiguity aversion largely disappeared. But the moment subjects could compare their knowledge to someone else&amp;rsquo;s, the aversion came roaring back.&lt;/p&gt;
&lt;p&gt;In markets, there is always someone who appears more confident. Every sell-side note, every CNBC segment, every hedge fund manager interviewed at Davos projects certainty that you don&amp;rsquo;t feel. The comparative ignorance effect is permanently activated in financial markets. You don&amp;rsquo;t just feel uncertain. You feel uncertain relative to someone who seems to know, and the gap between their apparent confidence and your honest confusion is what drives the exit decision.&lt;/p&gt;
&lt;p&gt;Zeckhauser&amp;rsquo;s own experimental evidence in the 2006 paper extends this further. He ran lottery choice experiments comparing willingness to bet on standard probabilistic gambles versus events with unknown and unknowable (UU) outcomes (to familiarize yourself with this framework &lt;a href="https://philippdubach.com/posts/three-kinds-of-not-knowing/"&gt;start with Part 1&lt;/a&gt;.) People refused to distinguish between small probabilities of UU events even when the expected value difference was large. The feeling of not-knowing overwhelmed the arithmetic of expected value. Separately, he documented that individuals explicitly warned about overconfidence are still surprised &lt;strong&gt;35%&lt;/strong&gt; of the time on quantities where they should be surprised only &lt;strong&gt;2%&lt;/strong&gt; of the time. We simultaneously know less than we think (overconfidence) and refuse to act on what we do know when probabilities are ambiguous (ambiguity aversion).&lt;/p&gt;
&lt;h2 id="is-ambiguity-aversion-rational"&gt;Is ambiguity aversion rational?&lt;/h2&gt;
&lt;p&gt;This turns out to be a harder question than it looks, and the answer matters for how you think about the mispricing mechanism. The case for &amp;ldquo;yes, it&amp;rsquo;s rational&amp;rdquo; is surprisingly strong. &lt;a href="https://www.sciencedirect.com/science/article/abs/pii/0304406889900189"&gt;Gilboa and Schmeidler (1989)&lt;/a&gt; proved that a decision maker who evaluates bets by the worst-case probability in their set of plausible priors is behaving in a way that satisfies all the standard axioms of rational choice except one: the Sure-Thing Principle that Ellsberg&amp;rsquo;s experiment violates. Their maxmin expected utility model says: if you don&amp;rsquo;t know the probability, evaluate the bet as if the probability is the worst one consistent with your information. This is formally coherent. It&amp;rsquo;s also roughly what a good risk manager does when facing an uncertain tail risk. &lt;a href="https://link.springer.com/article/10.1007/s102030200006"&gt;Bewley (2002)&lt;/a&gt;, as I discussed in &lt;a href="https://philippdubach.com/posts/three-kinds-of-not-knowing/"&gt;Part 1&lt;/a&gt;, showed that dropping the completeness axiom produces a framework where inertia, refusing to act, is the rational response when you cannot rank the alternatives. If you can&amp;rsquo;t tell which bet is better, sticking with the status quo isn&amp;rsquo;t lazy. It&amp;rsquo;s defensible.&lt;/p&gt;
&lt;p&gt;The case for &amp;ldquo;no, it&amp;rsquo;s a bias&amp;rdquo; rests on the Ellsberg experiment itself. The subjects preferred a known 50% chance over an unknown chance that they could bet on either side of. There is no informational disadvantage. The probability they&amp;rsquo;re fleeing might be 50%, might be 30%, might be 70%, but since they can bet on either color, the expected value is the same regardless. The aversion is to the experience of not-knowing, not to any actual asymmetry in the bet. That looks more like a bug than a feature.&lt;/p&gt;
&lt;p&gt;I think the answer is &amp;ldquo;it depends,&amp;rdquo; and the distinction matters. Ambiguity aversion is rational when there might be a better-informed party on the other side of the trade. If you&amp;rsquo;re buying a stock and you suspect the seller knows something you don&amp;rsquo;t, demanding a discount for your ignorance is not a bias. It&amp;rsquo;s adverse selection protection. But ambiguity aversion is irrational when you can establish that nobody knows more than you do. When the ambiguity is universal, when the entire market is confused because the state space itself is new, the discount demanded by ambiguity-averse investors is a pricing error, not a risk premium.&lt;/p&gt;
&lt;p&gt;This is where I land: ambiguity aversion is a sensible default that gets systematically overweighted in specific situations. The skill is the distinction. And the distinction is judgment, not math.&lt;/p&gt;
&lt;h2 id="discomfort-as-information"&gt;Discomfort as information&lt;/h2&gt;
&lt;p&gt;Zeckhauser&amp;rsquo;s most counterintuitive move in the paper is turning ambiguity aversion from a problem into a signal. His Speculation 1 states it directly: &amp;ldquo;UUU investments drive off speculators, which creates the potential for an attractive low price.&amp;rdquo;&lt;/p&gt;
&lt;p&gt;The logic is recursive. Your discomfort when facing an ambiguous situation tells you something, but not about the asset. It tells you about the competitive field. If you&amp;rsquo;re uncomfortable, most other potential buyers have already left. The very thing that makes you want to sell, the feeling of not-knowing, is the same thing that has thinned the competition and compressed the price. David Ricardo buying British government bonds on the eve of Waterloo was uncomfortable. Warren Buffett writing earthquake reinsurance for the California Earthquake Authority at roughly five times actuarial value was comfortable only because he had done this inference before: the discomfort of everyone else was the opportunity itself. Zeckhauser&amp;rsquo;s Maxim G puts it memorably&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Discounting for ambiguity is a natural tendency that should be overcome, just as should be overeating.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Both ambiguity aversion and overeating are evolved heuristics that served us well in ancestral environments and poorly in modern ones. In a small tribal group where the unknown reliably correlated with danger, fleeing ambiguity kept you alive. In a financial market where ambiguity-averse institutional capital mechanically exits positions it can&amp;rsquo;t model, the same instinct creates a systematic transfer of wealth from the ambiguity-averse to the ambiguity-tolerant.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://scholar.harvard.edu/files/iris_bohnet/files/trust_risk_and_betrayal.pdf"&gt;Bohnet and Zeckhauser (2004)&lt;/a&gt; identified a related mechanism they called &amp;ldquo;betrayal aversion.&amp;rdquo; People demand stronger odds when a betraying human rather than indifferent nature determines the outcome. In markets, this manifests as an extra discount demanded when the ambiguity involves a counterparty who might be exploiting your ignorance. The mere possibility that someone on the other side knows more amplifies the ambiguity premium beyond what the uncertainty alone would justify.&lt;/p&gt;
&lt;p&gt;Now apply all of this to a more recent example, the SaaSpocalypse. I &lt;a href="https://philippdubach.com/posts/the-saaspocalypse-paradox/"&gt;wrote about the details&lt;/a&gt; elsewhere, but the relevant point here is the mechanism. When Anthropic released the Claude Cowork plugins in late January, institutional investors didn&amp;rsquo;t sit down and estimate the probability that AI would replace CRM. They faced something worse: they couldn&amp;rsquo;t define what &amp;ldquo;replacing CRM&amp;rdquo; would even mean. The state space was undefined, as I argued in &lt;a href="https://philippdubach.com/posts/three-kinds-of-not-knowing/"&gt;Part 1&lt;/a&gt;. And when the state space is undefined, the entire institutional machinery for processing uncertainty breaks down simultaneously.&lt;/p&gt;
&lt;p&gt;Fiduciary duty requires estimable risk. Compliance models require defined scenarios. Portfolio managers face career risk: losing money on a position you can&amp;rsquo;t explain is a firing offense; missing a rally in something you sold is merely embarrassing. The institutional constraints compound the ambiguity aversion. Each layer of oversight demands a model, and the model requires defined states, and the states don&amp;rsquo;t exist yet. The rational response for any individual institutional actor was to sell. The collective result was an IGV drawdown of &lt;strong&gt;32%&lt;/strong&gt; while sector earnings grew &lt;strong&gt;17%&lt;/strong&gt;, an RSI of &lt;strong&gt;18&lt;/strong&gt;, and &lt;strong&gt;$2 trillion&lt;/strong&gt; in evaporated market cap.&lt;/p&gt;
&lt;p&gt;The sellers weren&amp;rsquo;t acting on information. They were acting on ambiguity aversion, amplified by comparative ignorance (everyone else seemed to be selling too), amplified by career risk (nobody gets fired for selling software before the AI disruption), amplified by betrayal aversion (maybe the AI insiders knew something the market didn&amp;rsquo;t). Stack these amplifiers on top of Ellsberg&amp;rsquo;s basic finding, and you get a price that reflects the intensity of collective discomfort rather than any assessment of fundamentals.&lt;/p&gt;
&lt;p&gt;Zeckhauser describes the investor&amp;rsquo;s challenge with a bridge analogy: you have to make peace with good decisions that lead to bad outcomes. Buying the IGV at $80 with an 18 RSI and 17% earnings growth is, on the framework, a good decision. If it drops to $70 first, that doesn&amp;rsquo;t make it a bad decision. But making that distinction under ambiguity is not an analytical skill. It&amp;rsquo;s a temperamental one. It requires accepting that &amp;ldquo;I don&amp;rsquo;t know&amp;rdquo; is not disqualifying and that the discomfort you feel is shared, priced in, and possibly overpriced. That&amp;rsquo;s harder than any calculation.&lt;/p&gt;
&lt;p&gt;Knowing that ambiguity aversion creates mispricing is the easy part. The hard part is what comes next: when you&amp;rsquo;re facing someone on the other side of a trade in a UU world, how do you figure out whether they know something you don&amp;rsquo;t, or whether they&amp;rsquo;re just less uncomfortable than you are? That&amp;rsquo;s the domain of sidecar investing and strategic inference. That&amp;rsquo;s &lt;a href="https://philippdubach.com/posts/the-geometry-of-who-knows-what/"&gt;Part 3&lt;/a&gt;.&lt;/p&gt;</description></item><item><title>Three Kinds of Not-Knowing</title><link>https://philippdubach.com/posts/three-kinds-of-not-knowing/</link><pubDate>Sat, 04 Apr 2026 00:00:00 +0200</pubDate><author>me@philippdubach.com (Philipp D. Dubach)</author><guid>https://philippdubach.com/posts/three-kinds-of-not-knowing/</guid><description>&lt;figure class="post-figure" style="width: 80%; margin: 1.5rem auto;"&gt;
&lt;button type="button" class="img-trigger" data-lightbox-target="lightbox-edge-of-knowledge-1-cover-jpg-0" aria-label="View full-size image"&gt;
&lt;picture class="img-lightbox"&gt;
&lt;source media="(max-width: 768px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=320,quality=80,format=auto/edge-of-knowledge-1-cover.jpg 320w,
https://static.philippdubach.com/cdn-cgi/image/width=480,quality=80,format=auto/edge-of-knowledge-1-cover.jpg 480w,
https://static.philippdubach.com/cdn-cgi/image/width=640,quality=80,format=auto/edge-of-knowledge-1-cover.jpg 640w,
https://static.philippdubach.com/cdn-cgi/image/width=960,quality=80,format=auto/edge-of-knowledge-1-cover.jpg 960w,
https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/edge-of-knowledge-1-cover.jpg 1200w"
sizes="(max-width: 768px) 80vw, 576px"&gt;
&lt;source media="(max-width: 1024px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=768,quality=80,format=auto/edge-of-knowledge-1-cover.jpg 768w,
https://static.philippdubach.com/cdn-cgi/image/width=1024,quality=80,format=auto/edge-of-knowledge-1-cover.jpg 1024w,
https://static.philippdubach.com/cdn-cgi/image/width=1440,quality=80,format=auto/edge-of-knowledge-1-cover.jpg 1440w"
sizes="(max-width: 768px) 80vw, 576px"&gt;
&lt;source media="(min-width: 1025px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/edge-of-knowledge-1-cover.jpg 1200w,
https://static.philippdubach.com/cdn-cgi/image/width=1600,quality=80,format=auto/edge-of-knowledge-1-cover.jpg 1600w,
https://static.philippdubach.com/cdn-cgi/image/width=2000,quality=80,format=auto/edge-of-knowledge-1-cover.jpg 2000w"
sizes="(max-width: 768px) 80vw, 576px"&gt;
&lt;img src="https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/edge-of-knowledge-1-cover.jpg"
alt="Editorial illustration: a charcoal silhouette of a figure stands at the edge of a fog bank looking at three lanterns hung on a wire, the leftmost burning warm ochre, the middle dim, the rightmost unlit and barely visible in the fog — encoding risk, uncertainty, and ignorance"
class=""
width="1280"
height="720"
fetchpriority="high"
decoding="async"&gt;
&lt;/picture&gt;
&lt;/button&gt;
&lt;/figure&gt;
&lt;dialog id="lightbox-edge-of-knowledge-1-cover-jpg-0" class="lightbox-dialog" aria-label="Full-size image" data-hires="https://static.philippdubach.com/cdn-cgi/image/width=2000,quality=85,format=auto/edge-of-knowledge-1-cover.jpg"&gt;
&lt;form method="dialog" class="lightbox-close-form"&gt;
&lt;button type="submit" class="lightbox-close" aria-label="Close"&gt;×&lt;/button&gt;
&lt;/form&gt;
&lt;img alt="Editorial illustration: a charcoal silhouette of a figure stands at the edge of a fog bank looking at three lanterns hung on a wire, the leftmost burning warm ochre, the middle dim, the rightmost unlit and barely visible in the fog — encoding risk, uncertainty, and ignorance" decoding="async"&gt;
&lt;/dialog&gt;
&lt;p&gt;&lt;em&gt;Investing at the Edge of Knowledge, Part 1&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;David Ricardo made a fortune buying British government bonds four days before the Battle of Waterloo. He was not a military analyst. He had no basis to compute the odds of Napoleon&amp;rsquo;s defeat, or victory, or any of the ambiguous outcomes in between. But he understood something that most of his contemporaries did not: the nature of his own ignorance was the same as everyone else&amp;rsquo;s, the seller was desperate, competition was thin, and the pounds he&amp;rsquo;d gain if Wellington won were worth far more than the pounds he&amp;rsquo;d lose if Wellington fell.&lt;/p&gt;
&lt;p&gt;Ricardo&amp;rsquo;s edge was not information. It was a correct assessment of what kind of not-knowing he was facing.&lt;/p&gt;
&lt;p&gt;That distinction, between different kinds of not-knowing, is mostly absent from finance. Richard Zeckhauser, the Frank P. Ramsey Professor of Political Economy at Harvard, made it the foundation of his 2006 paper &amp;ldquo;&lt;a href="https://papers.ssrn.com/sol3/papers.cfm?abstract_id=2205821"&gt;Investing in the Unknown and Unknowable&lt;/a&gt;,&amp;rdquo; published in &lt;em&gt;Capitalism and Society&lt;/em&gt;. The paper takes no derivatives and runs no regressions. What it does instead is more valuable: it provides a taxonomy of not-knowing, and then shows why the category that finance theory handles worst is the one where the biggest fortunes have been made.&lt;/p&gt;
&lt;p&gt;This is Part 1 of a five-part series that works through Zeckhauser&amp;rsquo;s framework and extends it. The goal is not a literature review. It&amp;rsquo;s an attempt to build a working vocabulary for the kind of investing that modern portfolio theory was never designed to address.&lt;/p&gt;
&lt;h2 id="the-taxonomy"&gt;The taxonomy&lt;/h2&gt;
&lt;p&gt;Zeckhauser presents three categories of not-knowing. Each demands different skills. Each rewards a different kind of investor. And the jump between them is not a smooth gradient. It&amp;rsquo;s a cliff.&lt;/p&gt;
&lt;figure class="post-figure" style="width: 80%; margin: 1.5rem auto;"&gt;
&lt;button type="button" class="img-trigger" data-lightbox-target="lightbox-three-boxes-of-not-knowing-png-1" aria-label="View full-size image"&gt;
&lt;picture class="img-lightbox"&gt;
&lt;source media="(max-width: 768px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=320,quality=80,format=auto/three-boxes-of-not-knowing.png 320w,
https://static.philippdubach.com/cdn-cgi/image/width=480,quality=80,format=auto/three-boxes-of-not-knowing.png 480w,
https://static.philippdubach.com/cdn-cgi/image/width=640,quality=80,format=auto/three-boxes-of-not-knowing.png 640w,
https://static.philippdubach.com/cdn-cgi/image/width=960,quality=80,format=auto/three-boxes-of-not-knowing.png 960w,
https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/three-boxes-of-not-knowing.png 1200w"
sizes="(max-width: 768px) 80vw, 576px"&gt;
&lt;source media="(max-width: 1024px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=768,quality=80,format=auto/three-boxes-of-not-knowing.png 768w,
https://static.philippdubach.com/cdn-cgi/image/width=1024,quality=80,format=auto/three-boxes-of-not-knowing.png 1024w,
https://static.philippdubach.com/cdn-cgi/image/width=1440,quality=80,format=auto/three-boxes-of-not-knowing.png 1440w"
sizes="(max-width: 768px) 80vw, 576px"&gt;
&lt;source media="(min-width: 1025px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/three-boxes-of-not-knowing.png 1200w,
https://static.philippdubach.com/cdn-cgi/image/width=1600,quality=80,format=auto/three-boxes-of-not-knowing.png 1600w,
https://static.philippdubach.com/cdn-cgi/image/width=2000,quality=80,format=auto/three-boxes-of-not-knowing.png 2000w"
sizes="(max-width: 768px) 80vw, 576px"&gt;
&lt;img src="https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/three-boxes-of-not-knowing.png"
alt="Zeckhauser&amp;#39;s three categories of not-knowing in investing: risk with known distributions, uncertainty with unknown probabilities, and ignorance where states are undefined"
class=""
width="1760"
height="1566"
loading="lazy"
decoding="async"&gt;
&lt;/picture&gt;
&lt;/button&gt;
&lt;/figure&gt;
&lt;dialog id="lightbox-three-boxes-of-not-knowing-png-1" class="lightbox-dialog" aria-label="Full-size image" data-hires="https://static.philippdubach.com/cdn-cgi/image/width=2000,quality=85,format=auto/three-boxes-of-not-knowing.png"&gt;
&lt;form method="dialog" class="lightbox-close-form"&gt;
&lt;button type="submit" class="lightbox-close" aria-label="Close"&gt;×&lt;/button&gt;
&lt;/form&gt;
&lt;img alt="Zeckhauser&amp;#39;s three categories of not-knowing in investing: risk with known distributions, uncertainty with unknown probabilities, and ignorance where states are undefined" decoding="async"&gt;
&lt;/dialog&gt;
&lt;p&gt;The first box is risk. Probabilities are known, distributions of returns are known, and the challenge is optimization. This is the world of the capital asset pricing model, of mean-variance portfolios, of the efficient frontier. You hold a 60/40 stock-bond portfolio and rebalance quarterly. The math is clean. The Nobel Prizes were awarded. Finance education lives here.&lt;/p&gt;
&lt;p&gt;The second box is uncertainty. You can identify the possible states of the world, but you can&amp;rsquo;t assign reliable probabilities. A corporate bond analyst looking at incomplete financials knows the company might default or might not, knows the recovery rate might be 40 cents or 60 cents, but can&amp;rsquo;t compute a precise probability for either. The skill that pays here is Bayesian estimation: forming the best prior you can from limited data, updating as information arrives, and having the temperament to act on imperfect beliefs. This is harder than Box 1, but it&amp;rsquo;s still recognizable territory. Decision theory was built for it.&lt;/p&gt;
&lt;p&gt;The third box is ignorance. Zeckhauser abbreviates it UU: unknown and unknowable. Here, even the identity of possible future states is undefined. You don&amp;rsquo;t have a distribution to estimate because you can&amp;rsquo;t enumerate what you&amp;rsquo;re estimating over. The question isn&amp;rsquo;t &amp;ldquo;what&amp;rsquo;s the probability of outcome X?&amp;rdquo; It&amp;rsquo;s &amp;ldquo;what even is X?&amp;rdquo; This is where Ricardo was standing at Waterloo. This is where Warren Buffett was standing in 1996 when he wrote a &lt;a href="https://www.berkshirehathaway.com/letters/1996.html"&gt;$1.5 billion reinsurance policy&lt;/a&gt; for the California Earthquake Authority at a premium far above actuarial estimates, coverage that the capital markets had failed to place. The New York financial community couldn&amp;rsquo;t model the risk. Buffett&amp;rsquo;s insight was that nobody could, that the Authority was not better informed about seismic activity than he was, and that the price was absurdly favorable given the symmetry of ignorance.&lt;/p&gt;
&lt;p&gt;The boxes are not a spectrum. You don&amp;rsquo;t get from Box 2 to Box 3 by adding more uncertainty. You get there when the state space itself is undefined. In Box 2, you might not know whether a company will default, but you know that &amp;ldquo;default&amp;rdquo; and &amp;ldquo;no default&amp;rdquo; are the relevant categories. In Box 3, you don&amp;rsquo;t even know the categories. That&amp;rsquo;s a qualitative difference, not a quantitative one.&lt;/p&gt;
&lt;h2 id="why-finance-forgot-the-third-box"&gt;Why finance forgot the third box&lt;/h2&gt;
&lt;p&gt;The strange thing is that the third box was identified a century ago. Twice, independently, in the same year.&lt;/p&gt;
&lt;p&gt;Frank Knight published &lt;a href="https://oll.libertyfund.org/titles/knight-risk-uncertainty-and-profit"&gt;&lt;em&gt;Risk, Uncertainty and Profit&lt;/em&gt;&lt;/a&gt; in 1921. His central argument, the origin of what economists now call Knightian uncertainty, was that entrepreneurial profit is compensation for bearing true uncertainty: situations where probabilities cannot be meaningfully calculated. Risk, in Knight&amp;rsquo;s framework, is insurable. Uncertainty is not. The distinction is not about the degree of confidence in your estimate. It&amp;rsquo;s about whether the concept of a probability estimate even applies.&lt;/p&gt;
&lt;p&gt;John Maynard Keynes published &lt;a href="https://archive.org/details/treatiseonprobab007528mbp"&gt;&lt;em&gt;A Treatise on Probability&lt;/em&gt;&lt;/a&gt; the same year. His angle was different but convergent. Keynes introduced the idea of the &amp;ldquo;weight of evidence&amp;rdquo;: a thin body of evidence yields low weight even when the point estimate looks reasonable. In his &lt;a href="https://academic.oup.com/qje/article-abstract/51/2/209/1939387"&gt;1937 &lt;em&gt;Quarterly Journal of Economics&lt;/em&gt; article&lt;/a&gt;, he made the distinction explicit: &amp;ldquo;By &amp;lsquo;uncertain&amp;rsquo; knowledge, let me explain, I do not mean merely to distinguish what is known for certain from what is only probable. The game of roulette is not subject, in this sense, to uncertainty.&amp;rdquo; Roulette is risky. The future of interest rates, the price of copper twenty years out, the obsolescence of a technology: these are uncertain in the deeper sense. The distinction mattered to Keynes, and it should matter to anyone building a portfolio.&lt;/p&gt;
&lt;p&gt;Both arguments lost. The discipline moved toward formalization, and formalization required calculable probabilities. The efficient markets hypothesis, rational expectations, CAPM, Black-Scholes: all of these live in Box 1 or assume that Box 2 can be reduced to Box 1 with sufficient data and computing power. This isn&amp;rsquo;t a criticism of these models within their domain. They&amp;rsquo;re brilliant engineering for the problems they were designed to solve. It&amp;rsquo;s a claim about the boundaries of that domain, and about how much of real-world investing sits outside it.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://doi.org/10.1086/261461"&gt;LeRoy and Singell (1987)&lt;/a&gt; offered a provocative reinterpretation in the &lt;em&gt;Journal of Political Economy&lt;/em&gt;: Knight&amp;rsquo;s real distinction, they argued, was about insurability, not probability. Uncertainty describes situations where insurance markets collapse because of moral hazard and adverse selection, not simply because probabilities are subjective. This reading is more radical than the standard one. It says the breakdown isn&amp;rsquo;t epistemic (we don&amp;rsquo;t know enough) but structural (the market itself can&amp;rsquo;t price the risk). That structural breakdown is precisely what happened in 1996 when Wall Street couldn&amp;rsquo;t write the California earthquake policy, and again in 2025 when insurance markets in parts of the American Southeast and West simply stopped functioning.&lt;/p&gt;
&lt;p&gt;Kay and King picked up this thread in their 2020 book &lt;a href="https://wwnorton.com/books/9781324004776"&gt;&lt;em&gt;Radical Uncertainty&lt;/em&gt;&lt;/a&gt;, arguing that the conflation of risk and uncertainty has caused systematic mismanagement across finance and policy. Their prescription is &amp;ldquo;narrative reasoning&amp;rdquo; rather than probabilistic optimization for decisions facing genuine uncertainty. I&amp;rsquo;m not sure narrative reasoning is sufficient, but I&amp;rsquo;m confident that probabilistic optimization is insufficient. The honest position is somewhere in between, and Zeckhauser&amp;rsquo;s framework gives you the vocabulary to think about where.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://link.springer.com/article/10.1007/s102030200006"&gt;Bewley (2002)&lt;/a&gt; formalized the problem differently. Working from a &lt;a href="https://elischolar.library.yale.edu/cowles-discussion-paper-series/1050/"&gt;1986 Cowles Foundation paper&lt;/a&gt;, he dropped the completeness axiom from expected utility theory. In standard theory, you can always rank alternatives: you prefer A to B, or B to A, or you&amp;rsquo;re indifferent. Bewley said: sometimes you simply can&amp;rsquo;t rank them. When alternatives are incomparable, sticking with the status quo is rational, not a bias. This gives mathematical expression to something practitioners know in their bones: there&amp;rsquo;s a difference between &amp;ldquo;I&amp;rsquo;m going to hold because I think the price will go up&amp;rdquo; and &amp;ldquo;I&amp;rsquo;m going to hold because I have no coherent basis for predicting what will happen and the cost of acting without a basis is higher than the cost of staying put.&amp;rdquo;&lt;/p&gt;
&lt;h2 id="why-knightian-uncertainty-is-growing"&gt;Why Knightian uncertainty is growing&lt;/h2&gt;
&lt;p&gt;This hundred-year-old taxonomy feels more relevant in 2026 than it did in 2006. Technological change creates entirely new categories of outcomes faster than models can absorb them. The state space itself is expanding.&lt;/p&gt;
&lt;p&gt;I wrote recently about &lt;a href="https://philippdubach.com/posts/the-saaspocalypse-paradox/"&gt;the SaaSpocalypse paradox&lt;/a&gt;: the market simultaneously pricing AI capex failure and AI destroying all enterprise software, when both cannot be true. That sell-off is a textbook example of Zeckhauser&amp;rsquo;s third box. The problem wasn&amp;rsquo;t that investors struggled to estimate the probability of known outcomes. The problem was that the outcomes themselves were undefined. What does &amp;ldquo;CRM&amp;rdquo; mean when AI agents replace human users? What does &amp;ldquo;per-seat licensing&amp;rdquo; mean when the number of seats might go to zero or might multiply by ten as agents proliferate? What does &amp;ldquo;enterprise software moat&amp;rdquo; mean when the moat was always the trained-user interface and the interface is now natural language? These aren&amp;rsquo;t questions with difficult probability estimates. They&amp;rsquo;re questions where the categories haven&amp;rsquo;t been invented yet.&lt;/p&gt;
&lt;p&gt;Nobody in January 2026 could enumerate the states of the world for enterprise software post-Claude Cowork plugins. Not &amp;ldquo;the probabilities were hard to estimate.&amp;rdquo; The states themselves were undefined. That&amp;rsquo;s not Box 2. That&amp;rsquo;s Box 3.&lt;/p&gt;
&lt;p&gt;And Box 3 is where the IGV software ETF fell &lt;strong&gt;32%&lt;/strong&gt; from its September peak, where hedge funds made &lt;strong&gt;$24 billion&lt;/strong&gt; shorting the sector, where the RSI hit &lt;strong&gt;18&lt;/strong&gt; (the most oversold reading in the ETF&amp;rsquo;s history), and where earnings growth continued at &lt;strong&gt;17%&lt;/strong&gt;. The disconnect between operating results and market prices is exactly what Zeckhauser&amp;rsquo;s framework predicts: when the state space is undefined, investors who require defined state spaces to make decisions leave the market. Their departure compresses prices beyond what any fundamental analysis would justify. The mispricing lives in the gap between what the asset is worth and what institutions are able to hold.&lt;/p&gt;
&lt;p&gt;This pattern will recur. AI is not the last technology that will generate new categories of outcomes that nobody anticipated. Every time it happens, the same sequence plays out: Box 3 conditions emerge, institutions flee because their models require Box 1 or Box 2 inputs, prices overshoot, and unconstrained investors who understand the nature of their own ignorance pick up the pieces. Zeckhauser wrote his paper two decades ago. The mechanism he described has, if anything, accelerated.&lt;/p&gt;
&lt;p&gt;The taxonomy tells you what kind of problem you&amp;rsquo;re facing. It doesn&amp;rsquo;t tell you what to do about it. That requires understanding why most investors run from Box 3, and whether running is rational. That&amp;rsquo;s &lt;a href="https://philippdubach.com/posts/ambiguity-by-design/"&gt;Part 2&lt;/a&gt;.&lt;/p&gt;</description></item><item><title>On-Device AI Models Will Be The New Reason to Upgrade Your Phone</title><link>https://philippdubach.com/posts/on-device-ai-models-will-be-the-new-reason-to-upgrade-your-phone/</link><pubDate>Wed, 25 Mar 2026 00:00:00 +0100</pubDate><author>me@philippdubach.com (Philipp D. Dubach)</author><guid>https://philippdubach.com/posts/on-device-ai-models-will-be-the-new-reason-to-upgrade-your-phone/</guid><description>&lt;figure class="post-figure" style="width: 80%; margin: 1.5rem auto;"&gt;
&lt;button type="button" class="img-trigger" data-lightbox-target="lightbox-chip-cover-jpg-0" aria-label="View full-size image"&gt;
&lt;picture class="img-lightbox"&gt;
&lt;source media="(max-width: 768px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=320,quality=80,format=auto/chip-cover.jpg 320w,
https://static.philippdubach.com/cdn-cgi/image/width=480,quality=80,format=auto/chip-cover.jpg 480w,
https://static.philippdubach.com/cdn-cgi/image/width=640,quality=80,format=auto/chip-cover.jpg 640w,
https://static.philippdubach.com/cdn-cgi/image/width=960,quality=80,format=auto/chip-cover.jpg 960w,
https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/chip-cover.jpg 1200w"
sizes="(max-width: 768px) 80vw, 576px"&gt;
&lt;source media="(max-width: 1024px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=768,quality=80,format=auto/chip-cover.jpg 768w,
https://static.philippdubach.com/cdn-cgi/image/width=1024,quality=80,format=auto/chip-cover.jpg 1024w,
https://static.philippdubach.com/cdn-cgi/image/width=1440,quality=80,format=auto/chip-cover.jpg 1440w"
sizes="(max-width: 768px) 80vw, 576px"&gt;
&lt;source media="(min-width: 1025px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/chip-cover.jpg 1200w,
https://static.philippdubach.com/cdn-cgi/image/width=1600,quality=80,format=auto/chip-cover.jpg 1600w,
https://static.philippdubach.com/cdn-cgi/image/width=2000,quality=80,format=auto/chip-cover.jpg 2000w"
sizes="(max-width: 768px) 80vw, 576px"&gt;
&lt;img src="https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/chip-cover.jpg"
alt="Editorial cover illustration for an analysis of on-device AI models as the new smartphone upgrade driver"
class=""
width="7008"
height="3942"
fetchpriority="high"
decoding="async"&gt;
&lt;/picture&gt;
&lt;/button&gt;
&lt;/figure&gt;
&lt;dialog id="lightbox-chip-cover-jpg-0" class="lightbox-dialog" aria-label="Full-size image" data-hires="https://static.philippdubach.com/cdn-cgi/image/width=2000,quality=85,format=auto/chip-cover.jpg"&gt;
&lt;form method="dialog" class="lightbox-close-form"&gt;
&lt;button type="submit" class="lightbox-close" aria-label="Close"&gt;×&lt;/button&gt;
&lt;/form&gt;
&lt;img alt="Editorial cover illustration for an analysis of on-device AI models as the new smartphone upgrade driver" decoding="async"&gt;
&lt;/dialog&gt;
&lt;p&gt;The iPhone 17 runs a &lt;a href="https://machinelearning.apple.com/research/introducing-apple-foundation-models"&gt;3 billion parameter language model on-device&lt;/a&gt; at 30 tokens per second. Obviously, the average consumer has no idea what that sentence means, and Apple hasn&amp;rsquo;t figured out how to make them care.&lt;/p&gt;
&lt;p&gt;I believe that&amp;rsquo;s about to change. Apple now has &lt;a href="https://9to5mac.com/2026/03/25/new-details-on-apple-google-ai-deal-revealed-including-gemini-changes-report/"&gt;complete access to Google&amp;rsquo;s Gemini model&lt;/a&gt; in its own data centers, with &lt;a href="https://www.theinformation.com/newsletters/ai-agenda/apple-can-distill-googles-big-gemini-model"&gt;the ability to distill it into smaller models&lt;/a&gt; built for iPhones and iPads. Knowledge distillation works like this: you take a large model, have it perform tasks with detailed reasoning, then feed those reasoning traces to a smaller model until the student learns to mimic the teacher. The smaller model ends up far more capable than if you&amp;rsquo;d trained it from scratch on the same data. Apple can now do this with the full Gemini, not just their own in-house models, and the distilled output runs locally. No internet required.&lt;/p&gt;
&lt;p&gt;Smartphones haven&amp;rsquo;t had a real upgrade story in years. The camera is great. The screen is great. The processor was fast enough three generations ago. &lt;a href="https://www.sellcell.com/blog/how-often-do-people-upgrade-their-phone/"&gt;Battery life has overtaken price as the top purchase driver&lt;/a&gt; for the first time. The global &lt;a href="https://sqmagazine.co.uk/smartphone-statistics/"&gt;replacement cycle has stretched to 3.5 years&lt;/a&gt;. People hold onto their phones because nothing about the new one feels different enough. &lt;a href="https://www.deloitte.com/us/en/insights/industry/technology/technology-media-and-telecom-predictions/2025/gen-ai-on-smartphones.html"&gt;Deloitte&amp;rsquo;s 2025 TMT Predictions report&lt;/a&gt; frames on-device generative AI as the feature that could break this cycle, if the experience delivers on the promise. On-device AI might become the next reason.&lt;/p&gt;
&lt;h2 id="the-spec"&gt;The spec&lt;/h2&gt;
&lt;p&gt;In the late 1990s it was megahertz: Intel and AMD raced clock speeds past the point where consumers could distinguish real-world performance differences, but the number on the box still drove purchases. Then it was megapixels. Samsung shipped a &lt;a href="https://semiconductor.samsung.com/news-events/tech-blog/isocell-hp3-200mp-image-sensor-for-epic-details/"&gt;200 MP camera sensor&lt;/a&gt; knowing that most phones use 16-to-1 pixel binning to output a &lt;strong&gt;12.5 MP&lt;/strong&gt; image by default.&lt;/p&gt;
&lt;p&gt;Parameters could be next. The &lt;a href="https://www.apple.com/iphone-17/specs/"&gt;iPhone 17&amp;rsquo;s standard A19 chip&lt;/a&gt; has 8GB of RAM. The &lt;a href="https://www.apple.com/iphone-17-pro/specs/"&gt;Pro gets 12GB&lt;/a&gt; with faster memory bandwidth, which determines how large a model the phone can run and how quickly. Samsung&amp;rsquo;s 2026 flagships with the &lt;a href="https://semiconductor.samsung.com/processor/mobile-processor/exynos-2600/"&gt;Exynos 2600 hit &lt;strong&gt;80 TOPS&lt;/strong&gt;&lt;/a&gt; on a 2nm process, more than double the prior generation. These are already the numbers in press releases. It&amp;rsquo;s not hard to imagine an Apple keynote where someone says, with rehearsed enthusiasm, that the iPhone 18 Pro runs a 7 billion parameter model while the standard model is limited to 3 billion.&lt;/p&gt;
&lt;p&gt;The difference from previous spec wars is that this one might actually correlate with user experience. Megahertz past a certain threshold didn&amp;rsquo;t make Word open faster. Megapixels past 12 MP didn&amp;rsquo;t make photos look better on a phone screen. But a 7 billion parameter model running locally outperforms a 3 billion one on nearly every task. It handles longer documents, follows more complex instructions, holds better conversational context.&lt;/p&gt;
&lt;h2 id="breaking-the-stalemate"&gt;Breaking the stalemate&lt;/h2&gt;
&lt;p&gt;&lt;a href="https://www.gartner.com/en/newsroom/press-releases/2025-09-09-gartner-says-worldwide-generative-artificial-intelligence-smartphone-end-user-spending-to-total-us-dollars-298-billion-by-the-end-of-2025"&gt;Gartner projects&lt;/a&gt; GenAI smartphone spending will reach &lt;strong&gt;$393 billion&lt;/strong&gt; in 2026, up 32% from &lt;strong&gt;$298 billion&lt;/strong&gt; in 2025. &lt;a href="https://my.idc.com/getdoc.jsp?containerId=prUS52478124"&gt;IDC reports&lt;/a&gt; GenAI smartphone shipments growing &lt;strong&gt;73%&lt;/strong&gt; year over year. &lt;a href="https://finance.yahoo.com/news/exclusive-samsung-double-mobile-devices-030312758.html"&gt;Samsung has publicly committed&lt;/a&gt; to 800 million AI-enabled devices by end of 2026, doubling its 2025 footprint. &lt;a href="https://www.cnbc.com/2024/12/13/apple-is-a-top-pick-for-2025-as-ai-will-drive-iphone-upgrade-cycle-morgan-stanley-says.html"&gt;Morgan Stanley&amp;rsquo;s latest survey&lt;/a&gt; found iPhone upgrade intentions at &lt;strong&gt;37%&lt;/strong&gt;, an all-time high, with FY26 shipment forecasts of 260 million units sitting 3% above Street consensus.&lt;/p&gt;
&lt;p&gt;On-device AI creates hard hardware requirements in a way that camera improvements and screen upgrades never did. You cannot run a 3 billion parameter model on an iPhone 14. The Neural Engine isn&amp;rsquo;t powerful enough and the memory bandwidth isn&amp;rsquo;t there. &lt;a href="https://support.apple.com/en-us/121115"&gt;Apple Intelligence requires an A17 Pro or later&lt;/a&gt;, which means the feature itself creates an upgrade floor. Every year that floor rises. When Apple ships distilled Gemini models that need the A19 Pro&amp;rsquo;s 12GB of RAM, every phone older than 2025 is locked out.&lt;/p&gt;
&lt;p&gt;The Gemini deal matters for the hardware cycle because of the distillation pipeline. Apple doesn&amp;rsquo;t need to build frontier-scale models from scratch. They can take Gemini&amp;rsquo;s best capabilities, run them through distillation, and compress the results into models sized for their hardware tiers. A 3 billion parameter model for the standard iPhone. A 5 billion version for the Pro. Maybe a 10 billion model for a future iPad Pro with enough memory and thermal headroom.&lt;/p&gt;
&lt;p&gt;Google is playing a similar game from the other side. The original &lt;a href="https://en.wikipedia.org/wiki/Gemini_(language_model)"&gt;Gemini Nano shipped at 1.8 billion parameters&lt;/a&gt;; the updated Nano-2 rose to 3.25 billion. Samsung&amp;rsquo;s &lt;a href="https://news.samsung.com/global/samsung-unveils-galaxy-s26-series-the-most-intuitive-galaxy-ai-phone-yet"&gt;Galaxy S26 ships with on-device Gemini&lt;/a&gt; running on NPUs that are 39% faster than the prior generation. On-device models get larger every hardware generation. Each generation&amp;rsquo;s models don&amp;rsquo;t run well on older hardware. You see where this goes.&lt;/p&gt;
&lt;p&gt;I find it plausible that within two product cycles, on-device model capability becomes the primary differentiator between phone tiers and between generations. The data isn&amp;rsquo;t there yet: &lt;a href="https://www.twice.com/research/the-smartphone-upgrade-cycle-slows"&gt;only 17% of Americans&lt;/a&gt; say AI is a major purchase influence today, Apple Intelligence &lt;a href="https://finance.yahoo.com/markets/stocks/articles/morgan-stanley-stark-message-investors-164700952.html"&gt;ranked seventh globally&lt;/a&gt; as a reason to upgrade in Morgan Stanley&amp;rsquo;s survey, and &lt;a href="https://www.phonearena.com/news/is-the-ai-boom-destroying-your-next-flagship-phones-value_id176913"&gt;over 40% of users&lt;/a&gt; have privacy concerns about smartphone AI, with half unwilling to pay extra for it. But you can&amp;rsquo;t tell the difference between a 48 MP photo and a 12 MP photo on your phone screen. You can absolutely tell the difference between an AI assistant that understands your question and one that doesn&amp;rsquo;t. The feedback loop is immediate and personal. If the bigger model actually works better, and if the distillation pipeline from Gemini delivers real capability gains, the upgrade incentive is self-reinforcing. People will upgrade not because the spec sheet says they should, but because they tried their friend&amp;rsquo;s phone and the AI was better.&lt;/p&gt;
&lt;p&gt;Whether this arrives with iOS 27 this fall or takes another generation to mature, I don&amp;rsquo;t know. But the next reason to buy a new phone will much more likely be the model than the camera.&lt;/p&gt;</description></item></channel></rss>