UniProt Subcellular Locations (SL) Unique Terms Project

IN_PROGRESS PIPELINEEVALUATION

Species: human, mouse, yeast, SCHPO, worm, DICDI

UniProt Subcellular Locations (SL) Unique Terms Project

Bottom line: GOA turns UniProt subcellular-location lines (SL-xxxx) into
cellular-component annotations through the still-running GO_REF:0000044
pipeline, and many genes get a location from that source alone. We scanned
every such SL-unique annotation in the repo, compared them with the reviewers'
verdicts, and re-reviewed 22 genes where the pattern pointed. The first result
was that the failures are about granularity, not truth: broad locations such as
membrane, cytoskeleton, endomembrane system and mitochondrial membrane
were flagged far more often than precise locations such as ER, Golgi and late
endosome membranes. That pattern still holds on 2026-10-05 after the corpus grew
to 1,852 SL-unique annotations in 1,380 gene folders, 1,837 of them reviewed:
39% are downgraded or worse and 8% carry a hard issue. The obvious fix, dropping
an SL term when a more specific CC term is present, was tested and refuted. So
far the SL first pass has moved 27 annotations, 18 of them for the defective
SL-0221 → GO:0034045 mapping; GO has since obsoleted GO:0034045 and created
GO:7770114 phagophore membrane, confirming the SL-0221 finding while superseding
some of the original missing-term recommendations.

We did this because GO_REF:0000044 is one of the largest single sources of
CC annotation in GOA and, unlike the retired keyword pipeline, it records the
source SL identifier in every row, so problems can be traced to the location
that caused them.

Overview

The localization counterpart to SPKW. Where SPKW reviewed GO annotations derived
solely from UniProt keywords (GO_REF:0000043), this project reviews annotations derived
solely from UniProt subcellular locations (GO_REF:0000044) — SL-xxxx identifiers mapped
to GO cellular-component terms, with no corroborating experimental, phylogenetic, or curator
evidence behind them.

Two things make this worth a project of its own rather than a subproject of SPKW.

It is still running. GOA retired the SPKW pipeline for cellular organisms around April
2026, which closed that problem at the source. GO_REF:0000044 is live and is one of the
largest single sources of CC annotation in GOA.

The source identifier is in the data. SPKW's methodology had to reverse-map GO terms to
their originating keywords through the external2go keyword2go file, because the GAF records
only the GO term. The SL pipeline writes UniProtKB-SubCell:SL-xxxx straight into the
WITH/FROM column. The location-level view that took SPKW a separate mapping step is available
for free, per annotation.

Key finding: the failure is granularity, not truth

Across the 1,297 reviewed SL-unique annotations in the 2026-08 snapshot, 41% were
downgraded or worse
and 10% carried a hard issue (REMOVE / MARK_AS_OVER_ANNOTATED /
MODIFY). Re-running the scanner on 2026-10-05 gives nearly the same aggregate
view — 718 of 1,837 reviewed rows downgraded or worse (39%), and 151 of 1,837
with a hard issue (8%) — but the issue rate is not spread evenly:

SL location Reviewed Issue rate SL location Reviewed Issue rate
SL-0171 Mitochondrion membrane 14 36% SL-0097 ER membrane 50 0%
SL-0066 Cilium 15 27% SL-0134 Golgi apparatus membrane 33 0%
SL-0147 Endomembrane system 16 25% SL-0151 Late endosome membrane 22 0%
SL-0162 Membrane 103 21% SL-0071 Clathrin-coated vesicle membrane 20 5%
SL-0090 Cytoskeleton 110 16% SL-0091 Cytosol 21 0%
SL-0132 Golgi apparatus 33 15% SL-0158 Lysosome 10 0%
SL-0243 Secreted 107 15% SL-0182 Nucleus membrane 14 0%

The cleanest demonstration is within a single organelle:

SL location Reviewed Issue rate
SL-0171 Mitochondrion membrane 14 36%
SL-0168 Mitochondrion inner membrane 21 10%
SL-0170 Mitochondrion matrix 16 6%

