ARBA deployment check: when does an activity entail a process?

Warnings (2)

ARBA deployment check

parent project ← Pathway satisfiability

A runnable prototype that applies the module satisfiability engine to automated
biological-process calls from UniProt's ARBA rules (GO_REF:0000117).

The idea

An ARBA process call made from one sequence bundles two inferences:

  1. sequence → activity. Does the protein catalyse the reaction? This is local
    to the sequence (family, FunFam, catalytic residues).
  2. activity → process ("deployment"). Is that activity used in the process
    in this organism? This depends on the rest of the genome: whether the other
    steps exist, whether a paralog does the job, whether the enzyme's role lies
    elsewhere.

GO does not encode the second inference. For example, GO:0004617
phosphoglycerate dehydrogenase activity has no part_of link to GO:0006564
L-serine biosynthetic process; its only non-subclass relations are its
substrates and products. Curated modules do encode it, so the check makes it
explicit:

Protein P is involved_in process T in organism O if (a) P's own
molecular-function annotations fill a step of a module whose process concept
is T or a descendant of T, and (b) that module is satisfiable in O. A step
holds if any O protein has a GOA annotation to the step's activity (QuickGO,
any evidence, is_a descendants included).

Modules with context.taxa apply only to organisms inside those taxa.

Verdict Meaning
ENTAILED P fills a step of an applicable module under T, and that module is satisfiable in O
MODULE_INCOMPLETE P fills a step, but every such module has a step with no O protein
NOT_ENTAILED modules under T exist, but P's activities fill none of their steps
NO_MODULE no applicable module falls under T; not scored

exact_concept in results.tsv records whether the module's process concept is
the row's term itself (True) rather than a descendant of it.

Results

Current output is in RESULTS.md; per-row detail is in
results.tsv. The figures below are from the run of 2026-10-17
(4,058 ARBA process rows in reviewed genes; 1,617 scored), and RESULTS.md
emits the same table on every run.

Share of rows the gene review kept (ACCEPT or KEEP_AS_NON_CORE) or rejected
(REMOVE, MARK_AS_OVER_ANNOTATED or TOO_GENERAL), by verdict:

Verdict Module concept Rows Kept Rejected
ENTAILED exact 220 93% 4%
ENTAILED ancestor of concept 655 62% 19%
MODULE_INCOMPLETE exact 26 92% 4%
MODULE_INCOMPLETE ancestor of concept 55 78% 5%
NOT_ENTAILED exact 119 80% 10%
NOT_ENTAILED ancestor of concept 542 59% 27%

What the numbers say:

The case that motivated this

P. putida serA (Q88CM5) and M. extorquens serA (C5APD6) receive
GO:0006564 L-serine biosynthetic process only from ARBA (rule
ARBA00093701, a single CATH FunFam condition); no other pipeline reaches it.
Both are ENTAILED: each fills the phosphoglycerate dehydrogenase step of
phosphorylated_serine_biosynthesis, and the SerC and SerB steps are filled by
other proteins in each proteome. The ARBA call is therefore backed by the module
rather than being asserted without stated grounds.

Caveats

Reproduce

uv run python projects/PATHWAY_SATISFIABILITY/arba_deployment/deploy_check.py

QuickGO and UniProt taxonomy responses are cached under .cache/arba_deployment/
(git-ignored); a first run takes about 20 minutes and makes roughly 11,000
QuickGO requests.