Microbial ecophysiological trait knowledge base, seeded from METPO and curated incrementally.
TraitMech is the trait/phenotype counterpart of CultureMech (growth media), MediaIngredientMech (chemical ingredients), and CommunityMech (microbial communities). Each trait — Gram type, motility, pH optimum, "uses as carbon source", "halophilic", etc. — lives in its own YAML file with provenance back to its METPO source class and (optionally) to literature evidence.
Initial seed (from data/raw/metpo.owl, METPO 2025-11-25):
| Category | Count |
|---|---|
| MORPHOLOGY | 65 |
| PHYSIOLOGY | 31 |
| ENVIRONMENT | 103 |
| METABOLISM | 108 |
| GENOMICS | 5 |
| ECOLOGY | 10 |
| OBSERVATION | 20 |
| QUANTITATIVE_PROPERTY | 7 |
| UPPER | 5 |
| TOTAL | 354 |
(material entity subtree — chemicals / microbes / enzymes — is not
seeded; those belong in MIM / CultureMech.)
just install # uv sync --extra dev
just gen-schema # generate dataclasses from LinkML
just seed-from-metpo # dry-run; print per-category counts
just seed-apply # write data/traits/<category>/<slug>.yaml
just validate-all # validate every TraitRecord YAMLsrc/traitmech/schema/traitmech.yaml defines:
- TraitRecord — root class, one per YAML file. Carries
identifier(METPO CURIE),label,definition,parent_traits,xrefs,synonyms,trait_category,term_kind, optionalevidence, optionalcuration_history, and optional inlinecausal_graphs. - CausalGraph / CausalNode / CausalEdge — evidence-backed causal
mechanism graphs for trait pages. Nodes can represent traits,
pathways, environmental factors, experimental factors, genes/proteins,
chemicals, organelles, cellular localizations, molecular functions, or
biological processes. Use ontology/database CURIEs in
groundingwhen available; label-only draft nodes are permitted in v1. - TraitSynonym / EvidenceItem / CurationEvent — ancillary classes.
- TraitCategoryEnum — the 10 buckets above.
- TermKindEnum —
CLASS/DATATYPE_PROPERTY/OBJECT_PROPERTY/ANNOTATION_PROPERTY. - MappingStatusEnum —
SEEDED/REVIEWED/DEPRECATED. - PriorityEnum, SynonymTypeEnum.
TraitMech/
├── data/
│ ├── raw/metpo.owl # vendored METPO release (2025-11-25)
│ └── traits/<category>/<slug>.yaml # 354 seeded TraitRecords
├── src/traitmech/
│ └── schema/traitmech.yaml # LinkML schema
├── scripts/
│ └── seed_from_metpo.py # OWL → YAML seeder
├── tests/
└── docs/
- Refresh upstream:
just refresh-metpocopies the latestmetpo.owlfrom../assays/assay-metadata/. - Seed:
just seed-applycreates new YAMLs without touching existing ones (use--forceto overwrite). - Curate: edit
data/traits/<category>/<slug>.yamldirectly; setmapping_status: REVIEWED, append aCurationEvent, attachEvidenceItemblocks with PMID + verbatim snippet. - Add causal graphs: add
causal_graphsonly when the trait has source-backed mechanism structure. EveryCausalEdgemust include edge-levelevidence; prefer grounded CURIEs for nodes and predicates when a suitable ontology or database term is known. - Validate:
just validate-allrunslinkml-validateover every record.
TraitMech mirrors DisMech's deep-research-client workflow for agentic
curation support. Use Falcon/FutureHouse research reports as source-finding
inputs, then manually curate only DOI-backed claims into TraitRecord YAML.
export EDISON_API_KEY=... # or FUTUREHOUSE_API_KEY; the wrapper maps it
just research-provider falcon
just research-trait falcon physiology autotrophic
just research-trait falcon physiology autotrophic --dry-runReports are written under research/traits/<category>/ with separate citation
files. The API key is read from the environment and is never written by the
TraitMech tooling.
- Records preserve their METPO CURIE in
identifierso trait references in CultureMech / MediaIngredientMech / kg-microbe (where METPO terms already appear) resolve directly to a TraitMech YAML. xrefscarries equivalents in PATO / GO / NCIT / ENVO / CHEBI / UO for cross-ontology lookup.
CC0-1.0 — Public Domain Dedication.