Counts in both tables are from scan_sl_unique.py on 2026-10-05.

Same organelle, same pipeline, same curators. The under-specified location is three to four
times worse. The pattern repeats for Golgi apparatus (15%) versus Golgi apparatus membrane
(0%), endoplasmic reticulum (8%) versus ER membrane (0%), and bare Membrane (21%) versus
the specific ER, Golgi and late-endosome membrane locations that remain at 0%.

This is a different failure mode from SPKW. SPKW's problems were semantic — process
conflation, regulatory conflation, expression mistaken for function. The gene was in the wrong
place in a pathway. SL's problem is that an under-specified location maps to a GO term that is
true but uninformative, and reviewers then have to adjudicate whether "true but
uninformative" counts as over-annotation. Hence the unusually high KEEP_AS_NON_CORE share
(567 of 1,837, 31%) alongside a modest hard-issue rate.

The redundancy hypothesis, tested and refuted

The obvious mechanical explanation, and the fix this project first proposed: SL-unique
annotations get flagged because the gene already carries a more specific term from another
source
, so the broad SL term is pure duplication. If that were right, GOA could suppress an
SL-derived CC annotation whenever a descendant is present from any other reference, and most
of the problem would disappear.

It was tested directly (projects/SL/scripts/sl_redundancy.py, committed). For every
SL-unique annotation, the script asks whether any other CC term on that gene is a proper
descendant under is_a/part_of, and cross-tabulates against the reviewer's verdict.

The hypothesis fails. Measured before this project's own review batches:

Group n Issue rate KEEP_AS_NON_CORE
Redundant — more specific term already present 445 10% 31%
Not redundant — the SL term is the most specific the gene has 852 8% 32%

Two percentage points. And the split barely moves inside individual locations either
(SL-0162: 26% vs 19%; SL-0090: 17% vs 17%; SL-0171: 33% vs 25%). Redundancy is also not
tracking breadth in the way the story needs: spindle is 88% redundant with an 8% issue rate,
chromosome 83% redundant with 6%.

The reviewer quotes explain why. Genes were flagged for vagueness, not duplication —
"marked over-annotated for lack of specificity rather than for lack of membrane association"
(human ABHD14A), "not wrong, but 'membrane' is the uninformative parent" (yeast DCV1). A gene
whose only annotation is membrane is as uninformatively annotated as one with membrane
plus five specific terms, arguably worse. Deduplication fixes the second case and misses the
first.

So there is no cheap structural fix. This is an evidential judgment about whether a
location says anything, and it has to be made per annotation.

Caveat on re-running the numbers: the table above is the pre-intervention measurement.
Re-running the script on 2026-10-05 returns 10% vs 7%, but the
SL-0162 and
SL-0090 batches deliberately selected redundant cases to
re-review. That later split is partly self-fulfilling; the least biased redundancy test is the
pre-batch one.

Failure-mode patterns

Four patterns, established across the subprojects. The first is the SL pipeline's own; the
others have SPKW analogues.

Pattern Description Examples SPKW analogue
A. Under-specification Term is true and adds no information over the gene's topology or existing annotations membrane for a known ER protein; cytoskeleton for a microtubule protein; mitochondrial membrane for an inner-membrane protein none — this is SL's own
B. Association ≠ residence Protein binds or anchors to the structure but is not located in it SGCA, SGCE (sarcolemmal proteins linked to cytoskeleton via the DGC) regulatory conflation
C. Family-rule propagation A location true of some family members is attached to all by a HAMAP/UniRule rule or a sequence feature PSEPK and METEA enolase (Secreted from pathogen moonlighting); yeast THI22 (signal-peptide prediction); human PGRMC1 subclade divergence
D. Transit annotated as destination Protein passes through a compartment to reach a tethered, injected or embedded destination SALTY slrP (T3SS effector); STAAU lytN (cross-wall); ACET2 SdbA (SLH-tethered) toxin vs effector

Sweep: do any flagged cases need terms that do not exist?

