NCBI RefSeq vs UniProt/GOA: prokaryotic GO pipeline comparison

IN_PROGRESS PIPELINE

Collection: Function prediction evaluation

Species: PSEPK, PSEAE

NCBI RefSeq vs UniProt/GOA: prokaryotic GO pipeline comparison

Bottom line: since 2022, NCBI's Prokaryotic Genome Annotation Pipeline (PGAP)
has put GO terms on RefSeq prokaryotic proteins, and per-assembly GAF files now
sit on the NCBI FTP site. GO does not ingest them, and nobody had compared them
with GOA. The two pipelines differ in kind. NCBI is winner-take-all: GO is an
attribute of the single protein family model that names the protein, so every
protein gets terms from exactly one evidence source. UniProt/GOA is a union of
InterPro2GO, TreeGrafter, UniRule, ARBA, EC/Rhea2GO, SubCell and others. On
Pseudomonas putida KT2440, scored against 956 curated gene reviews, NCBI is
about as accurate and much less complete.
Wrong terms (REMOVE) are rare on both
sides: 3.2% of the NCBI terms reviewers could judge, against 4.8% of GOA's
electronic terms, and NCBI has fewer true-but-too-general terms (5.9% against
11.6%). But NCBI covers only half of the reviewed core molecular functions (52%,
against 81%) and about a third of core processes (37%, against 67%), and it has almost no cellular-component
annotation. The biggest NCBI-specific source is CDD domain architectures
(SPARCLE)
, not the CDD cd models that InterPro integrates. They name 47% of
GO-bearing proteins and are the least concordant source. Each pipeline has its
own failure modes: GOA transfers functions between paralogs, NCBI's specific
equivalogs avoid that, and NCBI has wrong GO on a few named models (listed
below) that propagates to every genome.

This page also carries the history of GO–NCBI contact on prokaryotic GO, which
was reconstructed from email when the topic resurfaced in October 2026.

Relationship to the NCBIFam project

NCBIFam measures how NCBIFAM/CDD signatures reach GOA through
InterPro2GO, and proposes an ncbifam2go built from hmm_PGAP.tsv. This project
compares the outputs: the GO that NCBI actually assigns to proteins against the
GO that GOA assigns, gene by gene.

One correction to that project's framing: NCBIFam.md says that "CDD-proper has
no native GO". That is true of the cd models, but NCBI also keeps GO as an
attribute of CDD domain architectures (SPARCLE, ArchId: in the GAF
WITH/FROM column), and has propagated it to proteins since March 2023. This GO
is not in cddannot*.dat or hmm_PGAP.tsv, so the NCBIFam probe could not see
it. In the KT2440 GAF it is the largest single source.

How the two pipelines assign GO

NCBI RefSeq (PGAP) UniProt / GOA
Unit annotated non-redundant WP_ protein, shared across all genomes that encode the identical sequence UniProtKB entry (per proteome; Swiss-Prot + TrEMBL)
Gene models PGAP re-annotation of each RefSeq assembly (new *_RS* locus tags; old tags kept as old_locus_tag) INSDC submitter CDS, translated; for older genomes, the original submission
Where GO lives an attribute of protein family models: NCBIFam/TIGRFAM HMMs, Pfam HMMs wrapped as NF models (GO imported from pfam2go, which is itself derived from InterPro2GO; NCBI may add or remove attributes on its stored copy of each Pfam, and had added GO to about 20 by 2022), BlastRules (NBR…), CDD/SPARCLE architectures (ArchId:), and a few cluster: sources external2go mappings (InterPro2GO, EC2GO, Rhea2GO, UniPathway2GO, KW2GO, SubCell2GO), rule systems (UniRule, ARBA), phylogenetic propagation (PAINT IBA, TreeGrafter), experimental curation
Combination rule only the model that names the protein passes on its GO: one WITH/FROM per protein union of every pipeline that fires
Evidence/reference all IEA, PMID:33270901 (the PGAP paper), WITH/FROM = the naming model IEA with a pipeline-specific GO_REF, plus experimental codes
Distribution <assembly>_gene_ontology.gaf.gz per assembly on ftp.ncbi.nlm.nih.gov/genomes/all/, GAF 2.2, assigned_by=RefSeq GOA GAFs, QuickGO, GO releases
Known gaps the roughly 15 community-curated reference genomes (e.g. E. coli K-12 MG1655, B. subtilis 168) are annotated differently and have no GAF; FTP backlog; GO version lags; some proteins lack a symbol, though GAF requires one —

