Pilot 1 — E. coli genome-wide coherence

IN_PROGRESS PIPELINE

Pilot 1 — E. coli MG1655 genome-wide coherence

First working pilot for Genome-wide validation. It scores
the whole E. coli MG1655 annotation set against GO has_part dependencies and turns each
unsatisfied dependency into a concrete curation lead — no curated module required, run
end-to-end from public data.

Bottom line

What the leads look like

The 17 violations triage cleanly — this triage is the point, because each class routes to a
different curator action:

Class Examples Likely meaning Action
Genuine biological gap denitrification pathway → missing nitrous-oxide reductase activity E. coli K-12 is not a complete denitrifier (no NosZ); the pathway term is over-reaching review the denitrification pathway annotation; confirm absence with sequence search
Annotation-granularity gap DnaB-DnaC / DnaA-DiaA / DnaB-DnaG complexes → missing sub-complex terms; tRNA CCA addition → missing its two MF activities; molybdopterin cofactor biosynthesis → missing MPT-synthase sulfurtransferase the gene is present; only the finer GO term is unannotated add the missing MF/CC annotation
Probable over-annotation heterochromatin formation, establishment of integrated proviral latency, virion attachment to host cell on E. coli prophage-gene or electronic propagation of eukaryote/virus-centric terms candidate REMOVE / MARK_AS_OVER_ANNOTATED; feeds the over-annotation work

That a single genome-scale check simultaneously surfaces a metabolic over-reach, a batch of
missing complex/MF annotations, and a set of implausible eukaryote/viral terms — from nothing
but GO axioms + a GAF
— is the pilot's proof of concept.

Run it

uv run python coherence_pilot.py

Downloads (cached under cache/, git-ignored) go.obo (~37 MB) and ecocyc.gaf.gz (~1 MB),
then writes RESULTS.md and violations.tsv next to the script. Re-running is offline once
cached.

Method (brief)

  1. Dependencies: parse asserted relationship: has_part axioms from go.obo → pairs
    (C, F) meaning "C has part F".
  2. Present set: collect non-NOT GO ids from the GAF, close upward over is_a+part_of
    (the GO true-path rule) — so a class counts as present if it or any descendant is annotated.
  3. Coherence: a pair is activated when C is present; unsatisfied when F is not.
    coherence = 1 − |unsatisfied| / |activated|.

Honest limitations