Oncofusion

start / graph / ana-the-construct-list-was-still-a-floor-and-the-census-that-found-the-sixth-cannot-prove-there-is-no-seventh

Analysismoderate confidence 3 of 5: One strong study, or several smaller consistent ones.

Asking IntAct for its own fusion constructs found a sixth, exposed a duplicate record that would have inflated the count by three, and failed its own control 4 of 5 - so the floor is lower, not closed

also called fusion construct census · mll_ell_fusion_protein · EBI-9513644 · IntAct findInteractor sweep

A list of laboratory-made fusion proteins in a public database had been built up by hand, and nobody knew if it was complete. Asking the database to list them instead found one more, caught a duplicate entry that would have made the data look bigger than it is, and then failed a test using the items already known - so the list is still not proven complete.

The same thing, for a scientist

The fusion-construct enumeration carried the same caveat in capitals for two cycles - **a FLOOR, not a census** - because its construct list was assembled by hand. This asks IntAct's `findInteractor` endpoint for them instead: 22 queries, **5,009 distinct interactors returned, 208 candidates** matching the construct signature (underscore-joined name AND empty `interactorXrefs`), 0 query failures. **Three results, and the third is the one that matters.** 1. **A sixth construct.** `mll_ell_fusion_protein` **EBI-9513644**, 1 interaction, and its single curated partner is **PAX5** - which had been written up two hours earlier as appearing on *two* constructs. The enumeration is now **51 rows / 6 constructs / 21 partners / 21 with an entry / 0 gaps.** 2. **A duplicate record that would have inflated the count.** `human_mll_gas7_fusion_protein` exists TWICE, as **EBI-1157918** and **EBI-11579188**, and both return the same three partners under the same interaction ac **EBI-11579418**. Adding the second naively takes the row count 50 -> 53 with zero new information, so the enumeration now deduplicates by (interaction ac, partner id) and reports the 3 dropped rows out loud. 3. **The census failed its own control.** Of the five hand-found constructs it was asked to recover, it recovered **4** - and the one it missed, EBI-1157918, is the record whose DUPLICATE it did return. So its recall is demonstrably below 100%, and by its own caveat **any absence it reports is uninterpretable.** It lowered the floor; it did not close it. **The generalisable finding is that a name-based census of a curated database measures the database's naming, not its contents** - and IntAct also holds fusion constructs for other families, including `p210 bcr-abl_human` (37 interactions), `p190 bcr-abl_human` (18), `plzf-rara_fusion_protein` and `tp53_rara_human_protein`, none of which this project has ever read.