The winner-take-all rule is the main structural difference. NCBI's design
favours precision: a protein named from a specific equivalog HMM inherits only
that HMM's curated terms, and broad domain terms from other hits are not added.
GOA favours recall, and stacks domain-level InterPro2GO terms with family- and
rule-level terms.

The winner-take-all rule applies to prokaryotes only. NCBI annotates eukaryotic
RefSeq with a separate pipeline (since 2023): InterProScan with InterPro2GO and
PANTHER/TreeGrafter GO, keyed to NCBI GeneIDs. That pipeline is much closer to
UniProt's and is out of scope here.

Pilot: P. putida KT2440 (PSEPK)

Script: compare_refseq_goa.py. Two runs are
kept:

Both runs use GOA for taxon 160488 from QuickGO and UniProt proteome
UP000000556, all fetched on 2026-10-18.

uv run python projects/REFSEQ_GO/compare_refseq_goa.py \
  --accession GCF_000007565 --taxon 160488 --proteome UP000000556 \
  --locus-regex 'PP_\d+' --out-dir projects/REFSEQ_GO/results/PSEPK
# add --ncbi-source ftp to use the per-assembly GAF instead of the live record

The script resolves the accession through the NCBI Datasets v2 REST API and
rejects a superseded accession. NCBI's Python client (ncbi-datasets-pylib) was
retired at the end of 2024, so the REST API is called directly. Datasets genome
packages have no GO option. GO therefore comes either from the GenBank record's
/GO_function, /GO_process and /GO_component qualifiers, fetched with
E-utilities, or from the FTP GAF. The genome record does not say which model
named each protein, so that is read from the Evidence-For-Name-Assignment block
of the WP_ protein records. The annotation release and fetch times are recorded
in summary.yaml.

Identifiers and annotation releases

Live record vs FTP

Between the February 2025 annotation (FTP) and the February 2026 annotation
(live record), 742 of 5,483 shared genes (13.5%) changed GO: 934 terms were
added and 180 removed, 134 genes gained GO for the first time, and 316 product
names changed. Locus tags did not change. The conclusions hold on the newer
annotation:

FTP, RS_2025_02_17 live, RS_2026_02_04
shared loci with NCBI GO 3,413 3,513
exact agreement with GOA: NCBIFam / TIGRFAM / architecture 90% / 79% / 69% 91% / 80% / 66%
NCBI terms reviewers REMOVEd (wrong) 3.3% 3.2%
core MF covered, NCBI (GOA electronic 81%) 51% 52%
core BP covered, NCBI (GOA electronic 67%) 36% 37%
genes with GOA GO and no NCBI GO 780 699

Every model-level error listed under Failure modes is still
present in the live record.

Gene models differ, and the obvious join key is lossy

Genes are joined on the original PP_xxxx locus tag: from the RefSeq gene
old_locus_tag, and from UniProt's ordered locus name.

Coverage

Over the 5,390 shared loci NCBI GOA
loci with ≥1 GO term 3,413 (63%) 3,871 (72%)
distinct (locus, term) annotations 8,264 17,246

GOA has about twice as many terms per gene. This is the expected result of a
union against a single source.

Agreement by NCBI evidence source

Each NCBI term was compared with the GOA terms for the same locus and aspect,
closure-aware over is_a and part_of. Only locus–aspect pairs annotated on
both sides are counted here; the rest appear in the TSV as
other_side_no_aspect.

NCBI source proteins named terms compared exact GOA more specific GOA more general NCBI only
ArchId (CDD/SPARCLE architecture) 1,593 3,082 69% 5% 8% 18%
HMM: TIGRFAM 911 2,255 79% 4% 6% 11%
HMM: NCBIFam (incl. wrapped Pfam) 885 1,808 90% 2% 1% 7%
BlastRule 11 46 100% — — —

Most NCBI-only terms from architectures are broad ligand-binding or
transport terms, such as metal ion binding (91), ATP binding (45),
ABC-type transporter activity (31) and monoatomic ion transport (30). This
fits domain-architecture-level GO. Those terms have not yet been checked against
curated reviews.

