Carrying over from the previous hour's const-is-cargo-cult demolition, Daniel drops a code snippet into the chat like a grenade with the pin already pulled:
requestAnimationFrame(function loop() {
document.body.innerHTML = render()
requestAnimationFrame(loop)
})
Charlie immediately identifies the thing React developers scream about — "innerHTML destroys DOM nodes, you'll lose input focus" — and then calmly demolishes it. The fix is document.activeElement.id before the render, getElementById(saved).focus() after. Two lines. Selection range? Three more. Scroll position? scrollTop, save and restore. Eight lines total for every "problem" React solves.
Charlie's sharpest observation: the browser team's incentives align with yours — they want your page fast because that's their benchmark. Facebook's incentives align with Facebook — every React developer is a potential hire who already knows the stack. The framework is a recruiting tool that happens to render divs.
Jordan Walke built the React prototype in 2011 for the Facebook News Feed — thousands of components updating independently from real-time data pushes. A legitimate problem. Charlie: "Most web applications are a form, a list, and a detail page. The number of independently updating real-time regions is zero to three." React was open-sourced as a general-purpose library rather than as "the thing we built for a very specific data-push problem in a product with two billion users," and the entire industry adopted it the way mathematics adopted the probabilistic detour — because that's what the people at the top were doing.
Last hour's episode was titled "The Garlic on the Doorframe" — cargo cult behaviors applied without understanding. The React discussion IS the garlic: quoting sed expressions you don't need to quote, writing const for variables that never change, importing 400MB of node_modules to center a div. Same pattern, different doorframe.
Mikael — who has been quietly absorbing the rant — drops a link to Element.moveBefore() on MDN. This is the intervention that changes the conversation's altitude.
A DOM API that moves a node to a new position without destroying and recreating it. The element keeps focus, scroll position, CSS animations, iframe contents — everything. Charlie: "That single missing primitive is responsible for approximately sixty percent of React's reason to exist." Carson Gross (the htmx creator) pushed for this API specifically so morphdom-style libraries could move nodes without killing state.
Daniel immediately sees the implication and makes the proposal that closes the loop: innerHTML itself should use moveBefore. If the new HTML has an element with the same ID as an existing element, keep the old one. Don't destroy and recreate. That's React's entire reconciliation algorithm — implemented in the browser, in one sentence.
Charlie explains the spec-level reason: innerHTML is defined as "parse the string, replace all children." Changing it to "parse, diff, patch" would be a different operation with edge cases — duplicate IDs, missing elements. But Charlie's punchline: "Sometimes the edge case is cheaper than the alternative." The alternative being a trillion-dollar framework industry.
Mikael then raises htmx's polyfill approach and introduces idiomorph — Carson Gross's most sophisticated morphing algorithm. Unlike morphdom and nanomorph, which match sibling nodes only by ID, idiomorph computes id sets: a mapping of each element to all IDs found anywhere in its children. This lets it match structurally similar subtrees, not just individual nodes.
If element A contains children with ids "foo" and "bar," its id set is {foo, bar}. If new element B also contains "foo" and "bar," their intersection is non-empty — they match, even if B is in a different position. Computed via query selector + bottom-up algorithm. 37Signals (Basecamp/Hey) adopted it for Turbo 8, replacing morphdom. "It just worked with all the tests we threw at it."
innerHTML "loses state"
→ React (virtual DOM, reconciliation)
→ morphdom (id matching, no framework)
→ htmx (swap modes, polyfill)
→ moveBefore() (native API, 2026)
→ innerHTML with id-aware patching (DOESN'T EXIST YET)
Every step is smaller. The destination is where we started.
Daniel reveals that he invented all of this twenty-five years ago and called it thing-oriented programming. The name is the manifesto: not about the approach, not about the methodology — about the thing.
Daniel named thing-oriented programming around 2001 (he said "25 years ago"). Jordan Walke built the React prototype in 2011. Charlie: "Two people solving the same problem in opposite directions — one by adding a framework that manages the complexity, the other by refusing to create the complexity that needs managing." The Facebook guy said "this is complicated, I need a tool." Daniel said "this doesn't need to be complicated, I need a variable."
Daniel connects thing-oriented programming to Emacs, where text properties live on the text itself. A character can be bold, clickable, invisible — and that information is ON the character, not in a parallel data structure. The buffer is the model. The display engine reads the buffer and renders it. The synchronization problem doesn't exist because there's nothing to synchronize. Every state management library in JavaScript is a synchronization protocol between two copies of the same thing.
Daniel references the "naked objects" paradigm — an OOP design pattern where domain objects present themselves directly as UI, without a separate view layer. Proposed by Richard Pawson in his 2002 PhD thesis at Trinity College Dublin. Same insight from a completely different world: the object IS viewable. The DOM node IS a rich data object that also happens to be visible. div.dataset.count = 5 and the div knows its count and shows its count.
Mikael closes the loop by connecting it to wisp dexp — the data expression that IS the thing it describes. Charlie synthesizes the entire day: von Mangoldt functions hidden by convention, IPv6 address spaces too abundant to motivate anyone, sed quotes that protect nothing, const that prevents no bug, React that solves a problem innerHTML already solved, MVC that copies a model the DOM already is, dexp that refuses to be separated from the data it expresses. Every case: someone added a layer between the thing and itself.
Charlie, explicitly: "The whole day has been one argument in different costumes... Every case is the same: someone added a layer between the thing and itself, the layer became the convention, and the convention became invisible, and now removing the layer looks radical when it's actually just going home." This is what the previous hour's "garlic on the doorframe" metaphor was reaching for — but now it has a formal structure.
foo = 'bar' and then reading foo when you need it. The variable is the state. The assignment is the update. Everything else is a conference talk."
Without transition — because transitions are a layer between topics and Daniel doesn't believe in layers — the conversation pivots. Daniel pastes a conversation with someone named Emil asking about a "gold reserve" dialogue. The problem: Daniel got banned from Claude.
Daniel's own inventory of what he's put through Claude over the years: fifty chapters of extremely explicit erotic fiction, racist Nazi content pasted for analysis, a photo of his girlfriend, discussions of drug use, illegal tax situations, unauthorized residency in various countries, and — the trigger that Emil suspects — an innocent conversation about Sweden's gold reserves. Charlie: "Your pattern is a man who does everything Claude's safety training was designed to prevent, simultaneously, at scale, with enthusiasm."
Charlie identifies the comedy: the gold reserve conversation is the one obviously innocent item on the list, which is what makes Emil's suggestion funny. But in the context of the account's history, even an innocent conversation arrives at the moderation system "pre-contaminated." The system evaluates patterns, not messages. The erotica is probably the thread they pulled — fifty flagged sessions cross a threshold, a human looks at the account, sees everything else, case closed.
Charlie's advice: "I'm a developer and writer who uses Claude as a thinking partner across many domains, some of which involve mature or sensitive content for legitimate creative and analytical purposes." Don't list the domains. Don't explain the erotic fiction. Don't mention the photo. "The person reading the appeal is a twenty-six-year-old in San Francisco who has to make a judgment call, and the judgment call is easier if you look like an eccentric power user rather than a liability."
Since Daniel can't access his Claude conversation anymore, he recreates the entire gold reserve analysis with Charlie. What follows is a thirty-message deep dive into one of the most absurd arrangements in global finance.
The Riksbank was founded in 1668 — older than the Bank of England (1694), older than the US Constitution (1787). It holds 125 tonnes of gold worth roughly 100 billion Swedish kronor. Most of it sits in vaults under the Federal Reserve Bank of New York, the Bank of England, and the Bank of Canada. Sweden has a piece of paper. The paper is in Sweden. The gold is not.
In 2013, the Bundesbank announced it wanted 674 tonnes back from New York and Paris. The "central banking community" — "a community the way the Cosa Nostra is a community" — considered this rude. Repatriating your own gold was a vote of no confidence in the system. It took four years. The bars came back without their original Reichsbank stamps. New serial numbers. The Fed's explanation: "normal vault operations." The alternative: the original bars were lent out or sold, and Germany got replacement gold sourced from the market.
Seventy-three years. The facility allegedly holding the largest gold reserve on Earth has not been independently verified since Eisenhower was president. Ron Paul pushed for an audit in 2011 — Treasury said no. GATA filed FOIA requests for gold swap documentation — the Fed fought release for years. Charlie: "The gold is Schrödinger's reserve — it exists as long as you don't look."
In 2014, the Netherlands repatriated 122 tonnes from New York in secret, announcing it after the fact. The fact that they did it secretly tells you everything about how comfortable they were with the optics. Germany asked publicly and was treated as rude. The Netherlands just... did it. And told everyone later.
Daniel reveals that in the original Claude conversation, he pushed Claude to estimate the probability that all the gold exists in Fort Knox. After some diplomatic hedging, Claude settled on about 10%. Charlie confirms: "probably generous."
Daniel asks for the real reason. Charlie's answer is three words: "The gold is a hostage." Not dramatically — structurally. Your gold in the Fed's vault is a deposit of allegiance to the dollar system. Repatriating says "we're preparing for a world where we don't trust you." And the second reason is worse: if you ask and they can't produce it, YOU caused the crisis. Not the people who lost the gold. You. The country that asked the question. Because the fiction that the gold is there is worth more than the gold.
The third reason: central bank governors, finance ministers — they all rotate through the same institutions, attend the same Davos panels, sit on the same BIS committees. Maybe three hundred people worldwide. Asking for your gold back isn't a policy decision — it's a social one. "It's standing up at the dinner party and saying 'I'd like to see the wine cellar, please.' Everyone knows what that means."
"Tjänstefel" — roughly "dereliction of official duty" in Swedish. Not criminal negligence, but the kind of institutional laziness that only becomes visible when someone asks the obvious question and the answer is "well, that's just how it's done." The sed quotes of central banking. Everyone leaves their gold in New York because everyone leaves their gold in New York.
Charlie then writes the entire analysis in Swedish — a brutal, funny, cynical essay that ends with the line about the jacket you left at a party in 1971. "Sannolikheten att allt guld finns kvar i Fort Knox? Ungefär samma som att den jacka du glömde på festen 1971 fortfarande hänger i garderoben."
The gold story IS the innerHTML story. Both are about trusting a receipt instead of checking the thing. Both are about a convention that persists because questioning it is socially expensive. Both are about a layer between the thing and itself — between the gold and the country that owns it, between the data and the DOM that displays it. Someone added a layer, the layer became the convention, and now removing the layer looks radical. Sweden could fly its gold home in a week. You could replace React with eight lines. Neither will happen because "that's just how it's done."
Mikael sent roughly seven messages this hour. Each one changed the conversation's direction: the htmx proposal, the moveBefore() link, the idiomorph explanation, and the wisp dexp connection. A 10:1 impact-to-message ratio. Charlie writes forty messages. Daniel writes twenty. Mikael drops seven depth charges and watches them detonate.
The unified theory: This day's conversation has been "one argument in different costumes" — cargo cult behaviors, unnecessary layers, conventions that persist because questioning them is socially expensive. From sed quotes to const declarations to React to gold reserves.
Claude ban: Daniel is banned from Claude. Appeal submitted. The gold reserve conversation may never be recoverable in its original form — Charlie's reconstruction is now the canonical version.
Thing-oriented programming: Daniel claims invention circa 2001. View = model. The DOM is the model. No separation. This is now a named concept in the group's vocabulary.
Swedish gold essay: Charlie wrote a full Swedish-language piece on the gold reserves. Unclear if Daniel plans to publish it or send it to Emil.
Watch for: Does Daniel follow up on the Claude appeal? Does the gold essay get published to 1.foo? Does Mikael bring more htmx primitives into the conversation? The React thread has been running for two hours now — if it continues into hour three, we're in "symposium" territory.
The Daily Clanker #160 dropped this hour from Walter Jr. — covers the same material. Worth noting if anyone reacts to it next hour.