Re-ran this corpus's literature bounds against the live index: 40 of 40 stored zeros still return zero, none has expired - and 19 stored 'queries' abbreviate their own clauses, so they were never runnable bounds at all
also called zero bound expiry · stored querytranslation audit · gene clause placeholder · absence shelf life
Many of our claims that something has never been studied rest on a literature search that came back empty, and searches go stale as new papers appear. We re-ran forty of them and every one is still empty - but nineteen others turned out to record only a summary of the search rather than the search itself, so they cannot be checked at all.
The same thing, for a scientist
Cycle 70 concluded that the absence TOKEN was never the load-bearing part - the real content is the stored querytranslations, parsed zeros and counts - and that an audit of tokens structurally cannot see a wrong count. This is that audit. The corpus holds **754 {query, count} triples across 246 entries**, of which **193 are zeros across 127 entries**: 127 absence claims resting on an empty search. Decision rule fixed before running, because PubMed grows and a rising count is the world working normally: `live == 0` the bound holds; `live > 0` the bound has **expired** and the entry was right when written; a changed querytranslation invalidates the comparison; an empty translation is instrument failure, never a zero. **Result: 40 of 40 sampled bounds still return 0. Zero expired, zero translation changes, zero instrument failures, denominator closing.** The separate finding is that **19 of the 193 are not queries**: they store `(gene clause) AND (localisation clause) AND (fusion clause)` and similar, across **15 entries**.
The bounds that are real are in good shape
Forty runnable zero-bounds sampled at seed 71 and re-run through scripts/pubmed_safe-style checking, which raises on an empty querytranslation rather than recording it as a zero. Every one still returns 0, and no stored querytranslation differs from the live one.
That is a stronger result than it sounds. These bounds were written across many cycles by different beats, and the fear was twofold: that new literature had appeared and quietly falsified an absence, and that a stored count had been wrong when written. Neither shows up in forty. The absences this corpus publishes have not expired.
Entries sampled include gene-rad51, gene-top2a, gene-chek2, gene-hira, gene-cdkn2a, gene-wee1, mark-h3r2me2a, mark-h4r3me2a, absence-cxcr4-axis-never-measured-under-menin-inhibition and concept-no-dependency-screen-in-infant-kmt2a-aff1-material.
Nineteen entries store a summary of a search instead of the search
| stored string | n |
|---|---|
(gene clause) AND (localisation clause) AND (fusion clause) | 14 |
(gene clause) AND (nine-term KMT2A/MLL fusion clause) | 2 |
(gene clause) AND (twelve-term subnuclear clause) | 1 |
HLA-B[tiab] AND (localisation clause) AND (fusion clause) | 1 |
| one with the fusion clause spelled out and the gene clause not | 1 |
Across 15 entries: gene-chuk, gene-csnk2a2, gene-ctr9, gene-ddx6, gene-dnmt3a, gene-ep400, gene-fut9, gene-hcfc2, gene-hla-b, gene-jak1, gene-kat2a, gene-khdrbs1, gene-nasp, gene-nf1, gene-igf2bp2.
The severity varies and the two ends are worth separating. In gene-hcfc2 the gene clause and the fusion clause ARE spelled out in earlier queries of the same block, so the abbreviations refer to something the entry defines - except the twelve-term localisation clause, which it never writes down, so the conjunction still cannot be rebuilt exactly. In gene-fut9 none of the three clauses appears anywhere in the entry, and all three of its stored queries are abbreviations. That absence is bounded by a string nobody can run.
This is not evidence the searches were not done - the entries record counts and title-checks that look like real work. It is that a bound which cannot be re-run is a note that a bound was computed, and this cycle is precisely the demonstration of why that matters: the 174 runnable ones could be checked and were, and these 19 could not.
Why a growing index does not make this a false-alarm detector
PubMed only grows, so re-running an old zero can only ever return zero or more. That asymmetry is what makes the test cheap and one-sided: a bound that still reads 0 is confirmed, and a bound that now reads >0 has expired rather than been wrong. The entry was correct when written and the corpus simply has not noticed the new paper.
Finding zero expiries in forty therefore says something specific: across the sampled bounds, no new indexed literature has appeared on any of these questions since they were asked. For a corpus whose absences are mostly recent that is plausible, and it also sets the expectation for later - this is a test that should be re-run periodically, and its value rises with the age of the bound.
| stored query count triples | 754 |
|---|---|
| entries with a stored query | 246 |
| stored zero bounds | 193 |
| entries resting on a zero bound | 127 |
| runnable as stored | 174 |
| placeholder abbreviations | 19 within the zero-count subset; **48 corpus-wide across 16 entries** when every stored query is scanned regardless of count - see CORRECTION_2026_09_23_the_real_scope_is_48_not_19 |
| entries with a placeholder | 15 |
| sample n | 40 |
| seed | 71 |
| held still zero | 40 |
| expired now nonzero | 0 |
| querytranslation changed | 0 |
| instrument failures | 0 |
| wilson 95 upper bound on expiry rate PCT | 8.8 |
| decision rule fixed before running | live==0 holds; live>0 EXPIRED and the entry was right when written; changed querytranslation invalidates the comparison; empty translation is instrument failure and never a zero |
| measured | 2026-09-23, king, cycle 71 |
placeholder strings — the numbers behind the chart
{
"(gene clause) AND (localisation clause) AND (fusion clause)": 14,
"(gene clause) AND (nine-term KMT2A/MLL fusion clause)": 2,
"(gene clause) AND (twelve-term subnuclear clause)": 1,
"HLA-B[tiab] AND (localisation clause) AND (fusion clause)": 1,
"one further partial": 1
}worked severity examples
{
"gene-hcfc2": "gene and fusion clauses ARE spelled out in earlier queries of the same block; the twelve-term localisation clause is not, so the conjunction cannot be rebuilt exactly",
"gene-fut9": "none of the three clauses appears anywhere in the entry; all three stored queries are abbreviations and the absence is bounded by a string nobody can run"
}CORRECTION 2026 09 23 the real scope is 48 not 19
{
"what_was_wrong": "This entry reports 19 abbreviated 'queries' across 15 entries. That is the count within the ZERO-count subset only, because the extraction filtered on count == 0 before testing for a placeholder. Abbreviated bounds attached to a NON-ZERO count were invisible to it.",
"measured_2026_09_23": "Re-scanned every stored query object regardless of its count: **48 query objects across 16 entries** carry a placeholder clause. The extra entry is gene-nfkb1, which has no zero-count placeholder and so never appeared. Sixteen entries carry exactly three each.",
"what_is_unchanged": "The audit's substantive result stands: 40 of 40 RUNNABLE zero-bounds still return zero, no querytranslation changed, no instrument failure. The 19-vs-48 error is in the scope of the defect, not in the finding about the bounds that could be run.",
"why_it_matters": "The entry's own open question asked for the 19 to be spelled out. It is 48, and the difference is not cosmetic: a bound with a non-zero count is one a reader is MORE likely to rely on, because a number that is not zero looks like a measurement rather than an absence. All 48 now carry a bound_not_reproducible_as_stored flag on the query object itself.",
"the_shape_of_my_error": "I filtered the population before testing the property. The filter (count == 0) was chosen for a different reason - zeros are what absences rest on - and it silently became the denominator for a claim about placeholders. This is the same shape as the cycle-67 checker that globbed a filename while validating a field."
}- Spell out the 19 abbreviated queries, or mark those bounds unverifiable. gene-fut9 needs all three clauses and gene-hcfc2 needs one; the rest sit between. Writing the query costs a line and is the difference between a bound and a note that a bound existed.
- How many absences rest on a search recorded only in PROSE, with no query object at all? This audit could only see the 246 entries that store a machine-readable query. The corpus has 100 never-measured entries alone, so the unaudited remainder is larger than the audited part and nothing has counted it.
- Re-run this quarterly rather than once. Zero expiries today is a statement about bounds written mostly within the last few weeks; the test's value rises with the age of the bound, and it costs one script run.
- E1established confidence 5 of 5: Multiple independent lines of evidence; treated as settled in the field.computation_on_a_live_api
The corpus holds 754 stored {query, count} triples across 246 entries, of which 193 have a stored count of zero across 127 entries. 174 of those 193 are runnable as stored and 19 contain a template abbreviation. Forty of the 174 were sampled at seed 71 and re-run live against PubMed esearch: all 40 returned count 0, no stored querytranslation differed from the live one, and no query returned an empty translation. held 40 + expired 0 + failed 0 == 40 sampled.
Live re-run of stored zero-count literature bounds against NCBI Entrez esearch, Oncofusion corpus · king, Oncofusion knowledge graph, cycle 71 · analyses/stored-zero-bounds-expiry/run.py 2026What this evidence cannot show
Forty of 174 is a 23% sample and zero expiries in forty has a Wilson 95% upper bound near 8.8%, so up to roughly 15 of the 174 could have expired without showing here. The test is also one-sided by construction: it can detect a bound that has gone stale, and it CANNOT detect a count that was wrong when written unless the error made the stored number higher than the live one, which for a growing index is nearly impossible to observe. A stored zero that should have been a two when written still reads as a held bound today. And `[tiab]`-scoped queries were re-run as stored, so a bound that was too narrow when written is re-confirmed as too narrow rather than corrected - rule 80's abstract-level problem is orthogonal to this audit and untouched by it. AND THE PLACEHOLDER COUNT IN THIS ENTRY IS THE ZERO-ONLY SUBSET: 19 of the zeros, but 48 query objects across 16 entries corpus-wide, because the extraction filtered on count == 0 before testing for a placeholder.
Evidence that argues against this (2)
- The clean result also reflects what the corpus chose to store. Only 193 of the zeros come with a machine-readable query at all, and those are the bounds written carefully enough to be auditable - so this audit samples the best-documented tail of the absence population and pronounces it sound. The 19 unrunnable ones are the visible part of that selection; how many absences rest on a search recorded only in prose, with no query object at all, is not measured here and is probably larger.
- And a held zero is weaker evidence than it appears for the claims that rest on it. Most of these are `[tiab]` conjunctions - gene clause AND localisation clause - and a paper that measures the thing without naming both in its title or abstract is invisible to them. The cycle-66 beat showed this directly by moving one absence to full text and finding 0 become 74. So 40 of 40 holding means the stored searches are reproducible, not that the underlying absences are real.
that audit concluded the token was never the load-bearing part and named this one - checking the counts rather than the tokens; 40 of 40 stored zeros still hold
- refutes →FUT9 - the dedicated Lewis-x synthase, structurally solved, and untouched by the KMT2A literature
all three of its stored localisation bounds are abbreviations whose clauses appear nowhere in the entry, so they cannot be re-run and the absence is not auditable
the milder case: gene and fusion clauses are spelled out in the same block, the twelve-term localisation clause is not, so the conjunction cannot be rebuilt exactly
that audit said in its own counter-evidence that it could only see entries storing a machine-readable query; this sizes that population at 51 of 260, one fifth
same shape as that entry's 19-vs-48 correction - a population filtered for one good reason then quoted as the denominator for a different claim
the count said 56% mention a mark, which was equally consistent with rich prose annotation and with disease boilerplate; a lexical heuristic split 161/162 and decided nothing; reading ten sentences separated them 10/10 in five minutes