After the GO:0034045 audit found three genes
wrongly parked at ACCEPT because their destination did not exist, the whole SL flagged set
was swept for the same mistake. The test: a flagged SL-unique annotation with no
proposed_replacement_terms and no more-specific CC term anywhere on the gene — "stranded".

42 annotations are stranded, but almost none are missing-term cases. They are stranded
because the protein is not in the compartment at all, which REMOVE and
MARK_AS_OVER_ANNOTATED express correctly — human PGRMC1 has no extracellular pool, METEA and
PSEPK enolase are not secreted, yeast THI22 is a signal-peptide prediction. There is no
destination because there is nothing to relocate.

Two corrections came out of the sweep, both in the other direction — a destination existed and
was not used:

At the 2026-08 sweep, the missing-term situation was specific to SL-0221: the
target GO term was defective and the needed replacements (phagophore membrane,
phagophore rim, ER-phagophore contact site) were not all present. GO has since
obsoleted GO:0034045 and created GO:7770114 phagophore membrane, so several
GO:0034045 reviews now point to the new term where the evidence really is
phagophore-membrane residence. The broader sweep result still stands:
everywhere else in the SL corpus, the destination exists — the question is only
whether the reviewer looked for it.

Pattern C has a mirror image: the reviewer's family argument over-reaches too

A blinded OpenScientist run on yeast THI22 (genes/yeast/THI22/THI22-hypotheses/,
pre-registered in THI22-notes.md before the result) tested the SL-0243 Secreted annotation
neutrally. It confirmed the verdict — no evidence places THI22 outside the cell — but refuted
the reasoning behind it, and the refutation generalises.

This review had argued: THI22's paralogs THI20/THI21 are cytosolic, so secretion is
implausible, so the annotation is over-annotated.
The run reproduced the key sequence fact
blind — the N-terminal extension is unique to THI22 among the three paralogs, hydropathy peak
3.78 vs ~0.5–0.8 — and then read it the opposite way: uniqueness is evidence of
neofunctionalization toward the endomembrane system, not evidence that THI22 behaves like its
sisters. SGD's locus record (verified against the SGD API) reports ER and vacuole localization
for SWAT-GFP and mCherry fusions. The prediction's error is the endpoint, not the signal —
entering the secretory pathway is not being secreted.

The lesson for this project: "family members are secreted, so this one is" (pattern C) and
"family members are cytosolic, so this one is" are the same inference pointed in opposite
directions, and a reviewer refuting the first can commit the second. Family context constrains
a localization; it does not determine it, and the case where a protein diverges from its
paralogs is exactly the case worth annotating. Verdicts reached by paralog analogy alone should
say so explicitly, so the reasoning can be checked separately from the conclusion.

Pattern C is the one with a targeted fix: auditing the handful of family rules that attach
Secreted/Cell surface to housekeeping enzyme families would remove a disproportionate
share of the wrong (as opposed to merely vague) annotations. HAMAP MF_00318 on enolase
alone accounts for two of the first 13 SL-0243 flags in this small corpus and would account
for far more at GOA scale; #4259
tracks that follow-up.

Full tables and the query in SL-METHODOLOGY.md, regenerable from a
committed script.

Subprojects

Subproject SL Reviewed Issue rate Status
Membrane SL-0162 103 21% 3 annotations moved; pattern A
Cytoskeleton SL-0090 110 16% 6 annotations moved; patterns A + B
Secreted SL-0243 107 15% analysis only; pattern C follow-up in #4259
Mitochondrial granularity triple SL-0171/0168/0170 51 36/10/6% controlled comparison; analysis only
SL-0221 / phagophore assembly site membrane SL-0221 29 — 18 first-pass annotations moved; GO:0034045 is now obsolete

SL-0221: a third failure mode

SL-0221 Preautophagosomal structure membrane → GO:0034045 was neither a semantic error nor
a granularity error. The target GO term was logically defective: it asserted via
bounding_layer_of that a membrane bounds the phagophore assembly site, which is a protein
condensate with no bounding bilayer.

This case is documented in full in the
GO:0034045 corpus slice audit, shared with the
CONDENSATES project. Its lessons for SL generally:

What the subprojects established

Open questions

Project status