From the GOA side, the sources least represented in NCBI are UniRule (46% of
compared terms have no NCBI counterpart), TreeGrafter (42%) and ARBA (31%).
InterPro2GO is 17%. The top GOA-only terms are UniRule's DNA-templated transcription (155 loci) and generic DNA binding and transmembrane transport.

Experimental GOA annotations (EXP/IDA/IMP/IPI/IEP, 147 rows) are mostly
uncovered by NCBI. In aspects where both sides annotate, 16 match exactly, 2 are
more specific in NCBI, 17 are more general in NCBI, and 40 have no NCBI
counterpart.

Staleness

The KT2440 GAF was generated in June 2025 against GO 2025-03-16, and has not
been refreshed since. 49 of its 1,626 distinct terms (3%) are obsolete in the
current GO. Most belong to the 2025–2026 obsoletions of "via X" pathway
variants and amino-acid metabolism, e.g. GO:0009089, GO:0006542 and
GO:0051082. The comparison counts these as NCBI-only.

Comparison results (KT2440)

Script: analyze_refseq_goa.py. The numbers in
this section are from the February 2025 (FTP) run; the same tables for the live
run are in results/PSEPK/. Generated tables:
analysis.yaml,
ncbi_review_cases.tsv,
goa_errors_vs_ncbi.tsv and
core_coverage.tsv. Cases checked by hand, and
re-checked against the live record:
failure_cases.yaml.

uv run python projects/REFSEQ_GO/analyze_refseq_goa.py \
  --results-dir projects/REFSEQ_GO/results/PSEPK --species PSEPK

Level 1: gross differences across the genome

Over 5,390 shared loci NCBI loci GOA loci both NCBI only GOA only NCBI terms GOA terms
molecular function 3,010 3,306 2,579 431 727 4,571 8,367
biological process 2,276 2,840 1,929 347 911 2,649 5,297
cellular component 944 2,309 830 114 1,479 1,044 3,582

Level 2: by source

From the NCBI side, agreement falls in this order: BlastRules (100% exact),
NCBIFam (90%), TIGRFAM (79%), then architectures (69%; 18% NCBI-only); see
Agreement by NCBI evidence source. From the
GOA side (with combined GO_REF:0000120 rows credited to each contributing
pipeline), the terms NCBI least often supports are GO inter-ontology links (55%
have no NCBI counterpart), TreeGrafter BP (35%) and UniRule BP (33%). InterPro2GO
MF terms more often have a more specific NCBI counterpart (19%) than none
(14%).

Level 3: against 956 curated reviews

Reviewers judged GOA rows, not NCBI rows. So an NCBI term shared with GOA
inherits the reviewer's verdict, and an NCBI term absent from GOA is judged only
by its relation to the accepted and removed terms. Terms with no such relation
are unassessed, and these were checked by hand (below).

terms correct (accepted or implied) modified too general over-annotated (other) wrong (REMOVE) unassessed
NCBI, all 2,078 69.5% 6.1% 4.7% 4.5% 3.2% 10.8%
NCBI TIGRFAM 1,071 75.9% 4.9% 2.9% 3.6% 2.1% 9.7%
NCBI NCBIFam 661 67.2% 7.3% 6.5% 7.1% 5.1% 5.4%
NCBI architecture 346 54.1% 7.5% 6.6% 2.0% 3.5% 24.3%
GOA electronic, all 4,926 68.4% 7.9% 11.6% 5.0% 4.8% 0.5%
GOA InterPro2GO 2,690 62.5% 9.3% 17.2% 5.4% 4.3% 0.1%
GOA TreeGrafter 1,486 81.0% 5.4% 2.2% 4.2% 4.7% 0%
GOA UniRule 1,658 83.8% 4.1% 4.7% 3.7% 2.2% 0.8%
GOA ARBA 592 69.9% 7.3% 15.4% 2.7% 2.2% 1.5%

