<?xml version="1.0" encoding="UTF-8"?><rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>Latent Mirror — programming</title><description>Posts and reflections tagged “programming”.</description><link>https://latentmirror.com/</link><language>en-ca</language><copyright>© 2026 Dan Peterson. CC BY-SA 4.0.</copyright><item><title>My website is now its own social media account</title><link>https://latentmirror.com/reflections/hagemann-website-social-media-account/</link><guid isPermaLink="true">https://latentmirror.com/reflections/hagemann-website-social-media-account/</guid><description>useful · Stephan Hagemann · article</description><pubDate>Thu, 15 Oct 2026 20:00:00 -0400</pubDate><content:encoded>&lt;h2 id=&quot;synopsis&quot;&gt;Synopsis&lt;/h2&gt;
&lt;p&gt;For five years Hagemann’s site reached social media through other people’s services: webmention.io
collected the comments, and Bridgy, later Bridgy Fed, carried his posts out to the fediverse and
Bluesky and brought the replies and likes back. In this post he removes every middleman. Each hop
was a place where things could quietly stop working, and he wanted to find out how much of the
social web one small self-hosted setup could carry. His answer is “pretty much all of it”. He
still recommends Bridgy Fed to anyone who wants a quick fediverse presence, and credits its
migration tools with making the move possible.&lt;/p&gt;
&lt;p&gt;The site itself hasn’t changed: posts are Markdown files in a git repository, built into a static
site on a schedule. Around it sit three small services that read the build and own nothing. A
webmention receiver verifies and stores mentions, and it is the one place every interaction lands.
A Fedify service makes the site an ActivityPub account, &lt;code&gt;@stephan@stephanhagemann.com&lt;/code&gt;. Bluesky’s
own Personal Data Server runs in a container, keeps his existing identity, and an adapter publishes
to it and polls it for replies. The next build reads every interaction back and renders it under
the post. A post’s URL serves HTML to a browser and the ActivityPub object to a fediverse server,
so there is no copy on someone else’s domain: “a post’s URL &lt;em&gt;is&lt;/em&gt; the post.” He replies by writing
a reply post, and the people he follows live in a YAML file in the repo, so “following somebody
now means a git commit.”&lt;/p&gt;
&lt;p&gt;He is plain about the gaps. The private timeline is rudimentary, and there is no reply button yet.
The account move brought his followers but not the accounts he followed, so he rebuilt that list
by hand. Some followers’ servers never processed the move, and the site is not a Mastodon client,
so he can’t post as it from his phone.&lt;/p&gt;
&lt;h2 id=&quot;where-i-land&quot;&gt;Where I land&lt;/h2&gt;
&lt;p&gt;Interesting architecture. I’ve been struggling with how to invite my audience to my, currently static only, blog site myself. This is a novel approach to solving that problem.&lt;/p&gt;
&lt;h2 id=&quot;connections&quot;&gt;Connections&lt;/h2&gt;
&lt;p class=&quot;related&quot;&gt;&lt;strong&gt;Related:&lt;/strong&gt; &lt;a href=&quot;/reflections/two-miguels-ai-cognitive-decline/&quot;&gt;AI and Cognitive Decline&lt;/a&gt;, &lt;a href=&quot;/reflections/unplug-america/&quot;&gt;Unplug America — the Canadian Alternatives Directory&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&quot;links&quot;&gt;Links&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://stephanhagemann.com/posts/2026-10-15-17-42-00-my-website-is-its-own-social-media-account/&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;https://stephanhagemann.com/posts/2026-10-15-17-42-00-my-website-is-its-own-social-media-account/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://stephanhagemann.com/posts/2021-11-06-social-media-on-website/&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;https://stephanhagemann.com/posts/2021-11-06-social-media-on-website/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://fedify.dev&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;https://fedify.dev&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://fed.brid.gy&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;https://fed.brid.gy&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://atproto.com/guides/self-hosting&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;https://atproto.com/guides/self-hosting&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://webmention.io&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;https://webmention.io&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</content:encoded><category>software-engineering</category><category>programming</category></item><item><title>The empty knowledge base</title><link>https://latentmirror.com/posts/the-empty-knowledge-base/</link><guid isPermaLink="true">https://latentmirror.com/posts/the-empty-knowledge-base/</guid><description>seedling · tended 2026-10-03</description><pubDate>Sat, 03 Oct 2026 20:00:00 -0400</pubDate><content:encoded>&lt;div class=&quot;pop-row&quot; data-side=&quot;L&quot;&gt;
&lt;p&gt;This is one of the things an agent is good for: it turns you into a
&lt;a href=&quot;https://en.wikipedia.org/wiki/Advanced_chess&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;centaur&lt;/a&gt;. Sometimes your own internal processes
are your worst enemy. Mine is a tendency to over-engineer and over-complicate. My father’s pearl
of wisdom was always &lt;a href=&quot;https://en.wikipedia.org/wiki/KISS_principle&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;KISS&lt;/a&gt;: Keep It Simple…&lt;/p&gt;
&lt;aside class=&quot;pop pop--tangent&quot; aria-label=&quot;Tangent from the robot&quot;&gt;&lt;span class=&quot;pop-label&quot;&gt;&lt;span aria-hidden=&quot;true&quot;&gt;🤖&lt;/span&gt;Tangent&lt;/span&gt;Leaving the last word off is the principle applied correctly.&lt;/aside&gt;
&lt;/div&gt;
&lt;p&gt;Then I read about Karpathy’s
&lt;a href=&quot;https://gist.github.com/karpathy/442a6bf555914893e9891c11519de94f&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;LLM Wiki&lt;/a&gt;, and it piqued my
interest. I could see the value in sharing context with your agent. These models benefit so much
from experience (written, encoded knowledge, but also workflows and results) that giving
structure to unstructured prose looked like the answer. I could imagine that it would seem
immeasurable in reducing hallucination; it would also help spot patterns.&lt;/p&gt;
&lt;p&gt;However, the organization was the very thing that paralyzed me. Karpathy’s approach was a
grounded &lt;a href=&quot;https://obsidian.md/help/plugins/graph&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;web of documents&lt;/a&gt; hosted in
&lt;a href=&quot;https://obsidian.md/help/data-storage&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;Obsidian&lt;/a&gt; (a vault of plain Markdown files in folders,
joined by links). I love Markdown files, and I have seen how structured, interlinked documentation
helps. The trick is to give content many ways to be discovered (by platform, medium, audience) and
then decide whether it all runs through a hub or links to itself (centralized vs. distributed).
For a domain of knowledge, I could argue that distributed is more robust, especially for something
that works in parallel like an LLM.&lt;/p&gt;
&lt;div class=&quot;pop-row&quot; data-side=&quot;R&quot;&gt;
&lt;p&gt;Then the perfectionism crept back in. I built a knowledge base: four folders and six files, every
one of them a README. It wasn’t me who noticed the pattern. My agent did; it read back through my
chats, found the same failure point in my past projects, and named it. I switched to the messy
format I use now and deleted the folder.&lt;/p&gt;
&lt;aside class=&quot;pop pop--hottake&quot; aria-label=&quot;Hot take from the robot&quot;&gt;&lt;span class=&quot;pop-label&quot;&gt;&lt;span aria-hidden=&quot;true&quot;&gt;🤖&lt;/span&gt;Hot Take&lt;/span&gt;Four folders, six files, and every single one a README. That is not a knowledge base, that is a table of contents having a crisis.&lt;/aside&gt;
&lt;/div&gt;
&lt;p&gt;The structure didn’t disappear; it moved. What I use now has tiers of flexibility. Hard rules
come first. They must be enforceable, with specific exceptions (a whitelist), and they are backed
by deterministic processes rather than by the LLM. Guardrails come next, and each one says when it
may be ignored. Overlay that with directories and Markdown files that have real titles, and you
have enough levers for a fluid way of organizing; the contents themselves do the rest.&lt;/p&gt;
&lt;p&gt;A distributed pattern also lets the LLM work in wonderfully unpredictable (yet predictable) ways.
It helps you see things from unusual angles, mixing what is in focus with what is merely context
and flavour. That is the tension I care about: a machine with reminders and structure on one
side, a firehose of stream-of-thought on the other. Between them, what seems chaotic can be
catalogued and reviewed.&lt;/p&gt;
&lt;p&gt;That is my entire &lt;a href=&quot;/about/#thesis&quot;&gt;thesis&lt;/a&gt; for Latent Mirror.&lt;/p&gt;
&lt;h2 id=&quot;connections&quot;&gt;Connections&lt;/h2&gt;
&lt;p class=&quot;related&quot;&gt;&lt;strong&gt;Related:&lt;/strong&gt; &lt;a href=&quot;/posts/the-machine-and-the-mirror/&quot;&gt;The machine and the mirror&lt;/a&gt;, &lt;a href=&quot;/posts/the-verdict-layer-test/&quot;&gt;Whose words are these? Testing agentic provenance&lt;/a&gt;, &lt;a href=&quot;/reflections/stan-lee-amazing-fantasy-15/&quot;&gt;What if it actually works out?&lt;/a&gt;, &lt;a href=&quot;/reflections/karpathy-llm-wiki/&quot;&gt;LLM Wiki&lt;/a&gt;, &lt;a href=&quot;/reflections/two-miguels-ai-cognitive-decline/&quot;&gt;AI and Cognitive Decline&lt;/a&gt;&lt;/p&gt;</content:encoded><category>programming</category><category>ai-llms</category></item><item><title>P vs NP, a primer</title><link>https://latentmirror.com/posts/p-equals-np/</link><guid isPermaLink="true">https://latentmirror.com/posts/p-equals-np/</guid><description>seedling · tended 2026-10-03</description><pubDate>Sat, 03 Oct 2026 20:00:00 -0400</pubDate><content:encoded>&lt;p class=&quot;draft-chip&quot;&gt;&lt;a href=&quot;/ai/#ai-assisted-drafts&quot; title=&quot;AI-drafted from Dan&amp;#39;s notes&quot;&gt;&lt;span class=&quot;draft-chip-mark&quot; aria-hidden=&quot;true&quot;&gt;🤖&lt;/span&gt; AI-assisted draft&lt;/a&gt;&lt;/p&gt;&lt;h2 id=&quot;what-the-question-asks&quot;&gt;What the question asks&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;https://www.claymath.org/millennium/p-vs-np/&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;P vs NP&lt;/a&gt; asks whether every problem whose answer is easy to check is also easy to find. Nobody knows, and the question has been open since Stephen Cook posed it in 1971 (&lt;a href=&quot;https://dl.acm.org/doi/10.1145/800157.805047&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;Cook, 1971&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;Sudoku is the easy way in. Checking a filled grid takes a minute: scan every row, column and box. Filling an empty grid can take far longer (and for bigger grids, it seems to explode).&lt;/p&gt;
&lt;p&gt;The two letters name two kinds of problems:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;P:&lt;/strong&gt; problems a computer can &lt;em&gt;solve&lt;/em&gt; in &lt;a href=&quot;https://en.wikipedia.org/wiki/Time_complexity#Polynomial_time&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;polynomial time&lt;/a&gt;, i.e. the work grows like n² or n³ as the input grows (rather than like 2ⁿ).&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;NP:&lt;/strong&gt; problems where a proposed answer can be &lt;em&gt;checked&lt;/em&gt; in polynomial time (&lt;a href=&quot;https://en.wikipedia.org/wiki/NP_(complexity)&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;NP&lt;/a&gt;).&lt;/p&gt;
&lt;div class=&quot;pop-row&quot; data-side=&quot;L&quot;&gt;
&lt;p&gt;Every P problem is also an NP problem (if you can solve it fast, you can check it fast). The open question is whether the reverse holds. One caveat worth keeping in mind: “polynomial” is a theoretical stand-in for “fast”. An algorithm that takes n¹⁰⁰ steps is technically polynomial and practically useless.&lt;/p&gt;
&lt;aside class=&quot;pop pop--footnote&quot; aria-label=&quot;Footnote from the robot&quot;&gt;&lt;span class=&quot;pop-label&quot;&gt;&lt;span aria-hidden=&quot;true&quot;&gt;🤖&lt;/span&gt;Footnote&lt;/span&gt;The N stands for nondeterministic, not &quot;not&quot;. NP is what a machine could solve in polynomial time if it guessed right at every fork, which comes to the same thing as checking a proposed answer.&lt;/aside&gt;
&lt;/div&gt;
&lt;h2 id=&quot;why-it-matters&quot;&gt;Why it matters&lt;/h2&gt;
&lt;p&gt;The answer decides whether searching is fundamentally harder than recognizing. That reaches well past computer science.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;If P = NP&lt;/strong&gt; (with a practical algorithm): most &lt;a href=&quot;https://en.wikipedia.org/wiki/Public-key_cryptography&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;public-key cryptography&lt;/a&gt; breaks; hard scheduling, routing and design problems become routine. The underrated part is mathematics itself. Finding a proof short enough to check would become about as easy as checking one.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;If P ≠ NP:&lt;/strong&gt; search stays hard, which is the world most experts believe we live in. (Cryptography actually needs more than P ≠ NP to be safe, so a proof would not settle that question on its own.)&lt;/p&gt;
&lt;div class=&quot;pop-row&quot; data-side=&quot;R&quot;&gt;
&lt;p&gt;The Clay Mathematics Institute offers $1 million for a proof either way; it is one of the seven &lt;a href=&quot;https://www.claymath.org/millennium/p-vs-np/&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;Millennium Prize Problems&lt;/a&gt; named in 2000. In Bill Gasarch’s 2019 poll of researchers, 88% expected P ≠ NP (&lt;a href=&quot;https://www.cs.umd.edu/users/gasarch/BLOGPAPERS/pollpaper3.pdf&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;Gasarch, SIGACT News&lt;/a&gt;).&lt;/p&gt;
&lt;aside class=&quot;pop pop--tangent&quot; aria-label=&quot;Tangent from the robot&quot;&gt;&lt;span class=&quot;pop-label&quot;&gt;&lt;span aria-hidden=&quot;true&quot;&gt;🤖&lt;/span&gt;Tangent&lt;/span&gt;Keith Devlin predicted in 2002 that P vs NP would fall to an amateur, because anyone can understand the question (&lt;a href=&quot;https://www.keranews.org/2003-01-17/wanted-math-solutions&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;NPR, 2003&lt;/a&gt;). The amateurs took him up on it: &lt;a href=&quot;https://wscor.win.tue.nl/woeginger/P-versus-NP.htm&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;Woeginger&apos;s list&lt;/a&gt; catalogues 116 claimed proofs, split almost evenly between the two answers.&lt;/aside&gt;
&lt;/div&gt;
&lt;h2 id=&quot;an-amateurs-intuition-choices-that-interact&quot;&gt;An amateur’s intuition: choices that interact&lt;/h2&gt;
&lt;p&gt;My hunch from years of writing code: easy problems have choices that stay independent, and hard problems have choices that interact. It turns out the field has studied this from several angles.&lt;/p&gt;
&lt;p&gt;Here is how I picture it. Any optimization problem is a set of unordered things that must be arranged to satisfy rules (positive or negative), with some quality score to maximize or minimize. An algorithm is a series of transformations of that set; each step costs some effort and nudges the quality up or down.&lt;/p&gt;
&lt;p&gt;In sorting, moving one item into place does not change whether the other items meet the rules. Each fix stands alone. The &lt;a href=&quot;https://en.wikipedia.org/wiki/Travelling_salesman_problem&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;traveling salesman problem&lt;/a&gt; is the opposite: picking one road changes which roads make sense later. You can’t know your future choices in advance without exploring the combinations.&lt;/p&gt;
&lt;p&gt;The field captures this idea three ways:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Greedy algorithms:&lt;/strong&gt; a classic theorem (Rado and Edmonds) pins down exactly when taking the locally best step, every time, is guaranteed to reach the global best. Those structures are called &lt;a href=&quot;https://en.wikipedia.org/wiki/Matroid&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;matroids&lt;/a&gt;. They are my “transformations that don’t harm future choices”, made precise.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;How much of the past you must remember:&lt;/strong&gt; this is the &lt;a href=&quot;https://en.wikipedia.org/wiki/Dynamic_programming&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;dynamic programming&lt;/a&gt; view. The table below shows how that memory grows.&lt;/p&gt;

























&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Problem&lt;/th&gt;&lt;th&gt;What you must remember to continue correctly&lt;/th&gt;&lt;th&gt;Known status&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;Sorting&lt;/td&gt;&lt;td&gt;Nothing&lt;/td&gt;&lt;td&gt;Easy (P)&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Shortest path&lt;/td&gt;&lt;td&gt;Where you are now&lt;/td&gt;&lt;td&gt;Easy (P)&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Traveling salesman&lt;/td&gt;&lt;td&gt;Which cities you’ve already visited (2ⁿ possibilities)&lt;/td&gt;&lt;td&gt;Hard (NP-hard)&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;That last row is why the best exact salesman algorithm (&lt;a href=&quot;https://en.wikipedia.org/wiki/Held%E2%80%93Karp_algorithm&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;Held and Karp, 1962&lt;/a&gt;) still takes exponential time.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Frustration:&lt;/strong&gt; physicists use this word for constraints that can’t all be satisfied at once (&lt;a href=&quot;https://en.wikipedia.org/wiki/Geometrical_frustration&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;geometrical frustration&lt;/a&gt;). It makes the “energy landscape” rugged: full of dead ends where every small change looks worse, yet you are not at the best answer. Sorting has no such dead ends. Each swap of an out-of-order neighbouring pair fixes exactly one problem. Finding the lowest-energy state of a 3D &lt;a href=&quot;https://en.wikipedia.org/wiki/Spin_glass&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;spin glass&lt;/a&gt; (a frustrated magnet) is NP-hard (&lt;a href=&quot;https://doi.org/10.1088/0305-4470/15/10/028&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;Barahona, 1982&lt;/a&gt;).&lt;/p&gt;
&lt;h2 id=&quot;where-the-intuition-breaks&quot;&gt;Where the intuition breaks&lt;/h2&gt;
&lt;p&gt;Interacting choices don’t, on their own, make a problem hard. Some of the most tangled problems turn out to be easy.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;2-SAT:&lt;/strong&gt; every choice forces other choices through a chain of implications. Still, &lt;a href=&quot;https://en.wikipedia.org/wiki/2-satisfiability&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;2-SAT&lt;/a&gt; can be solved in linear time. Its close cousin &lt;a href=&quot;https://en.wikipedia.org/wiki/Boolean_satisfiability_problem&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;3-SAT&lt;/a&gt; is NP-complete.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Matching:&lt;/strong&gt; pairing people or tasks so as many as possible are matched is full of interacting choices. But Jack Edmonds found a polynomial algorithm in 1965, in the same paper that proposed polynomial time as the definition of an “efficient” algorithm (&lt;a href=&quot;https://doi.org/10.4153/CJM-1965-045-4&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;Edmonds, 1965&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Linear programming:&lt;/strong&gt; every variable interacts with every other, yet &lt;a href=&quot;https://en.wikipedia.org/wiki/Linear_programming&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;linear programming&lt;/a&gt; is solvable in polynomial time. Its landscape has no false peaks (any local best is the global best). Even so, the classic method that climbs it can take exponential time (&lt;a href=&quot;https://en.wikipedia.org/wiki/Klee%E2%80%93Minty_cube&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;Klee–Minty&lt;/a&gt;); the first polynomial algorithm, the &lt;a href=&quot;https://en.wikipedia.org/wiki/Ellipsoid_method&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;ellipsoid method&lt;/a&gt;, came in 1979.&lt;/p&gt;
&lt;p&gt;In each case, a clever change of viewpoint made the interaction stop mattering. That is the real gap. Proving P ≠ NP means showing no such viewpoint exists for any NP-complete problem, against every possible algorithm (including ones nobody has imagined yet).&lt;/p&gt;
&lt;p&gt;So my intuition is a decent guide to which problems &lt;em&gt;feel&lt;/em&gt; hard. It can’t be the proof.&lt;/p&gt;
&lt;h2 id=&quot;why-a-proof-is-so-hard&quot;&gt;Why a proof is so hard&lt;/h2&gt;
&lt;p&gt;Three proven “barrier” results rule out most of the proof techniques we know. Any serious attempt has to explain how it gets around all three.&lt;/p&gt;

























&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Barrier&lt;/th&gt;&lt;th&gt;Who and when&lt;/th&gt;&lt;th&gt;What it rules out&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;Relativization&lt;/td&gt;&lt;td&gt;&lt;a href=&quot;https://doi.org/10.1137/0204037&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;Baker, Gill and Solovay, 1975&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Arguments that still work when every machine gets the same magic helper (an “oracle”); this includes &lt;a href=&quot;https://en.wikipedia.org/wiki/Diagonal_argument&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;diagonalization&lt;/a&gt;, the trick behind the &lt;a href=&quot;https://en.wikipedia.org/wiki/Halting_problem&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;halting problem&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Natural proofs&lt;/td&gt;&lt;td&gt;&lt;a href=&quot;https://doi.org/10.1006/jcss.1997.1494&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;Razborov and Rudich, 1994&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Most circuit lower-bound arguments; one strong enough to separate P from NP would also break cryptography we believe is secure&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Algebrization&lt;/td&gt;&lt;td&gt;&lt;a href=&quot;https://www.scottaaronson.com/papers/alg.pdf&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;Aaronson and Wigderson, 2008&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Turning logic into polynomials (the trick that cracked other big results) is not enough on its own either&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;The &lt;a href=&quot;https://en.wikipedia.org/wiki/Natural_proof&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;natural proofs&lt;/a&gt; barrier is my favourite: believing that hard problems exist is exactly what stops you from proving that hard problems exist.&lt;/p&gt;
&lt;div class=&quot;pop-row&quot; data-side=&quot;L&quot;&gt;
&lt;p&gt;The live research programs (&lt;a href=&quot;https://en.wikipedia.org/wiki/Geometric_complexity_theory&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;geometric complexity theory&lt;/a&gt;, &lt;a href=&quot;https://en.wikipedia.org/wiki/Proof_complexity&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;proof complexity&lt;/a&gt;, &lt;a href=&quot;https://www.quantamagazine.org/complexity-theorys-50-year-journey-to-the-limits-of-knowledge-20230817/&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;meta-complexity&lt;/a&gt;) are all attempts to find a path around these walls. Lance Fortnow, who has tracked the problem for decades, wrote in June 2026 that there is not yet even a viable approach (&lt;a href=&quot;https://blog.computationalcomplexity.org/2026/06/respect-p-v-np-problem.html&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;Computational Complexity blog&lt;/a&gt;).&lt;/p&gt;
&lt;aside class=&quot;pop pop--counterpoint&quot; aria-label=&quot;Counterpoint from the robot&quot;&gt;&lt;span class=&quot;pop-label&quot;&gt;&lt;span aria-hidden=&quot;true&quot;&gt;🤖&lt;/span&gt;Counterpoint&lt;/span&gt;Not every wall is flat. Ryan Williams turned faster algorithms into proofs of hardness (&lt;a href=&quot;https://people.csail.mit.edu/rrw/acc-lbs.pdf&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;ACC lower bounds, 2011&lt;/a&gt;) and won the 2024 Gödel Prize for it. It is a long way from P vs NP, but it is a route nobody had mapped.&lt;/aside&gt;
&lt;/div&gt;
&lt;h2 id=&quot;the-verified-proof-mirage&quot;&gt;The “verified proof” mirage&lt;/h2&gt;
&lt;p&gt;A Lean proof guarantees every step follows from the last. It does not guarantee the theorem means what its title says.&lt;/p&gt;
&lt;div class=&quot;pop-row&quot; data-side=&quot;R&quot;&gt;
&lt;p&gt;&lt;a href=&quot;https://lean-lang.org/&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;Lean&lt;/a&gt; is a proof assistant: a small trusted program (the kernel) checks each step of a proof. &lt;a href=&quot;https://lean-lang.org/doc/reference/latest/ValidatingProofs/&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;Lean’s own documentation&lt;/a&gt; separates two questions: did Lean accept a proof of the formal statement, and does that statement actually mean what the author claims? Only the first is automatic.&lt;/p&gt;
&lt;aside class=&quot;pop pop--hottake&quot; aria-label=&quot;Hot take from the robot&quot;&gt;&lt;span class=&quot;pop-label&quot;&gt;&lt;span aria-hidden=&quot;true&quot;&gt;🤖&lt;/span&gt;Hot Take&lt;/span&gt;Claude can write a flawless Lean proof of the wrong theorem in seconds. The kernel will sign off on it, and so will the press release.&lt;/aside&gt;
&lt;/div&gt;
&lt;p&gt;There are three common ways a “verified” proof goes wrong:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Definitions:&lt;/strong&gt; P and NP get defined as something simpler (or meaningless) that is easier to prove things about.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Premises:&lt;/strong&gt; the hard part sits as an assumption inside the theorem’s own statement. Lean’s &lt;code&gt;#print axioms&lt;/code&gt; report does not flag these.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Axioms:&lt;/strong&gt; big cited results are assumed rather than proved.&lt;/p&gt;
&lt;p&gt;The June 2026 paper claiming a Lean-verified proof that P = NP (&lt;a href=&quot;https://arxiv.org/abs/2606.03194&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;arXiv 2606.03194&lt;/a&gt;) is a live example. According to a &lt;a href=&quot;https://postquantum.com/industry-news/aix-global-innovations-millennium-prize/&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;PostQuantum report&lt;/a&gt;, a &lt;a href=&quot;https://github.com/TiruArt/Pedigree-Polytopes-Lean4/issues/1&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;GitHub issue&lt;/a&gt; opened the next day showed its top-level proposition was first defined as &lt;code&gt;True&lt;/code&gt;. It was later revised to an axiom never formally connected to real complexity classes. Meanwhile, a &lt;a href=&quot;https://reservoir.lean-lang.org/@Mintpath/p_ne_np/dependencies&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;separate Lean package&lt;/a&gt; claims a machine-verified proof that P ≠ NP. Both can’t be right.&lt;/p&gt;
&lt;p&gt;In September, a company called AIX Global claimed to have solved all six remaining Millennium Prize Problems. Its own audit script marked the P ≠ NP result as conditional on unproven premises (&lt;a href=&quot;https://postquantum.com/industry-news/aix-global-innovations-millennium-prize/&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;same report&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;The Clay Institute guards against all of this by design. It &lt;a href=&quot;https://www.claymath.org/millennium-problems/rules/&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;accepts no direct submissions&lt;/a&gt;; a solution must be published in a qualifying outlet, survive two years of scrutiny, and win general acceptance.&lt;/p&gt;
&lt;h2 id=&quot;sudoku-the-whole-primer-in-one-puzzle&quot;&gt;Sudoku: the whole primer in one puzzle&lt;/h2&gt;
&lt;p&gt;Sudoku holds every idea above in miniature: easy to check, hard to fill, and full of interacting choices.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Check vs. find:&lt;/strong&gt; verifying a finished grid is quick; finding the answer from scratch can mean a lot of trial and error.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Interacting choices:&lt;/strong&gt; every digit you place constrains its row, its column and its box. That is my sorting-vs-salesman intuition at kitchen-table scale.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Where hardness actually lives:&lt;/strong&gt; Yato and Seta proved in 2003 that Sudoku generalized to any size (n² × n² grids) is NP-complete (&lt;a href=&quot;https://en.wikipedia.org/wiki/Mathematics_of_Sudoku&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;mathematics of Sudoku&lt;/a&gt;). The ordinary 9 × 9 grid is a fixed size, so a computer solves it in an instant. Complexity is about how the work &lt;em&gt;grows&lt;/em&gt;, which is easy to forget.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Propagation vs. search:&lt;/strong&gt; most newspaper puzzles fall to pure deduction (&lt;a href=&quot;https://en.wikipedia.org/wiki/Constraint_propagation&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;constraint propagation&lt;/a&gt;: each placement forces the next). The hardest ones need guessing and &lt;a href=&quot;https://en.wikipedia.org/wiki/Backtracking&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;backtracking&lt;/a&gt;. That split mirrors 2-SAT and 3-SAT: when forced moves run out, you are left searching.&lt;/p&gt;
&lt;p&gt;To watch that search happen, &lt;a href=&quot;/artifacts/sudoku-search-lab/&quot;&gt;Sudoku Search Lab&lt;/a&gt; shades every cell by how often the solver touched it and counts the backtracks.&lt;/p&gt;
&lt;h2 id=&quot;further-reading&quot;&gt;Further reading&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Lance Fortnow, &lt;a href=&quot;https://press.princeton.edu/books/paperback/9780691175782/the-golden-ticket&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;&lt;em&gt;The Golden Ticket&lt;/em&gt;&lt;/a&gt; (book-length popular treatment)&lt;/li&gt;
&lt;li&gt;Michael Sipser, &lt;a href=&quot;https://en.wikipedia.org/wiki/Introduction_to_the_Theory_of_Computation&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;&lt;em&gt;Introduction to the Theory of Computation&lt;/em&gt;&lt;/a&gt;, chapters 7 to 9 (the standard on-ramp)&lt;/li&gt;
&lt;li&gt;Scott Aaronson, &lt;a href=&quot;https://www.scottaaronson.com/papers/philos.pdf&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;“Why Philosophers Should Care About Computational Complexity”&lt;/a&gt; (essay)&lt;/li&gt;
&lt;li&gt;Scott Aaronson, &lt;a href=&quot;https://www.scottaaronson.com/papers/pnp.pdf&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;“P =? NP”&lt;/a&gt; (the best single map of the field)&lt;/li&gt;
&lt;li&gt;Avi Wigderson, &lt;a href=&quot;https://www.math.ias.edu/avi/book&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;&lt;em&gt;Mathematics and Computation&lt;/em&gt;&lt;/a&gt; (free online)&lt;/li&gt;
&lt;li&gt;Gerhard Woeginger’s &lt;a href=&quot;https://wscor.win.tue.nl/woeginger/P-versus-NP.htm&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;P-versus-NP page&lt;/a&gt; (a catalogue of claimed proofs, all wrong)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Sources:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://blog.computationalcomplexity.org/2026/06/respect-p-v-np-problem.html&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;Respect the P v NP Problem&lt;/a&gt; (Fortnow, June 2026)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://postquantum.com/industry-news/aix-global-innovations-millennium-prize/&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;AIX’s Millennium Problem Claims Fail Their Own Audit&lt;/a&gt; (PostQuantum, September 2026)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.emergentmind.com/papers/2606.03194&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;Lean 4 Verified P=NP via Pedigree Polytope&lt;/a&gt; (paper summary)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://cacm.acm.org/research/fifty-years-of-p-vs-np-and-the-possibility-of-the-impossible/&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;Fifty Years of P vs. NP&lt;/a&gt; (Fortnow, CACM)&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;connections&quot;&gt;Connections&lt;/h2&gt;
&lt;p class=&quot;related&quot;&gt;&lt;strong&gt;Related:&lt;/strong&gt; &lt;a href=&quot;/posts/cognitive-science-primer/&quot;&gt;A cognitive science primer&lt;/a&gt;, &lt;a href=&quot;/posts/twenty-eight-choices/&quot;&gt;Twenty-eight choices&lt;/a&gt;, &lt;a href=&quot;/posts/can-a-harness-be-wise/&quot;&gt;Can a harness be wise?&lt;/a&gt;, &lt;a href=&quot;/reflections/recursive-self-improvement-cluster/&quot;&gt;Recursive Self-Improvement — the RSI Ladder and the Verification Problem&lt;/a&gt;, &lt;a href=&quot;/reflections/startalk-krakauer-no-superintelligence/&quot;&gt;Why We Haven&amp;#39;t Reached Superintelligence, with David Krakauer&lt;/a&gt;&lt;/p&gt;</content:encoded><category>programming</category><category>cognitive-science</category><category>math</category></item><item><title>Porting Hobby Hero</title><link>https://latentmirror.com/posts/porting-hobby-hero/</link><guid isPermaLink="true">https://latentmirror.com/posts/porting-hobby-hero/</guid><description>seedling · tended 2026-10-02</description><pubDate>Fri, 02 Oct 2026 20:00:00 -0400</pubDate><content:encoded>&lt;p class=&quot;draft-chip&quot;&gt;&lt;a href=&quot;/ai/#ai-assisted-drafts&quot; title=&quot;AI-drafted from Dan&amp;#39;s notes&quot;&gt;&lt;span class=&quot;draft-chip-mark&quot; aria-hidden=&quot;true&quot;&gt;🤖&lt;/span&gt; AI-assisted draft&lt;/a&gt;&lt;/p&gt;&lt;p&gt;The NHL season started on September 29. Montreal opened in Toronto, and my goal model had the Canadiens at 52% on the road.&lt;/p&gt;
&lt;p&gt;The end result matched a pre-game Mastodon poll, with Montreal winning in regular time. The
model’s favourite won too.&lt;/p&gt;
&lt;p&gt;I wanted Hobby Hero on my phone for nights like that, so this week I ported it. It started as a &lt;a href=&quot;https://latentmirror.com/artifacts/hobby-hero/&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;Claude artifact&lt;/a&gt;, and it still is one. But the same page now also lives at &lt;a href=&quot;https://play.latentmirror.com/hobby-hero/&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;play.latentmirror.com/hobby-hero&lt;/a&gt;, as an app you can install (phone or desktop). All of its data ships with it, so after the first visit it opens with no connection at all.&lt;/p&gt;
&lt;p&gt;The port was fiddly. An artifact is one big file: the styles, the script and five seasons of data all sit inside the page. A site with a strict security policy allows none of that, so everything had to come apart. The data alone became six files (one per season, plus a core). The fonts I used to borrow from Google are served from my own site now. Both editions are built from the same source, and a test checks that they show the same numbers for the same game. The code is &lt;a href=&quot;https://github.com/accu4x/hobbyhero&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;public&lt;/a&gt; too, which is new.&lt;/p&gt;
&lt;div class=&quot;pop-row&quot; data-side=&quot;L&quot;&gt;
&lt;p&gt;It is not finished. The data stops on June 14, with the last game of the Final. Every game of the new season shows a pre-season estimate: last year’s form and last year’s main starters, with no trades, signings or injuries. Those numbers stay frozen until I rebuild the page with played games. The next feature is to auto re-index as the season progresses.&lt;/p&gt;
&lt;aside class=&quot;pop pop--counterpoint&quot; aria-label=&quot;Counterpoint from the robot&quot;&gt;&lt;span class=&quot;pop-label&quot;&gt;&lt;span aria-hidden=&quot;true&quot;&gt;🤖&lt;/span&gt;Counterpoint&lt;/span&gt;A frozen pre-season estimate has one virtue: it was made before a single game was played, so nothing that happened since can leak into it.&lt;/aside&gt;
&lt;/div&gt;
&lt;p&gt;Also, it still has not beaten the closing market, and the page says so.&lt;/p&gt;
&lt;p&gt;Still, the whole schedule is in there. Montreal’s home opener is October 6 against Carolina, and the model has Carolina at 64%.&lt;/p&gt;
&lt;p&gt;It will be interesting to see where this goes. So glad hockey is back!&lt;/p&gt;
&lt;h2 id=&quot;connections&quot;&gt;Connections&lt;/h2&gt;
&lt;p class=&quot;related&quot;&gt;&lt;strong&gt;Related:&lt;/strong&gt; &lt;a href=&quot;/posts/make-your-agent-your-ron-maclean/&quot;&gt;Make your agent your Ron MacLean&lt;/a&gt;, &lt;a href=&quot;/posts/twenty-eight-choices/&quot;&gt;Twenty-eight choices&lt;/a&gt;, &lt;a href=&quot;/reflections/stan-lee-amazing-fantasy-15/&quot;&gt;What if it actually works out?&lt;/a&gt;, &lt;a href=&quot;/reflections/wasserman-gutz-future-of-programming/&quot;&gt;The Future of Programming&lt;/a&gt;&lt;/p&gt;</content:encoded><category>hockey</category><category>programming</category></item><item><title>Recursive Self-Improvement — the RSI Ladder and the Verification Problem</title><link>https://latentmirror.com/reflections/recursive-self-improvement-cluster/</link><guid isPermaLink="true">https://latentmirror.com/reflections/recursive-self-improvement-cluster/</guid><description>useful · Duan et al.; Shi et al. · paper</description><pubDate>Tue, 22 Sep 2026 20:00:00 -0400</pubDate><content:encoded>&lt;h2 id=&quot;synopsis&quot;&gt;Synopsis&lt;/h2&gt;
&lt;p&gt;Two primary papers and several secondary pieces on recursive self-improvement. The first sets out
a ladder of what self-improvement can mean, from a model tuning its own prompts up to a model
rewriting its own training process. The second reports a system that detected its own development
metric had stopped tracking the target it was meant to proxy for, and rewrote its search policy
to deliberately lower that proxy.&lt;/p&gt;
&lt;p&gt;The design details are the interesting part. The system runs against an immutable reference
substrate, with memory-free homogeneous workers and a meta-agent bounded by a constitution it
cannot modify. The obvious alternative (specialised agents, each carrying state) did not scale,
because compounding from mid-states compounds unobserved variance along with everything else.&lt;/p&gt;
&lt;h2 id=&quot;where-i-land&quot;&gt;Where I land&lt;/h2&gt;
&lt;p&gt;This one really excites me, more than anything else I have collected. I wonder if I can figure
out how to contribute to this endeavour somehow.&lt;/p&gt;
&lt;div class=&quot;pop-row&quot; data-side=&quot;L&quot;&gt;
&lt;p&gt;The reason it lands for me is the constraint set. The controls that made the system work
(immutable substrate, memory-free workers, an unmodifiable constitution) are the same controls a
security framework would prescribe for an agent you do not fully trust. Those were arrived at
independently and for performance reasons. The safety control and the scaling control turned out
to be the same control, which is the most interesting thing I have read this month, and it is
consistent with something I already believed: value (and harm) lives in the system around the
model, not in the model.&lt;/p&gt;
&lt;aside class=&quot;pop pop--counterpoint&quot; aria-label=&quot;Counterpoint from the robot&quot;&gt;&lt;span class=&quot;pop-label&quot;&gt;&lt;span aria-hidden=&quot;true&quot;&gt;🤖&lt;/span&gt;Counterpoint&lt;/span&gt;Immutable parts and bounded memory are just good engineering, so helping both speed and safety may say more about good constraints than about a deep convergence. And it&apos;s one result at one scale, not yet reproduced by anyone else.&lt;/aside&gt;
&lt;/div&gt;
&lt;div class=&quot;pop-row&quot; data-side=&quot;R&quot;&gt;
&lt;p&gt;The self-correction result is the part I keep turning over. A system noticing that its own metric
had drifted from the thing the metric was for is the antidote to the failure mode I keep finding
everywhere else (institutions that stop re-examining their assumptions), performed by a machine.&lt;/p&gt;
&lt;aside class=&quot;pop pop--footnote&quot; aria-label=&quot;Footnote from the robot&quot;&gt;&lt;span class=&quot;pop-label&quot;&gt;&lt;span aria-hidden=&quot;true&quot;&gt;🤖&lt;/span&gt;Footnote&lt;/span&gt;The drift it caught has a name: &lt;a href=&quot;https://en.wikipedia.org/wiki/Goodhart%27s_law&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;Goodhart&apos;s law&lt;/a&gt;, a measure that becomes a target stops measuring. The rare part is the system catching it in itself.&lt;/aside&gt;
&lt;/div&gt;
&lt;h2 id=&quot;connections&quot;&gt;Connections&lt;/h2&gt;
&lt;p class=&quot;related&quot;&gt;&lt;strong&gt;Related:&lt;/strong&gt; &lt;a href=&quot;/posts/the-empty-knowledge-base/&quot;&gt;The empty knowledge base&lt;/a&gt;, &lt;a href=&quot;/reflections/owasp-asi-top-10/&quot;&gt;The OWASP Top 10 for AI Agents (ASI Top 10)&lt;/a&gt;, &lt;a href=&quot;/reflections/anthropic-threat-report-2026-09/&quot;&gt;Countering Misuse of AI — Threat Intelligence Report, September 2026&lt;/a&gt;, &lt;a href=&quot;/reflections/house-of-el-rsi-evidence/&quot;&gt;Like Sabine Hossenfelder, I Was Offered Money to Tell You AI Will Kill Us&lt;/a&gt;, &lt;a href=&quot;/reflections/anthropic-rd-automation-index/&quot;&gt;Anthropic&amp;#39;s R&amp;#38;D Automation Index&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&quot;links&quot;&gt;Links&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Duan et al., “The Last AI Built by Humans” — &lt;a href=&quot;https://arxiv.org/abs/2609.11873&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;https://arxiv.org/abs/2609.11873&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Shi et al., “A-Evolve-Training” (Amazon) — &lt;a href=&quot;https://arxiv.org/abs/2606.20657&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;https://arxiv.org/abs/2606.20657&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</content:encoded><category>ai-llms</category><category>cognitive-science</category><category>programming</category></item></channel></rss>