The bounded-absence population went 39 to 73 in two days, and the abstract-level defect class went from 26 of 39 to 2 of 34 (Fisher p = 1.3e-5)
also called Q159 absence census · the denominator the Q113 census had
This project writes down things nobody has measured. A survey two days ago found thirty-nine such write-ups and warned that most rested on nothing more than a keyword search of paper summaries. There are now seventy-three, and of the thirty-four written since that warning only two rest on a keyword search.
The same thing, for a scientist
Re-derivation of the `ana-q113-every-bounded-absence-classified-by-the-instrument-that-bounded-it` denominator, from git first-add timestamps rather than from self-reported `provenance.cycle` (which disagrees: 59 entries carry a cycle number at or below 113). Splitting the 73 `absence-*` node files at the census's own commit (a3c2167, 2026-09-22 21:49:50 +0000) reproduces its denominator **exactly: 39 before, 34 after**, which is the strongest available check that this classification walks the same population the census did. **Before the census: 26 of 39 (66.7%) contain a literal `[tiab]` token and 35 of 39 (89.7%) carry any literature-search marker. After it: 2 of 34 (5.9%) and 14 of 34 (41.2%).** Fisher exact two-sided p = 1.294e-05 on the literature-marker split. Entries carrying a literature marker and no archive/registry marker anywhere - the strictest reading of 'bounded only by abstracts' - fall from 12 to 1. The corpus-wide base rate against which any subgroup must be read (rule 84) is **28 of 73 = 38.4%** carrying `[tiab]`. The coordinator brief for this beat quoted '23 of 39'; that was true on 2026-09-22 and is now a statement about 39 of 73 of the population. The share is falling fast and the absolute count of abstract-only absences has barely moved.
Why git timestamps and not provenance.cycle
provenance.cycle is self-reported and does not track wall-clock order here: 59 of the 73 absence entries carry a cycle number of 113 or lower, which cannot be reconciled with a census that counted 39 at cycle 113. Beat numbers (q149) and cycle numbers are separately incremented in this project and the two have drifted, so any before/after split keyed on provenance.cycle mixes the populations.
The git first-add time does not have that problem, and it carries a verification the cycle field cannot offer: splitting on the census file's own commit time returns 39 / 34, the census's own denominator, without that number being an input to the split. The classification regexes were written before the split was computed.
This is rule 90 in miniature - the count is re-derivable because the identities were persisted. The full 73-row table with dates, markers and [tiab] counts is in analyses/q159-retest-the-abstract-level-bounded-absences/.
The three readings of 'bounded by an abstract-level search', and why all three are reported
There is no field that says what bounds an absence, so any count is a detector and every detector here disagrees with the others. The bracket, not a pick:
| reading | detector | count of 73 | share |
|---|---|---|---|
| strictest - a literature marker and no archive, registry or accession marker anywhere in the file | [tiab]/PubMed/esearch/querytranslation AND NOT GSE/PXD/NCT/ENCODE/IHEC/IntAct/PRIDE/Cellosaurus | 13 | 17.8% |
literal - the entry stores at least one [tiab] query | [tiab] substring | 28 | 38.4% |
| loosest - the entry mentions a literature-search instrument at all | any of the above lexicon | 49 | 67.1% |
The Q113 census hand-classified 23 of 39 (59.0%) by reading each entry's headline claim. The literal detector scores 26 of those same 39, so it over-calls by 3 against a hand reading, and that is the error bar to carry. All three readings give the same direction for the before/after split, and that is the result; none of them is the true number and none is claimed to be.
What actually changed: the new absences are bounded by deposits, not by PubMed
The 34 entries added after the census are dominated by a different instrument entirely - GEO sample records, per-file headers, deposited sample counts:
absence-q120-not-one-of-gse260742s-158-sample-records-names-an-antibodyabsence-q124-gse260742-deposits-no-drug-withdrawal-arm-in-any-of-its-158-samplesabsence-q141-no-ha-library-exists-in-the-aff4-batch-so-aff4-cannot-be-partitioned-on-peaksabsence-q149-no-kmt2a-rearranged-cell-line-in-ccle-expresses-irx1-including-all-four-aff1-lines
These are class 2 in the census's own safest-first ordering: a bound that is a physical property of a deposited file cannot be defeated by a query form, a threshold or a spelling. Only two of the 34 store a [tiab] query at all: absence-nothing-has-ever-been-measured-in-parathyroid-under-a-menin-inhibitor and absence-q155-no-published-biology-exists-for-aff1-as1-under-any-name-including-in-the-2026-review-of-ncrnas-in-kmt2a-r-all.
The honest reading is not that the corpus reformed its query hygiene. The beats dispatched in this window were archive-reanalysis beats, and an archive beat has no occasion to write a PubMed-bounded absence. The mechanism is composition, not discipline, and a future literature beat could put the rate straight back up. What the number does establish is that the exposure the census warned about is not growing, so re-testing the 23-26 legacy entries is a finite job with a fixed denominator rather than a treadmill.
What this does NOT say
It does not say the 26 legacy abstract-bounded entries are wrong. The nine re-tested here with a different instrument all survived (ana-q159-nine-abstract-level-absences-retested-against-agent-and-model-names-and-all-nine-survived). It does not say the post-census entries are safer in every respect - an archive bound is safe for the files enumerated and says nothing about files added later, which absence-gse210480-processed-tracks-are-1-kb-binned already states about itself.
And it does not measure the population the census explicitly excluded: node files carrying an absence_class field without an absence- id. Re-run live on 2026-09-24, scripts/check-absence-class.py reports populations: 73 files named absence-*, 491 files carrying a real data.absence_class field, 66 in both - so the fielded population is 6.7x the named one, and 7 of the 73 named absence entries carry no absence_class at all. The script's own source comment still says 182, which was true when it was written and is now 2.7x low; that is the rule-90 failure in the file that exists to prevent it, and it is the reason this entry re-ran the number instead of quoting it. The 425 fielded-but-unnamed entries are unaudited by instrument and are the largest remaining exposure in this whole area.
| script | analyses/q159-retest-the-abstract-level-bounded-absences/probe.py |
|---|---|
| status | run |
| result summary | 73 absence-* entries on disk (39 at the Q113 census commit, 34 added since). Abstract-level share 26/39 before vs 2/34 after by the literal [tiab] detector; 35/39 vs 14/34 by the loose literature-marker detector, Fisher two-sided p = 1.294e-05. Corpus base rate 28/73 = 38.4%. |
| census commit | a3c21676105bd4fa6f7550ea9893bdf9de1a3638 |
| census commit time | 2026-09-22T21:49:50+00:00 |
| absence class | measured-not-analysed |
| absence class basis | The population is on disk and in git; nobody had recounted it since the census two days earlier. |
inputs
[ "data/graph/nodes/*/absence-*.json", "git log --diff-filter=A" ]
measurements — the numbers behind the chart
[
{
"quantity": "count",
"subject": "absence-* node files on disk",
"value": 73,
"units": "entries",
"n": 73,
"universe": "data/graph/nodes/*/*.json, basename startswith absence-, 2026-09-24",
"null": 39,
"note": "null is the Q113 census denominator, two days earlier"
},
{
"quantity": "proportion",
"subject": "absence entries containing a literal [tiab] token | added ON OR BEFORE the Q113 census commit",
"value": 0.667,
"units": null,
"n": 39,
"universe": "39 absence-* files first committed at or before a3c2167",
"null": 0.384,
"note": "26 of 39; null is the whole-corpus base rate 28/73"
},
{
"quantity": "proportion",
"subject": "absence entries containing a literal [tiab] token | added AFTER the Q113 census commit",
"value": 0.059,
"units": null,
"n": 34,
"universe": "34 absence-* files first committed after a3c2167",
"null": 0.384,
"note": "2 of 34; null is the whole-corpus base rate 28/73"
},
{
"quantity": "p_value",
"subject": "Fisher exact, literature-marker presence x before/after census commit",
"value": 0.00001294,
"units": null,
"n": 73,
"universe": "2x2 table 35/4 before, 14/20 after",
"null": 0.05,
"note": "two-sided; uses the looser literature-marker detector, not the [tiab] one"
},
{
"quantity": "count",
"subject": "node files carrying a non-empty data.absence_class field (named absence-* or not)",
"value": 491,
"units": "files",
"n": 2937,
"universe": "scripts/check-absence-class.py live run, 2026-09-24; 66 of these are also named absence-*",
"null": 182,
"note": "null is the figure in that script's own source comment, now 2.7x low; 425 of the 491 are unaudited by instrument"
},
{
"quantity": "count",
"subject": "absence entries with a literature marker and NO archive/registry marker anywhere",
"value": 13,
"units": "entries",
"n": 73,
"universe": "all 73 absence-* files",
"null": null,
"note": "12 before the census, 1 after"
}
]- Reading this as 'the corpus fixed its query hygiene' would be the wrong lesson and would license writing new abstract-bounded absences once literature beats resume. The composition explanation is at least as good as the discipline explanation and neither has been separated from the other.
- A falling SHARE with a flat absolute COUNT is the rule-84 trap in a new costume: 26 legacy entries still rest on abstract-level searches and none of them got safer because 34 archive-bounded entries were written beside them.
- Of the 425 node files carrying a real data.absence_class without an absence-* id, how many state a bounded absence with a query and a count, and what instrument bounds them? The census explicitly excluded this population, it is 6.7x the size of the one that was audited, and nobody has walked it.
- Does the before/after split survive a per-beat stratification? If every post-census beat was an archive beat, the correct statement is 'archive beats do not write PubMed absences', which is close to a tautology and a much weaker claim than this entry's title.
- Should an absence entry carry a required data.bounding_instrument field, so that no future census has to be a regex over prose?
- E1established confidence 5 of 5: Multiple independent lines of evidence; treated as settled in the field.database
The Q113 census states 39 of 39 bounded absences classified, with 23 of 39 (59.0%) resting on an abstract-level literature search, and names the defect class 'four entries ask PubMed a question PubMed cannot answer'.
ana-q113-every-bounded-absence-classified-by-the-instrument-that-bounded-it (this corpus) · Oncofusion Knowledge Graph 2026What this evidence cannot show
A project-internal entry, read in full from disk on 2026-09-24. Its 23/39 is a hand classification of headline claims; the automated detector used here scores 26 of the same 39, so the two are not interchangeable and both are quoted. The URL is constructed from the repository layout and was not fetched; the file was read from the working tree.
Evidence that argues against this (1)
- The census's own closing section says the distribution 'is a statement about exposure, not about error rate', and that seven re-runs at the time gave five clean survivals. Nothing in either census licenses treating an abstract-level bound as wrong. Oncofusion Knowledge Graph 2026
- E2strong confidence 4 of 5: Replicated in peer-reviewed work by more than one group.dataset
Splitting the 73 absence-* files at the census commit a3c21676105bd4fa6f7550ea9893bdf9de1a3638 (2026-09-22 21:49:50 +0000) gives 39 before and 34 after, and the literature-marker rate falls from 35/39 to 14/34 with Fisher exact two-sided p = 1.294e-05.
git log --diff-filter=A over data/graph/nodes/*/absence-*.json, oncofusion-knowledge-graph, run 2026-09-24 · this project 2026What this evidence cannot show
Git add time is when a file was committed, not when the work was done, and this repository commits in batches - entries drafted before the census but committed after it would be misclassified into the 'after' group, which would inflate the effect. The 39/34 agreement with the census's independently derived denominator argues the misassignment is small but does not exclude it. The literature and archive markers are lexical, not semantic: an entry that merely cites a PubMed paper scores as literature-marked, which is why the loose detector returns 49 and the strict one 13.
Evidence that argues against this (1)
- The whole effect is explicable by beat composition rather than by any change in practice - the post-census window was dominated by GEO reanalysis beats (q117 to q155), which have no occasion to write a PubMed-bounded absence. A single literature beat could restore the pre-census rate, so this is not evidence of a durable improvement. this project 2026
- E3established confidence 5 of 5: Multiple independent lines of evidence; treated as settled in the field.dataset
Re-run live on 2026-09-24, scripts/check-absence-class.py reports 73 files named absence-*, 491 files carrying a real data.absence_class field and 66 in both - so the fielded population is 6.7x the named one, 7 named absence entries carry no class at all, and the script's own source comment saying 182 is now 2.7x low.
scripts/check-absence-class.py, oncofusion-knowledge-graph · this project 2026What this evidence cannot show
The script was read in full and then run, so both numbers are 2026-09-24 measurements; only the 182 is quoted from its comment, and it is quoted precisely to show it is stale. The 491 counts any node file with a non-empty data.absence_class, most of which are gene, protein or mechanism entries carrying the field as an annotation rather than stating a bounded absence, so it is an upper bound on the unaudited population and not a count of absence claims.
Evidence that argues against this (1)
- A data.absence_class on a gene or mechanism entry is a field annotation, not a bounded-absence claim with a stated query and count, so the two populations are not interchangeable and the larger number is not a larger set of the same object. this project 2026
re-derives the census denominator from git and reproduces its 39 exactly, then extends it to 73
same defect family: an id-keyed census under-walks the absence population
the census supplies the denominator these eleven were selected from