What the back-scan did to the verdicts¶
Measured 4 September 2026. Reproduce with python3 scripts/thread_diff.py and
python3 scripts/thread_diff.py --format trajectory.
Thread status in this corpus is derived, never stored. status_of() in
scripts/build_briefing.py recomputes it from cumulative supports and refutes
every time a briefing is generated, and data/threads.yml says why: the first
version of that file asserted a status per thread, every one of them from a
single month's reading, and none of them ever recomputed.
Deriving it is the right design. It also has a consequence nobody had looked at. Adding cards to a past month rewrites the published thread history in place, for every month after it. On 2026-09-04 the back-scan added 1,634 cards to months that had already been carded, briefed and deployed. Everything regenerated correctly. Nothing was wrong. And the curve moved underneath the whole record while the prose describing it stayed where it was.
30% of the curve moved¶
Twelve carded threads across 44 months is 528 thread-months. 160 of them — 30% — now carry a different status than they did before the re-read.
Three threads changed where they end up:
| Thread | Before | After |
|---|---|---|
neoantigen-vaccines |
+25 / −26 contested | +91 / −56 splitting |
next-gen-checkpoints |
+33 / −38 contested | +81 / −68 splitting |
suppressive-population-inversion |
+20 / −73 crisis | +58 / −112 contested |
Reading only the endpoint would have missed most of it. Two of the largest threads in the corpus end exactly where they ended before and were a different thread for the whole run-up:
| Thread | Months changed | Was | Is now |
|---|---|---|---|
immunotherapy-resistance |
39 of 44 | splitting in 35 months | forming in all 44 |
cell-therapy |
35 of 44 | splitting in 33 months | forming in all 44 |
suppressive-population-inversion |
41 of 44 | crisis in 42 months | contested in 38 |
ctdna-mrd |
13 of 44 | forming in 42 months | forming in 31, splitting in 12 |
cell-therapy and immunotherapy-resistance were read as splitting for three
years. Read completely, they were never splitting. suppressive-population-inversion
was called a crisis for its entire life and was contested for almost all of it.
Which direction, and why¶
The global stance mix barely moved: the 1,241 pre-existing cards are 40.9% refutations, the 1,634 added ones 38.5%. That two-point difference cannot produce a 30% rewrite, and the explanation is not global. It is per thread.
| Thread | Refutation share, pre-existing | in the added cards | shift |
|---|---|---|---|
suppressive-population-inversion |
78.5% | 50.6% | −27.8 |
neoantigen-vaccines |
51.0% | 31.2% | −19.7 |
next-gen-checkpoints |
53.5% | 38.5% | −15.1 |
cell-therapy |
30.5% | 20.3% | −10.2 |
foundation-models |
45.8% | 38.4% | −7.4 |
method-credibility |
96.9% | 95.5% | −1.4 |
immunotherapy-resistance |
24.0% | 25.5% | +1.5 |
interception |
12.8% | 14.9% | +2.1 |
neuro-immune-microbiome-axis |
8.1% | 10.4% | +2.3 |
ctdna-mrd |
23.7% | 27.5% | +3.8 |
single-cell-3d-genome |
16.1% | 21.1% | +5.0 |
The threads that moved are exactly the threads that were most refutation-heavy, and they moved toward the middle. The threads that were already support-heavy stayed put or drifted very slightly the other way. This is not the field changing its mind between 2023 and 2026 — every one of these cards was written about the same papers in the same months. It is the reading regressing toward its own mean once the instrument stopped varying.
The corpus predicted this about itself and never acted on it. Three 2023 briefings carry a section headed How to read the ratio saying the quarter's 40% refutation share "is a property of how these months were read rather than of the months themselves: the reading brief ranked refutations first and deliberately hunted them." That warning was published, and then the thread verdicts computed from those cards were published beside it as though the warning did not apply to them.
The sharpest case¶
suppressive-population-inversion exists to test whether depleting a population
identified as immunosuppressive improves outcomes. Its denominator field in
data/threads.yml said, until today:
The supporting side is not carded and cannot be, because it is a genre rather than a set of citable findings.
The back-scan carded 38 of them. The claim was not a fact about the literature; it was a fact about a reading brief that recognised "population X turns out to be protective" as a finding and "we depleted X and the tumour shrank" as wallpaper. Under one instrument the thread reads 58 supports against 112 refutes — still refutation-led, which is the honest form of the original observation, but not the 20-against-73 that made it a crisis.
The one thread that got worse¶
ctdna-mrd is the only thread the re-read moved against. It was forming in 42
of 44 months; it now opens contested, spends twelve months splitting, and
reaches forming later than the record used to say. The refutations that
abstracts surfaced there — trials where the assay predicts well and changes
nothing — were sitting in abstracts whose titles named the cohort and not the
outcome. That is the trial-title problem this corpus already had a rule for.
What the rule cannot see¶
status_of counts supports and refutes. neutral cards do not enter it at all.
Across the corpus that is 205 cards, 7%, which is unremarkable. Per thread it is
not:
| Thread | Cards | Neutral | Share |
|---|---|---|---|
agentic-ai |
81 | 30 | 37% |
ctdna-mrd |
153 | 35 | 23% |
next-gen-checkpoints |
164 | 15 | 9% |
interception |
218 | 19 | 9% |
agentic-ai holds 81 cards and more than a third of them are invisible to its
own verdict. This is not a defect — a neutral card is one that genuinely does
not move the claim, and counting it either way would be worse. But it means a
status is computed on a fraction of a thread that varies from 63% to 97%
depending which thread you are reading, and no briefing table shows that
fraction. The rule is not being changed in this pass. Changing a derivation
rule and re-reading the evidence in the same commit makes neither of them
checkable.
Corrected 2026-09-04 — two fields in threads.yml were false
method-credibility.denominator said "computed on 2026-09-04 over 370
cards it is 347 refutes, 13 neutral, 10 supports — 94%". The thread holds
654 cards: 610 refutes, 19 neutral, 25 supports. The figure was
computed midway through the back-scan and dated as though it were final,
which is worse than an old number: it carries today's date. Note how it
hid — the percentage moves 94% to 93% while the counts nearly double, so
the ratio stayed plausible while the denominator went stale underneath it.
suppressive-population-inversion.denominator said the supporting side
"is not carded and cannot be". It is now carded 58 times. Both fields are
rewritten; the claims they made are retracted here rather than edited away.
What this does not license
None of this is evidence that any scientific claim got stronger or weaker.
Every card involved describes a paper published between January 2023 and
August 2026, and no paper changed. What changed is how completely each
month was read. A thread that moved from crisis to contested did not
recover; it was never in a crisis, and the corpus said so for three years.
Nor is the new mix proven unbiased. It is proven uniform — one brief, one instrument, every month. Twelve readers sharing one brief are still twelve readers, and the same caveat that hangs over the residual spread in the density census hangs over these ratios.
What follows¶
scripts/thread_diff.pyexists now, so the next re-read cannot do this silently. Run it before publishing any pass that adds cards to past months.- The status rule's blindness to
neutralis documented here and left alone. If it is ever changed, change it instatus_ofand nowhere else, and re-run this comparison across the change rather than across an evidence edit. - Every figure in this corpus computed before 2026-09-04 rests on the old card set. The density census makes the same point for card counts; this makes it for verdicts.