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 main result
is that the failures are about granularity, not truth: bare membrane,
cytoskeleton and mitochondrial membrane fail at 23–36%, while every precise
membrane term fails at 0%, and the obvious fix (drop an SL term when a more
specific one is present) was tested and refuted. The tables below were measured
on 1,297 reviewed annotations; a re-run of scan_sl_unique.py on 2026-09-26
over the grown corpus (1,565 reviewed, 1,179 gene folders) gives the same
picture, with 40% downgraded or worse and a 9% hard-issue rate. So far 27
annotations have been moved, 18 of them for the defective SL-0221 →
GO:0034045 mapping.

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 1,297 reviewed SL-unique annotations in this corpus (986 gene folders), 41% were
downgraded or worse
and 10% carry a hard issue (REMOVE / MARK_AS_OVER_ANNOTATED /
MODIFY). But the issue rate is not spread evenly, and the pattern is sharp:

SL location Reviewed Issue rate SL location Reviewed Issue rate
SL-0171 Mitochondrion membrane 13 31% SL-0097 ER membrane 36 0%
SL-0066 Cilium 12 25% SL-0134 Golgi apparatus membrane 21 0%
SL-0162 Membrane 61 28% SL-0151 Late endosome membrane 18 0%
SL-0147 Endomembrane system 10 20% SL-0071 Clathrin-coated vesicle membrane 18 0%
SL-0090 Cytoskeleton 59 27% SL-0091 Cytosol 13 0%
SL-0132 Golgi apparatus 23 17% SL-0158 Lysosome 10 0%
SL-0243 Secreted 89 15% SL-0182 Nucleus membrane 10 0%

The cleanest demonstration is within a single organelle:

SL location Reviewed Issue rate
SL-0171 Mitochondrion membrane 13 31%
SL-0168 Mitochondrion inner membrane 19 11%
SL-0170 Mitochondrion matrix 14 7%

(The SL-0162 and SL-0090 rates include the batches reviewed under their own subprojects; the
pre-batch figures were 23% and 17%.)

Same organelle, same pipeline, same curators. The under-specified location is three to four
times worse. The pattern repeats for Golgi apparatus (17%) versus Golgi apparatus membrane
(0%), endoplasmic reticulum (10%) versus ER membrane (0%), and bare Membrane (28%) versus
every specific membrane in the table (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
(406 of 1,297, 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 now returns 12% vs 8%, because the SL-0162 and
SL-0090 batches deliberately selected redundant cases to
re-review. That is a self-fulfilling measurement and should not be quoted as a result.

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:

So the missing-term situation is specific to SL-0221, where the target GO term is itself
defective and the replacements (phagophore membrane, phagophore rim, ER-phagophore contact
site) genuinely do not exist and are now proposed on the ATG2A, ATG2B and atg-18 reviews.
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 13 SL-0243 flags in this small corpus and would account for far
more at GOA scale.

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

Subprojects

Subproject SL Reviewed Issue rate Status
Membrane SL-0162 61 28% 3 annotations moved; pattern A
Cytoskeleton SL-0090 59 27% 6 annotations moved; patterns A + B
Secreted SL-0243 89 15% analysis only; patterns C + D
Mitochondrial granularity triple SL-0171/0168/0170 46 31/11/7% controlled comparison; analysis only
SL-0221 / phagophore assembly site membrane SL-0221 29 — 18 annotations moved; feeding GO issue #29437

SL-0221: a third failure mode

SL-0221 Preautophagosomal structure membrane → GO:0034045 is neither a semantic error nor
a granularity error. The target GO term is logically defective: it asserts 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

Slides