propagation_review corpus audit (2026-08-26)
A re-review of every review.propagation_review block now in the gene reviews. The
question was not "is each biological call right" — that is the per-gene reviews' job —
but is the structured taxonomy being applied consistently, and does it agree with the
prose next to it.
Extraction and the mechanical checks: scripts/ equivalent is inlined in the audit
run; the corpus snapshot is 1843 blocks across 366 gene review files.
What the corpus looks like
| blocks | 1843 across 366 files |
| actions | ACCEPT 629 · KEEP_AS_NON_CORE 399 · MARK_AS_OVER_ANNOTATED 357 · MODIFY 237 · REMOVE 171 · NEW 28 · UNDECIDED 22 |
| root causes | NO_FAILURE_CORE 673 · NO_FAILURE_NON_CORE 389 · PROPAGATION_BAD 337 · TERM_SCOPING_PROBLEM 311 · SOURCE_BAD 40 · SOURCE_WEAK_OR_INFERRED 39 · EVIDENCE_CIRCULAR_OR_REDUNDANT 32 · UNRESOLVED 22 |
| evidence | IEA 763 · IBA 749 · ISS 233 · ISO 41 · other 57 |
Coverage note. Only 41% of blocks are on IBA rows. The taxonomy has become a
general propagation-review vocabulary covering IEA, ISS and ISO as well — which the
schema allows ("propagated or inferred annotation") but which the project page still
frames as IBA-specific. Worth reconciling in the prose.
Every value used is a legal enum member; there are no schema violations.
Finding 1 — the target's own accession marked CIRCULAR_OR_REDUNDANT (27 rows, 16 genes)
This is the one substantive defect, and it contradicts an explicitly documented rule.
CLAUDE.md and IBA_REVIEW.md
both state that a target appearing in its own WITH/FROM is correct and expected —
the target's own experimental annotation is one of the descendant evidences the PAINT
curator used to place the IBD — and that such a source must never be marked
CIRCULAR_OR_REDUNDANT.
27 rows do exactly that. The prose sometimes states the inverted reading outright, e.g.
AAK1: "The IBA includes the human target itself among its sources, so that item is
self-supporting and adds no independent propagation evidence."
The data refutes the inverted reading in all 27 cases: the target does carry its
own experimental annotation for the term, which is precisely why it seeded the IBD.
| Grounding on the target | rows |
|---|---|
| own experimental annotation at the same term (IDA/IMP/EXP/TAS) | 20 |
| own experimental annotation at a descendant term | 7 |
| no experimental annotation found | 0 |
The seven descendant cases: LMTK2 GO:0004672 → IDA GO:0004674; LMTK3 GO:0004672
→ EXP GO:0106310; AFF1 GO:0006355 → IMP GO:0032786; LNX1 GO:0005737 → IDA
GO:0005829; LPGAT1 GO:0005783 → IMP GO:0005789, GO:0012505 → the same ER
evidence, GO:0016746 → IDA/IMP GO:0071617.
An earlier version of this table said "26 of 27" with LNX1
GO:0005737ungrounded.
That was an artifact of comparing GO ids literally; under ancestry closure LNX1 is
grounded by its own IDA toGO:0005829cytosol, which ispart_ofcytoplasm.
Affected genes (all human): A4GNT, AADAC, AAK1, AASDHPPT, ADAMTSL5, AFF1, LMTK2,
LMTK3, LNX1, LPAR6, LPCAT4, LPGAT1, LPIN2, LRBA, LRCH1, LRCH3.
The corpus already contains the correct handling, which makes this a consistency
fix rather than a judgement call — ADPRS marks its self-source SUPPORTS_TRANSFER with
the comment "self-reference: the target is its own IBD seed." That is the model.
Finding 2 — the structured fields drift from the prose
Recurring pattern: review.reason is careful and correct while the enums beside it say
something weaker or different. Three confirmed instances, plus two systematic classes.
- ADPRS
GO:0071451—root_cause: SOURCE_BAD, yet all threesource_entitiesare
SUPPORTS_TRANSFER. The prose says the problem is that the term names the wrong
reactive oxygen species (superoxide vs the hydrogen peroxide actually assayed), which
isTERM_SCOPING_PROBLEM. Itsfailure_modes: [GRANULARITY_MISMATCH]is contradicted
by its own sentence "neither contains the other" — siblings are not a granularity
mismatch. - LPA
GO:0004252—failure_modes: [PSEUDO_OR_SUBACTIVITY_LOSS], but the same
review states apo(a) "retains the catalytic His-Asp-Ser triad" and argues from the
zymogen activation junction instead. Independently confirmed: the triad is intact
(see msa/RESULTS.md).
Nothing was lost from the active site. - 8
MODIFYrows carry aNO_FAILURE_*root cause (AFF1 ×2, LNX1 ×3, SERINC1/3/5).
Proposing a replacement term is a term-scoping problem by definition. - 34
NO_FAILURE_*rows carryfailure_modes, including 4WRONG_ORTHOLOG_OR_PARALOG
(ACAP3 ×2, ACTG2, ACTL7B) and 1REGULATORY_SIGN_INVERSION(AEBP2) — naming a
failure while declaring no failure. - 26
MARK_AS_OVER_ANNOTATEDrows pair withNO_FAILURE_NON_CORE(SLC25A1, CYP51A1,
NUBPL, SHMT1, NADSYN1 …). Milder: arguably these should beKEEP_AS_NON_CORE, or the
root cause should beTERM_SCOPING_PROBLEM.
The consistent direction — prose better than enums — means the enums should be treated
as a derived index over the prose, not as independent evidence. Downstream tooling
that aggregates failure_modes without reading reason will over-count
PSEUDO_OR_SUBACTIVITY_LOSS and under-count TERM_SCOPING_PROBLEM.
Checks that fired but were wrong (recorded so they are not re-raised)
Applying the project's own discipline to the audit itself:
root_causeclaiming failure while all sourcesSUPPORTS_TRANSFER(93 rows) — 92
areTERM_SCOPING_PROBLEM, where this is coherent, not contradictory: the source
genuinely supports transferring the biology and the fault is in the GO term chosen.
Separating those two axes is the point of the taxonomy. Only the ADPRS row above is a
real contradiction.ACCEPTwith a failure root cause (LMTK2GO:0070853, LRCH4GO:0034123) — this
is the taxonomy working as designed: accept the annotation, flag theWITH/FROM
citation as bad. LMTK2's catch is excellent and verified against UniProt: the source
UniProtKB:P13533is MYH6, whose recommended name is "Myosin-6" (cardiac myosin
heavy chain), not the unconventional myosin VI / MYO6 (Q9UM54) actually
assayed — a real homonym trap that the review caught and documented.
Suggested actions
Finding 1 is FIXED (issue #2761).
All 27 rows were retyped toSUPPORTS_TRANSFER, each with a comment naming the
grounding actually found on that gene, and the AAK1 prose stating the inverted
reading was corrected. Re-deriving the set with GO ancestry closure rather than
exact term matching showed all 27 are grounded, not 26 — LNX1'sGO:0005737
cytoplasm is grounded by its own IDA toGO:0005829cytosol, which ispart_of
cytoplasm. The single genuinely circular source in the corpus, AFF1's
UniProtKB-SubCell:SL-0191(derived from the entry's own ECO:0000305 SUBCELLULAR
LOCATION line), was deliberately left asCIRCULAR_OR_REDUNDANT.
- ~~Retype the 27 self-source rows to
SUPPORTS_TRANSFER~~ — done. - Retype ADPRS
GO:0071451toTERM_SCOPING_PROBLEMand dropGRANULARITY_MISMATCH. - Retype LPA
GO:0004252's failure mode away fromPSEUDO_OR_SUBACTIVITY_LOSS. - Reconcile the 8
MODIFY+NO_FAILURE_*rows. - Decide whether the project page should describe the taxonomy as covering all
propagated evidence (IEA/ISS/ISO), which is what the corpus now does.