Knowledge base of microbial cell structures — organelles, envelope layers, appendages, microcompartments, inclusions, cytoskeletal systems and the multi-protein complexes that build them — one evidence-backed, ontology-grounded YAML record per structure.
CellStructureMech is the structural counterpart of TraitMech (phenotypes), ProteinTraitsMech (proteins), HabitatMech (habitats), CultureMech (growth media), MediaIngredientMech (ingredients) and CommunityMech (communities), and follows the curation pattern established by dismech: one YAML per entity, ontology-grounded, evidence-backed, closed-schema validated, curated incrementally with an append-only audit trail.
Browse the corpus online → — every record, by category, with components, distribution, functions and mechanism graphs. The site also includes a text embedding map with full-vector nearest neighbours.
TraitMech says an organism is flagellated; ProteinTraitsMech says what
FliC is. Neither says what a flagellum is made of, which clades have one,
how the stator turns the rotor, or which trait it confers. That machine-level
layer — the thing between a phenotype and a protein — is what a
CellStructureRecord holds:
| Section | Question it answers |
|---|---|
components |
What is it built from? Families, complexes, RNAs, lipids — with stoichiometry, essentiality, and taxon-paired UniProt examples |
taxonomic_distribution |
Who has it, and how consistently? |
functions |
What does it do (GO), with evidence? |
associated_traits |
Which TraitMech phenotype does it confer or diagnose? |
causal_graphs |
How does it assemble, work, and get regulated? Every edge cited. |
part_of / has_part / parent_structures |
Where does it sit in the cell's part hierarchy? |
Granularity: a record is a structure you could point to in a micrograph — from a whole organelle down to a discrete multi-protein complex (ribosome, flagellar motor, ATP synthase). Individual proteins are components of records, not records; phenotypes are TraitMech records. See docs/CURATION.md.
19 structure records are currently committed.
| Category | Records | Status | Records | |
|---|---|---|---|---|
| ENVELOPE | 4 | PROPOSED | 19 | |
| APPENDAGE | 2 | |||
| DIVISION_MACHINERY | 2 | |||
| MICROCOMPARTMENT | 2 | |||
| CYTOSKELETON | 1 | |||
| ENERGY_COMPLEX | 1 | |||
| INCLUSION | 1 | |||
| MEMBRANE_ORGANELLE | 1 | |||
| NUCLEOID | 1 | |||
| OTHER | 1 | |||
| RIBONUCLEOPROTEIN | 1 | |||
| SECRETION_SYSTEM | 1 | |||
| SPORE | 1 |
17 records are grounded in GO; 2 carry minted identifiers. 19 list components, 19 carry causal graphs (152 evidence-backed edges), 8 link to TraitMech traits, and 5 carry licensed, cited imaging evidence.
Run just report for the live report. Every current record is
PROPOSED — drafted from the cited literature with LLM assistance and not
yet reviewed by a second curator.
just install # uv sync --extra dev
just report # corpus stats
just validate-all # closed-mode schema validation of every record
just test # unit + corpus-integrity tests
just render # regenerate the site under pages/
just text-map-check # cached text vectors and derived map match the corpus
just qc # everything CI runsTo add a record:
just new-record --identifier GO:0030313 --label "cell envelope" \
--category ENVELOPE --kind ENVELOPE_LAYER --curator you # dry run
just new-record ... --apply # writeThen fill in the YAML, run just validate-all, just render, and
just docs-stats, and open a PR.
GO cellular component is the primary grounding: a record whose structure is
exactly a GO term uses that CURIE (GO:0005840 ribosome). When no GO term is
an exact fit, the record mints a cellstructuremech: identifier and records
the nearest broader term in parent_structures. See
docs/CURATION.md.
src/cellstructuremech/schema/cellstructuremech.yaml defines
CellStructureRecord; docs/SCHEMA.md walks through it.
The causal-graph classes share TraitMech's vocabulary so tooling can move
between the two. mech_shared.yaml (Discussions, Datasets) is vendored
byte-identically across the Mech repos from culturebotai-claw, and checked
against it by just vendored-check.
CellStructureMech/
├── data/structures/<category>/<slug>.yaml # the records
├── data/embeddings/ # pinned text vectors, PCA map, neighbours
├── src/cellstructuremech/
│ ├── schema/cellstructuremech.yaml # LinkML schema
│ ├── schema/mech_shared.yaml # vendored from claw (Discussions, Datasets)
│ ├── schema/history.yaml # vendored from claw (repository history records)
│ ├── validation/write_validated.py # write-time closed-schema gate
│ ├── curate/curation_event.py # append-only audit trail helper
│ └── templates/ # site templates
├── scripts/
│ ├── check_curies.py # resolve every identifier at its authority
│ ├── new_record.py # scaffold a record through the gate
│ ├── validate_strict.py # closed-mode corpus validation
│ ├── render_pages.py # generate pages/
│ ├── build_text_embedding_map.py # local embeddings + deterministic map
│ ├── corpus_report.py # stats
│ ├── check_docs.py # README stats block
│ └── run_qc.py # the CI gate
├── pages/ # generated site (committed)
├── index.html # redirect to pages/ for GitHub Pages
├── research/ # research notes: evidence for curators, never record input
├── curation/source_queue.tsv # ranked data-source queue (checked in qc)
├── conf/id_label_targets.yaml # id<->label gate targets and accepted residuals
├── history/<kind>/<slug>/*.yaml # append-only curation history (claw history.yaml schema)
├── scripts/.vendored_canon_ref # claw commit the vendored files are pinned to
├── conf/sources.yaml # what the pipeline reads
├── docs/ # CURATION.md, SCHEMA.md, SOURCE_QUEUE.md (legend)
├── .claude/skills/ # agent workflows (source-queue, review-open-issues)
└── tests/
CC0-1.0 for everything this project authored — records, schema, scripts, pages, prose. Third-party material it redistributes keeps its own licence: each hosted image records its licence and attribution in the record that displays it, and text derived from CC BY sources (UniProt Subcellular Location, Complex Portal) names its source in an evidence reference. Only CC0, public-domain and CC BY material is hosted; CC BY-SA, CC BY-NC and ND are cited and linked, never copied. See LICENSE for the full statement and #46 for the decision.