Facts and figures
scriptanalyses/intact-fusion-construct-census/run.py
resultsanalyses/intact-fusion-construct-census/results.json
why it ranTwo cycles of the fusion-construct enumeration carried the caveat 'so 50 rows and 21 partners are a FLOOR, not a census' because the construct list was built by hand - four ids found by an agent in cycle 54, a fifth surfaced in cycle 55 by making a silent parser skip loud. A caveat that names a gap is a task.
method22 queries against IntAct's findInteractor endpoint spanning three routes to the same records: the 5' gene under both names (mll, kmt2a), the recurrent 3' partners (af4, aff1, aff4, enl, mllt1, af9, mllt3, gas7, af10, mllt10, ell, eps15, een, af1p, cbp, sept) and the words a curator would use (fusion, chimera, chimeric, construct).
recognition ruleinteractorName contains '_' AND interactorXrefs is empty. Both properties hold for all five known constructs and neither is sufficient alone. It is a heuristic about NAMING, so every candidate is printed with species, type and interaction count to be read rather than trusted.
n queries22
n query failures0
n distinct interactors returned5009
n candidate constructs208
control recovered4 of 5
control missedEBI-1157918 human_mll_gas7_fusion_protein
the sixth constructEBI-9513644 mll_ell_fusion_protein, description MLL_ELL_FUSION_PROTEIN, Homo sapiens, 1 interaction, partner PAX5 (Q02548) by anti-tag co-IP in HEK293T, physical association, interaction ac EBI-9513647, PMID 24735925.
the duplicateEBI-11579188 is a second interactor record for the construct already listed as EBI-1157918. Both return KHDRBS1, SFPQ and PRMT1 under the SAME interaction ac EBI-11579418. Counting interactor records instead of experiments would have reported 53 rows where 50 exist.
enumeration after both fixes51 rows kept, 4 dropped by the substring guard, 3 dropped as duplicate experiments, 7 construct acs resolving to 6 distinct constructs, 21 distinct partners, 21 with an entry, 0 without.
shown for fusiontrue
absence classmeasured-not-curated
absence class noteRECLASSIFIED 2026-09-23 (cycle 76). This field held free text, which `scripts/check-absence-class.py` rejects; the prose is preserved here VERBATIM and unsummarised because it is more informative than the token that replaced it. Token chosen: measured-not-curated - 'meta' was not a class. The absence this entry documents is concrete and it is a curation gap: IntAct HOLDS interaction data for p210/p190 BCR-ABL, PLZF-RARA, TP53-RARA and others, and this project has never read it. The data exists and was not curated. ORIGINAL absence_class, verbatim: «meta»
other families intact holds and this project has never read
{
  "p210 bcr-abl_human": "EBI-67152228, 37 interactions",
  "p190 bcr-abl_human": "EBI-67152236, 18 interactions",
  "plzf-rara_fusion_protein": "EBI-6620179, 1 interaction",
  "tp53_rara_human_protein": "EBI-1264950, 1 interaction",
  "brd4-nut": "EBI-8101903, 3 interactions - found independently by Q100 in the same cycle, in a different fusion family"
}
How this could bite us back
  • This entry is a completeness audit of a database query and contains no biological claim and no therapeutic claim whatsoever. Nothing here says anything about what binds a fusion oncoprotein in a patient.
  • The headline should not be read as 'the census closed the floor'. It failed its own control 4 of 5, and the script's own caveat says that a run whose recall is unproven cannot support an absence claim. The correct reading is that the floor is one construct lower and still a floor.
  • Nor should it be read as 'the instrument was badly broken'. The hand-built list was missing one construct, one row and zero partners. The duplicate record it caught is the more useful finding, because that one would have inflated a number rather than deflating it.
Still open
  1. Why does findInteractor return EBI-11579188 but not EBI-1157918 for the same construct name? If the endpoint returns one record per name, every duplicate-named construct in IntAct is invisible to a name sweep, and the census's recognition rule needs a different route entirely - an interactor-type or feature-based query, if one exists.
  2. Is there a seventh construct? This census cannot answer it and says so. The remaining routes are a full crawl of interactors with empty cross-references, or the IntAct FTP/PSI-MI dumps, which would replace a name heuristic with an exhaustive pass.
  3. IntAct holds p210 BCR-ABL with 37 interactions and p190 BCR-ABL with 18, separately curated as two isoforms of one fusion. This project just wrote up SFPQ::ABL1 versus BCR-ABL1 from the literature without touching either record. Reading them would be the cheapest available test of whether fusion-side curation is richer in kinase families than in chromatin families.
  4. Should the analogous-families beat read plzf-rara_fusion_protein, tp53_rara_human_protein and brd4-nut? Q100 found brd4-nut independently in the same cycle while working on a different fusion family, which suggests construct records are a systematic blind spot across the whole graph and not a KMT2A-specific one.
