Add Gao-Her-DUF system - #1242
Conversation
There was a problem hiding this comment.
Approving. This is a faithful instance of the merged Gao-family pattern and I found no defects.
Checks that passed:
- Identity.
traitmech:000361is unique acrossdata/traits/and continues the sequence aftertraitmech:000360(Gao-TerY, #1241).METPO:1031500andmetpo_traitmech_v238are unused elsewhere. Parenttraitmech:000209resolves todata/traits/genomics/phage_defense_system.yaml, label "phage defense system" — matches the node grounding. - Predicates.
RO:0002326= "contributes to" andrdfs:subClassOf= "is a" matchmappings/predicate_grounding.tsv(both*/*domain/range).METPO:2007700"confers" is used with aBIOLOGICAL_PROCESSsubject and aTRAITobject, both inside that row's gated type lists. - Graph structure. All three edges reference declared nodes, and all four nodes sit on the connected path
gao_her_duf_locus → gao_2020_antiviral_cassette_defense → gao_her_duf_system_trait → phage_defense_system. Nothing orphaned or unreachable from the trait node. - Enums.
RELATED_SYNONYM,NONMECHANISTIC,TRAIT,GENETIC_ELEMENT,BIOLOGICAL_PROCESSare all intraitmech.yaml;KNOWLEDGE_GAPis inmech_shared.yaml;CurationEvent.actionis an unconstrained string. - Derived artifacts. README's 756 total and 153 PROPOSED genomics both match live file counts.
pages/traits/genomics/gao_her_duf_system.html,priority.json,discussions/data.js, and the threereports/*.tsvdeltas are all present and consistent; the history record underhistory/records/gao_her_duf_system/is there.
One correct detail worth naming, since it is where this record diverges from its siblings: the Gao_Her_DUF synonym is sourced to DefenseFinder_rules.tsv rather than List_system_article.md, and the article-registry evidence note says "the broader Gao_Her family key." That is the right call — Gao_Her_DUF is a subsystem key that does not appear in the article registry — and the record does not overclaim by listing Gao_Her itself as a synonym.
Scope note on my verification: this review environment has no network access, so I could not re-fetch the three pinned defense-finder-models files at afb0e5a8b4 or the PMID:32855333 abstract to confirm the snippets are verbatim. What I could check: the PMID sentence is byte-identical to the one carried by ten merged Gao-family records; the List_system_article.md row (including the escaped 10\\.1126/science\\.aba0372) matches those records exactly; and the two Liste_hmm_system.md rows reproduce the upstream fixed-width column padding correctly for the new, longer profile names (49/23/24/7 characters, same as the differently-sized TerY rows). That is strong but indirect evidence. The direct evidence remains your scripts/verify_snippets.py --record ... run.
Summary
Adds
traitmech:000361for the Gao-Her-DUF phage-defense system as aGENOMICS/CLASS/PROPOSEDTraitRecord.The record interprets
Gao_Her_DUFas a genome-level DefenseFinder Gao-family system possession trait and keeps theGao_Her_DUF__DUF4297andGao_Her_DUF__HerA_DUFHMM profile rows asRELATED_SYNONYMprovenance/evidence, not individual protein traits.Identity and Evidence
traitmech:000361traitmech:000209phage defense systemMETPO:1031500inproposals/metpo_traitmech_v238DOI:10.1126/science.aba0372PMID:32855333List_system_article.mdatafb0e5a8b466be53586b13266f5d38d98c3ac268DefenseFinder_rules.tsvatafb0e5a8b466be53586b13266f5d38d98c3ac268Liste_hmm_system.mdatafb0e5a8b466be53586b13266f5d38d98c3ac268Curation
data/traits/genomics/gao_her_duf_system.yamlhistory/records/gao_her_duf_system/2026-09-22T093443Z-codex-da0d31.yamlscripts/add_gao_her_duf_system_trait.pyMETPO:1031500inproposals/metpo_traitmech_v238POST_444_CANONICAL_EXAMPLE_QUEUEValidation
.venv/bin/linkml-validate -s src/traitmech/schema/traitmech.yaml --target-class TraitRecord data/traits/genomics/gao_her_duf_system.yaml.venv/bin/python scripts/validate_strict.py data/traits/genomics/gao_her_duf_system.yaml.venv/bin/python scripts/verify_metpo_proposal.py proposals/metpo_traitmech_v238.venv/bin/python scripts/validate_history_links.py history/records/gao_her_duf_system.venv/bin/python scripts/backfill_canonical_examples_444.py.venv/bin/python scripts/render_trait_pages.py.venv/bin/python scripts/trait_priority.py --dashboard --top 80PYTHONPATH=/Users/marcin/Documents/VIMSS/ontology/KG-Hub/KG-Microbe/culturebotai-claw/src .venv/bin/python -m kg_microbe_discussions --config conf/discussions_config.yaml --output app/discussions.venv/bin/python scripts/audit_graph_protein_taxa.py --fail-on gaps.venv/bin/python scripts/ground_causal_nodes.py.venv/bin/python scripts/audit_proposals.py.venv/bin/python scripts/audit_evidence_snippets.py.venv/bin/python scripts/audit_schema.py.venv/bin/python scripts/audit_writers.py.venv/bin/python scripts/verify_metpo_proposal.py --coverage.venv/bin/python scripts/audit_causal_graphs.py.venv/bin/python scripts/ground_causal_predicates.py.venv/bin/python scripts/audit_biolink_curies.py.venv/bin/python scripts/audit_predicate_domains.py --fail-on new.venv/bin/python scripts/audit_discussions_data.py.venv/bin/python scripts/audit_canonical_examples.py --no-resolve.venv/bin/python scripts/check_biolink_coverage.py.venv/bin/python scripts/audit_exact_synonyms.py --collisions-only.venv/bin/python scripts/audit_unapplied_groundings.py.venv/bin/python scripts/audit_discussion_anchors.py.venv/bin/python scripts/pr_sanity.py.venv/bin/python scripts/audit_justfile_paths.py.venv/bin/python scripts/audit_qc_paths_coverage.py.venv/bin/python scripts/run_trait_graph_audit.py --verify.venv/bin/python scripts/check_sources.py.venv/bin/python scripts/verify_snippets.py --delay 2 --record data/traits/genomics/gao_her_duf_system.yaml.venv/bin/ruff check src scripts tests.venv/bin/python -m pytest tests/test_readme_artifacts.py tests/test_trait_priority.py -v --tb=short.venv/bin/python -m pytest -q.venv/bin/python scripts/audit_history_records.py --base origin/maingit diff --checkgit diff --cached --check