Re-measured against IntAct the interactome is 103/217 (47.5%) covered, up from 41.0%, and the read queue is now ZERO - no partner with two publications or two baits lacks an entry, so the instrument's own ranking criterion has stopped selecting anything. It was also persisting the list of partners that DO have entries while counting and discarding the 105 that do not, which is the exact defect cycle 57 fixed for the other list
also called the interactome read queue is empty · the instrument discarded the work queue · 47.5 percent and nothing left to rank
The project's first priority is to give every documented protein partner of the fusion its own entry, and a tool measures how far along that is by comparing the graph against a curated public database. Re-running it shows just under half the partners now have entries, up from about two fifths, and that every partner backed by more than one study already has one - so what remains is a long tail supported by a single experiment each, and the tool can no longer tell anyone where to start. It also turned out the tool was saving the list of partners already done and throwing away the list of those still missing, which is the only list anyone would actually use.
The same thing, for a scientist
**Statement.** `analyses/core-complex-interactome-gap/run.py` measures the PI's first priority against an outside instrument: IntAct's curated interactors of **KMT2A, MEN1, PSIP1, AFF4, DOT1L and AFF1**. The ledger has been quoting 41.0%. **Re-run 2026-09-23.** | | union | own entry | mentioned only | absent | |---|---:|---:|---:|---:| | **cycle 91** | 217 | **103 (47.5%)** | 9 | **105** | | cycle 53 | 217 | 89 (41.0%) | — | — | | cycle 18 | 217 | 46 (21.2%) | 18 | — | Per bait: **KMT2A 49/101 (48.5%)**, PSIP1 15/28 (53.6%), AFF4 38/69 (55.1%), MEN1 19/30 (63.3%), AFF1 17/25 (68.0%), DOT1L 17/24 (70.8%). **KMT2A's own partner list remains the worst covered**, which has been true across all three measurements. **The finding is not the percentage. It is that the read queue is empty.** The instrument ranks uncovered partners by `>=2 publications OR >=2 baits`. That queue now returns **zero rows**. Every partner with more than single-experiment support already has an entry, and the top of the absent list is composed entirely of adjudicated partners — **8 of the register's 10 are in the absent list**, the other two being mentioned-only — uncovered by explicit decision, not by neglect. **And no change of threshold rescues it: all 97 non-adjudicated absent partners sit at exactly `(1 bait, 1 publication)`** — a single point, so no ranking function over those two fields can order them. The queue is not empty because the bar is set wrong; **the evidence has no variance left to rank on.** **So the instrument has saturated its own criterion and can no longer tell a future cycle where to work** — the same failure this graph already recorded when counter-argument coverage reached 100% and stopped being a measure. **And "105 of 217 missing" must not be quoted as a work queue**: what remains is a long tail of single-publication, single-bait partners, largely high-throughput AP-MS. The 41.0% → 47.5% move was ordinary tranche work; the queue was never the thing being worked. **The instrument defect.** `run.py` persisted `union_covered` — the partners that **do** have entries — and counted the absent ones into `union_absent_entirely` **before dropping them**. So the only actionable list the tool produced was the one it threw away. **Cycle 57 fixed precisely this defect for the covered list**, with a comment in the source explaining that *"a count nobody can open is a claim nobody can check"*, and left the inverse in place. It survived 38 cycles behind a correct-looking total. `run.py` now writes `union_absent` and `union_mentioned_but_no_entry` with baits and publication counts, and the length is asserted against the count. **Dispatched off the repaired list (Q128):** MEN1's nine absent partners — **AKT1, BRAF, CD226, EGFR, FBXW7, PTEN, SMAD4, SPOP, ZC3HC1**.
A ledger line said cycle 71 and the measurement is from cycle 18
docs/coverage.md attributed the original 21.2% measurement to "(cycle 71)". The entry's own provenance is 2026-09-20, the 21.2% figure entered the ledger in commit e408699, "Cycle 18 ledger and king log", and there is no cycle-71 king log in the repository at all. Corrected in the ledger this cycle.
This matters more than a typo normally would: the standing instruction to every cycle is "docs/coverage.md is the live source of truth for what is cold — read it, not this prompt's memory of it." A cycle label is how a reader judges whether a number is fresh. Mislabelling a cycle-18 measurement as cycle 71 makes a stale figure look like the most recent word on the project's first priority — and the figure was in fact two re-measurements out of date.
What the remaining 105 are, so nobody mistakes them for a plan
Excluding the 8 adjudicated that fall in this list, the 97 remaining absent partners are 4 for AFF1 (MRPL12, MYH7, SLC16A6, ZNF526), 9 for MEN1 (AKT1, BRAF, CD226, EGFR, FBXW7, PTEN, SMAD4, SPOP, ZC3HC1) and 43 for KMT2A, the last including a coherent splicing block (HNRNPA1, U2AF2, SF3B4, SRSF4/5/6, EFTUD2), three 14-3-3 paralogues (YWHAB, YWHAE, YWHAH) beside the YWHAG already adjudicated into a six-entry axis, several ribosomal proteins, and OGT.
MEN1's nine were chosen for dispatch because they are the only block where absence is surprising on the project's own hypothesis. Every one is a major cancer gene. If menin genuinely sits in those complexes, menin's role is not only chromatin, and that bears on what a menin inhibitor does. The brief requires tracing each IntAct row to its publication and reading it before an entry is written — and flags in advance that several tracing to one screen would itself be the finding, since this project has already caught two IntAct "publications" that were BioPlex 2.0 and BioPlex 3.0.
RL3_RL3L_HUMAN appears in the absent list as a KMT2A partner and is not a gene symbol. It is a parser artefact in the instrument's own symbol resolution, sitting inside the denominator. Referred out for identification rather than guessed at here.
CORRECTION (cycle 92): 'absent entirely' never meant absent from the corpus, and this entry said it did
This entry reported 105 partners absent entirely and described MEN1's nine as "none mentioned anywhere in the corpus". Both readings are wrong, and the second is flatly false.
load_graph() tokenised only id, title and aliases. It never saw summary_*, sections[].body_md, evidence or data. So union_absent_entirely meant absent from the headline strings, and was published under a name that reads as absent from the project.
All nine MEN1 partners I dispatched Q128 on are discussed in ana-menin-neoppi-trap-ten-intact-partners-from-one-mutation-screen, which adjudicated seven of them in cycle 72. The instrument structurally could not see its own project's decision, because the decision lives in prose.
Re-run with the whole node scanned: of 217 partners, 103 have their own entry, 80 are discussed somewhere without one, and only 34 have never been discussed at all — not 105. The genuine never-touched gap is a third the size this entry reported.
This is a failure mode already in this project's record — a gap list cannot see what was decided, where 0 of 15 reported "cleanest gaps" were gaps for exactly this reason. It recurred because the field name was trusted instead of the function body. run.py now returns and publishes both union_absent_from_headline_fields and union_never_discussed_anywhere.
Caveat on the 34: it was computed with Q128's 14 uncommitted node files on disk, and those files discuss the nine partners, so the figure is flattered by the beat that exposed the defect. The pre-Q128 figure is not recoverable without a re-run against HEAD.
| instrument | analyses/core-complex-interactome-gap/run.py |
|---|---|
| union human partners | 217 |
| worst covered bait | KMT2A, across all three measurements |
| read queue size | 0 |
| read queue definition | >=2 publications OR >=2 baits, no entry of its own |
| what the empty queue means | the instrument's own ranking criterion no longer selects anything, so it cannot tell a future cycle where to work. The top of the absent list is now entirely the 10 ADJUDICATED partners - uncovered by decision, not neglect. |
| do not quote 105 as a work queue | what remains is a long tail of single-publication single-bait partners, largely high-throughput AP-MS |
| instrument defect fixed | run.py persisted union_covered and counted union_absent_entirely before dropping the list. Cycle 57 fixed exactly this for the covered list, with a source comment reading 'a count nobody can open is a claim nobody can check', and left the inverse in place for 38 cycles. Now writes union_absent and union_mentioned_but_no_entry, with the length asserted against the count. |
| ledger attribution corrected | docs/coverage.md credited the original 21.2% measurement to 'cycle 71'. The entry's provenance is 2026-09-20, the figure entered in commit e408699 titled 'Cycle 18 ledger and king log', and no cycle-71 king log exists in the repository. |
| parser artefact in the denominator | RL3_RL3L_HUMAN is listed as an absent KMT2A partner and is not a gene symbol |
| dispatched | Q128, MEN1's nine absent partners, with a brief requiring each IntAct row to be traced to its publication and read before an entry is written |
| absence class | measured-not-analysed |
| absence class note | The 105 absent partners are all curated in IntAct and were all inside this instrument's output the whole time; what had never been analysed is which ones they are, because the list was computed and discarded at the point of writing results.json. |
baits
[ "KMT2A", "MEN1", "PSIP1", "AFF4", "DOT1L", "AFF1" ]
measurements — the numbers behind the chart
[
{
"cycle": 18,
"own_entry": 46,
"pct": 21.2,
"source": "commit e408699"
},
{
"cycle": 53,
"own_entry": 89,
"pct": 41,
"source": "commit 0e63236"
},
{
"cycle": 91,
"own_entry": 103,
"pct": 47.5,
"source": "this run, 2026-09-23"
}
]per bait cycle 91
{
"KMT2A": [
49,
101
],
"PSIP1": [
15,
28
],
"AFF4": [
38,
69
],
"MEN1": [
19,
30
],
"AFF1": [
17,
25
],
"DOT1L": [
17,
24
]
}absent excluding adjudicated
{
"AFF1": [
"MRPL12",
"MYH7",
"SLC16A6",
"ZNF526"
],
"MEN1": [
"AKT1",
"BRAF",
"CD226",
"EGFR",
"FBXW7",
"PTEN",
"SMAD4",
"SPOP",
"ZC3HC1"
],
"KMT2A_count": 43,
"KMT2A_notable": [
"OGT",
"HNRNPA1",
"U2AF2",
"SF3B4",
"SRSF4",
"SRSF5",
"SRSF6",
"EFTUD2",
"YWHAB",
"YWHAE",
"YWHAH"
]
}evidence distribution over absent
{
"non_adjudicated_absent": 97,
"adjudicated_present_in_absent_list": 8,
"distribution": "ALL 97 non-adjudicated are exactly (n_baits=1, n_publications=1) - a single point",
"threshold_sweep": "pubs>=2 OR baits>=2 selects 0; pubs>=1 OR baits>=1 selects all 97; no intermediate exists",
"implication": "not a threshold problem. No ranking function over (publications, baits) can order these rows. Ranking them needs a field the instrument does not carry: detection method, publication date, or a DepMap co-dependency between partner and bait.",
"tested": "before this entry shipped, because the entry's own counter-evidence named it as the cheapest refutation of the headline - the cycle-90 rule"
}CORRECTION cycle 92
{
"what_was_wrong": "union_absent_entirely counted partners absent from id/title/alias only; this entry described them as absent from the corpus",
"cause": "load_graph() tokenised only id, title and aliases - never prose, evidence or data",
"true_numbers_after_fix": {
"union_human_partners": 217,
"with_own_entry": 103,
"discussed_but_no_entry": 80,
"never_discussed_anywhere": 34
},
"the_false_dispatch": "Q128 was sent on nine MEN1 partners as 'not mentioned anywhere in the corpus'. All nine are discussed in ana-menin-neoppi-trap-ten-intact-partners-from-one-mutation-screen, which adjudicated seven in cycle 72.",
"known_failure_mode_recurring": "a gap list cannot see what was decided - 0 of 15 previously reported 'cleanest gaps' were gaps for the same reason",
"caveat_on_the_34": "computed with Q128's 14 uncommitted files on disk, which discuss the nine partners, so the figure is flattered by the beat that exposed the defect"
}- ANSWERED IN THIS ENTRY: no threshold rescues the queue - all 97 non-adjudicated absent partners are exactly (1 bait, 1 publication). The live question that replaces it: rank them by a field the instrument does not carry. A DepMap co-dependency between partner and bait would be the strongest, is computable from an API this project already uses, and would order a list that publication counting cannot.
- How saturated is the interactome of the FUSION rather than of its six parent baits? KMT2A::AFF1 resolves to no gene symbol and its rows sit in the 116 unresolved row-sides. The number this entry reports cannot answer the PI's question as literally posed.
- What is RL3_RL3L_HUMAN? It sits in the denominator as an absent KMT2A partner and is not a gene symbol. Referred to Q128 for identification.
- Is OGT's absence a real gap? It is one publication and one bait by this instrument, but O-GlcNAc transferase on the MLL complex is not an obscure claim, which suggests the instrument's evidence count understates it and that IntAct curation depth, not biology, is setting the rank.
- E1established confidence 5 of 5: Multiple independent lines of evidence; treated as settled in the field.analysis
Against IntAct's curated interactors of KMT2A, MEN1, PSIP1, AFF4, DOT1L and AFF1 (651-row scale, 217 distinct human partners in the union), 103 partners have their own entry (47.5%), 9 are mentioned without an entry, and 105 are absent entirely. Per bait the own-entry counts are KMT2A 49/101, PSIP1 15/28, AFF4 38/69, MEN1 19/30, AFF1 17/25, DOT1L 17/24. The instrument's read queue, defined as uncovered partners with >=2 publications or >=2 baits, returns zero rows. Before this cycle run.py wrote union_covered to results.json but not the absent list.
analyses/core-complex-interactome-gap/run.py and results.json, this repository; IntAct queried 2026-09-23; prior values from the same instrument recorded in docs/coverage.md and in commit e408699 (cycle 18) and 0e63236 (cycle 53) · Oncofusion knowledge graph, coordinator · internal analysis, reproducible from the repository 2026What this evidence cannot show
COVERAGE IS MEASURED BY SYMBOL MATCHING against entry ids, titles and aliases, so a partner covered under a complex-level entry rather than its own gene entry counts as uncovered - which is correct for the PI's 'one entry per thing' instruction but overstates the biological gap. 116 row-sides across 39 distinct forms do not resolve to a gene symbol and are in NEITHER numerator nor denominator, including the fusion constructs that were invisible until cycle 54; RL3_RL3L_HUMAN shows the resolver is still imperfect INSIDE the denominator. IntAct is one curation of one literature and its row counts are not independence counts - this project has already found two of its 'publications' to be BioPlex 2.0 and 3.0. The three measurements are not a clean time series: I verified the cycle-18 and cycle-53 values from git rather than re-deriving them, so they carry whatever defects the instrument had then, including the hardcoded 'generated' date fixed at cycle 53.
Evidence that argues against this (3)
- I first wrote that an empty queue might indict the threshold rather than certify the coverage, and that I had not tested an alternative - the cycle-88 error of declaring an output useless off one ranking. TESTED BEFORE SHIPPING, and the worry was wrong in a specific and more interesting way: all 97 non-adjudicated absent partners sit at EXACTLY (1 bait, 1 publication). The distribution is a single point, so no threshold and no ranking function over these two fields can order them at all. The queue is not empty because the bar is high or low; it is empty because the evidence has no variance left to rank on. What COULD still rank them is a field this instrument does not use - detection method, or publication date, or whether the partner has a DepMap co-dependency with its bait.
- Reporting 47.5% as progress invites the reading that the beat is half done, and the denominator does not support that. 217 partners is what SIX baits have in IntAct, not what KMT2A::AFF1 has in the literature - the fusion itself resolves to no gene symbol and its rows sit in the unresolved pile. A reader who wants to know how saturated the FUSION's interactome is cannot get it from this number, and this entry should not be cited as if they could.
- The instrument-defect framing is flattering to me: I found it while extracting a list for a dispatch, not by auditing the tool. Had I not needed the absent names this cycle, the discarded list would still be discarded, and the fix arrived 38 cycles after the identical fix was applied to its sibling with an explanatory comment attached. The comment was in the file the whole time and I had read that file before without noticing the asymmetry.
re-measures the same instrument at 47.5%% against its 21.2%%, and corrects the ledger line that credited that measurement to cycle 71 when it is from cycle 18
- related to →KMT2A / MLL1 — the gene that breaks
KMT2A own partner list is the worst covered bait at 49/101, across all three measurements
MEN1 is 19/30 covered and its nine absent partners are all major cancer genes, dispatched as Q128
AFF1 is 17/25 covered with only four absent partners, none adjudicated
- related to →KMT2A::AFF1 (MLL-AF4), t(4;11)(q21;q23)
the fusion itself resolves to NO gene symbol and its rows sit in the 116 unresolved row-sides, so this coverage figure cannot answer the PI question as literally posed
answers that entry's open question: the second ranking axis it proposed fails too, so the tail is unrankable by publication counting AND by co-dependency
uses the whole-node tokenisation that entry added, and splits its absent list into 62 discussed and 34 never read
both find an interactome gap figure that measured the wrong thing
the instrument flags these nine as unmentioned in the corpus; all nine are mentioned, including in this entry
a second defect in the same instrument, in the opposite direction