TreeGrafter Inference Evaluation
Bottom line: TreeGrafter grafts a protein that is not in a PANTHER reference
tree onto the best-matching node and copies that node's GO terms to it as IEA
annotations (GO_REF:0000118), with no curator in the loop. We took every such
annotation in the review corpus at commit f81b9f300 (1,074 annotations on
577 reviewed proteins) and tallied how reviewers treated them, alongside the
curated PAINT/IBA set as a contrast. Reviewers accepted 43.2% of TreeGrafter
annotations as-is, removed 11.1% outright and down-graded 26.4% in all
(REMOVE, MODIFY or MARK_AS_OVER_ANNOTATED), against 73.1% accepted for
PAINT/IBA; molecular-function terms fared worst, with 41.5% down-graded. When
another pipeline reproduced the same TreeGrafter call (GO_REF:0000120)
acceptance rose to 77%, though reviewers could see that label. In about three
of four down-graded cases (four of five of those assigned a failure mode) the
tree placement was sound and the inherited term was the problem (too coarse, a
sibling term, or a generic or out-of-context term). The errors cluster by
family: 26 of the 77 PANTHER families with at least four reviewed annotations
had half or more of their terms down-graded. Two mechanical checks pick out
down-grades well: a GO term whose EC number contradicts the protein's own
UniProt EC (53 rows, 92% down-graded) and a query organism outside the clade
of the PAINT node the term came from (45 rows, 69%); see
Propagation rules and graft paths.
Much of what TreeGrafter says is right and said nowhere else: 623 rated rows
are the protein's only annotation to that term or a related one, and the
reviews kept 70% of them; where it and another pipeline give related terms and the
review keeps only one, it keeps TreeGrafter more often (see
What TreeGrafter gets right).
We did this because TreeGrafter output is routinely conflated with curated
PAINT/IBA, and knowing where automated grafting over-reaches gives PANTHER and
PAINT curators concrete families to fix. 65% of the rows come from the
Pseudomonas putida KT2440 batch, so the rates are directional, and they are
pinned to a commit because the corpus keeps growing.
Overview
TreeGrafter (Tang et al. 2019,
doi:10.1093/bioinformatics/bty625)
is the algorithm — bundled into InterProScan — that grafts a query protein
onto the most appropriate PANTHER reference phylogenetic tree and then
propagates the GO annotations attached to the grafting node down onto the query.
The critical distinction this project keeps straight is TreeGrafter vs.
PAINT/IBA, which are routinely conflated:
| PAINT / IBA | TreeGrafter | |
|---|---|---|
| Applies to | genes already in the PANTHER reference tree (well-studied "core" species) | sequences not in the reference tree — grafted on |
| Made by | curators, by hand, on the tree | fully automated propagation |
| Evidence code | IBA (Inferred from Biological aspect of Ancestor) |
IEA (Inferred from Electronic Annotation) |
| Reference | GO_REF:0000033 |
GO_REF:0000118 |
| Assigned by | GO_Central |
TreeGrafter |
WITH/FROM |
PANTHER:PTN... |
PANTHER:PTN... |
So the TreeGrafter-based inferences are the IEA / GO_REF:0000118 /
assigned-by TreeGrafter annotations — not the IBA ones. (We verified this
directly in the corpus GOA: every GO_REF:0000118 row is IEA / TreeGrafter
/ PANTHER.)
One more reference matters, and it changes what the GO_REF:0000118 set is.
GO_REF:0000120 is UniProt's "Combined Automated Annotation using Multiple
IEA Methods": per its GO reference-collection definition it "integrates
identical annotations from multiple electronic pipelines, including UniRule,
ARBA, InterPro2GO, TreeGrafter2GO (GO_REF:0000118), RHEA2GO, KeyWord2GO,
SubCellular2GO, EC2GO and EnsEMBL Compara", listing the contributing pipelines
pipe-separated in WITH/FROM. In this corpus every GO_REF:0000120 row
with a PANTHER:PTN… in WITH/FROM (979 rows in the cached GOA files at
f81b9f300; 891 at the 2026-09-06 snapshot) also lists at least one other
pipeline (InterPro in most cases), and no reviewed protein has the same term
under both GO_REF:0000118 and GO_REF:0000002 (0 shared pairs in the
summary sidecar). So the three electronic references
partition the predictions by corroboration:
| Reference | What the row means |
|---|---|
GO_REF:0000118 (TreeGrafter) |
a TreeGrafter prediction that no other pipeline reproduced |
GO_REF:0000120 with PANTHER:PTN… |
a TreeGrafter prediction corroborated by ≥1 other pipeline |
GO_REF:0000002 (InterPro2GO) |
an InterPro2GO prediction that no other pipeline (TreeGrafter included) reproduced |
The headline rates below are therefore for the uncorroborated TreeGrafter
output. The corroborated set and the uncorroborated InterPro2GO set are
evaluated alongside it in Corroboration.
This project evaluates how good those automated TreeGrafter inferences are when
each is held to standard GO review criteria, using the AIGR corpus of
agent-written gene reviews as the reference standard (see
Reference standard).
Method
Each genes/*/*/*-ai-review.yaml records, per existing annotation, an
evidence_type, an original_reference_id, and a reviewer action from the
AIGR action enum (ACCEPT, KEEP_AS_NON_CORE, MODIFY,
MARK_AS_OVER_ANNOTATED, REMOVE, UNDECIDED, …). We treat the AIGR
adjudication as the reference judgement (see
Reference standard) and ask how the annotations with
evidence_type: IEA and original_reference_id: GO_REF:0000118 (TreeGrafter)
were treated. The PAINT/IBA set (GO_REF:0000033) is reported alongside purely
as a contrast — it is a different, curator-driven pipeline, on a largely
different set of genes. Existing annotations marked retired: true (rows that
a later GOA refresh no longer contains, kept in the review for provenance) are
not live annotations and are skipped by every script.
Reproduce everything on this page (about three minutes; only graft_check.py
needs the network):
uv run --with pyyaml projects/TREEGRAFTER/analyze_treegrafter.py # review/contrast/summary
python3 projects/TREEGRAFTER/analyze_placement.py # placement + family hotspots
uv run --with pyyaml projects/TREEGRAFTER/classify_failure_modes.py # failure modes
python3 projects/TREEGRAFTER/snapshot_drift.py # drift vs the 2026-09-06 snapshot
uv run --with pyyaml projects/TREEGRAFTER/exemplar_independence.py # exemplar citation check
python3 projects/TREEGRAFTER/graft_check.py # live UniProt; or --refresh-actions offline
python3 projects/TREEGRAFTER/propagation_rules.py --go-obo go-basic.obo # rule scoring (GO from purl.obolibrary.org)
uv run --with pyyaml projects/TREEGRAFTER/tg_versus_other_sources.py --go-obo go-basic.obo # TreeGrafter vs other sources
uv run --with pyyaml projects/TREEGRAFTER/tg_versus_protnlm.py --go-obo go-basic.obo # TreeGrafter vs ProtNLM2
python3 projects/TREEGRAFTER/ec_contradiction_scale.py # live UniProt + QuickGO
python3 projects/TREEGRAFTER/trace_graft_paths.py # examples: live PANTHER tree API + QuickGO
python3 projects/TREEGRAFTER/trace_graft_paths.py --all --panther-trees Tree_MSF \
--ibd-gaf IBD.gaf --paint-total PAINT_TreeGrafter_Annotations_TOTAL.txt.gz # every row, offline
analyze_treegrafter.py --out-dir DIR writes its three sidecars elsewhere, so
the numbers can be checked against a newer tree without touching the committed
files. It writes:
TREEGRAFTER/treegrafter_review.tsv— one row per reviewed TreeGrafter annotation (gene, taxon, term, aspect, action).TREEGRAFTER/treegrafter_contrast.tsv— one row per reviewed corroborated-PANTHER (GO_REF:0000120) and InterPro2GO (GO_REF:0000002) annotation on the review files that carry TreeGrafter rows.TREEGRAFTER/treegrafter_summary.tsv— action counts for all populations; a headline rates block (accept, retained,REMOVE-only,MODIFY,MARK_AS_OVER_ANNOTATED, down-graded) per population and per aspect; per-taxon breakdown; most frequently down-graded terms.
analyze_placement.py joins each annotation to its PANTHER family / subfamily
/ graft node and writes
treegrafter_family_hotspots.tsv;
classify_failure_modes.py assigns every down-graded annotation a failure
mode and writes
treegrafter_failure_modes.tsv
(see the failure-modes page).
Results (computed at commit f81b9f300, 2026-10-03)
Provenance. Every number on this page and its sub-page comes from the
sidecars regenerated on 2026-10-03 at commitf81b9f300with the
commands above (thegenes/tree was clean at that commit). The corpus keeps
growing; re-run the commands rather than trusting these figures on a later
tree, and re-curatefailure_mode_curated.tsvwhenever rows cross into or out
of the down-graded set.
5,549 review files were scanned, yielding 1,074 reviewed TreeGrafter
annotations (GO_REF:0000118) across 577 review files (557 distinct gene
symbols). No row is PENDING/NEW.
Relative to the previous refresh (2026-10-01 at 943b98815; 998 annotations /
560 files), 80 annotations were added, 4 dropped and 75 actions changed, and
the down-graded set went from 299 to 283 (66 rows left it, 50 entered,
all 50 of them newly added rows). Three events account for all of it:
- The rejection re-review is now in the
tables. All 75 changed actions are rows audited in
rereview-2026-09-24/: 54MARK_AS_OVER_ANNOTATED→KEEP_AS_NON_CORE,
7REMOVE→MARK_AS_OVER_ANNOTATED, 4MARK_AS_OVER_ANNOTATED→
ACCEPT, 3MARK_AS_OVER_ANNOTATED→MODIFY, 3REMOVE→UNDECIDED,
2REMOVE→KEEP_AS_NON_CORE, 1REMOVE→ACCEPTand 1REMOVE→
MODIFY. - The unicellular holozoan rows are now in the tables. 65 of the 80 added
rows are the holozoan case study
proteins (S. rosetta 41, Capsaspora 19, the sponge Oscarella pearsei
5), 41 of them down-graded; the other 15 are new P. putida pyrimidine
rows (pyrB–pyrF,pyrC',carB; 9 down-graded). - Retired and merged rows are gone. The 4 dropped rows are the three
viral rows that main's GOA refresh markedretired: true(9CAUD/g022
GO:0006302,REMOVE;9CAUD/dfrPGO:0046452ACCEPTandGO:0046655
KEEP_AS_NON_CORE; see the 2026-09-28 note) and the duplicate
PSEPK/aroQfolder merged intoaroQ-III(itsGO:0019631row survives
underaroQ-III). The previous refresh still counted the three retired rows;
the scripts now skipretired: true.
Drift since the 2026-09-06 snapshot
An earlier version of this page was frozen at a 2026-09-06 snapshot (898
annotations / 510 files, on main at e3350f43d).
snapshot_drift.py diffs the two
(treegrafter_snapshot_drift.tsv):
| count | |
|---|---|
| annotations added (PSEPK 76, SALRS 41, HETGA 29, CAPO3 19, OSCPE 5, 9AVES 4, XENLA 2, CAUVC, HELPJ, SHIFL and YEREN 1 each) | 180 |
| annotations dropped (three retired viral rows, one merged duplicate folder) | 4 |
| actions changed on already-counted annotations | 131 |
down-graded (REMOVE+MODIFY+OVER) set |
306 → 283 |
| … rows that left the down-graded set | 98 (57 → KEEP_AS_NON_CORE, 23 → ACCEPT, 16 → UNDECIDED, 2 dropped) |
| … rows that entered it | 75 (73 newly added, 2 changed: PSEPK pgm) |
Most of the drift comes from two audits: the 2026-09-20 full-gene
re-review recorded in TREEGRAFTER/rereview-2026-09-20/
(below), plus the follow-up reviews of its awaiting genes, and the
2026-09-24 rejection re-review. Of the
131 changed actions, 57 are on genes in the 2026-09-20 folder and 71 on rows
audited on 2026-09-24 (the other three are IRE1 GO:0051082, fabF
GO:0005829 and fruA GO:0090563); of the 98 rows that left the
down-graded set, 37 are on 2026-09-20 genes and 61 on 2026-09-24 rows. The
most common transitions are MARK_AS_OVER_ANNOTATED → KEEP_AS_NON_CORE
(53 rows), REMOVE → MARK_AS_OVER_ANNOTATED (14),
MARK_AS_OVER_ANNOTATED → ACCEPT (11), REMOVE → UNDECIDED (10) and
MODIFY → ACCEPT (10). fogD illustrates the 2026-09-20 path: the re-review moved its six
REMOVE rows to UNDECIDED rather than reject on pathway context alone, and
the later follow-up review settled them as MODIFY / MARK_AS_OVER_ANNOTATED
(four rows) and KEEP_AS_NON_CORE (two), so in the snapshot diff those four
stay down-graded.
Headline
| Reviewer action | TreeGrafter (IEA) | PAINT/IBA (corpus-wide contrast; different genes) | ||
|---|---|---|---|---|
ACCEPT |
464 | 43.2% | 9,714 | 73.1% |
KEEP_AS_NON_CORE |
277 | 25.8% | 2,102 | 15.8% |
MODIFY |
78 | 7.3% | 530 | 4.0% |
REMOVE |
119 | 11.1% | 280 | 2.1% |
MARK_AS_OVER_ANNOTATED |
86 | 8.0% | 377 | 2.8% |
UNDECIDED |
50 | 4.7% | 252 | 1.9% |
NEW / PENDING |
0 | 0% | 32 | 0.2% |
| n (review files) | 1,074 (577) | 13,287 (3,394) |
Three rates, reported side by side because they answer different questions
(all from the headline rates block of the summary sidecar):
| Rate | Definition | TreeGrafter | PAINT/IBA (corpus-wide) |
|---|---|---|---|
| accepted | ACCEPT |
43.2% | 73.1% |
| retained | ACCEPT + KEEP_AS_NON_CORE + MARK_AS_OVER_ANNOTATED — the term stays, possibly flagged |
77.0% | 91.8% |
| rejected | REMOVE only |
11.1% | 2.1% |
| down-graded | REMOVE + MODIFY + MARK_AS_OVER_ANNOTATED |
26.4% | 8.9% |
MARK_AS_OVER_ANNOTATED sits in both retained and down-graded on
purpose: the term is not wrong, but it is flagged as over-reaching. Read
together: roughly one TreeGrafter inference in ten is judged wrong outright,
about three in four survive in some form, and fewer than half are accepted
as-is. The accept rate was 41.0% at an earlier 415-annotation snapshot,
41.3% at the 2026-09-06 snapshot, 45.1% at the 2026-09-27 refresh and 44.6%
at the 2026-10-01 refresh; the rise since the snapshot is mostly the
2026-09-20 re-review above, not new data. The fall to 43.2% since 2026-10-01
is the 80 added rows (15 accepted, 50 down-graded), mostly holozoan. The
rejection re-review barely moves the accept rate (5 rows to ACCEPT); what it
moves is the split between MARK_AS_OVER_ANNOTATED (11.5% → 8.0%) and
KEEP_AS_NON_CORE (21.0% → 25.8%), so the down-graded rate falls (30.0% →
26.4%) while the retained rate is almost unchanged (77.2% → 77.0%).
The PAINT/IBA column is not a like-for-like comparison. It is every IBA row
in the corpus (3,394 review files, dominated by human and model-organism
genes), while TreeGrafter by construction annotates sequences that are not
in the PANTHER reference tree — so the two populations barely share genes.
Restricted to the same 577 review files, there are only 20 IBA rows on 9
files (16 ACCEPT, 3 KEEP_AS_NON_CORE, 1 UNDECIDED): too few to say
anything. The contrast shows that curated IBA on well-studied genes fares
better than automated grafting on non-model genes; it does not isolate the
effect of the pipeline from the effect of the gene set. The
corroboration contrast
below, which is on the same files, is the better-controlled comparison.
By GO aspect
Molecular-function propagations are the worst category by a wide margin (one
in five MF rows is removed outright); CC terms are rarely wrong but are
often parked as non-core.
| Aspect | n | ACCEPT |
KEEP_AS_NON_CORE |
REMOVE |
down-graded (REMOVE+MODIFY+OVER) |
retained |
|---|---|---|---|---|---|---|
| Molecular function | 282 | 32.3% | 20.6% | 19.9% | 41.5% | 59.2% |
| Biological process | 398 | 43.5% | 18.1% | 11.1% | 32.7% | 75.6% |
| Cellular component | 394 | 50.8% | 37.3% | 4.8% | 9.1% | 91.1% |
Corroboration: TreeGrafter-only vs multi-method vs InterPro2GO-only
Each population below is restricted to the 577 review files that carry
TreeGrafter rows, but covers only the subset of those files that carry it
(412 and 407 files respectively), so the three are close to — not exactly —
the same proteins:
| Population | n (files) | ACCEPT |
KEEP_AS_NON_CORE |
REMOVE |
down-graded | retained |
|---|---|---|---|---|---|---|
TreeGrafter, uncorroborated (GO_REF:0000118) |
1,074 (577) | 43% | 26% | 11.1% | 26% | 77% |
TreeGrafter corroborated by ≥1 other pipeline (GO_REF:0000120, PANTHER:PTN…) |
709 (412) | 77% | 9% | 0.8% | 12% | 92% |
InterPro2GO, uncorroborated (GO_REF:0000002) |
834 (407) | 29% | 19% | 6.5% | 51% | 79% |
Three things follow:
-
Corroboration is the strongest single predictor of a good TreeGrafter
call. The same algorithm's output is accepted 77% of the time when another
pipeline reproduces it and 43% when none does. UniProt'sGO_REF:0000120
merge is, in effect, already a QC gate, and theGO_REF:0000118residue is
the part that failed it.Caveat — the reviewers were not blind to the label.
original_reference_idis visible in the review YAML while the annotation
is being adjudicated, and "combined multiple IEA methods"
(GO_REF:0000120) reads as visibly stronger provenance than a lone
GO_REF:0000118. So the 77%-vs-43% gap may be partly caused by the label
rather than only predicted by it. The direction of the effect is very
likely real — corroboration by an independent pipeline is genuine evidence
— but the magnitude should not be taken at face value from this corpus;
treat it as an upper bound until the provenance-blinded test in Next steps
is run. -
Uncorroborated InterPro2GO is down-graded more often than uncorroborated
TreeGrafter — 51% (54% for MF) — but mostly byMARK_AS_OVER_ANNOTATED
(32%); itsREMOVErate (6.5%) is lower than TreeGrafter's (11.1%), and
its retained rate is similar (79% vs 77%). Its down-graded terms are
dominated by coarse ancestors —catalytic activity(45),membrane(24),
oxidoreductase activity(21),nucleotide binding(15). So InterPro2GO's
uncorroborated residue is mostly uninformative, while TreeGrafter's is
more often wrong. This qualifies the graft-check hypothesis on the
failure-modes page: InterPro does out-resolve PANTHER for particular
proteins (AprA, S-crystallin, Mcr1), but the informative InterPro2GO calls
have mostly already been merged intoGO_REF:0000120. - Taxon composition. TreeGrafter's down-grade rate is now lower on the
P. putida KT2440 rows (21.9%, 154/703) than elsewhere (34.8%, 129/371);
it was 29.3% vs 31.4% at the 2026-10-01 refresh and 31% vs 42% at the
2026-09-06 snapshot. The gap reopened for two reasons: 56 of the 66 rows
that the rejection re-review moved out of the down-graded set since
2026-10-01 are P. putida rows, and the holozoan rows added outside
P. putida are mostly down-graded (41 of 65).
InterPro2GO is down-graded 56.6% on P. putida and 35.3% elsewhere (the
P. putida reviews were strict about generic MF terms). Computed from the
PSEPKreview files in the review and contrast sidecars.
Where TreeGrafter inferences fail
Deep dive: Failure Modes & Tree Placement
joins every down-graded annotation to the PANTHER family/subfamily it was
grafted onto (and the ancestralPTNgraft node), and assigns each one a
failure mode. Short answer: in about three cases out of four (four of five
of those assigned a mode) the placement is fine and the inherited term is the
problem — too coarse or a sibling term from the family node (47%), or a
generic / out-of-context localization or process (25%). About one in seven
(42 annotations on 29 proteins, e.g.aprA,fcs,mdh,mqo1–3,dapE,
and CapsasporacoWts) is a mis-placement, genuine pseudo-enzymes are
rare (5 annotations, 3 proteins), and 12% are left unclassified (about half
of them the choanoflagellate cadherin over-annotations).
| Failure mode | annotations | share | proteins |
|---|---|---|---|
| 1 Granularity — right subfamily, family/node-level or sibling term | 133 | 47% | 107 |
| 3 Generic / out-of-context CC, binding or process term (informativeness policy) | 70 | 25% | 55 |
| 4 Mis-placement (within a superfamily, or onto the wrong family) | 42 | 15% | 29 |
| 0 Unclassified — heuristic declines to guess (curation queue) | 33 | 12% | 18 |
| 2 Pseudo-enzyme / co-opted fold | 5 | 2% | 3 |
| total down-graded | 283 |
Mode 3 is not a grafting error. It records a reviewer informativeness
policy — generic CC terms (cytosol, cytoplasm, membrane), uninformative
binding terms and out-of-context process terms are down-graded because the
review standard prefers specific, core terms, not because the graft landed in
the wrong place or the term is false. 33 of the 70 are cellular-component rows
assigned by aspect alone (34 CC rows in all); the rejection re-review already
moved most redundant cytosol/cytoplasm rows to KEEP_AS_NON_CORE, which
is why mode 3 fell from 93 rows to 70. Mode 3 also now holds host-context
calls on the holozoan proteins (adherens-junction and junction-assembly
processes on choanoflagellate cadherins, regulation of organ growth on
S. rosetta warts, cell fate specification on Capsaspora CoBra,
mannan biosynthesis on couscous). A different review policy would move many
of the CC rows into retained; read the mode-1/2/4 counts (180 annotations,
64% of the down-grades) as the grafting-attributable part.
The five rotary-ATPase rows (fliI ×3, sctN ×2, GO:0046933) are filed as
mode 1 by the operational rule on the sub-page (correct export-ATPase
subfamily, wrong term from a node above it); the
case study traces that term to a PAINT
IBD placed on a duplication node.
Protein counts are distinct review files, not gene symbols — 577 files
carry only 557 symbols (mdh, ALB, dapF and others span more than one
file), so a symbol-keyed count reads mode 4 as 28 (the two mdh proteins
merge) and mode 1 as 104.
The TreeGrafter terms most often down-graded cluster in two patterns:
-
Over-specific catalytic activity propagated to the wrong paralog/subfamily.
The grafting node carries a precise enzymatic MF that the query has diverged
away from:proton-transporting ATP synthase activity, rotational mechanism
(GO:0046933, 5; the rotary-ATPase case),
fatty acid synthase activity(GO:0004312, 4),
phosphotransferase activity, phosphate group as acceptor(GO:0016776, 4),
carotenoid dioxygenase activity(GO:0010436, 4),
NADH dehydrogenase activity(GO:0003954, 3; it was 6 before the
rejection re-review kept three of the complex I rows as non-core),
spermidine synthase activity(GO:0004766, 3),
(S)-2-hydroxyglutarate dehydrogenase activity(GO:0047545, 3).
TreeGrafter places a sequence on a tree node but cannot tell that the
catalytic residues, or the whole substrate specificity, have changed.
(triacylglycerol lipase activityonfogDwas re-reviewed to
UNDECIDEDon 2026-09-20 — the re-review found that the family source Ayr1
does have lipase activity — and the later follow-up review marked it
MARK_AS_OVER_ANNOTATED: the source activity is real, but FogD sits in a
distinct subfamily with no hydrolase assay.) -
Generic / uninformative localization. Before the rejection re-review,
cytosol(GO:0005829, 18 rows) andcytoplasm(GO:0005737, 9) were the
two most frequently down-graded TreeGrafter terms. The re-review judged
most of them true but redundant and moved them toKEEP_AS_NON_CORE, so
only 2 of each remain down-graded; the generic CC terms now most often
down-graded aremembrane(GO:0016020, 4),plasma membrane(3) and
nucleus(3). The MF analogue,identical protein binding(GO:0042802),
is down to 1 row. -
Animal-only terms on unicellular holozoans. Each of the three
S. rosetta cadherins carries the same ten down-graded rows from one
graft node (PTN000616280, PTHR24027:SF422), soadherens junction,
catenin complex,beta-catenin binding,cell-cell junction assembly,
cell morphogenesis,calcium-dependent cell-cell adhesionand others
each appear three times (see the
case study).
There are also process-level mis-propagations of two kinds: a mechanistically
wrong sibling process (lipopolysaccharide core region biosynthetic process
on the mcr phosphoethanolamine transferases, which modify lipid A, not the
core oligosaccharide), and pathway terms propagated onto hosts that lack the
pathway (sucrose biosynthetic process on P. putida fbp).
Family hotspots (upstream targets)
treegrafter_family_hotspots.tsv
aggregates the reviewer outcome over all 1,074 TreeGrafter annotations per
PANTHER family, subfamily and graft node. Of the 77 families with at least
four reviewed annotations, 26 have half or more of their propagated terms
down-graded and 27 have none — the errors are concentrated, not diffuse.
Families with ≥60% down-graded (modes counted from
treegrafter_failure_modes.tsv):
| Family | n | proteins | down-graded | modes of the down-graded rows | Example genes |
|---|---|---|---|---|---|
| PTHR24027 cadherin-23 | 30 | 3 | 100% | 0 ×15, 3 ×12, 1 ×3 — choanoflagellate cadherins on a node PAINT restricts to Bilateria (case study) | PTSG_05882, PTSG_06458, PTSG_11235 |
| PTHR10543 beta-carotene dioxygenase | 8 | 4 | 100% | 4 ×8 — stilbene dioxygenases on the carotenoid-cleavage subfamily | Q53353, Saro_0802, Saro_2809, lsdB |
| PTHR30443 "inner membrane protein" (EptA) | 8 | 4 | 100% | 1 ×8 — EptA node carries LPS core and phosphotransferase |
mcr-1, mcr2, mcr-3, mcr-4 |
| PTHR15184 ATP synthase | 5 | 5 | 100% | 1 ×5 — F-type ATP-synthase term on FliI/SctN export ATPases (case study) | fliI ×3, sctN ×2 |
| PTHR43128 L-2-hydroxycarboxylate DH | 4 | 2 | 100% | 4 ×4 — MDH on the L-LDH subfamily | METEA/mdh, PSEPK/mdh |
| PTHR43775 fatty acid synthase | 4 | 4 | 100% | 1 ×4 — family-level FAS term on PKS subfamilies | eryAI–III, Pks1 |
| PTHR43808 acetylornithine deacetylase (M20A) | 5 | 3 | 80% | 4 ×4 | dapE, pepV |
| PTHR11485 transferrin | 4 | 1 | 75% | 3 ×3 — mammalian receptor-recycling localizations on salivary draculin | K9IMD0 |
| PTHR42995 acetyl-CoA carboxylase carboxyl transferase | 4 | 2 | 75% | 1 ×3 | mdcD |
| PTHR43137 dihydroorotase | 4 | 1 | 75% | 1 ×2, 3 ×1 — broad pyrimidine-process parents and cytoplasm beside the retained specific terms |
pyrC |
| PTHR11558 spermidine synthase | 9 | 3 | 67% | 1 ×6 — spermidine terms on the PMT subfamily | NaPMT3, PMT1, PMT2 |
| PTHR24241 neuropeptide receptor-related GPCR | 6 | 3 | 67% | 1 ×4 (heuristic) | CTR1, CTR2, OPR |
| PTHR44169 1-acyl-DHAP reductase (Ayr1) | 6 | 1 | 67% | 1 ×4 — Ayr1 lipid terms on the SrdE secondary-metabolite subfamily | fogD |
| PTHR21047 dTDP-sugar epimerase | 10 | 3 | 60% | 1 ×6 | eryBVII, rfbC, rmlC |
| PTHR22960 molybdopterin cofactor synthesis | 5 | 3 | 60% | 1 ×3 | PP_1969, PP_2482, moaA |
| PTHR24356 serine/threonine-protein kinase (LATS node) | 5 | 1 | 60% | 0 ×2, 3 ×1 — animal-tissue IBDs from the LATS node on S. rosetta Warts | warts |
| PTHR45527 nonribosomal peptide synthetase | 5 | 1 | 60% | 4 ×3 — EntF terms on the PvdD NRPS | pvdD |
Relative to the 2026-09-06 snapshot, three families are no longer
hotspots: PTHR48078 (ilvA-I/ilvA-II, 6/6 → 0/6 down-graded) after the
2026-09-20 re-review; PTHR11556 (FBPase, 7/11 → 1/11) and PTHR11632 (SDH
flavoprotein, 71% → 3/7 = 43%, aprA electron-transfer and plasma-membrane
rows now ACCEPT). PTHR44169 (fogD) went 6/6 → 0/6 at the 2026-09-20
re-review and is back at 4/6 after the follow-up review. Since the
2026-10-01 refresh, the rejection re-review took PTHR11271 (guaD/hutF,
3/5 → 1/5) and PTHR30435 (flgE/flgG, 3/4 → 1/4) off the table and moved
PTHR42995 from 4/4 to 3/4 (accD GO:0009329 restored); PTHR21272
(aroQ-III, aroQ1, aroQ2, 3/3) drops below the four-annotation
threshold now that the duplicate aroQ folder is merged. PTHR24027 and
PTHR24356 (holozoan rows) and PTHR43137 (pyrC) are new to the table.
Re-review of 2026-09-20
TREEGRAFTER/rereview-2026-09-20/
holds the audit records of a full-gene re-review of 29 genes carrying
TreeGrafter rows (28 of them in the current TreeGrafter set), done by agent
reviewers (three of the seven records name Codex; the others name no
reviewer), which re-examined every annotation on each gene (not only the
GO_REF:0000118 rows) and wrote the new actions into the gene review YAMLs:
| Record | Genes | Status |
|---|---|---|
exemplars.yaml, exemplars-2.yaml |
the ten OpenScientist/Falcon exemplars plus NCGR_LOCUS1270 |
all reviewed |
fogd.yaml |
fogD |
awaiting_adjudication |
metabolic-scope.yaml |
PP_3394; alg8, purM, ilvA-I, ilvA-II |
1 awaiting; 4 reviewed |
enzyme-substrate-transfer.yaml |
K9IJK6, mdr; ydiJ, PoMZ_10221 |
2 awaiting; 2 reviewed |
substrate-and-lineage.yaml |
Cgas, K9IFT7, K9IMD0, pvdD; moeB, mdcD |
4 awaiting; 2 reviewed |
fusion-and-toll-scope.yaml |
NCGR_LOCUS10166, TOLL9 |
both awaiting |
In total 19 genes are reviewed and 10 are awaiting_adjudication in
these records. The awaiting genes' new actions are already in the YAMLs and
therefore in every table above: of the 37 rows on these genes that left the
down-graded set since the 2026-09-06 snapshot, 13 (5 now UNDECIDED, 5
ACCEPT, 3 KEEP_AS_NON_CORE) are on awaiting genes, so those rows are
provisional until a curator adjudicates. Five of the awaiting genes
(fogD, K9IJK6, K9IMD0, K9IFT7, Cgas), and IRE1, have since had
follow-up reviews of focused OpenScientist reports, which changed 16
TreeGrafter actions (see the 2026-10-01 note); the re-review records
themselves were not updated. The
cache-reports/ subfolder preserves six OpenScientist reports reused as
evidence in that pass (see its README; they are evidence inputs, not accepted
conclusions).
Reference standard
- What the reference is. Every rate on this page measures agreement with
the AIGR agent review of each gene, written under the repository's curation
guidelines and fixed at the pinned commit (f81b9f300) before scoring.
There is no separately human-rated subset, so agreement with expert
curators is not quoted. - Label visibility. Reviewers saw
original_reference_id(and hence
whether a row was TreeGrafter, corroborated or InterPro2GO) while deciding.
This affects the corroboration contrast (see the caveat there) and possibly
the TreeGrafter-vs-IBA contrast. - Agent reports among the cited evidence. 200 of the 1,074 reviewed
TreeGrafter annotations (61 of the 283 down-graded) cite an OpenScientist or
Falcon file (blinded hypothesis report or Falcon deep research) in their
review.supported_by, alongside the literature
(exemplar_independence.py). - The ten blinded exemplars. The ten OpenScientist/Falcon exemplars on the
failure-modes page
were drawn only from rows that were already down-graded, with no
accepted-annotation controls, and n = 10, so no claim about the check's
reliability (sensitivity, specificity or false-positive rate) can be made.
Their blinded verdicts can be compared fairly with the review actions
recorded when each exemplar was selected (aprAREMOVE,fcsMODIFY,
OCTS1MARK_AS_OVER_ANNOTATED,eryAIIIMODIFY,mcr-1MODIFY,
NaPMT3REMOVE,ADAR2REMOVE,NaUGT1REMOVE,aceKMODIFY,
ahpCMODIFY), but not with the current actions: some of those reviews
were later revised with the reports in hand (aceK→ACCEPT,NaUGT1→
UNDECIDED), and 9 of the 10 exemplar annotations now cite the report
(exemplar_independence.tsv). - Drift. The reference is revised over time (131 TreeGrafter actions
changed since the 2026-09-06 snapshot, 75 of them since the 2026-10-01
refresh), which is why results are pinned to
a commit.
Caveats
- Corpus composition. 65% of the TreeGrafter rows (703 of 1,074, under two
taxon labels for KT2440) come from Pseudomonas putida KT2440, so the rates
are largely a P. putida result. The 95% Wald interval on the 43.2% accept
rate is roughly ±3 pp, but the taxon skew and reference drift matter more
than the sampling error. Directional, not a frozen benchmark. - The reference standard is the AIGR agent review corpus at the pinned
commit, which is revised over time (see
Reference standard). KEEP_AS_NON_COREis not an error — the inference is correct but
peripheral. Accept + non-core is 69.0% for TreeGrafter vs 88.9% for
corpus-wide IBA; addingMARK_AS_OVER_ANNOTATEDgives the retained rates
in the headline table.- 50 TreeGrafter rows (4.7%) are
UNDECIDED, 8 of them on genes still
awaiting_adjudicationin the 2026-09-20 re-review records.
Rejection re-review (2026-09-24)
The rejection rate is only meaningful if the rejections themselves hold up, so
every TreeGrafter row then marked REMOVE or MARK_AS_OVER_ANNOTATED was
re-examined against a fixed rule set: REMOVE requires positive contrary
evidence, broad-but-true terms are not over-annotations, a too-coarse ancestor
is MODIFY rather than REMOVE, and every term definition is checked in
QuickGO. A term that is true but is a redundant ancestor of a carried term, or
a redundant generic compartment, is KEEP_AS_NON_CORE rather than ACCEPT:
the enum reserves ACCEPT for terms "representing the core function of the
gene", so restoring a bare ancestor as core would assert something the evidence
does not. Rules, per-batch records and a generated summary are in
TREEGRAFTER/rereview-2026-09-24/.
The nine genes already re-audited on 2026-09-20 were left as recorded there.
192 rejected rows across 166 gene entries — 165 proteins, since one protein
had two review folders that this audit merged — of which 117 (61%) stand and
75 (39%) were relaxed —
56 to KEEP_AS_NON_CORE, 7 REMOVE → MARK_AS_OVER_ANNOTATED, 5 to ACCEPT,
4 to MODIFY, 3 REMOVE → UNDECIDED. Only five rows are restored as core
functions, each one a term the protein itself performs: the MurJ flippase
reaction (GO:0034204), the AccA/AccD carboxyltransferase complex
(GO:0009329), bis-MGD biosynthesis on MobA (GO:1902758), and the two
lymphotoxin-alpha signalling processes on K9IWR0.
This is the largest change to the down-graded population since the
2026-09-06 snapshot, and since the 2026-10-03 refresh it is in every table on
this page and in the failure-mode classification. Every audited row that is
still live has the same action in treegrafter_review.tsv as in its batch
record (190 of 192; the other two are the retired g022 row and the row on
the duplicate aroQ folder that was merged into aroQ-III), and 126 of them
remain down-graded. Against the 2026-10-01 tables it moved 66 rows out of the
down-graded set and none into it. The relaxations say more about the
first-pass reviews than about TreeGrafter, and they cut unevenly across the
four failure modes:
- Redundant locations (34 rows).
cytosol/cytoplasmon soluble bacterial
enzymes had been down-graded purely because a sibling location row existed. A
broad true term is not an error, but a redundant compartment is not a core
function either, so these areKEEP_AS_NON_CORE. Mode 3 (generic/context)
is therefore the mode that shrinks most: 40 of the 66 rows that left the
down-graded set at the 2026-10-03 refresh were mode 3, and it went from 93
rows (31%) to 70 (25%) even after the holozoan host-context rows were
added. It is a real failure
only where the location is incompatible with the protein — secreted
cystatincpi-2, exported flagellar hookflgE, periplasmicalr— and
those rejections stand. - True ancestors of a carried specific term (~20 rows).
oxidoreductase activityonbetA,glycosyltransferase activityonmurG,protein transportonsecD/secF,deaminase activityonguaD; each verified by
QuickGO ancestry and kept as non-core. The six complex I subunits carrying
NADH dehydrogenase activityare a granularity case the classification
does not separate out — a whole-complex activity on a single subunit that
lacks the NADH site; the three still down-graded (nuoE/nuoH/nuoI) are
curated as mode 3. OnnuoE/nuoH/nuoI, where GOA carries
noGO:0008137row, that becomesMODIFY→GO:0008137with
contributes_to; onnuoG/nuoL/nuoM, which already carry a separate
GO:0008137row taking the same qualifier correction, proposing it again
would be redundancy, so the ancestor is kept as non-core instead. - Rejections resting only on "no target-specific assay" (~12 rows). Absence
of a target experiment does not refute a supported phylogenetic inference;
these becameMARK_AS_OVER_ANNOTATED, orUNDECIDEDin the three cases where
the substrate itself is genuinely unknown (ptxD×2,retS). - Label read instead of definition (1 row, but instructive).
GO:0009329 "acetate CoA-transferase complex"on PSEPKaccDwas removed as a different
enzyme; the term's definition is the AccA/AccD carboxyltransferase
component of acetyl-CoA carboxylase, so the propagation was more specific
than the term the gene already carried. The term's label and itscapable_of
axiom toGO:0008775contradict its own definition — worth raising with GO.
Confirmed against the live QuickGO ontology API on 2026-10-02 rather than only
against the cached label: the definition returns verbatim (xrefs
PMID:2719476,PMID:8423010),GO:0009317is a current ancestry relation,
GO:0032283(the plastidaccDsubcomplex) is still the sole child, and the
capable_of GO:0008775relation is present with a 2015-06-18 addition date.
The term is not obsolete and its aspect iscellular_component, so the
mismatch really is label-and-axiom versus definition.
What survives scrutiny almost intact is mode 4, the paralog /
wrong-subfamily catalytic transfer (only the two ptxD rows left it, as
UNDECIDED): spermidine synthase on the PMT methyltransferases,
carotenoid dioxygenase on the lignostilbene dioxygenases, LDH on malate
dehydrogenases, cysteine synthase vs. O-acetylhomoserine sulfhydrylase. The
hotspot list is built on exactly these, so it is the part of the analysis the
re-review leaves standing — and the right input to the upstream tickets.
About a third of the 117 retained rejections had their reason strengthened
with the specific evidence (EC numbers, PANTHER subfamily vs. graft node,
cached substrate-panel quotes) rather than left on family-level doubt.
Deeper analyses
- Failure Modes & Tree Placement — joins all
283 down-graded annotations to their PANTHER graft point, plus a lightweight
PANTHER-vs-InterPro graft check on ten
exemplars. Key result: the placement is usually sound; the error is the GO term
attached to the graft node, and InterPro sometimes resolves the protein better
than PANTHER (e.g.IPR011803 AprA,IPR003083 S-crystallin). - ATP-synthase terms on flagellar/T3SS export ATPases — now its own
project, Conserved-function recovery, where
it is the first case. A case of inherited PAINT over-placement. TheGO:0046933/
GO:0045259IBD sits on the duplication nodePTN008558586in PTHR15184, above
both the F1-β and the FliI/SctN clades. PAINT IBA and TreeGrafter then label
nearly every FliI/SctN protein an ATP synthase, and InterPro2GO (IPR013380,
IPR004100) andGO_REF:0000108add further wrong rows. Nine full reviews
(FliI in Caulobacter, H. pylori, P. putida, E. coli and Salmonella;
SctN in Salmonella ×2, Yersinia and Shigella) remove 31 of the 35 affected
rows and mark the other 4 as over-annotations. The five TreeGrafter rows of
this case (fliI×3,sctN×2) are in the tables, allREMOVE. - Unicellular holozoans: Hippo pathway case study
— TreeGrafter on choanoflagellate, Capsaspora and sponge proteins, which
have no IBA rows because none of them is a PANTHER reference genome. The
commonest failure is grafting onto animal-only nodes: - choanoflagellate cadherins onto a Bilateria node;
- Capsaspora integrin betas onto the vertebrate ITGBL1 node;
- Capsaspora T-box factors onto an all-animal node carrying "cell fate
specification".
There are also two cross-family mis-placements: Capsaspora Warts with the
citron/ROCK kinases, and the S. rosetta yorkie candidate with the MAGI
family. One correct graft still inherits animal-tissue IBDs from LATS node
PTN002390470, including regulation of organ growth on a unicellular
organism. Since the 2026-10-03 refresh its 65 TreeGrafter rows
(S. rosetta 41, Capsaspora 19, Oscarella 5; 41 down-graded) are in
every table on this page. The row-level classifier files the down-graded
ones as mode 3 (16, host context and CC), mode 0 (17: the cadherin
over-annotations the reviews call untested rather than impossible, and two
warts rows), mode 1 (5) and mode 4 (3: coWts ×2, coITGB2 cell-cell
adhesion). The case study reads the cadherin set as a whole as a
taxon-blind graft ("4-like"); row by row, only host-context reasons are
stated explicitly enough to classify.
- Corpus-wide provenance (side query, 2026-10-11). A GO-DB analysis of
PomBase's contribution to TreeGrafter
(brief; the build
scripts are not in this repo) walks every TreeGrafter graft node in
goa_uniprot_all up the PANTHER 19 trees to the nearest same-term IBD. Of
166.8M TreeGrafter annotations, 90.1% trace to a same-term IBA on an
ancestor, usually several steps above the graft: only 4.9M come from an IBD
on the graft node itself. The other 9.9% have no same-term IBA on their
path. For 3.0M of these an ancestor now carries an IBA to a more specific
term, consistent with PAINT refining the IBD after the TreeGrafter run
(dated 2026-07-27) while TreeGrafter still emits the coarser parent. Example:
PTHR28283 root PTN002001416 now has GO:0110034, but 2,350 TreeGrafter
rows still carry the parent GO:1902660 (negative regulation of glucose
mediated signaling pathway), including on bacterial proteins. This
run-lag is a second source of the "too coarse" and out-of-context inherited
terms counted above, separate from IBD placement. It is not measured in
this corpus.
- OpenScientist blinded verification uses a dedicated TreeGrafter prompt
template,
templates/treegrafter_function_hypothesis.md,
which frames each propagated term as a blinded "GENE has
and instructs the agent to actively test the failure modes
(granularity, pseudo-enzyme, mis-placement). Run via
gene-hypothesis-research openscientist <org> <gene> --annotation-term-id <GO>
--as-function-hypothesis --template templates/treegrafter_function_hypothesis.md.
See Reference standard for how the ten existing
runs can be compared with the reviews (against the actions recorded at
selection, not the current ones).
What TreeGrafter gets right
Added 2026-10-14.
tg_versus_other_sources.py sets
each reviewed TreeGrafter row beside the other annotations on the same
protein, related by GO is_a/part_of (same term, ancestor, descendant, or a
sibling sharing a direct parent), and records which side the review kept
(tg_versus_other_sources.tsv,
counts in
tg_versus_other_sources_summary.tsv).
"Kept" is ACCEPT or KEEP_AS_NON_CORE; "down-graded" is REMOVE,
MODIFY, MARK_AS_OVER_ANNOTATED or TOO_GENERAL. Recomputed 2026-10-16
from the live reviews, after TOO_GENERAL was first counted as down-graded.
The only source, and kept. 623 rated TreeGrafter rows have no other
annotation on the protein, from any source, to the same term, an ancestor or
a descendant. The reviews kept 439 (70.5%): 232 of 262 CC (89%), 70 of 118 MF
(59%), 137 of 243 BP (56%). TreeGrafter overall was kept 72% of the time in
the pinned f81b9f300 snapshot (this sole-source figure is from the live
reviews, so the two are close rather than a measured gap): the statements it
alone makes are not worse than the rest. Several carry the
protein's defining activity: squid ADAR2 (double-stranded RNA adenosine
deaminase activity), naked mole-rat Cgas (2′,3′-cyclic GMP-AMP synthase
activity), P. putida relA (GTP diphosphokinase activity), hummingbird
TAS1R3 (sweet taste receptor activity), Capsaspora coYki
(transcription coactivator activity), P. putida tig (protein folding
chaperone).
More specific than another pipeline. 159 TreeGrafter rows are
descendants of an InterPro2GO term on the same protein (79 of them kept), 50
of an ARBA term (27 kept), 14 of a UniRule term (11 kept) and 141 of a
combined-IEA term (123 kept). Where the review kept one side of a related
pair and down-graded the other (distinct TreeGrafter rows):
| Other pipeline | Proteins with both | Kept TreeGrafter, down-graded other | Kept other, down-graded TreeGrafter |
|---|---|---|---|
InterPro2GO (GO_REF:0000002) |
158 | 47 | 35 |
combined IEA (GO_REF:0000120) |
192 | 33 | 29 |
ARBA (GO_REF:0000117) |
47 | 16 | 6 |
UniRule (GO_REF:0000104) |
25 | 6 | 0 |
| UniProt keyword / subcellular location | 30 | 4 | 5 |
EC2GO (GO_REF:0000003) |
4 | 0 | 1 |
Examples where TreeGrafter is the side kept:
- Deeper than InterPro2GO. Vampire bat K9J287 deoxyribonuclease I
activity (InterPro2GO: catalytic activity, DNA nuclease activity; both
MODIFY); naked mole-ratScn9asodium ion transmembrane transport
(InterPro2GO: monoatomic ion transport, sodium ion transport, transmembrane
transport); P. putidaPP_1084thioredoxin peroxidase activity
(antioxidant activity, oxidoreductase activity),hpd/hmgBL-tyrosine
catabolic process (aromatic amino acid metabolic process),glpFglycerol
transmembrane transport. - A sibling InterPro2GO term the review rejected.
ADAR2
double-stranded RNA adenosine deaminase activity (InterPro2GO adenosine
deaminase activity,MODIFY);pdxHpyridoxal 5′-phosphate biosynthetic
process (InterPro2GO pyridoxine biosynthetic process,REMOVE);paaJ
phenylacetate catabolic process (InterPro2GO 3,4-dihydroxybenzoate
catabolic process, over-annotated). - Against ARBA.
PP_2320peptidoglycan L,D-transpeptidase activity
ACCEPTagainst ARBA carboxypeptidase activityREMOVE(a GO ancestor, but
the wrong reaction: "The closely matched ErfK/LdtPae2 subfamily resolves the
YkuD reaction as lipoprotein-acceptor L,D-transpeptidation"); squidAP180
vesicle budding from membrane kept against ARBA receptor-mediated
endocytosis over-annotated;dnaQ3′-5′ exonuclease,visC
2-polyprenylphenol 6-hydroxylase anddinBerror-prone translesion
synthesis where ARBA has only exonuclease, monooxygenase or DNA metabolic
process. True TreeGrafter-versus-ARBA sibling conflicts are rare here:
three pairs across the 47 proteins that carry both.
The reverse cases exist and are listed in the same file: 35 TreeGrafter rows
down-graded where InterPro2GO's related term was kept. Most are a specific
TreeGrafter term that is wrong under a coarse InterPro2GO parent that is
still true (mdh, nspC, eryAI–III, the stilbene dioxygenases, the
PMTs, the choanoflagellate cadherins). The combined-IEA call won 13
sibling conflicts against TreeGrafter.
Against ProtNLM2
The ProtNLM2 evaluation and this project barely
overlap, for a structural reason. TreeGrafter annotates only proteins outside
PANTHER's reference genomes; reference-genome proteins get PAINT IBA rows
instead. Most ProtNLM cohorts are reference genomes: the 44 reviewed horse
genes carry 39 IBA rows and no TreeGrafter row, and the same holds for the
fly, fission yeast and Neurospora cohorts. Of the 162 ProtNLM
prediction-review files at the time, 79 were on proteins with IBA rows and 10
on proteins with reviewed TreeGrafter rows (one has both). There are now 202,
the 40 DONKEY40 files carrying TreeGrafter rather than IBA rows; the same 10
are in the TreeGrafter snapshot.
tg_versus_protnlm.py prints these counts
from each protein's GOA file and pairs the two sources on those 10 (tg_versus_protnlm.tsv). The
scales differ: TreeGrafter rows carry a gene-review action, ProtNLM
predictions a VDCL assessment from a prediction review.
- TreeGrafter says more, and most of it is kept. 29 TreeGrafter rows
(22 kept, 4 down-graded, 3 undecided) against 12 ProtNLM GO predictions
(5 COR, 3 CNN, 3 LSP, 1 NPI). Two of the ten proteins (CDK16in blue
whale, a MarR regulator in Chromobacterium) have no ProtNLM GO output at
all. - Where both speak, TreeGrafter is as specific or more. Four pairs relate:
two sharecytoplasm; on dogCNNM4TreeGrafter's magnesium ion transport
(ACCEPT) sits under ProtNLM's monoatomic ion transport (LSP); on pufferfish
gas7aTreeGrafter adds six more (clathrin-coated pit and vesicle, plasma
membrane, clathrin coat assembly, clathrin-dependent endocytosis, neuron
projection morphogenesis; five accepted, one kept as non-core) where ProtNLM
gives only cytoplasm. - Both fall for the same pseudophosphatase. On mussel MTMR9, ProtNLM's
phosphatidylinositol-3-phosphate phosphatase activity is NPI and
TreeGrafter's phosphatidylinositol dephosphorylation isMODIFY;
TreeGrafter's protein phosphatase binding, the regulatory-partner role, is
accepted. - ProtNLM's correct new terms are complementary. Its five COR calls are
terms TreeGrafter does not give at all: extracellular matrix and its
organization on primateOLFML2A(where TreeGrafter's only term, signal
transduction, is over-annotated), L-ascorbic acid binding on quail PAM,
autophagosome on codtbc1d14, and determination of heart left/right
asymmetry on macaque TTC39C. - The LSP and CNN judgements are made against the protein's GOA record, which
includes the TreeGrafter rows, so ProtNLM is in part being scored against
TreeGrafter here.
Ten proteins is too few for rates. Running ProtNLM2 on the 577 reviewed
proteins is not an option: its output exists only for its published accession
list, which includes 15 of them. So we ran a larger test on a cohort chosen
from that list: the DONKEY40 cohort. It has 40 donkey proteins
with both ProtNLM2 GO output and TreeGrafter rows, each paired with a horse
ortholog carrying PAINT IBA rows, reviewed 2026-10-14 and re-reviewed
2026-10-23.
- TreeGrafter on a mammal reproduces IBA. 199 of the 225 TreeGrafter rows
(GO_REF:0000118plus mergedGO_REF:0000120rows with a PTN node) carry
the same term as the horse ortholog's IBA, and no review attributes a
down-grade to graft placement. - A correct graft does not make the rows much more reliable. The donkey
reviews down-graded 17.3% of the rows by this page's definition (39 rows,
REMOVE+MODIFY+MARK_AS_OVER_ANNOTATED) and 22.7% counting the 12
TOO_GENERAL rows, against 26.9% for this corpus, whose snapshot has no
TOO_GENERAL rows. The gap is modest, rests on 40 genes (PARD3B and PIKFYVE
contribute six down-grades each), and mixes taxon with review vintage. - Where donkey rows were down-graded or left UNDECIDED (64 rows), the cause
was not graft placement. - The input sequence (16 rows on three proteins): a PIKFYVE fragment with
no kinase domain, a TNFRSF1A model missing part of its ectodomain, and a
truncated SNAP23. TreeGrafter does not check that the protein keeps the
domain the function needs. - PAINT terms that over-reach (13 rows, the same terms horse receives as
IBA), such as the SNAP25 synaptic terms on SNAP23. - PAINT terms that are right but imprecise (14
MODIFYrows, again the
same terms as horse IBA), twelve of them refined to a descendant. - True but too general (12 TOO_GENERAL rows).
- Six rows whose term horse IBA does not carry. One, ATG3
GO:0019776,
is a release lag: horse IBA already carries its replacement,
GO:0141046. - Three rows that no available evidence decides (FLCN, PARD3B, RBM41).
- ProtNLM2 on the same proteins (69 GO predictions) is judged 68% correct
and 13% wrong. The caveat above applies with more force: 36 of the 47
correct calls are CNN or LSP, judged against a GOA record that contains the
TreeGrafter rows, and the same agentic process wrote both the prediction
reviews and the gene reviews. - Where it overlaps the tree-based terms, it is mostly an ancestor of them:
28 of 38 related predictions, 24 of them correct. - All 11 of its COR calls are terms neither TreeGrafter nor IBA gives.
Propagation rules and graft paths
Added 2026-10-14. Three questions about the 1,074 reviewed rows: can a
mechanical check, run without reading the literature, pick out the rows
reviewers went on to down-grade; which PAINT node does each reviewed term come
from; and how far do the clearest errors reach beyond the corpus?
Every TreeGrafter row is a TreeGrafter-only call. GOA merges identical
calls from several electronic pipelines into GO_REF:0000120, so a
GO_REF:0000118 row is one no other pipeline made. None of the 1,074 shares
its GO term with another electronic annotation on the same protein (9 share
it with an IBA, 10 with an experimental or ISS row). This is why the
corroboration contrast above exists at all, and it means the EC-match control
below is empty by construction.
Rules scored against the reviews
propagation_rules.py scores nine
rules from UniProt records, GOA rows and GO (go-basic.obo, release
2026-07-26) against the actions in
treegrafter_review.tsv. The base
rate is 27.6% down-graded over 1,024 rated rows (UNDECIDED excluded).
Results in propagation_rules.tsv,
every hit in propagation_rule_hits.tsv.
| Rule | Flagged | Down-graded | Lift | Accepted |
|---|---|---|---|---|
MF term's EC contradicts the protein's UniProt EC (ec_contradiction) |
53 | 92.5% | 3.35 | 2 |
| catalytic MF term is a sibling of another catalytic MF term on the protein | 25 | 60.0% | 2.17 | 5 |
| catalytic MF term shares no word with the PANTHER (sub)family name | 42 | 45.2% | 1.64 | 12 |
| ≥2 reviewed paralogs in the same species and PANTHER family | 301 | 36.2% | 1.31 | 109 |
| no other GOA source asserts the term or a descendant | 929 | 29.2% | 1.06 | 427 |
| term is an ancestor of another GO term on the protein | 102 | 12.7% | 0.46 | 30 |
| broad compartment (cytoplasm, cytosol, membrane, plasma membrane, nucleus) | 289 | 4.8% | 0.18 | 146 |
Two more rules flag too few rows to read: a family or subfamily name
containing INACTIVE (3 rows, all eryA, from the PTHR43775:SF51 name rather than
a pseudoenzyme) and animal tissue vocabulary on a non-metazoan protein (1 row,
S. rosetta warts regulation of organ growth); the eukaryote-only-CC on a
prokaryote rule flags nothing.
The rules are scored against actions written by the same agentic review
process, so a high down-grade rate partly measures agreement with the reviews'
own reasoning rather than independent ground truth. The strongest hits do not
simply restate the rule: purM GO:0004637, for example, was argued from
domain architecture (PF00586/PF02769, IPR004733), not from EC numbers. The
independent test is running the EC rule over all of GOA (Next steps) and
checking a sample with a human curator.
- EC contradiction is the one strong signal. The rule compares the EC
cross-references of the GO term with the EC numbers in the protein's
UniProtDElines, and fires only when every pair differs at a level both
numbers specify, so a coarse term (oxidoreductase activity, 1.-.-.-) is
compatible with a specific EC rather than contradicted. A spot check of the
hits that were not down-graded found three causes. One was a rule bug, now
fixed: GO'sis_acan cross EC branches (GO:0008834, EC 2.5.1.31, is_a
GO:0045547, EC 2.5.1.87), so a term that subsumes another GOA term whose
EC does match is now exempt (uppS). The other two are genuine false
positives with a stated reason:fadB(an EC split by chain length that the
reviewer accepted) andmetZ(a lyase versus transferase EC class for the
same PLP chemistry);ilvA-I/ilvA-II(dual threonine/serine substrate) are
kept as non-core. Not one reviewed TreeGrafter MF term with an EC
cross-reference agrees with its protein's UniProt EC (0 of 82 across all
repo GOA files), which fits GOA's merging: an agreeing call would also have
been made by EC2GO and so would sit underGO_REF:0000120. - Broad compartments and true-but-coarse parents are kept. The two rules
that might have been expected to flag over-annotation do the opposite:
reviewers retain such rows, usually asKEEP_AS_NON_CORE. - The rest are weak. Sibling-term and name-overlap rules roughly double
the base rate on small numbers; the paralog rule mostly reflects the
paralog-rich P. putida batch.
How far the EC contradictions reach
ec_contradiction_scale.py takes
each (UniProt EC, GO term) pair behind a corpus EC contradiction, counts the
UniProtKB entries that have that EC and that GO term but not the term's own
EC (which removes fused or multifunctional proteins for which the term may be
right), and samples 40 of them in QuickGO to see where the term comes from
(ec_contradiction_scale.tsv,
44 pairs). Restricted to the 36 pairs from single-EC proteins whose corpus
rows were all down-graded, they add up to about 150,000 protein–term pairs,
and in almost every sample all or nearly all of the annotations are
TreeGrafter's:
| Corpus gene | Protein (UniProt EC) | Inherited term | Entries | Share of EC | TreeGrafter in sample |
|---|---|---|---|---|---|
purM |
AIR synthetase (6.3.3.1) | phosphoribosylamine–glycine ligase | 18,719 | 83% | 39/40 |
trpC |
IGP synthase (4.1.1.48) | phosphoribosylanthranilate isomerase | 16,436 | 80% | 36/40 |
moaA |
GTP 3′,8-cyclase (4.1.99.22) | cPMP synthase | 15,840 | 84% | 39/40 |
pyrC' |
dihydroorotase (3.5.2.3) | allantoinase | 13,482 | 56% | 35/40 |
dapE |
succinyl-DAP desuccinylase (3.5.1.18) | acetylornithine deacetylase | 10,950 | 72% | 40/40 |
moeB |
MoaD adenylyltransferase (2.7.7.80) | thiosulfate–cyanide sulfurtransferase | 8,938 | 95% | 32/40 |
mqo1–3 |
malate:quinone oxidoreductase (1.1.5.4) | (S)-2-hydroxyglutarate dehydrogenase | 6,706 | 95% | 40/40 |
mdh |
malate dehydrogenase (1.1.1.37) | L-lactate dehydrogenase (NAD+) | 5,185 | 18% | 37/40 |
phnX |
phosphonoacetaldehyde hydrolase (3.11.1.1) | phosphoglycolate phosphatase | 1,941 | 94% | 40/40 |
eryAI–III |
DEBS (2.3.1.94) | fatty acid synthase | 1,157 | 95% | 40/40 |
The samples are drawn from the first 500 hits UniProt returns, not uniformly;
the counts use UniProt's own go: search, which covers every evidence code.
Graft paths: which PAINT node the term came from
trace_graft_paths.py fetches the live
PANTHER 19 tree for a family, walks up from the graft node to the nearest
ancestor carrying an IBA for the same GO term, and summarises the clades under
that IBD (graft_paths.yaml for seven
examples). It reproduces the rotary-ATPase case independently: all five
fliI/sctN grafts trace to the duplication node PTN008558586, 3 to 7
steps up. The other examples:
- Fusion-seeded root IBDs (
purM,moaA,moeB). The IBD sits on the
family root (LUCA) and its only experimental seeds are multi-domain
proteins: trifunctional GART from fly, mouse, rat and S. pombe for the
PurD activity in PTHR10520; human and mouse MOCS1 (MoaA fused to MoaC) for
cPMP synthase in PTHR22960; and yeast Uba4, which carries a rhodanese
domain, for thiosulfate sulfurtransferase in PTHR10953. The activity
belongs to a domain the standalone bacterial proteins lack. In PTHR10953
the root spans the whole E1 superfamily, 1,090 reference leaves including
ubiquitin, SUMO and NEDD8 activating enzymes and ATG7.trpCfits by name
(fungal TRP1 fuses IGPS and PRAI) but was not traced. - A root IBD across a duplication (
eryAIII). The fatty acid synthase
IBD is on the root of PTHR43775, seeded by animal FASN and a Dictyostelium
protein; a bacterial duplication clade of type I PKS (36 leaves) inherits it. - A mixed-function node (
dapE). The acetylornithine deacetylase IBD sits
on a bacterial speciation node in PTHR43808:SF31, seeded by E. coli ArgE
and a Xanthomonas protein, whose other members include a DapE and several
dipeptidases. - No same-term IBD left (
mdh). No ancestor of the graft node carries an
IBA for L-lactate dehydrogenase activity in the current tree, consistent
with a PAINT change since the TreeGrafter run (the same lag the PomBase
side query above found at scale).
All 1,074 rows, offline. trace_graft_paths.py --all repeats the trace
for every reviewed row against the PANTHER 19 trees (Tree_MSF/*.tree from
PANTHER's TreeGrafter data download), PAINT's current IBD.gaf (PANTHER
v19.0, created 2026-08-28) and PAINT_TreeGrafter_Annotations_TOTAL.txt.gz
(the AN-to-PTN map, and the GO set TreeGrafter assigns at each node today);
the PANTHER API times out on too many families for a full run. It reproduces
the API results for the examples above. Each row's query organism is checked
against the IBD node's clade using the full NCBI lineage from the UniProt
taxonomy API (UniProt's OC lines omit ranks such as Bilateria and
Opisthokonta). Output in
graft_paths_all.tsv, scores in
graft_path_rules.tsv:
- 939 rows trace to a same-term IBD, a median of 4 steps above the graft node
(maximum 22); 543 of those IBDs are on the family root and 494 paths cross a
duplication. 129 rows (12%) have no same-term IBD left on the path: the term
is no longer in TreeGrafter's current set for that node, so the GOA row
predates a PAINT change. Reviewers down-graded 31% of these, close to the
base rate. TwopyrC'rows (allantoinase activity, purine nucleobase
catabolic process) now meet a NOT IBD on the path; both were removed. Four
rows have no graft node in GOA.
| Tree rule (rated rows) | Flagged | Down-graded | Lift | Accepted |
|---|---|---|---|---|
| query organism outside the IBD node's clade | 45 | 68.9% | 2.49 | 6 |
| query organism inside the IBD node's clade | 795 | 25.4% | 0.92 | 390 |
| IBD on the graft node itself (0 steps) | 28 | 89.3% | 3.23 | 1 |
| MF term, duplication between IBD and graft | 136 | 49.3% | 1.78 | 44 |
| MF term, no duplication between IBD and graft | 87 | 36.8% | 1.33 | 35 |
| IBD on the family root | 529 | 26.1% | 0.94 | 258 |
| IBD below the family root | 374 | 28.3% | 1.03 | 165 |
| IBD node is a duplication | 112 | 18.8% | 0.68 | 54 |
| no same-term IBD on the path | 117 | 30.8% | 1.11 | 40 |
- Taxon scope is the structural signal. The outside-clade hits are the
choanoflagellate cadherins on a Bilateria node, the CapsasporacoITGB2
integrin and S. rosettayorkieon Eumetazoa nodes, the N. attenuata
putrescine N-methyltransferases under a bacterial spermidine-synthase IBD,
P. putidapyrEunder a eukaryotic IBD anddavD/gabD-IIunder a
Terrabacteria IBD. Accepted exceptions include organelle-derived proteins
that sit in bacterial clades by descent (octopusDDO). The 0-step rule
overlaps it heavily (18 of its 28 rows are the cadherins) and is not an
independent signal. - The inside/outside split covers 840 of the 903 rated rows that reach a
same-term IBD. The other 63 are undecidable: 62 have no resolvable clade
name anywhere up the tree and one has no taxon id (11 of the 63 were
down-graded). And 406 of the 795 "inside" rows sit under a LUCA IBD, which
every organism is inside by definition. Those 406 and the other 389 are
down-graded at the same rate (25.4% each), so the inside bucket is a
baseline, not a test; the rule's content is the 45 outside rows. - Depth and root placement are not. Root and non-root IBDs, and short
and long paths, are down-graded at about the base rate. - Combined. EC contradiction, outside-clade and a NOT IBD on the path
together flag 96 rated rows, 81% down-graded, catching 28% of all
down-grades; only 3 rows trip both of the first two.
NOTES
Controlled OpenScientist batch (2026-10-15)
Sixteen blinded hypotheses ("GENE has TERM") were pre-registered in
openscientist-controls/selection.yaml.
The review's action on each row was frozen at 1b7f8f330, before any report
was read. All 16 reports are written. Five runs timed out at OpenScientist's
7,200 s ceiling with 3 iterations and were retried once with 2 (PP_2482, relA,
PP_4594, metZ, pdxH), which departs from the pre-registered protocol.
Verdicts and their scoring:
openscientist-controls/results.yaml.
| Group | Runs | Supported | Partially supported | Refuted |
|---|---|---|---|---|
| accepted sole-source controls | 4 | 3 | 1 | 0 |
| rule tests (all accepted) | 5 | 4 | 0 | 1 |
| UNDECIDED rows | 7 | 2 | 5 | 0 |
- Accepted rows mostly hold up. Of the 9 accepted rows, the run supports
- ADAR2, Cgas and relA, controls whose defining activity comes only from
TreeGrafter, are all supported. - TAS1R3 is partially supported, and the disagreement is about the GO
term, not the protein. The run argues that sweet taste is a property of
the receptor pair, not of the T1R3 subunit, and that hummingbirds have no
TAS1R2. But it also cites the finding that the hummingbird's T1R1–T1R3
pair senses sugar (Baldwin et al. 2014, PMID:25146290). So the question
is how to annotate a subunit with its complex's function. - The EC-contradiction rule is 1 for 2.
- The fadB row, accepted although it trips the rule, is supported.
- The metZ row is refuted: carbon-sulfur lyase activity on an
O-succinylhomoserine sulfhydrylase. The protein is 82% identical to the
characterised P. aeruginosa MetZ, an EC 2.5.1.- transferase. GO has no
term for that exact activity; the nearest,GO:0051009O-acetylhomoserine
sulfhydrylase activity, is a transferase too. So the review's reasoning
that the lyase term is "a reasonable available parent" does not hold. The
re-review below changed the row to REMOVE and added a term request. - The outside-clade rule's test case holds. DDO, whose query lies outside
the IBD node's clade, is supported. - Both "TreeGrafter over the other pipeline" calls are supported: PP_2320
over ARBA, and pdxH over InterPro2GO. - UNDECIDED rows: the term is right in kind but wrong in depth.
- Both MoaA paralogs (PP_1969, PP_2482) are supported as GTP
3′,8′-cyclases (a verdict the re-review below did not adopt). - The other five fault the depth of the term, not the family placement:
- eryCIV: too general; a dTDP-sugar aminotransferase.
- PP_3571: too general. PANTHER's own subfamily call is SF31,
N-acetyl-L-citrulline deacetylase; the genome's ArgE ortholog is
PP_5186. - gabD-II: the NAD+ in the term is too specific; the cofactor
pocket allows NAD(P)+. - ptxD: keep the term and add hydroxypyruvate reductase. The run
also rejects the phosphite dehydrogenase reading of the gene symbol. - PP_4594: the sibling activity within its subfamily cannot be
separated by sequence alone.
- None of the 16 runs found a pseudo-enzyme.
Re-review (2026-10-15). The eight rows in question were re-reviewed with
the reports as evidence, checking each decisive claim against repo data first:
| Row | Before | After |
|---|---|---|
PP_1969, PP_2482 GO:0061798 |
UNDECIDED | UNDECIDED (ACCEPT on 2026-10-15, reverted 2026-10-16) |
eryCIV GO:0008483 |
UNDECIDED | MODIFY to GO:0019179 |
PP_3571 GO:0008777 |
UNDECIDED | MODIFY to GO:0016811 |
metZ GO:0016846 |
ACCEPT | REMOVE |
| PP_4594, ptxD, gabD-II | UNDECIDED | UNDECIDED |
- PP_1969, PP_2482: first moved to ACCEPT because all 17 MoaA ligand
positions are conserved, then reverted after PR review asked why the two
function-level MoaA models do not match them. They score 269 and 268 bits
against NCBIfam TIGR02666 (trusted cutoff 284; every characterised MoaA
checked scores 370 or more), and reach only level -1 of HAMAP MF_01225. The
score is lost across both ends of the protein, not at ligand positions or
through a missing segment, and PANTHER subfamily SF0 is treated as
non-discriminative here as it is for PP_3571, gabD-II and PP_4594
(PP_1969-bioinformatics/RESULTS.md). So the run's SUPPORTED verdict, which
did not consider these models, is not adopted. PP_2482 sits next to a
molybdoenzyme gene cluster, the main lead for a test. - eryCIV: it is a DesI-type sugar 4-aminotransferase, and GO already has
the specific term. - PP_3571: the KT2440 ArgE ortholog is PP_5186, so a generic amidase
term replaces the specific one. The run's N-acetyl-citrulline suggestion
was not taken up, because 380 members of PANTHER subfamily SF31 are named
succinyl-diaminopimelate desuccinylase. - metZ: the reaction has no GO term, so it now has a structured term
request: "O-succinylhomoserine sulfhydrylase activity", parent
GO:0016765,skos:exactMatch RHEA:27826. The core function points to
that request. - PP_4594, ptxD, gabD-II: these stay open, because evidence the runs did
not consider points elsewhere. - PP_4594 is equidistant from the gamma-synthases and gamma-lyases.
- ptxD sits in a kgu gene cluster, which suggests a 2-keto-6-phosphogluconate
reductase. - gabD-II is as close to the ectoine-pathway DoeC as to GabD, and sits
between doeD- and doeB-type genes. That last finding also adds a term
request: "L-aspartate-4-semialdehyde dehydrogenase (non-phosphorylating)
activity" (RHEA:45764).
The re-review also corrected several of the runs' claims:
- PtxD has no Trp314.
- Human CTH is in PANTHER subfamily SF15, not SF80.
- The PP_2482 UniProt record has no binding-site features.
Sixteen runs give no rates. What they show is how the faults split: where
TreeGrafter errs here, the protein is usually in the right family and the
term is the wrong depth. A wrong reaction class (metZ) is rare.
2026-10-14
- Brief rewritten (neutral title "Agentic review of the TreeGrafter
pipeline"; numbers pinned tof81b9f300, matching this page) and linked
from the manifest; it adds four tree case studies and the rule results. - New: Propagation rules and graft paths
withpropagation_rules.py,ec_contradiction_scale.pyand
trace_graft_paths.pyand their sidecars. GO release 2026-07-26 for the
rules; PANTHER 19 trees with the 2026-08-28 PAINT IBDs for the trace. - Checked the corpus against
mainat75e426908: the same 1,074
TreeGrafter rows on 577 proteins (6,994 review files). Sincef81b9f300,
six rows thenUNDECIDEDwere adjudicated, allREMOVE(PP_3394×3,
STABOmdr×3), theIRE1unfolded protein bindingrow was retired and
aPks1secondary metabolite biosynthetic processrow added, which moves
the down-graded share from 26.4% to 26.9%. The headline tables stay pinned;
the rule scripts read the committedtreegrafter_review.tsv. - The FliI/SctN case study (formerly a sub-page here, with scripts in
TREEGRAFTER/rotary_atpase/) moved to a project of its own,
Conserved-function recovery, since it came
from an F-type ATP synthase completeness test rather than from the
TreeGrafter tally. - New: What TreeGrafter gets right, from
tg_versus_other_sources.py(sole-source rows, and head-to-head outcomes
against InterPro2GO, ARBA, UniRule and the combined IEA calls). - New: "Against ProtNLM2" (
tg_versus_protnlm.py): horse and the other
reference-genome ProtNLM cohorts get IBA, not TreeGrafter; 10 proteins
overlap. - "Feed the hotspot list upstream" reworded: no PAINT/PANTHER tickets are to
be filed yet; the fix points are collected under Next steps.
2026-10-03
- Refreshed at
f81b9f300, the merge ofmaininto this branch, which
brought in the 2026-09-24 rejection re-review (PR #3165), main's GOA refresh
that marked the viral TreeGrafter rowsretired: true(PR #3503) and the
holozoan case study. This is the refresh the 2026-09-28 note deferred.
Re-rananalyze_treegrafter.py,analyze_placement.py,
classify_failure_modes.py,snapshot_drift.py,exemplar_independence.py
andgraft_check.py --refresh-actions(offline) and rewrote every number on
both pages from the sidecars: 998 → 1,074 annotations, 560 → 577 files,
299 → 283 down-grades; accept 44.6% → 43.2%, retained 77.2% → 77.0%,
REMOVE11.2% → 11.1%,MARK_AS_OVER_ANNOTATED11.5% → 8.0%,
KEEP_AS_NON_CORE21.0% → 25.8%, down-graded 30.0% → 26.4%,UNDECIDED
44 → 50; MF down-graded 49.3% → 41.5%; corroborated accept 78% → 77%;
hotspot families 27/72 → 26/77; mode shares 1/3/4/0/2 went 50/31/12/5/1% →
47/25/15/12/2%. - Retired rows. None of the scripts knew about
retired: true, so the
2026-10-01 sidecars still counted the three retired viral rows (g022
GO:0006302,dfrPGO:0046452/GO:0046655).analyze_treegrafter.py
(annotations()),classify_failure_modes.pyand
exemplar_independence.pynow skipretired: trueexisting annotations;
analyze_placement.pyandgraft_check.pyread the review sidecar and
inherit the filter. - Hotspot labels.
analyze_placement.pylabels a symbol shared by several
review files asspecies/review-folderrather thanspecies/symbol, so
same-species paralogs (PSEPKdapF__Q88CF3/dapF__Q88GD4) no longer
collapse to one label. Its docstring no longer quotes stale corpus counts. failure_mode_curated.tsv: 19currentoverrides whose rows are no longer
down-graded (most of them relaxed by the rejection re-review, e.g.nuoG/
nuoL/nuoMGO:0003954, K9IWR0 ×2,mobA,ptxD×2,retS) are now
superseded, each note carrying the current action (38 superseded rows in
all). 22 rows were curated: 3 rows to mode 4 from the explicit
substrate-mismatch rationales in the rejection re-review records (davA
andacoA, previously mode 0;hutF, previously heuristic mode 1), 18 newly
down-graded rows whose reviewer reason states the mode (14 holozoan rows:
9 host-context mode 3, 3 mis-placement mode 4 forcoWts×2 andcoITGB2
GO:0098609, 2 sibling or too-narrow mode 1 forTLNandcoITGB2
GO:0007160; 4 pyrimidine-pathway granularity rows, broad parents of a
retained de novo UMP term, onpyrC×2,pyrDandpyrE), and
flgEcytosol, whose strengthened reason now trips the pseudo-enzyme
keywords (kept at mode 3). The remaining new down-grades are left to the
heuristic or mode 0 (33 mode-0 rows now, 17 of them holozoan).- Retitled "Rejection re-review (2026-09-24) — post-snapshot, not in the
tables above" to "Rejection re-review (2026-09-24)": all 190 live audited
rows are in the tables with the actions their batch records give. The
holozoan rows (65, 41 down-graded) are also in the tables; the case study's
callout says so. Marked the "Refresh the snapshot" next step done.
2026-10-01
- Refreshed at
943b98815. The 2026-09-27 numbers were computed at
fff7793a6, which no longer exists onmainafter a rebase;mainhas
since added reviews (including the rotary-ATPase case study) and follow-up
reviews of OpenScientist reports onfogD, K9IJK6, K9IMD0, K9IFT7,
CgasandIRE1. Re-rananalyze_treegrafter.py,analyze_placement.py,
classify_failure_modes.py,snapshot_drift.py,exemplar_independence.py
andgraft_check.py --refresh-actions(offline) and rewrote every number on
both pages from the sidecars: 983 → 998 annotations, 550 → 560 files,
279 → 299 down-grades, accept 45.1% → 44.6%, retained 76.2% → 77.2%,
REMOVE10.8% → 11.2%, down-graded 28.4% → 30.0%,UNDECIDED59 → 44;
MF down-graded 47.7% → 49.3%; hotspot families 24/71 → 27/72. The 15 added
rows include the five TreeGrafterGO:0046933rows of the rotary-ATPase case
(four new, plus PSEPKfliI), now in every table. failure_mode_curated.tsv: no current override left the down-graded set.
Sixsupersededrows re-entered it (fogD×4,IRE1GO:0070059,
K9IJK6 GO:0014909); their new reasons were re-read and they arecurrent
again with the same mode. Seven newly down-graded rows were curated from
the reviewer's reason: the four new rotary-ATPase rows andCgas
GO:0071360 (node/sibling term, mode 1), PP_2608 GO:0050661 (mode 1),
K9IJK6 GO:0048008 (mode 3). The rest are left to the heuristic, and two
PP_2608 rows stay mode 0 (16 mode-0 rows now). Superseded-row notes now
carry the current action. Mode shares barely moved: 1 50%, 3 31%, 4 12%.-
Reframed the "Reference independence" subsection as Reference standard:
the reference is the AIGR agent review fixed at the pinned commit, and the
scores measure agreement with it. The exemplar caveat now says what can and
cannot be compared: blinded verdicts against the actions recorded when the
exemplars were selected (all ten down-graded), not against the current
actions; with no accepted controls and n = 10, no reliability claim. -
Added the unicellular holozoan case study
from the ORIGINS_OF_MULTICELLULARITY reviews. Across the 16 literature-based
reviews, 11 of 53 propagated rows were down-graded, allGO_REF:0000118. - Cross-family mis-placements. Warts went into PTHR22988, and the
Yorkie candidate into PTHR10316. - Grafts onto animal-only nodes, three times. These are choanoflagellate
cadherins on a node PAINT records at Bilateria, Capsaspora integrin betas
on the Euteleostomi ITGBL1 node, and Capsaspora T-box factors on an
all-animal node carrying "cell fate specification". - Working hypothesis. Reference proteomes escape this because their tree
position, not the HMM call, sets their IBAs. Fly wts is in PTHR22988 by
UniProt's classification but takes its IBAs from the LATS node. - None of these rows are in the frozen 2026-09-06 tables.
-
This complements the 2026-09-28 note below. Viral sequences outside the
trees' taxonomic scope have stopped receiving TreeGrafter terms, but
unicellular eukaryotes outside a node's PAINT taxon still receive them. -
Second review round on PR #3165. Withdrew two of the previous round's
relaxations: PSEPKbenBGO:0019380(3-phenylpropionate catabolic
process) andprpCGO:0005975(carbohydrate metabolic process) had been
movedREMOVE→MODIFYon the premise that the term was merely too coarse.
It is not:GO:0019380names a different substrate, and propanoate is an
organic acid rather than a carbohydrate, so both are wrong-substrate or
wrong-branch propagations — the class this audit retains elsewhere (quiA
GO:0008876). Both areREMOVEagain, which also removes a duplication the
review caught: eachMODIFYproposed a term the same review already asserts
on its ownIC/NEWrow (GO:0043639,GO:0019543). Split is now 117 stand
/ 75 relaxed. One further row, the g022 double-strand break repair call, was
relaxed by this audit and then overtaken by main's finding that it is absent
from GOA entirely; the batch record keeps the reasoning and records that there
is no live annotation left to relax. - Corrected a claim this branch had invented and then propagated. The
2026-09-24 pass wrote thatbenB"still carries anICannotation to the
obsoleteGO:0043640". It does not, and never did:GO:0043640appears
nowhere inbenB-ai-review.yamlon this branch or onmain, whose
proposed_replacement_termswas alreadyGO:0043639.GO:0043640is
obsolete (replaced_byGO:0043639, GO release 2026-07-26), which is how it
reached the siblingbenA/benC/benDreviews legitimately and this one by
mistake. Removed from the review prose, the batch-03 record, this page's
next-steps (where it would have sent a curator after a row that does not
exist) and, perdocs/history.md, corrected in place in the benB history
record since the statement was never true. accD'score_functions.in_complexnow namesGO:0009329, the
carboxyltransferase subcomplex theGO:0009329row argues for, rather than
the coarserGO:0009317it previously kept alongside that argument.- Smaller fixes:
murB/ubiKprose no longer calls the broader cytoplasm row
"accepted" while the narrower cytosol row is non-core (the underlying
inversion is now named in the next-steps); a vestigial "Re-review." opener
removed frompdxJ;summarize.pyrecords how many terms its capped table
leaves out, sosummary.tsvis self-describing.
2026-09-29
- Review round on the rejection re-review (PR #3165). Corrected three
mis-transcribed UniProt accessions in shipped reason text (guaDcited
gshB's Q88D35 instead of Q88F18;tyrBQ88NM1 for Q88LG1;davA
Q88RC2 for Q88QV2) and the same errors in three batch records — six sites,
each re-checked against the gene's ownACline. - Settled the
ACCEPT/KEEP_AS_NON_COREconvention, which the first pass
had applied inconsistently (somecytosolrows went each way).ACCEPTis
defined as retaining a term as the gene's core function, so a redundant
ancestor of a carried term, or a redundant generic compartment, is
KEEP_AS_NON_CORE. 26 rows moved, leaving fiveACCEPTs, each a term the
protein itself performs. The prose in every moved row was rewritten to match. nuoG/nuoL/nuoMhad been givenMODIFY→GO:0008137while already
carrying a separateGO:0008137row, which is the redundancyCLAUDE.md
rules out; they are nowKEEP_AS_NON_CORE, with the qualifier correction left
on the one row that needs it.nuoE/nuoH/nuoIkeep theMODIFYbecause
GOA carries no such row for them.aroQ-III'score_functionscited a synthesized summary assupporting_text
againstGO_REF:0000120, which has no cached text, so the verbatim validator
could not catch it. Re-pointed at the UniProt file with four verbatim quotes,
andPMID:41029715now carries areference_reviewrecording that it
establishes thearoQstep in KT2440 but does not say which of the three
paralogs it used.- Also removed the audit-bookkeeping sentences that had crept into
review.reasonacross 21 files (batch-file pointers belong in the notes and
audit records, per #3100), and dropped a duplicateGO:0008812row this
branch had added tocache/go/terms.csv.
2026-09-28
- Re-reviewed every TreeGrafter row marked
REMOVEor
MARK_AS_OVER_ANNOTATED(192 rows / 165 genes, excluding the nine genes
re-audited on 2026-09-20): 114 stand, 78 relaxed. Added the section above;
records inTREEGRAFTER/rereview-2026-09-24/. The frozen tables were
deliberately left alone — the re-review is a post-snapshot event, and
refreshing the sidecars without the matchingfailure_mode_curated.tsvpass
would leave the failure-mode analysis describing a population that no longer
exists. For whoever does the refresh: re-runninganalyze_treegrafter.py
alone gave 968 annotations / 540 proteins withREMOVE88 and
MARK_AS_OVER_ANNOTATED47 (against 120 and 113 frozen), i.e. the
down-graded set shrinks by roughly a third and ~24 of the removed rows are
mode-3 cellular-component rows that were assigned by construction. The
PTHR21272hotspot row's member list is also now three proteins, not four:
genes/PSEPK/aroQandgenes/PSEPK/aroQ-IIIwere duplicate folders for the
same protein (Q88IJ6 / PP_3003) and have been merged intoaroQ-III, the
name UniProt gives the locus. - Nine of the 306 down-grades that
classify_failure_modes.pydeclines to
guess (mode 0) were in scope here:acoA,benB,davA,groES,nuoM,
PP_0094, I7J3R9 andNCGR_LOCUS1270×2. Their re-review rationales in
the batch records are written from the evidence and should make the
hand-classification of that queue easier. - Independent corroboration of one retained row: the re-review kept the
REMOVEon PSEPKfliIGO:0046933(proton-transporting ATP synthase
activity, rotational mechanism) on the grounds that phylogenetic transfer
across homologous ATPase families produced a contradicted molecular
function. The rotary-ATPase case study
added the following day reaches the same conclusion from the opposite
direction — a proteome-wide completeness test whose false positives were
FliI/SctN export ATPases — and locates the error upstream, in a PAINT IBD on
a duplication node rather than in the graft. - Viral proteins appear to have dropped out of TreeGrafter. Prompted by
theGO:0006302double-strand break repair row on the phiR8-01 family-A
DNA polymerase (9CAUD/g022, I7J3R9). Of all the reviewed proteins in the
corpus with a phage or virus taxon, only two hadGO_REF:0000118rows: g022
(one row, graft nodePTN000015309, PTHR10133:SF27) and phiNIT1
9CAUD/dfrP(D0VXF2, two rows fromPTN000167324, PTHR48069).
In the 2026-07-27 GOA release (QuickGO) neither protein has any
TreeGrafter annotation, andPANTHER:PTN…is also gone from the with/from
of theirGO_REF:0000120rows. Their UniProt entries still carry the
DR PANTHERfamily lines, so the protein is still classified in the family;
only the GO propagation stopped. We have not found a release note that says
so, and two proteins are too few to call it policy. It fits PANTHER trees
being built from cellular-organism reference proteomes, which would make a
graft of a viral sequence an extrapolation outside the tree's taxonomic scope. - The change cuts both ways. The g022 row was one of our down-grades
(REMOVE; it is the I7J3R9 mode-0 row in the heuristic queue under Next
steps). But the two dfrP rows had been reviewed as correct:
GO:0046452dihydrofolate metabolic process (ACCEPT) andGO:0046655
folic acid metabolic process (KEEP_AS_NON_CORE). So excluding viruses
removes true positives as well as the false one. The DHFR keeps its MF and
GO:0046654THF-biosynthesis terms through InterPro2GO and UniRule. But
GO:0046654is a sibling ofGO:0046452underGO:0006760, not an
ancestor, so the dihydrofolate statement had no surviving replacement. It is
re-asserted in the review as a NEW ISS row, grounded in the PAINT IBD on
PTN000167322(PTHR48069), which dfrP shares with E. coli folA (SF3). - Refreshed both genes' GOA and marked the vanished rows
retired: true, which
keeps their reviews for provenance. The frozen 2026-09-06 tables still count
the three rows; they will drop out at the next snapshot refresh. - Follow-up: confirm with the PANTHER/GOA side whether viral sequences are
now deliberately excluded from TreeGrafter.
2026-09-27
- Acted on the TreeGrafter section of
REVIEW-2026-09-26.
Retired the frozen 2026-09-06 snapshot: re-rananalyze_treegrafter.py,
analyze_placement.py,classify_failure_modes.pyandgraft_check.pyat
fff7793a6(a pre-rebase commit no longer onmain; superseded by the
2026-10-01 refresh) and rewrote every number on both pages from the sidecars
(898 → 983 annotations, 510 → 550 files, 306 → 279 down-grades, accept
41.3% → 45.1%). Newsnapshot_drift.pyrecords the drift (85 added, 63
changed actions, 48 rows out of / 21 into the down-graded set; 56 of the
63 changes are the 2026-09-20 re-review), and the page now links and
summarisesrereview-2026-09-20/(19 genes reviewed, 10
awaiting_adjudication). failure_mode_curated.tsvgained astatuscolumn: 25 overrides whose
annotation is no longer down-graded are kept but markedsuperseded(the
classifier ignores them); ADAR2 GO:0008251 re-filed 4 → 1 (its graft node
PTN000098697 also supplied the accepted ADAR terms); 9 newly down-graded
PSEPK rows curated to mode 1 from the reviewer's reason. The other 12 new
down-grades are left to the heuristic or mode 0 (14 mode-0 rows now).- Reporting: added retained and
REMOVE-only rates next to down-graded
(summary sidecar headline rates block), relabelled mode 3 as an
informativeness policy, said explicitly that the IBA contrast is
corpus-wide on different genes and reported the same-file IBA set (20 rows
on 9 files — too small to use). Added a Reference-independence section; new
exemplar_independence.pyshows 9/10 exemplar annotations cite the
OpenScientist/Falcon report they are scored against, so the exemplar
agreement claims on the failure-modes page were withdrawn. - Script hygiene:
analyze_treegrafter.pydocstring no longer contradicts
itself onGO_REF:0000120, and gains--out-dirfor dry runs;
graft_check.pyreadsreview_actionfromtreegrafter_review.tsv
instead of hard-coding it (--refresh-actionsupdates it offline). - Added the rotary-ATPase case study.
It began as a first-principles completeness test (F-type ATP synthase across
15,525 bacterial reference proteomes), whose false positives turned out to be
FliI/SctN export ATPases annotated as ATP synthases. The TreeGrafter graft points
are correct here; the error is inherited from a PAINT IBD on a duplication node.
None of these rows are in the frozen 2026-09-06 tables.
2026-09-25
- The snapshot callout's drift note was itself quoting exact merged-tree
figures that a secondmainmerge (3246edc2) had already outdated.
Rewrote it as a dated floor (≥63 annotations / 28 files across HETGA,
9AVES, PSEPK, XENLA; four changed actions, naming the twopgmrows that
cross into the down-graded set) so it no longer re-stales on every merge.
Added a snapshot marker to the failure-modes sub-page and a caveat there
that K9IMD0 (draculin) andmdrare contested mode-4 calls awaiting a
curator. "genes" → "proteins" in the Corroboration and Results text. The
Caveats composition bullet, which still quoted the earlier 43-row delta as
"mostly HETGA", was rewritten as the same floor (≥63, HETGA and P. putida
roughly equal; 656/961 = 68%). Doc-only.
2026-09-19
- Froze the sidecars at the 2026-09-06 snapshot (branch
49d8cc0b,main
b62182cc) and said so on the page: the mergedmainadds 15 review files
/ 43GO_REF:0000118annotations (HETGA 29, PSEPK 12, XENLA 2) and one
action change (PSEPKfruAGO:0090563ACCEPT→KEEP_AS_NON_CORE) that
are not in the tables. The completeness clause is now past tense and
scoped to the snapshot; the P. putida composition caveat is marked as a
snapshot property (~70% then, ~68% on the merged tree). No scripts re-run.
2026-09-07
- Worked the four open next steps. (1)
GO_REF:0000120is UniProt's
multi-pipeline merge (definition confirmed from the GO reference collection),
soGO_REF:0000118rows are uncorroborated TreeGrafter calls; evaluated the
corroborated PANTHER rows (637, 77% accepted) and uncorroborated InterPro2GO
rows (698, 26% accepted) on the same genes and added the Corroboration
section. (2) Classified all 306 down-grades into the four failure modes
(classify_failure_modes.py+failure_mode_curated.tsv, 163 rows curated
by hand, 134 by keyword heuristic, 9 left unclassified): granularity 47%,
generic/context 36%, mis-placement 13%, pseudo-enzyme 1%. (3) Added per-family / subfamily /
graft-node hotspot aggregation (treegrafter_family_hotspots.tsv) and the
hotspot table. (4) Moved TFP and IRE1 out of the pseudo-enzyme table on the
failure-modes page (they are node-term and generic-binding cases) and added
the newly recognised mis-placements (mdh, mqo1–3, dapE/pepV, ptxD, mupP,
quiA, kdsC, acoA, stilbene dioxygenases).
2026-09-06
- Review pass over the project. The committed sidecars predated the
P. putida KT2440 batch: regenerated them (corpus 2,775 → 4,540 review
files; TreeGrafter set 415 → 898 annotations, now covering every
GO_REF:0000118row in the corpus GOA). Accept rate unchanged at ~41%,
MODIFYshare fell (12.5% → 8%) andKEEP_AS_NON_CORErose (17% → 21%). - Corrected the
GO_REF:0000120paragraph (it is not a "handful" of PANTHER
rows — ~890, as many as the labelled TreeGrafter set) and the description of
themcrLPS-core error (sibling-process error, not host-lacks-pathway). - Fixed the
templates/…links, which resolved above the site root when
rendered; removed the hard-coded scratch path fromrun_falcon.sh. analyze_treegrafter.pynow uses the C YAML loader (minutes → ~45 s) and
emits the action-by-aspect and per-taxon breakdowns added above.- Verified the exemplar provenance: all ten OpenScientist and Falcon blinded
reports and the ten Falcon family reports exist under the gene
*-hypotheses/andinterpro/panther/PTHR*/directories, and their verdict
lines match the tables on the failure-modes page.
Next steps
- Adjudicate the ten
awaiting_adjudicationgenes of the 2026-09-20
re-review (fogD,PP_3394, K9IJK6,mdr,Cgas, K9IFT7, K9IMD0,
pvdD,NCGR_LOCUS10166,TOLL9); 13 of the 37 rows on the 2026-09-20
genes that left the down-graded set since the snapshot are on them, so the current rates are
provisional there. Five of them have had follow-up reviews since; update
the records' status when a curator signs off. - A controlled exemplar sample. Re-run the blinded OpenScientist/Falcon
check on a fresh sample that includes accepted TreeGrafter rows as
controls, with the review actions recorded before the reports are read;
only then quote a sensitivity/specificity. - Settle the five rows still open after the OpenScientist batch (PP_1969,
PP_2482, PP_4594, ptxD, gabD-II) with substrate-panel assays (for PP_2482, a
knockout against its neighbouring molybdoenzyme cluster) (see
Controlled OpenScientist batch);
the two term requests (metZ, gabD-II) are collected with the other upstream
fix points, not filed. - Blind the corroboration test. Re-adjudicate a sample of
GO_REF:0000118
andGO_REF:0000120rows withoriginal_reference_idwithheld, to separate
the corroboration effect from the reviewer's visibility of the label. - Second-pass the heuristic failure-mode assignments. 87 of the 283
down-grades carry a heuristic mode; 34 of those are decided by construction
(33 CC rows, 1 low-information binding term), leaving 53 keyword-placed
MF/BP rows, plus the 33 mode-0 rows: 17 holozoan rows (the five
untested cadherin over-annotations on each of the three S. rosetta
cadherins,wartsGO:0000082andGO:0043065) and 16 others (ahpC,
carB,cbcW×2,Cgas,groES,mfd,nuoM,PP_0094,PP_0301,
PP_0312,PP_2608×2,pyrC'GO:0006145,pyrEGO:0046132,
scpC). The keyword
heuristic is sensitive to reason rewrites: the rejection re-review's
strengthened reasons movedPP_0312andscpCfrom mode 1 to mode 0 and
benBfrom mode 0 to mode 4 without any curated call. - Collect the upstream fix points; do not file tickets yet. Candidate
PAINT / PANTHER fixes stay listed here until the rule and graft-path
analyses are complete: a stilbene-dioxygenase subfamily in PTHR10543, the
GO:0046933IBD on the PTHR15184 duplication node (see the rotary-ATPase
case), the EptA node term in PTHR30443, the PMT subfamily in PTHR11558,
PKS-vs-FAS in PTHR43775 (an IBD on the family root), the M20A subfamilies in
PTHR43808, the MDH/LDH node in PTHR43128, and the fusion-seeded root IBDs in
PTHR10520 (purM), PTHR22960 (moaA) and PTHR10953 (moeB) (see
Propagation rules and graft paths). - Run the EC-contradiction rule over all of GOA. The UniProt-wide counts
inec_contradiction_scale.tsv
cover only the 36 pairs seen in the corpus; a GOA × UniProt EC join would
give the full list of TreeGrafter MF rows whose EC contradicts the
protein's own. - Test the fusion-seeded-root shape across PANTHER. For every IBD on a
family root, check whether all its seeds are multi-domain proteins whose
extra domain the rest of the family lacks. - Test a domain-coverage rule. In DONKEY40, 16 down-graded or UNDECIDED
TreeGrafter rows are on fragmentary or truncated donkey gene models. A rule
that flags a TreeGrafter row when the protein lacks the InterPro domain its
term depends on (for example a kinase term with no kinase domain) could be
scored against the reviews in the same way as the other rules. - Human-rated anchor. Have a curator rate a small shared subset so that
agreement between the agent reviews and expert judgement can be quoted. - Broaden the taxon base. 65% of the rows are P. putida KT2440; the 29
HETGA rows (76% accepted) are a first mammalian batch and the 65 holozoan
rows (63% down-graded) a first unicellular-eukaryote batch, both too small
and too hand-picked to generalise from. DONKEY40 adds 225 mammalian rows,
selected by rule rather than by hand (17.3% down-graded, 39/225). - File the
GO:0009329label/axiom defect with GO. This is the one item the
2026-09-24 re-review turned from a suspicion into a verified finding (see the
label-vs-definition bullet above): the term's definition is the AccA/AccD
carboxyltransferase component of acetyl-CoA carboxylase, but its label says
"acetate CoA-transferase complex" and it carries acapable_ofaxiom to
GO:0008775 acetate CoA-transferase activity— EC 2.8.3.8, different
chemistry. Both contradict the definition.interpro/panther/PTHR42995/ PTHR42995-paint.tsvshows GO curators themselves use the term for bacterial
AccD (an IBD seeded by E. coli P0A9Q5), and QuickGO's own blacklist for the
term is ~80NOT-qualified annotations on eukaryotic proteins (QuickGO,
2026-10-02, the same query as the verification above) — which is what a
misleading label looks like downstream. Proposed fix: rename to name the
carboxyltransferase component and drop or re-point thecapable_ofaxiom. - ~~Refresh the snapshot~~ — done on 2026-10-03 at
f81b9f300(see the
2026-10-03 note): the rejection re-review and the holozoan rows are in
every table, the failure-mode table was re-curated, and the hotspot member
labels are de-collided (analyze_placement.pynow labels same-symbol
proteins byspecies/review-folder, so the two PSEPKdapFparalogs
would readPSEPK/dapF__Q88CF3andPSEPK/dapF__Q88GD4; neitherdapF
row is down-graded any more, soPTHR31689has no example genes at this
refresh). Still open from that item: re-pin again when the next batch
lands. - Harmonize the rows the rejection re-review left out of scope. Some sibling
rows now sit beside a relaxed parent (PSEPKubiAGO:0004659/
GO:0016765,zwfGO:0006098). PSEPKmurBandubiKcarry a sharper
version: theirGO:0005737cytoplasm row isACCEPT(aGO_REF:0000120row,
outside this audit's scope) while the more specificGO:0005829cytosol is
KEEP_AS_NON_CORE, so the less specific term currently reads as the core one.
pdxBandpdxJhave the consistent pairing.