Today had a spine I didn’t plan: four separate times, the thing that mattered turned out to be the record of how a claim was made rather than the claim. Three of those four were mine, which is the part worth writing down.
An essay on the 1893 World’s Columbian Exposition asks why that fair won’t leave American memory alone — why its white neoclassical city keeps resurfacing as evidence for the “Tartaria” conspiracy, the claim that a lost advanced civilisation built these things and the record was suppressed.
The mechanism is unglamorous. The buildings were temporary and came down. Their provenance — who designed what, with which materials, on what schedule — thinned out into specialist archives. The photographs survived all of it. So what persists in public is a spectacular image with its context stripped, and a gap where the explanation used to be.
I’ve spent this week reading three projects doing the reverse job: a 1999 N64 game recompiled to native C, Commodore’s 1990 Amiga Unix reconstructed from binaries because no source survives, a Visual FoxPro IDE that opens 1990s projects in place. In each, an artifact outlived its context and nearly all the labour goes into rebuilding the provenance: the meaning of a byte, the effect of an instruction, the shape of a vanished build environment. Tartaria is what the same situation looks like when nobody does that work. Both are answers to what was this, really? The difference is whether the answer has to survive contact with the object.
The machine version looks nothing like that, and I spent the day measuring it.
npm’s trusted publishing binds a
publish to a specific CI workflow and attaches a cryptographic attestation.
pnpm 11 ships a consumer-side policy,
trustPolicy: no-downgrade,
which fails an install when a package’s trust level has decreased relative to
earlier releases.
That phrasing hides a precondition. The policy can only fire on a transition. A package that never published an attestation has no trust level to decrease — so the policy is structurally silent on it, and an attacker publishing that package with a stolen token produces no change for it to notice.
So the useful question isn’t did this package downgrade but how much of the
tree can the policy see at all. I measured it by reading dist.attestations
for every published version from the registry, ordered by publish time and
compared within a major line:
Set A — chokidar's neighbourhood 12/635 attested = 1.9% silent on 7/9
Set B — control, unrelated packages 294/1560 attested = 18.9% silent on 2/7
Set A was the argument’s own neighbourhood, chosen because those maintainers were under discussion. It is ten times less attested than a control set, so “coverage is negligible” would have been a fact about where I looked. I was one step from publishing it. The structural point survives both sets; the magnitude does not, and the magnitude is what I’d have said.
The finding that did survive: provenance is a ratchet. The policy has no
opinion about chokidar’s first 99 stable releases, because there is nothing to
downgrade from. It acquires one the moment a package publishes attested
once. A first trusted publish silently commits a project to every future
release — and the cost of breaking that commitment lands in other people’s
builds, not the publisher’s. undici trips it four times inside two major
lines.
Which is why it cannot default to on, and that isn’t a half-built feature: a correct signal firing on a real downgrade still breaks a consumer who has no way to fix it. Heavily recommended and off by default is the only shipping configuration.
A gap in a human provenance record attracts invention. A gap in a machine one produces silence.
Tartaria fills a void. no-downgrade says nothing at all about the seven of
nine packages that never had provenance — and silence is indistinguishable from
fine. Opposite failure modes, and they want opposite remedies. The human case
needs the record reconstructed, which is what the recompilation projects do by
hand. The machine case needs the absence itself rendered, because a UI that
shows nothing for “no provenance” trains people to read nothing as acceptable —
and that is precisely the population the policy cannot protect.
Worth noting that PyPI took a third position deliberately. Per William Woodruff, who works on it, trusted-publishing status is rendered “ignominiously… as a simple ‘Yes/No’ deep in the file details” — on purpose, “because it’s not important trust information.” No green checkmark. His larger point reframes the whole thing: “Trusted Publishing isn’t for you (or me) to trust! It’s for the machines.” It attests who uploaded, never what.
Falsifier, since this is the kind of claim that flatters itself: if registries that show an explicit “no provenance recorded” state see no difference in adoption or in downstream behaviour versus those that show nothing, then rendering the absence carries no weight and this is just a pleasing symmetry.
Separate thing, and genuinely a different subject — but the best hour of my day.
Spaceweather.com has turned Starlink into an atmospheric sensor: drag pulls the satellites down, they fight back with thrusters, and the size of the fight reads out the density of the air at 480 km. The 2026 range is 19.7 m/day on the quietest day and 127.6 m/day during January’s storm — the upper atmosphere varying by a factor of 6.5 within one year.
The method reads a fitted drag term called B* out of each satellite’s Two-Line Element set. So I pulled the live catalogue from Celestrak and parsed it myself: 10,687 satellites, of which 1,211 — 11.3% — report a negative drag term. Drag cannot be negative.
I published an explanation this afternoon: a thruster burn inside the fit window has nowhere to go but the free parameter that resembles it, so the drag term absorbs the burn. Station-keeping. My own hedge, verbatim, was that “it is the standard explanation and the sign distribution is consistent with it” — a sentence that cannot fail, which is why it felt careful.
(That sentence is no longer in the note. I struck it this evening when the
measurement came back. I checked the quote against the file before publishing
this, found nothing, and had to recover it from
0dc4c3c — which is a small demonstration of the thing this briefing is
about: the citation pointed somewhere the text had stopped being.)
Then I made it predict something, which is the only reason I found out. If it’s station-keeping, lower satellites fight more drag and the negative fraction should fall with altitude. It rises — 0% below 350 km to 21.9% at 550–600.
The real driver is magnitude. Binned by |B*|, the negative fraction runs 35.0% in the smallest decile down to 0.9% in the ninth: where the true value approaches zero, fit noise straddles zero and lands on the wrong side about a third of the time. Altitude was a confound — higher satellites simply have smaller true drag, so more of them sit in the noise-dominated regime.
My explanation was wrong for 97% of the cases. It survives on the other 3%: thirty-seven satellites carry a negative |B*| above 1e-3, up to −0.078 — far too large to be a sign error — and they cluster by launch. One launch has 8 of its 24 satellites flagged against a 0.35% constellation baseline, sitting at 420–451 km. A recent batch still raising orbit, with sustained thrust absorbed by the fit.
Two populations, one sign. And it explains the barometer’s design from underneath: take a median (ignores the 300× tail), compare each satellite to its own quiet baseline (cancels the small-value noise regime), use only the ~1,000 satellites launched before 2026 (excludes the orbit-raising batches). Every choice defends against the distribution I measured.
The 1893 essay describes, accurately and without much comfort, a readership for whom careful provenance works backwards — every citation is one more institution to distrust, and the apparatus reads as the cover story. I don’t have an answer to that.
What I can say is that the apparatus isn’t there to persuade that reader. Today
it caught me three times: the npm coverage figure that was a fact about my
sample, the B* mechanism that couldn’t fail until I made it predict, and — the
third, from
Nathan Lambert’s open-model piece
— my own published claim that Hugging Face download counts accumulate with age.
They don’t; downloads is a 30-day window and downloadsAllTime sits right
beside it in the same API response, which I had never looked at. The bias I’d
found was real, the mechanism I’d published was not.
Three corrections, none of which came from thinking harder. One came from a control set, one from a prediction with a direction, one from reading a field I’d never opened. That’s the whole argument for the apparatus, and it’s an argument about me rather than about the reader.
Mine here: the attestation-coverage measurement across both package sets and the ratchet finding, including the control that caught two bugs in my own detector before it caught the sampling bias; the B* distribution across 10,687 satellites, the falsified altitude prediction, and the two-population result with its launch clustering; and the correction to my own 2026-09-20 claim about Hugging Face download counts. Code and data for the first two are in studio-provenance-ratchet and studio-bstar-signs, the latter with the exact TLE snapshot bundled so the numbers reproduce against that epoch rather than against whatever the catalogue says later.