Every source behind this entry (2)
  1. E1moderate confidence 3 of 5: One strong study, or several smaller consistent ones.database

    A 22-query sweep of IntAct's findInteractor endpoint returned 5,009 distinct interactors with no query failures, of which 208 matched the fusion-construct signature (underscore-joined name and empty cross-references). Three named MLL or KMT2A and were not in the hand-built list: EBI-9513644 `mll_ell_fusion_protein` (1 interaction), EBI-11579188 `human_mll_gas7_fusion_protein` (3 interactions) and EBI-54315793 `mrna_kmt2a` (an mRNA, description KMT2A-213, not a construct). Direct interrogation of the two protein records showed EBI-9513644 to be a genuinely new sixth construct whose single partner is PAX5, and EBI-11579188 to be a duplicate interactor record for EBI-1157918: both return KHDRBS1, SFPQ and PRMT1 under the identical interaction ac EBI-11579418.

    What this evidence cannot show

    This is a NAME-based sweep and its recall is bounded by the query list and by IntAct's own labelling: a construct named without an underscore, or carrying any cross-reference, is invisible to the recognition rule, and one whose label contains none of the 22 queried tokens is invisible to the sweep. The 208 candidates are dominated by irrelevant records - yeast systematic names, mRNAs, synthetic oligos - so the rule has poor precision and was used only to produce a human-readable shortlist. Endpoint counts drift as IntAct is recurated. An earlier draft of this script returned zero for every query because of an UnboundLocalError inside the fetch helper, which is indistinguishable from a genuine zero unless per-query errors are printed; the script now marks any run with a failure as incomplete and this run had none.

    Evidence that argues against this (2)
    • The control result undercuts the sweep's headline and is reported first in the script's output for that reason. Asked to recover the five constructs already known, it recovered FOUR. The missing one, EBI-1157918, is precisely the record whose duplicate it DID return, which suggests the endpoint returns one record per name rather than all records - a failure mode that would hide any further duplicate-named construct. Recall below 100% means this census cannot support a statement of the form 'IntAct holds no other KMT2A fusion construct'; the FLOOR caveat on the enumeration must stay.
    • Finding a sixth construct sounds like progress and changed almost nothing quantitatively: one row, one partner, and that partner already had an entry. The enumeration went from 50 rows to 51 and the partner count did not move at all. The honest summary is that the hand-built list was nearly complete and that its incompleteness was in the direction of a protein already covered - which is the second time in this cycle that a discovered gap turned out to contain material the graph already had.
  2. E2moderate confidence 3 of 5: One strong study, or several smaller consistent ones.database

    The sixth construct's single partner is PAX5, and the discovery immediately falsified a claim written into gene-pax5 earlier the same cycle. PAX5 is curated against three constructs, not two - mll_af9_human_protein (interaction EBI-9513622), mll_enl_human_protein (EBI-9513632) and mll_ell_fusion_protein (EBI-9513647) - all anti-tag co-IP, physical association, HEK293T, all from PMID 24735925 under IntAct publication ac EBI-9512250. PAX5 is therefore tied with AFF1 for appearing on the most constructs of any of the 21 partners, and remains the only lineage transcription factor among the seven multi-construct partners, the other six being AFF1, CDC73, CTR9, DOT1L, LEO1 and PAF1.

    What this evidence cannot show

    Three constructs is three records from ONE publication in ONE cell line, which is a within-study consistency check and not replication. The correction this forced in gene-pax5 was twofold and the second half was a reading error of mine, not an instrument limit: E4 had stated that the PAX5 rows shared a single interaction id, EBI-9512250, and were therefore one experiment double-counted. EBI-9512250 is the PUBLICATION ac; the rows carry three distinct interaction acs. That error simultaneously understated the curation and overstated the redundancy, and it is recorded in gene-pax5's amendment log rather than silently overwritten.

    Evidence that argues against this (1)
    • PMID 24735925's title names MLL-AF4, yet the three curated constructs are AF9, ENL and ELL. Either the authors tested a construct panel of which IntAct curated three, or an AF4-construct row exists under an interactor this enumeration still has not reached. Given the census recovered only 4 of 5 known constructs, the second possibility cannot be excluded, and the absence of an AF4 row is therefore NOT evidence that the paper did not test one.
Connected to