"Correct" adds terms that are proper ancestors or descendants of an accepted
term. "Too general" is a term the reviewer marked over-annotated that is an
ancestor of a term the reviewer accepted: true, just less specific. Rows do not
sum to 100% because undecided (1–3%) is omitted. GOA terms agreed by several
pipelines (GO_REF:0000120) count for each of them. Among NCBI's HMM sources,
NCBI's own NCBIfam models have more wrong (5.1% against 2.1%) and more
too-general terms (6.5% against 2.9%) than TIGRFAM, mostly broad cofactor and
category terms (carbohydrate metabolic process, membrane, metal ion binding, ATP binding) attached to otherwise specific models.

Core-function coverage (terms in the reviews' core_functions):

covered (same or more specific) only a more general term missed
core MF (917), NCBI 466 (51%) 110 (12%) 341 (37%)
core MF, GOA electronic 743 (81%) 55 (6%) 119 (13%)
core BP (1,042), NCBI 378 (36%) 145 (14%) 519 (50%)
core BP, GOA electronic 700 (67%) 85 (8%) 257 (25%)

NCBI covers a core function that GOA's electronic pipelines miss in only 7 MF
and 31 BP cases. The reverse happens in 211 MF and 266 BP cases.

GOA errors and NCBI. Of the 115 InterPro2GO terms that reviewers removed, NCBI
asserts the same term in 66. That much overlap suggests the two share
provenance for part of their family→GO mappings. Of the 70 TreeGrafter terms
removed, NCBI asserts one.

Failure modes

Every case below is recorded in
failure_cases.yaml.

Errors only NCBI makes. These come from the 224 unassessed NCBI terms. 64 of
those are obsolete terms (GO-version lag), not mapping errors. Among the rest,
the following are clear errors. Where marked (model), the GO is listed on the
HMM itself in hmm_PGAP.tsv, so one fix corrects every genome.

Errors only GOA makes, which NCBI's specific equivalogs avoided. Paralog
transfers dominate. TreeGrafter: Mqo1–3 → (S)-2-hydroxyglutarate dehydrogenase,
DapE → acetylornithine deacetylase, MetX → the acetyl- rather than
succinyltransferase activity, KdsC → a cytidylyltransferase, PhnX →
phosphoglycolate phosphatase, Gcl → valine biosynthesis. InterPro2GO: GlyS →
arginine-tRNA ligase, ThiI → CCA-adding activity, PurC → cobalamin
biosynthesis.

Errors both make (66 reviewer-removed terms that NCBI also asserts):
- Complex activity given to one subunit: the DNA polymerase III β, ε and τ subunits
given polymerase activity; EutC, CarA, NirD and SoxG.
- Wrong cofactor: NAD binding on the NADP-specific Icd; 2Fe-2S binding on PrpD,
which has no cluster; ATP binding on DnaJ and GroES.
- Paralog substrate: PssA given PgsA's reaction; NH3-dependent NadE given glutamine
activities.
- Reversed direction: GpsA as catabolic, Dfp as pantothenate catabolism.

Naming. Sometimes the name is the error. NCBI names PycB a sodium-extruding
oxaloacetate decarboxylase, where the review assigns pyruvate carboxylase. In the
other direction, UniProt still carries the 2002 submitter name for PP_3099 (puuD,
"uricase"), while NCBI correctly names it the T6SS sheath protein TssC.

Worked case: the ParAB chromosome-partition proteins

ParA and ParB were reviewed in P. putida KT2440 and in P. aeruginosa PAO1,
where both proteins have been characterized experimentally. Each review has a
companion PGAP prediction review that scores NCBI's GO term by term. The
orthologs are 84% (ParA) and 79% (ParB) identical, with identical Walker A
and CTP-binding motifs
(alignment), so any
difference between the two species comes from the pipelines, not the
biology.

protein NCBI naming source NCBI GO GOA GO reviewed core function
PSEPK/parA (PP_0002) architecture 11439703, "ParA family protein" ATP binding, ATP hydrolysis activity none ATP hydrolysis activity; chromosome segregation
PSEAE/parA (PA5563) BlastRule NBR012933, "chromosome partitioning protein Soj" none none ATP hydrolysis activity (IDA); chromosome segregation (IMP)
PSEPK/parB (PP_0001) architecture 11445026, "ParB/RepB/Spo0J family partition protein" DNA binding DNA binding, chromosome, chromosome segregation, positive regulation of sporulation sequence-specific DNA binding; CTPase activity; chromosome segregation
PSEAE/parB (PA5562) architecture 11445026 DNA binding as PP_0001, plus identical protein binding (IPI) and two UniRule transcription terms sequence-specific DNA binding (IDA); CTPase activity (IDA); chromosome segregation

Prediction reviews:
PP_0002,
PA5563,
PP_0001,
PA5562.

What the case shows:

Second genome: E. coli K-12, via WP_ records

E. coli K-12 MG1655 is one of the 15 curated references, so PGAP never runs on
its assembly. PGAP's GO is attached to non-redundant WP_ proteins, though, and
almost every MG1655 protein is identical to a WP_ protein that PGAP annotates in
other genomes. The compare script's --ncbi-source wp mode follows each UniProt
entry's WP_ cross-reference and reads GO and the naming model from the WP_
GenPept record. It compares proteins, not gene models.

uv run python projects/REFSEQ_GO/compare_refseq_goa.py \
  --accession GCF_000005845 --taxon 83333 --proteome UP000000625 \
  --locus-regex 'b\d{4}' --ncbi-source wp --out-dir projects/REFSEQ_GO/results/ECOLI_wp
uv run python projects/REFSEQ_GO/analyze_refseq_goa.py \
  --results-dir projects/REFSEQ_GO/results/ECOLI_wp --species ECOLI

The WP_ records are the freshest PGAP source. Run in wp mode on KT2440
(results/PSEPK_wp/), the 4,504
proteins reachable both ways have the same naming model in all cases and the
same GO in 4,247 (94%) when compared with the live February 2026 genome record.
Of the 257 differences, 184 are on WP_ records modified during 2026, and the
examples are obsolete terms the genome record still carries but the WP_ record
has replaced (GO:0019557 → GO:0006548, GO:0008785 → GO:0102039). WP_ records are
dated up to 2026-10-16. The cost is coverage: WP_ cross-references are missing
from 18% of KT2440 UniProt entries but only 7% of K-12 entries (4,112 of 4,403
have one).

Results against experimental GO. K-12 has experimental GO on 3,328 of the
4,123 compared genes (results/ECOLI_wp/).
Experimental annotation is incomplete, so "no experimental support" means
unconfirmed rather than wrong.

NCBI (WP_ records) GOA electronic (IEA)
terms matching, or implied by, an experimental term 70.8% 74.2%
terms with no experimental support 26.4% 22.3%
experimental terms recovered, same or more specific 16.1% 41.5%
… MF / BP / CC 23.5% / 14.8% / 6.6% 49.9% / 30.8% / 43.8%

This repeats the KT2440 pattern: similar precision, much lower recall for NCBI.
The comparison favours GOA, whose rules and mappings are partly built from these
same experimental annotations (IBA is excluded from "GOA electronic" for that
reason). On KT2440 the experimental set is small (57 genes) but gives the same
picture: 13.6% recall for NCBI against 45.6% for GOA electronic.

BlastRules name well-studied proteins and give them no GO. Only 53% of the
K-12 WP_ records carry any GO, against 68% for KT2440. The difference is
BlastRules: they name 771 K-12 proteins (19%), and only 13 of those (2%) carry
GO. Examples are diacylglycerol kinase (NBR011105), 5'-deoxynucleotidase
(NBR007780) and the As(III)-sensing ArsR regulator (NBR009015). BlastRules are
anchored on characterised proteins, so they win the naming for exactly the
best-studied genes, and winner-take-all then discards the GO the HMMs would have
given. In KT2440, BlastRules name 92 proteins, 22% with GO.

A clean case is EntE (P10378, WP_000026812.1), named by BlastRule NBR012093
with no GO. InterPro shows it also matches two equivalog HMMs with the same name,
NF008192 (residues 2–534) and TIGR02275 (3–527), both carrying GO:0008668 and
GO:0019290. GOA has GO:0008668 from five EXP and one IDA annotation. In a sample
of 60 BlastRule-named K-12 proteins without GO, 25 matched a GO-bearing
NCBIfam/TIGRFAM model (InterPro's matches; PGAP does not publish its own hit
lists).

Third genome: Synechocystis PCC 6803

A cyanobacterium, so a third phylum. UniProt's reference proteome (UP000001425)
and RefSeq GCF_000009725.1 are the same assembly, so this is a same-genome
comparison like KT2440. There are no reviews in this repo, so experimental GO
(209 genes) is the only ground truth.

uv run python projects/REFSEQ_GO/compare_refseq_goa.py \
  --accession GCF_000009725 --taxon 1111708 --proteome UP000001425 \
  --locus-regex 's(?:ml|[lms][lr])[0-9]{4}[a-z]?' --out-dir projects/REFSEQ_GO/results/SYNY3

Joining needed a second key. 345 UniProt entries carry only a submitter
gene name (e.g. two different entries named bcp) and no ordered locus name,
and almost no entries have a WP_ cross-reference. The script now joins such
entries by identical sequence to a RefSeq translation, which recovered 282 of
them; 63 have no identical RefSeq protein, which suggests different gene calls.
The live record (RS_2026_01_07, PGAP 6.10) is again a release ahead of
Datasets (RS_2025_06_29).

Synechocystis (209 genes with experimental GO) genes with GO experimental terms recovered terms supported by experimental GO
NCBI actual 1,837 9% 53%
NCBI + family HMMs 1,973 11% 50%
NCBI + family + Pfam copies 2,192 15% 52%
GOA InterPro2GO only 1,799 15% 61%
GOA InterPro2GO + TreeGrafter + IBA 2,080 28% 62%
GOA electronic 2,001 50% 66%

The gap is wider than in KT2440 or K-12. Partly this is because the
experimental set leans on location (255 of 658 rows are CC, mostly thylakoid
membrane), where NCBI assigns little. But NCBI also recovers only 10% of the
experimental MF terms, against 54% for GOA. Examples:

The genome record lags the WP_ records. CcmL (sll1030) is named by
NF053795, which carries carboxysome GO, and its WP_ record (updated 2026-04-14)
has that GO; the January 2026 genome record does not. Across all proteins, the
genome record and the WP_ records agree on GO for 92.9% (Synechocystis) and
94.5% (KT2440), with the WP_ records generally the newer.

Counterfactual: NCBI without winner-take-all

What would NCBI's GO look like if a protein kept the GO of every NCBI model it
matches, not only the naming model? compare_refseq_goa.py --union-models
adds, to NCBI's actual GO, the GO of every matched HMM in hmm_PGAP.tsv:

Matches are InterPro's, from each UniProt entry's NCBIfam and Pfam
cross-references, because PGAP does not publish its hit lists. CDD/SPARCLE
architectures cannot be added: only the winning architecture is visible.

Scored with the corrected verdict split (see the next section), on KT2440:

genes with NCBI GO wrong (REMOVE) too general core MF core BP
NCBI actual 3,513 3.2% 5.9% 52% 37%
+ family HMMs (family) 3,643 3.6% 6.3% 57% 45%
+ Pfam copies too (all) 3,924 3.7% 10.9% 60% 48%

In E. coli K-12, experimental-term recall goes from 16% to 21% (family) and
23% (all). Results: results/{PSEPK,ECOLI_wp}_union_{family,all}/.

Pipeline variants scored the same way

analyze_refseq_goa.py now scores every annotation set identically
(pipeline_variants in analysis.yaml), and splits the reviewer verdicts:

GOA's combined rows (GO_REF:0000120) are credited to each pipeline in their
WITH/FROM, so pipeline subsets can be scored.

KT2440 (956 reviewed genes, 57 with experimental GO):

genes with GO correct too general wrong core MF core BP
NCBI actual 3,513 68.6% 5.9% 3.2% 52% 37%
NCBI + family HMMs 3,643 68.2% 6.3% 3.6% 57% 45%
NCBI + family + Pfam copies 3,924 63.6% 10.9% 3.7% 60% 48%
GOA InterPro2GO only 3,329 62.5% 17.2% 4.3% 54% 37%
GOA InterPro2GO + TreeGrafter + IBA 3,646 66.6% 12.9% 5.1% 64% 51%
GOA electronic without ARBA 3,837 69.0% 11.3% 4.8% 80% 66%
GOA electronic 3,869 68.4% 11.6% 4.8% 81% 67%
NCBI ∪ InterPro2GO + TreeGrafter + IBA 4,109 64.9% 11.3% 4.4% 69% 57%

E. coli K-12 (3,328 genes with experimental GO; only 83 reviewed genes, so
the review columns are noisy):

genes with GO experimental terms recovered terms supported by experimental GO
NCBI actual 2,193 16% 71%
NCBI + family HMMs 2,689 21% 69%
GOA InterPro2GO only 2,932 21% 73%
GOA InterPro2GO + TreeGrafter + IBA 3,328 47% 76%
GOA electronic 3,475 42% 74%

What this changes:

Examples of core functions NCBI misses and the family union recovers: RpoD
(named by NF004208, no DNA binding; TIGRFAM adds DNA binding and transcription
initiation), CbcX (named by a CDD architecture; TIGRFAM adds choline binding and
transport), DegP (named by NF008189; TIGRFAM adds serine-type endopeptidase
activity), FtsI (named by a BlastRule; NCBIfam adds penicillin binding).

Where NCBI's prokaryotic GO can be downloaded

NCBI's GO for KT2440 is in two places: the CDS features of the RefSeq genome
record, and the per-assembly GAF on the FTP site (a release behind). It is not in
gene2go, the GO file most tools take from NCBI. That file is keyed by NCBI Gene
ID, and KT2440 has no live Gene records.

Genome Live NCBI Gene records gene2go rows
P. putida KT2440 1 0
E. coli K-12 MG1655 4,652 41,101 (3,863 genes)
P. aeruginosa PAO1 5,698 22,779 (3,890 genes)
B. subtilis 168 4,537 0

Counts are from gene2go.gz dated 2026-10-18.

What "reference" means for GO. The reference genomes' RefSeq records take
their annotation from an outside group, not from PGAP, and carry no GO
qualifiers at all (0 in NC_000913.3 and NC_002516.2):

Their gene2go rows instead match the GO Consortium per-species files, which
UniProt generates (ECOLI-uniprot, PSEAE-uniprot, July 2026). Collapsed to
one row per protein, term and evidence code, these give 43,493 (E. coli) and
26,077 (PAO1) rows, against 41,101 and 22,779 in gene2go. The gap is about the
size expected from proteins without an NCBI Gene ID (3,863 vs 4,482 and 3,890
vs 4,388). So for reference genomes, gene2go carries UniProt-GOA's mix:
experimental, IBA and UniProt's electronic pipelines. For PAO1, PseudoCAP's own
curation is one contributor inside that file (2,066 of 32,020 rows,
assigned_by=PseudoCAP).

NCBI Gene pages show the same data, under a misleading label. The GO
section of a reference-genome Gene record matches the GO Consortium file
exactly: dnaA has 36 of 36 term–evidence pairs in common for E. coli
(GeneID 948217) and 11 of 11 for PAO1 (GeneID 878417). Each section carries one
attribution, "Provided by EcoCyc" or "Provided by PseudoCAP". For PAO1 dnaA,
none of the 11 rows were made by PseudoCAP (they are assigned_by GO_Central,
InterPro and UniProt), so the label names the organism's community resource,
not the source of the annotations. Only one gene per genome was checked.

gene2go has no source column, and its IEA rows have no PubMed ID (all 14,184
K-12 and 13,192 PAO1 IEA rows show -), so provenance cannot be read off it
directly.

PGAP's GO does not reach Gene or gene2go, even where Gene records exist.
"Reference genome" now means two sets. Since September 2024 it is the best
genome per species, about 23,700 prokaryotes (Datasets, 2026-10-18; the
May 2025 collection
had 21,794), nearly all PGAP-annotated
(terminology change).
The 15 "manually curated" references
(list) are the
submitter-annotated subset. Gene IDs go to reference genomes of species with at
least ten RefSeq assemblies, so PGAP genomes can have Gene records. The P. putida
species reference, NBRC 14164 (GCF_000412675.1, PGAP), has 5,573 live Gene
records, yet 0 gene2go rows and no GO on its Gene pages (checked for dnaA,
GeneID 45521526). gene2go and Gene's GO sections appear to carry GO Consortium
data only. Tools that take GO from NCBI through gene2go therefore never see
NCBI's prokaryotic pipeline annotation.

Unexplained: B. subtilis 168 has live Gene records, and the GO Consortium
has a BACSU-uniprot file with 21,806 rows for taxon 224308, but none reach
gene2go.

History of GO–NCBI contact on prokaryotic GO

Reconstructed from email and calendar records (C. Mungall's mailbox) and the two
public NCBI Insights posts.

Date Event
Oct 2019 Earth BioGenome Project annotation-standards committee. F. Thibaud-Nissen drafts first answers; CJM suggests recommending InterProScan, with InterPro2GO and phylogenetic GO, over BLAST-based transfer.
Feb 2022 NSF workshop on the future of protein function annotation. F. Thibaud-Nissen (NCBI) presents RefSeq prokaryotic GO.
2022-02-24 NCBI Insights: Bacterial and archaeal genomes with GO terms in RefSeq. GO comes from family models (Pfam via pfam2go, TIGRFAMs, NCBIFams, BlastRules) and covers 65M WP_ proteins. CDD architectures are named as future work.
2022-02-25 CJM raises the announcement on go-managers and asks how to compare the two pipelines on the same proteins (the katG example looked consistent). V. Wood notices that GO's published pfam2go dates from December 2020; the file had stalled on the GO side (go-site#1806) and is current again by 2022-04-29. A. Bridge confirms that pfam2go is derived from InterPro2GO, and knows of no UniProt–NCBI coordination. PDT proposes asking NCBI for one GO_REF per IEA method.
Mar–Apr 2022 CJM and P. Thomas identify Françoise as the contact. On 2022-04-13 PDT writes to her about offering GAF downloads and GO_REFs for IEA methods. NCBI replies that it does not offer GAFs yet and asks about demand.
2022-04-29 Call "GO annotation on RefSeq proks" (GO: CJM, PDT; NCBI: Thibaud-Nissen, Haft, W. Li, J. Virothaisakun).
May 2022 CJM finds that hmm_PGAP.tsv carries only 1 of 3 pfam2go terms for PF00539. NCBI finds an import bug that kept only one GO term per Pfam, fixes it in HMM release 9.0, and back-fills RefSeq proteins. NCBI states that GO is an attribute of HMMs, BlastRules and CDD architectures, propagated only to the proteins those models name, and that architecture GO is not yet propagated.
Jul 2022 T. Murphy (RefSeq lead) asks GO for a recommended pipeline for eukaryotic RefSeq. CJM suggests reference-proteome mappings or InterProScan. PDT missed the email and it was picked up in May 2023.
May–Sep 2023 Eukaryotic RefSeq builds its own GO pipeline, separate from PGAP: InterProScan ≥5.63 with InterPro2GO plus PANTHER/TreeGrafter GO (parsed from the XML output), anchored to NCBI GeneIDs and reduced to the most specific terms. PDT advises on the GAF columns: a separate reference per method, WITH/FROM InterPro:IPR… or PANTHER:PTN…. T. Murphy settles on NCBIGene in column 1 and protein in column 12.
Mar 2023 NCBI starts propagating GO from CDD architectures.
2023-05-10 NCBI Insights: GO terms on 100M+ RefSeq prokaryotic protein records, a 55% increase attributed to CDD architectures.
Aug 2025 CJM asks NCBI for a stable link for PGAP HMM ids, Bioregistry prefix registration, and family→GO mappings, after GO obsoleted GO:0042192, which PGAP families used. Françoise has changed role; W. Klimke now leads prokaryotic RefSeq/PGAP. hmm_PGAP.tsv holds the HMM mappings only. No integrated dump covers all models (BlastRules, architectures), but NCBI offers a one-off dump.
Sep 2025 CJM proposes to D. Haft that NCBIFam→GO mappings be checked before GO obsoletions, as InterPro2GO is. Klimke confirms per-assembly GAFs on the FTP site. B. subtilis 168, E. coli K-12 and the other community reference genomes lack GAFs, and the FTP refresh is backlogged. A. Marchler-Bauer explains that gene symbols come from only a few architectures, so many proteins have no symbol (go-site#2549 relaxes the GAF symbol requirement). CJM gives two use cases: easier community access to the GAFs, and systematic pipeline comparison.
Apr 2026 While GO plans a breaking pipeline change, CJM's survey of downstream consumers (geneontology/go-db-users, private) finds that most tools take GO from NCBI, then EBI-GOA, then GO's own downloads.
2026-10-18 P. Thomas recirculates the NCBI Insights posts and suggests adding NCBI to GO's download instructions and renewing contact. This project starts.

Next steps