BiologicalProcessDescriptor.notes | string | Additional notes |
|---|
BiologicalProcessDescriptor.preferred_term | string | Human-readable process name |
|---|
BiologicalProcessDescriptor.term | Term | GO biological process term |
|---|
CommonTaxon.curation_history | CurationEvent | Append-only audit trail of curation actions on this record. |
|---|
CommonTaxon.genes | GeneAnnotation | Genes known to support this taxon's community role(s) or specific interactions, with standardized gene/genome ids and evidence. |
|---|
CommonTaxon.genomes | GenomeRecord | Reference genome assembly(ies) for this taxon. |
|---|
CommonTaxon.id | string | Unique identifier for this common-taxon record. |
|---|
CommonTaxon.notes | string | Additional notes about this taxon record. |
|---|
CommonTaxon.taxon_term | TaxonDescriptor | NCBITaxon-grounded organism this record describes. |
|---|
CommunityEngineeringDesign.assembly_strategy | string | How member strains were selected and assembled |
|---|
CommunityEngineeringDesign.counter_selection | CounterSelection | Candidates deliberately excluded during assembly, and why. The schema could express what a community IS but not what it was deliberately NOT, so a screening constraint had only two homes: an `ecological_interaction`, which asserts an edge between members and is wrong when the excluded strains are not members, or prose in `notes`, which no consumer can query (#307).
Not an interaction: these subjects are outside the community by construction, which is why they live here rather than in `ecological_interactions` (#300, #305). |
|---|
CommunityEngineeringDesign.evidence | EvidenceItem | Evidence supporting the engineering-design description |
|---|
CommunityEngineeringDesign.inoculation_strategy | string | How the initial inoculum was composed and introduced |
|---|
CommunityEngineeringDesign.measurement_endpoints | string | Primary readouts used to evaluate design outcomes |
|---|
CommunityEngineeringDesign.notes | string | Additional engineering-design details |
|---|
CommunityEngineeringDesign.objective | string | Primary design objective or experimental hypothesis |
|---|
CommunityEngineeringDesign.passaging_regimen | string | Serial transfer or cultivation regimen used for stabilization and selection |
|---|
CommunityEngineeringDesign.perturbation_design | string | Planned perturbations applied to probe or tune community behavior |
|---|
CommunityEngineeringDesign.protocol_url | string | URL to an assembly or cultivation protocol, if available |
|---|
ComputationalProvenance.input_accession | string | Accession(s) or DOI for the model or its input data (e.g. genome/SRA accessions, a model repository DOI). Free text to allow ranges. |
|---|
ComputationalProvenance.model_name | string | Name of a specific published/named model used, if any (e.g. iML1515). Leave empty for de-novo reconstructions with no published identifier. |
|---|
ComputationalProvenance.model_source | string | How the model was obtained (e.g. "de-novo draft genome-scale models reconstructed from strain genomes"). |
|---|
ComputationalProvenance.parameters | string | Other salient method parameters or objective (e.g. "FBA to identify all potentially exchangeable metabolites"); free text. |
|---|
ComputationalProvenance.prediction_type | ComputationalPredictionTypeEnum | Category of computational method that produced the prediction. |
|---|
ComputationalProvenance.simulated_medium | string | In-silico medium / condition under which the prediction was run (e.g. LBGM). |
|---|
ComputationalProvenance.tools | ComputationalTool | Software/tools in the prediction chain, in order of use (e.g. GEM reconstruction, model refinement, flux simulation). |
|---|
ComputationalTool.role | string | What this tool did in the chain (e.g. "GEM reconstruction", "model refinement/validation", "flux balance analysis"). |
|---|
ComputationalTool.tool_name | string | Tool / software name (e.g. CarveMe, COBRA Toolbox, SMETANA). |
|---|
ComputationalTool.tool_reference | string | Citation for the tool itself (PMID:/doi:/bioproject:/GITHUB: format). |
|---|
ComputationalTool.tool_version | string | Version string if reported (e.g. "3.0"). Leave empty when the source does not report a version — do not infer one. |
|---|
CounterSelection.criterion | string | Why these candidates were excluded - the screen they failed. Required: an exclusion without a reason records that something was dropped while losing the only part that is informative. |
|---|
CounterSelection.evidence | EvidenceItem | Evidence for the exclusion |
|---|
CounterSelection.excluded_count | integer | How many candidates were excluded, when the source gives a number but not resolvable identities. Carries the fact that the screen removed three isolates even where `excluded_taxon` must stay empty. |
|---|
CounterSelection.excluded_taxon | TaxonDescriptor | The excluded candidate, where the source resolves it.
Optional on purpose. The motivating case cannot fill it: three Bacillus isolates were excluded for inhibiting Bradyrhizobium, and at the genus-level grounding the source supports they are indistinguishable from the retained ones, so naming a taxon here would assert an identity the paper does not (#305, #307). Use `excluded_count` when the number is known but the identity is not. |
|---|
CultivationSetup.applied_potential | float | Applied electrode potential (bioelectrochemical / fuel-cell systems). |
|---|
CultivationSetup.applied_potential_unit | PotentialUnitEnum | Unit for applied_potential. The unit only - the reference electrode a potential is quoted against goes in electrode_detail (#514). |
|---|
CultivationSetup.controls_notes | string | Free-text notes on process control not captured by the boolean flags. |
|---|
CultivationSetup.cultivation_mode | CultivationModeEnum | Operating mode / approach used to cultivate the community. |
|---|
CultivationSetup.do_controlled | boolean | Whether dissolved oxygen was actively controlled. |
|---|
CultivationSetup.electrode_detail | string | Electrode configuration/materials for bioelectrochemical systems (anode/cathode material, surface area, etc.). |
|---|
CultivationSetup.evidence | EvidenceItem | Evidence supporting the cultivation-setup description. |
|---|
CultivationSetup.feed_or_dilution_rate | float | Feed rate (fed-batch) or dilution rate (continuous/chemostat); disambiguated by cultivation_mode. |
|---|
CultivationSetup.feed_or_dilution_rate_unit | RateUnitEnum | Unit for feed_or_dilution_rate (e.g. h^-1, mL/h). |
|---|
CultivationSetup.instrument_detail | string | Distinguishing detail about the system not captured by system_type. |
|---|
CultivationSetup.manufacturer_model | string | Manufacturer and/or model designation of the instrument. |
|---|
CultivationSetup.notes | string | Additional notes about the cultivation setup. |
|---|
CultivationSetup.operating_temperature | float | Operating/setpoint temperature of the cultivation system. |
|---|
CultivationSetup.operating_temperature_unit | TemperatureUnitEnum | Unit for operating_temperature (e.g. C, K). |
|---|
CultivationSetup.ph_controlled | boolean | Whether pH was actively controlled. |
|---|
CultivationSetup.protocol_url | string | URL to the cultivation protocol. |
|---|
CultivationSetup.retention_time | float | Hydraulic or solids retention time (see retention_time_type). |
|---|
CultivationSetup.retention_time_type | RetentionTimeTypeEnum | Which retention time is reported (e.g. "HRT" or "SRT"). |
|---|
CultivationSetup.retention_time_unit | TimeUnitEnum | Unit for retention_time (e.g. h, d). |
|---|
CultivationSetup.system_type | CultivationSystemEnum | Instrumentation / vessel system used. |
|---|
CultivationSetup.temperature_controlled | boolean | Whether temperature was actively controlled. |
|---|
CultivationSetup.working_volume | float | Working (culture) volume. |
|---|
CultivationSetup.working_volume_unit | VolumeUnitEnum | Unit for working_volume (e.g. mL, L). |
|---|
CultureCollectionID.accession | string | The accession number in this collection |
|---|
CultureCollectionID.collection | CultureCollectionEnum | The culture collection name |
|---|
CultureCollectionID.notes | string | Additional information about this collection entry |
|---|
CultureCollectionID.url | string | Direct URL to the strain in the collection catalog |
|---|
CurationEvent.action | string | SCREAMING_SNAKE_CASE action label minted by the curation tool that produced this event (e.g. ``"ADD_COMMUNITY_IDS"``, ``"FIX_NETWORK_INTEGRITY"``). |
|---|
CurationEvent.changes | string | Description of what changed. |
|---|
CurationEvent.curator | string | Who performed this action (script name or human identifier). |
|---|
CurationEvent.llm_assisted | boolean | Whether LLM assistance was used. |
|---|
CurationEvent.timestamp | datetime | When this action occurred (ISO-8601 UTC). |
|---|
EcologicalInteraction.biological_processes | BiologicalProcessDescriptor | Biological processes involved |
|---|
EcologicalInteraction.description | string | Detailed description of the interaction |
|---|
EcologicalInteraction.downstream | InteractionDownstream | Downstream effects in causal graph |
|---|
EcologicalInteraction.evidence | EvidenceItem | Evidence for this interaction |
|---|
EcologicalInteraction.interaction_type | InteractionTypeEnum | Type of ecological interaction |
|---|
EcologicalInteraction.metabolites | MetaboliteDescriptor | Metabolites involved in the interaction |
|---|
EcologicalInteraction.name | string | Name of this interaction |
|---|
EcologicalInteraction.participating_taxa | TaxonDescriptor | Which members a COMMUNITY_LEVEL interaction is actually about, when it is about some of them rather than all. Optional and usually absent: a statement that genuinely holds across the whole community should leave it empty, and an empty list means "every member", not "none".
Exists because the connectivity audit credits a COMMUNITY_LEVEL interaction as connecting every member of the record, which is unavoidably coarse - in a record carrying both kinds of edge, a taxon in no pairwise edge is credited by an unrelated community-level one. Naming participants narrows the credit to them (#312).
Not a second way to write a pairwise edge. If an interaction is between two named organisms it wants `source_taxon`/`target_taxon` and PAIRWISE scope; this is for a statement over a named subset, such as three of eight members cross-feeding while the rest do not.
Name participants by `preferred_term`, not by CURIE alone. Entries resolve by preferred_term, term.label or term.id, and in strain-level records the id does not identify a member: GLBRC_Populus_Variovorax_SynCom28 has 28 taxa under one NCBITaxon id, so naming two of them by CURIE credits all 28 and the slot appears to do nothing. That is the sound reading of an ambiguous reference, and it is also exactly the record shape where narrowing matters most (#524). |
|---|
EcologicalInteraction.scope | InteractionScopeEnum | Whether this interaction is a pairwise organism-to-organism edge or a community-level/emergent phenomenon. PAIRWISE interactions require a source_taxon. COMMUNITY_LEVEL interactions describe behaviors that emerge from the whole consortium (or are driven by abiotic inputs such as electrolysis-supplied H2) and need not have source_taxon set. |
|---|
EcologicalInteraction.source_taxon | TaxonDescriptor | Source organism (if applicable; required for PAIRWISE interactions, omitted for COMMUNITY_LEVEL interactions) |
|---|
EcologicalInteraction.target_taxon | TaxonDescriptor | Target organism (if applicable) |
|---|
EnvironmentDescriptor.notes | string | Additional notes |
|---|
EnvironmentDescriptor.preferred_term | string | Human-readable environment name |
|---|
EnvironmentDescriptor.term | Term | ENVO ontology term |
|---|
EnvironmentalFactor.description | string | Description of this factor |
|---|
EnvironmentalFactor.evidence | EvidenceItem | Evidence for this condition |
|---|
EnvironmentalFactor.name | string | Name of the environmental factor |
|---|
EnvironmentalFactor.unit | string | Unit of measurement |
|---|
EnvironmentalFactor.value | string | Measured or specified value |
|---|
EvidenceItem.computational_provenance | ComputationalProvenance | Structured provenance for a computationally predicted claim (tool chain, versions, model, in-silico medium). Populate when evidence_source is COMPUTATIONAL so model-derived claims are queryable rather than described only in prose. |
|---|
EvidenceItem.confidence_score | float | Confidence in this evidence (0.0-1.0), based on snippet validation |
|---|
EvidenceItem.evidence_source | EvidenceSourceEnum | Type of evidence (in vitro, computational, etc.) |
|---|
EvidenceItem.explanation | string | How this evidence supports or refutes the claim |
|---|
EvidenceItem.reference | string | The publication or article-linked repository reference. |
|---|
EvidenceItem.snippet | string | Exact quote from the publication supporting the claim (required for proper evidence) |
|---|
EvidenceItem.supports | EvidenceItemSupportEnum | Level of support this evidence provides |
|---|
ExternalResource.description | string | Description of the resource and its relevance |
|---|
ExternalResource.evidence | EvidenceItem | Evidence linking this resource to the community |
|---|
ExternalResource.name | string | Human-readable name for this resource |
|---|
ExternalResource.repository | ExternalResourceRepositoryEnum | Repository or platform where this resource is hosted |
|---|
ExternalResource.resource_id | string | Repository identifier (e.g., MODEL2405300001, ws.73218.obj.75) |
|---|
ExternalResource.url | string | Direct URL to the resource |
|---|
GeneAnnotation.evidence | EvidenceItem | Evidence linking this gene to the role/interaction. |
|---|
GeneAnnotation.gene_id | string | Primary standardized gene/protein identifier, as a CURIE. Accepted prefixes: NCBIGene (e.g. NCBIGene:948242), UniProtKB (e.g. UniProtKB:P0A6F5), or KEGG gene (e.g. KEGG:eco:b3987). For genes best identified per-assembly, give locus_tag; for the orthologous function, give kegg_ortholog. |
|---|
GeneAnnotation.gene_symbol | string | Gene symbol / short name (e.g. dsrA, nifH, mtrC). |
|---|
GeneAnnotation.genome | string | NCBI Assembly accession (GCF_/GCA_) of the genome this gene is annotated in; should match one of the parent CommonTaxon.genomes[].id. |
|---|
GeneAnnotation.go_terms | Term | GO molecular-function / biological-process terms describing this gene's activity (canonical id↔label, checked by the term gate). |
|---|
GeneAnnotation.kegg_ortholog | string | KEGG Orthology id for the gene's function (e.g. K00370). |
|---|
GeneAnnotation.locus_tag | string | Genome locus tag tying the gene to a specific assembly (e.g. b3987, SO_1776). |
|---|
GeneAnnotation.product | string | Gene product or functional description. |
|---|
GeneAnnotation.supports_interaction | string | Specific community interaction(s) this gene mediates, as a free-text description (may name an EcologicalInteraction from a community record). |
|---|
GeneAnnotation.supports_roles | FunctionalRoleEnum | Community functional role(s) this gene supports. |
|---|
GenomeRecord.id | string | NCBI Assembly accession for the genome (RefSeq GCF_ or GenBank GCA_), e.g. GCF_000005845.2. |
|---|
GenomeRecord.label | string | Human-readable assembly name (e.g. "ASM584v2"). |
|---|
GenomeRecord.notes | string | Notes about this assembly (assembly level, source, etc.). |
|---|
GenomeRecord.strain_designation | StrainDesignation | Strain this assembly corresponds to. |
|---|
GrowthMedia.atmosphere | AtmosphereEnum | Atmospheric/oxygen requirements |
|---|
GrowthMedia.composition | GrowthMediaComponent | Components of the growth medium |
|---|
GrowthMedia.culturemech_id | string | Identifier in CultureMech media database (e.g., CultureMech:000001) |
|---|
GrowthMedia.culturemech_url | string | URL to CultureMech media entry |
|---|
GrowthMedia.evidence | EvidenceItem | Evidence for this growth medium |
|---|
GrowthMedia.headspace_gas | string | Gas composition in headspace (e.g., "N2/CO2 80:20", "H2/CO2 80:20") |
|---|
GrowthMedia.incubation_time | string | Duration of incubation |
|---|
GrowthMedia.incubation_time_unit | string | Unit for incubation time (hours, days, weeks) |
|---|
GrowthMedia.inoculum_size | string | Initial cell density or transfer percentage |
|---|
GrowthMedia.inoculum_source | string | Source of inoculum |
|---|
GrowthMedia.inoculum_unit | string | Unit for inoculum (cells/mL, OD600, %v/v, CFU/mL) |
|---|
GrowthMedia.light_intensity | string | Light intensity value |
|---|
GrowthMedia.light_intensity_unit | string | Unit for light intensity (μmol photons/m²/s, lux, W/m²) |
|---|
GrowthMedia.light_regime | string | Light/dark cycle (e.g., "16h/8h", "continuous", "dark") |
|---|
GrowthMedia.name | string | Name of the growth medium |
|---|
GrowthMedia.ph | string | pH of the medium |
|---|
GrowthMedia.ph_range | string | pH range for growth (e.g., "5.5-7.0") |
|---|
GrowthMedia.preparation_notes | string | Additional preparation details or modifications |
|---|
GrowthMedia.pressure | string | Pressure for cultivation (relevant for extremophiles) |
|---|
GrowthMedia.pressure_unit | string | Unit for pressure (atm, bar, MPa, psi) |
|---|
GrowthMedia.protocol_url | string | URL to detailed protocol (e.g., protocols.io, dx.doi.org) |
|---|
GrowthMedia.redox_potential | string | Oxidation-reduction potential |
|---|
GrowthMedia.redox_potential_unit | string | Unit for redox (mV vs SHE, Eh) |
|---|
GrowthMedia.salinity | string | Salinity of the medium (NaCl equivalent) |
|---|
GrowthMedia.salinity_unit | string | Unit for salinity (%, M, g/L, ppt) |
|---|
GrowthMedia.shaking_speed | string | Shaking/agitation speed for liquid cultures |
|---|
GrowthMedia.shaking_speed_unit | string | Unit for shaking (rpm, oscillations/min) |
|---|
GrowthMedia.temperature | string | Incubation temperature |
|---|
GrowthMedia.temperature_range | string | Temperature range for growth (e.g., "25-37") |
|---|
GrowthMedia.temperature_unit | string | Unit for temperature (e.g., °C, K) |
|---|
GrowthMedia.vessel_type | string | Type of cultivation vessel (flask, tube, bioreactor, plate, etc.) |
|---|
GrowthMediaComponent.chebi_term | MetaboliteDescriptor | CHEBI term for the component |
|---|
GrowthMediaComponent.concentration | string | Concentration value |
|---|
GrowthMediaComponent.from_source | string | Source of this ingredient (e.g., "CultureMech", "community_curated") |
|---|
GrowthMediaComponent.media_ingredient_mech_id | string | MediaIngredientMech identifier. NOTE: the `MediaIngredientMech:NNNNNN` scheme is vestigial — MIM's canonical ingredient CURIE is `MIM:<name>` (confirmed MediaIngredientMech#119), so no pattern is enforced. Prefer `chebi_term` for the compound identity. |
|---|
GrowthMediaComponent.media_ingredient_mech_url | string | URL to MediaIngredientMech ingredient entry |
|---|
GrowthMediaComponent.name | string | Name of the component |
|---|
GrowthMediaComponent.unit | string | Unit of measurement for concentration |
|---|
GtdbClassification.curated | boolean | True when a curator chose this grounding against what `gtdb_ground.py` computes, so the tool must not overwrite it. The reason belongs in `curation_note`.
A hard-coded list in the script protects only what someone remembered to add: `NCBITaxon:340177` (*Chlorobium*) was curated and unlisted, and survived a whole-KB refresh only because its recompute happened to yield no id — a side effect, not a decision (#384). Marking the block keeps the decision with the data. |
|---|
GtdbClassification.curation_note | string | Why this grounding was curated against the tool. Required in practice whenever `curated` is true — a pin whose reason lives only in a commit message is one re-run away from looking like an error. Enforced by `communitymech.validators.gtdb_coherence`, since a conditional requirement is one of the relations the JSON-Schema backend cannot express (#387). |
|---|
GtdbClassification.gtdb_id | string | Canonical GTDB CURIE (spaces in the taxon name become underscores), e.g. GTDB:s__Bacillus_velezensis or GTDB:g__Agrobacterium.
The single letter before `__` is the rank — d, p, c, o, f, g, s — and it is the way to filter by rank. Required, so it is always there to read: the pattern below constrains the value but says nothing when the key is absent, which is why this slot is the one required attribute here (#414 review).
**Filter `d__` out of any coverage figure.** The domain groundings (`d__Bacteria`, `d__Archaea`) are true but carry no information beyond the NCBITaxon id, and counting them as "grounded" moves coverage by about seven percentage points (#393, #403).
They are not the whole tautological population: a higher-rank grounding whose GTDB name equals the NCBI name at the same rank says as little — `Actinomycetota` -> `p__Actinomycetota`. Filtering on `is_reclassified: false` above genus rank catches those too. Current counts live in `.claude/skills/ground-taxa-gtdb/SKILL.md` and are pinned by `tests/test_gtdb_support_counts.py`, not written here: pythongen drops attribute descriptions, so a count in this text reaches no generated artifact and nothing would fail when it goes stale. |
|---|
GtdbClassification.gtdb_lineage | string | Full GTDB lineage string (domain..species), e.g. "d__Bacteria;p__Bacillota;c__Bacilli;o__Bacillales;f__Bacillaceae;g__Bacillus;s__Bacillus velezensis". |
|---|
GtdbClassification.gtdb_taxon | string | GTDB taxon name (human-readable, spaces preserved), e.g. "Bacillus velezensis". |
|---|
GtdbClassification.is_reclassified | boolean | True when the GTDB name differs from the NCBITaxon name at the rank this block is grounded at. A string comparison, and nothing more, so the name is a poor guide to what it holds.
It said "species name ... (a GTDB reclassification/rename)". Neither half held. Of the 141 blocks currently true, 42 are grounded above species — through genus, family, order, class and phylum — so the rank is wrong for nearly a third of them. And it does not mean GTDB reclassified anything. Partitioning the 141 by why the names differ (#441):
* 0 dropped strain designations. There were 40 — `Escherichia coli
K-12` -> `Escherichia coli` — and #480 removed them: GTDB carries no
strain suffixes, so the names differed while the placement did not.
`name_differs` now treats that as no difference.
* 34 GTDB polyphyly suffixes — `Bacillota` -> `Bacillota_A`. A split
marker on the same name, not a rename.
* 13 that are both at once — `Buchnera aphidicola BCc` ->
`Buchnera aphidicola_F`.
* 3 GTDB placeholders for an unnamed species within the same genus —
`Dyadobacter sp.` -> `Dyadobacter sp017744695`.
* 3 rank-appropriate nomenclatural endings on one stem —
`Chlorobiota` -> `Chlorobiia`, `Nitrososphaerota` ->
`Nitrososphaeria`.
* 88 genuinely different names, and only some of those are GTDB
reclassifications. `Allobosea` -> `Bosea` is an *NCBI* rename: both
databases place the organism in the same genus concept, and NCBI
moved its label because the bacterial name was a later homonym of
the plant *Bosea*. Orthographic and gender variants also sit here —
`Nitrosotalea devaniterrae` -> `Nitrosotalea devanaterra`,
`Methylocystis parvus` -> `Methylocystis parva`.
So 53 of 141 — 38% — are not reclassifications under any reading, and that is a floor: the 88 "genuinely different" include an unknown number of NCBI renames and spelling variants. Filter on this slot to find "the two labels are not identical", which is what it computes. Do not read it as provenance.
#480 narrowed it: dropping the 40 strain-designation cases took the non-reclassification share from 54% to 38% at that time, and the genuinely-different share from 46% to 62%. The current block counts are the ones counted above, not these historical rounded percentages. Polyphyly suffixes are deliberately still reported — `Bacillota` -> `Bacillota_A` is a real GTDB distinction, and #480 records that folding it in here is the arguable middle rather than the obvious next step. An enum (#480 option 3) is where this wants to end up.
ONE call site computes it now, `name_differs` (#482). Two used to: `bool(sp and ref and sp != ref)` on the species path, which produced 121 of the then-154, and `top != _clean_label(label)` on the genus-and-higher path. They disagreed — the first had a crosswalk fallback for `ref` and a null-guard returning False where the second returned True, so a missing label read as a name change at genus rank and not at species rank.
Counts are pinned by `tests/test_is_reclassified_semantics.py`, which fails when they drift; a count in this text reaches no generated artifact, since pythongen drops attribute descriptions. |
|---|
GtdbClassification.majority_fraction | float | Fraction of genomes under the NCBI taxon that map to this GTDB taxon (0.0-1.0), from the kg-microbe NCBI2GTDB table — a confidence for the mapping. 1.0 means an unambiguous 1:1 correspondence. |
|---|
GtdbClassification.mapping_source | string | Provenance of the mapping: the source table and a content digest of it, e.g. "kg-microbe NCBI2GTDB.tsv.gz sha256:761d5537a7edb4b0 (file mtime 2026-07-25)". The digest is what identifies the input -- an earlier form recorded "GTDB release latest (built <mtime>)", where "latest" was a literal nothing read and the mtime is a filesystem attribute rather than a property of the data, so a block that differs from today's crosswalk could not be told from one that is wrong (#624). Blocks written before that change still carry the old string. |
|---|
GtdbClassification.ncbi_source_id | string | The NCBITaxon id this GTDB classification was mapped from. |
|---|
GtdbClassification.support_genomes | integer | Number of genomes supporting the chosen GTDB taxon — the numerator behind majority_fraction.
The schema bounds this on its own but cannot relate it to total_genomes or majority_fraction: that is cross-field arithmetic, which LinkML's JSON-Schema backend has no way to express (#387, with the spike recorded in the class rules above). `support_genomes: 99, total_genomes: 3` passes `just validate` and is caught by `just validate-gtdb` and by `validate-strict` in CI.
Present only on genus-and-higher groundings, where this majority is computed from the mapping rows directly. Absent on species-level groundings: there majority_fraction comes from the crosswalk's own column, which carries two decimal places, so any numerator derived from it would assert a precision the source lacks (~170 genomes of slack on a 17191-genome taxon). |
|---|
GtdbClassification.total_genomes | integer | Number of genomes the majority was computed over — the denominator behind majority_fraction, and the answer to "0.571 of what?". For genus-and-higher, the genomes across every candidate GTDB taxon at that rank, excluding rows dropped by the named-species filter (sp./uncultured/informal), so it is the evidence actually considered rather than every genome under the NCBI taxon. For species, the genomes in the crosswalk rows this grounding was resolved from — the taxon's own rows when it matched by NCBI id, the name group when it matched by species name. Those scopes differ, so an id-matched block can report far less than the evidence that exists for its species; widening it needs a key as stable as the id, which the crosswalk does not offer (#389). Counted at a single depth: a species-rank row and its strain rows overlap, so the larger of the two is taken and never their sum. Note majority_fraction is rounded, so neither count can be recovered from it. |
|---|
InteractionDownstream.description | string | Description of the causal link |
|---|
InteractionDownstream.target | string | Name of the downstream interaction |
|---|
MetaboliteDescriptor.concentration | string | Measured concentration or amount |
|---|
MetaboliteDescriptor.notes | string | Additional notes |
|---|
MetaboliteDescriptor.preferred_term | string | Human-readable metabolite name |
|---|
MetaboliteDescriptor.term | Term | CHEBI ontology term |
|---|
MicrobialCommunity.associated_datasets | Dataset | Omics and other datasets associated with this community |
|---|
MicrobialCommunity.community_category | CommunityCategoryEnum | Broad functional or ecological category |
|---|
MicrobialCommunity.community_origin | CommunityOriginEnum | Origin of the community (natural, engineered, or synthetic) |
|---|
MicrobialCommunity.cultivation_setup | CultivationSetup | Hardware setup and cultivation mode(s) used to grow/sustain the community. Optional; not all communities have a defined setup. |
|---|
MicrobialCommunity.curation_history | CurationEvent | Append-only audit trail of curation actions that modified this community record. Populated by ``record_curation_event()`` from ``communitymech.curate.curation_event``. |
|---|
MicrobialCommunity.description | string | Overview of the community |
|---|
MicrobialCommunity.discussions | Discussion | Open questions, knowledge gaps, controversies, emerging hypotheses, or curation todos attached to this community or its sub-objects (via the Discussion.attaches_to hash-anchors, e.g. `ecological_interactions#<name>`). Captures the discourse / knowledge-gap layer — e.g. a proposed-but-not- demonstrated causal edge that should not be asserted as an interaction. |
|---|
MicrobialCommunity.ecological_interactions | EcologicalInteraction | Interactions between organisms and processes |
|---|
MicrobialCommunity.ecological_state | EcologicalStateEnum | State of the community (stable, engineered, etc.) |
|---|
MicrobialCommunity.engineering_design | CommunityEngineeringDesign | Explicit engineering design and implementation details for this community |
|---|
MicrobialCommunity.environment_term | EnvironmentDescriptor | Environment where community exists |
|---|
MicrobialCommunity.environmental_factors | EnvironmentalFactor | Environmental conditions |
|---|
MicrobialCommunity.external_resources | ExternalResource | External model and narrative resources linked to this community |
|---|
MicrobialCommunity.growth_media | GrowthMedia | Growth media used for cultivation |
|---|
MicrobialCommunity.id | string | Unique identifier for this community (e.g., CommunityMech:000001) |
|---|
MicrobialCommunity.metal_notes | string | Additional context on metal/REE processing mechanisms or significance |
|---|
MicrobialCommunity.metal_relevance | MetalRelevanceEnum | Overall relevance of this community for metal/REE processing |
|---|
MicrobialCommunity.metals_present | MetalElementEnum | Metals present or processed by this community |
|---|
MicrobialCommunity.modeled_environment | EnvironmentDescriptor | The natural or applied environment(s) this community derives from, models, or represents — as distinct from `environment_term` (where it physically exists / was studied). For an engineered or synthetic community, `environment_term` is often "laboratory environment" while this captures the real habitat it stands in for (e.g. a groundwater enrichment → groundwater; a synthetic infant-gut consortium → intestine environment; a space-agriculture SynCom → regolith). Leave empty for de-novo assemblies with no specific habitat. ENVO-grounded, so it also serves as an environment-based cross-repo join key (issue #30). |
|---|
MicrobialCommunity.name | string | Community name |
|---|
MicrobialCommunity.rare_earth_elements_present | RareEarthElementEnum | Rare earth elements present or processed by this community |
|---|
MicrobialCommunity.related_ingredients | RelatedIngredient | MediaIngredientMech ingredients relevant to this community's environment or metabolism. For ingredients in actual cultivation media, see growth_media.composition instead. |
|---|
MicrobialCommunity.related_media | RelatedMedia | CultureMech media relevant to this community through shared environment, organism overlap, or study context. For media actually used in cultivation, use the growth_media field instead. |
|---|
MicrobialCommunity.taxonomy | TaxonomicComposition | Organisms present in the community — its membership, not everything it interacts with.
A host and an antagonist are **not** members (#319). The community lives on or in its host and is applied against its antagonist; both can be named in `ecological_interactions` as outside-community participants without appearing here.
The mirror-image question is #307: candidates deliberately screened *out* are likewise not members, and live in `engineering_design.counter_selection`. Both answers are the same, for the same reason — this slot records what the community is made of, and an edge to something outside it is not evidence that it should be inside it. |
|---|
RelatedIngredient.chebi_term | Term | CHEBI ontology term for the ingredient compound |
|---|
RelatedIngredient.evidence | EvidenceItem | Evidence supporting the ingredient-community relationship |
|---|
RelatedIngredient.mediaingredientmech_id | string | MediaIngredientMech identifier. NOTE: the `MediaIngredientMech:NNNNNN` scheme is **vestigial** — MIM confirmed (MediaIngredientMech#119) its canonical ingredient CURIE is `MIM:<name>` (SSSOM registry) and the `NNNNNN` form appears in zero canonical records. No schema pattern is enforced. The equivalence-safe join is `chebi_term` (MIM's `skos:exactMatch` CHEBI); prefer it. Deprecated — likely to be removed. |
|---|
RelatedIngredient.preferred_term | string | Human-readable ingredient name (should match MediaIngredientMech record) |
|---|
RelatedIngredient.relevance | string | Why this ingredient is relevant to the community |
|---|
RelatedIngredient.shared_environment_term | Term | ENVO term for the shared environment linking this ingredient to the community. Enables environment-based joins between CommunityMech environment_term and MediaIngredientMech environmental_context, mirroring RelatedMedia.shared_environment_term. |
|---|
RelatedMedia.culturemech_id | string | CultureMech identifier for this medium |
|---|
RelatedMedia.evidence | EvidenceItem | Evidence supporting the media-community relationship |
|---|
RelatedMedia.preferred_term | string | Human-readable media name (should match CultureMech record name) |
|---|
RelatedMedia.relationship_type | MediaRelationshipEnum | How this medium relates to the community |
|---|
RelatedMedia.relevance_notes | string | Why this medium is relevant to the community |
|---|
RelatedMedia.shared_environment_term | Term | ENVO term for the shared environment linking this medium to the community. Enables SPARQL joins between CommunityMech environment_term and CultureMech source_environment. |
|---|
StrainDesignation.culture_collections | CultureCollectionID | Culture collection identifiers for this strain |
|---|
StrainDesignation.genetic_modification | string | Description of genetic modifications (for engineered strains) |
|---|
StrainDesignation.genome_accession | string | NCBI Assembly accession (e.g., GCF_000203695.1) |
|---|
StrainDesignation.genome_url | string | Direct URL to NCBI Assembly |
|---|
StrainDesignation.isolation_source | string | Original isolation source of the strain |
|---|
StrainDesignation.notes | string | Additional strain-specific information |
|---|
StrainDesignation.strain_name | string | The formal strain designation (e.g., "DSM 8584", "PCC 7942", "ATCC 12345") |
|---|
StrainDesignation.type_strain | boolean | Whether this is the nomenclatural type strain for the species |
|---|
TaxonDescriptor.gtdb_candidates | string | The competing GTDB taxa when gtdb_grounding_status is AMBIGUOUS, best supported first, as `GTDB:` CURIEs at the rank the grounding was attempted at. Carried so a curator can choose in place instead of re-running the tool to rediscover what it already computed. Empty for every other status.
These were plain names until #415, on the reasoning that "they are candidates, not identifiers". That does not hold up: a candidate names a real GTDB taxon, and being unchosen does not make it identify nothing. The cost was concrete — no rank, so the 85 AMBIGUOUS taxa could not be filtered or counted the way #414 filters groundings; and nothing resolvable, so `RDYJ01`, an alphanumeric GTDB placeholder genus, sat in a record meaning nothing to a reader. `GTDB:g__RDYJ01` resolves and carries its rank.
Spelled by the same `_curie()` the grounding uses, so a candidate is written exactly as it will appear in `gtdb_id` once chosen — promoting one is a copy, not a re-derivation. |
|---|
TaxonDescriptor.gtdb_classification | GtdbClassification | Optional GTDB (Genome Taxonomy Database) grounding for this taxon, derived from the NCBITaxon term via the kg-microbe NCBI2GTDB mapping. Complements the NCBITaxon term with a genome-based classification — useful because GTDB frequently renames/reclassifies relative to NCBI (e.g. NCBITaxon "Agrobacterium deltae" -> GTDB "Agrobacterium leguminum"). Populate with the ground-taxa-gtdb skill. |
|---|
TaxonDescriptor.gtdb_grounding_status | GtdbGroundingStatusEnum | Why this taxon does or does not carry a gtdb_classification (#294). Populated by `gtdb_ground.py --apply-status`. GROUNDED must accompany a gtdb_classification and every other value must accompany its absence — a relation the schema cannot express, checked by `communitymech.validators.gtdb_coherence` and so by `just validate-strict` (#387). |
|---|
TaxonDescriptor.notes | string | Additional notes about this organism |
|---|
TaxonDescriptor.preferred_term | string | Human-readable organism name |
|---|
TaxonDescriptor.term | Term | NCBITaxon ontology term |
|---|
TaxonomicComposition.absolute_abundance | float | Absolute abundance of this taxon (e.g. cell count, CFU/mL, read count, gene copies). Optional and independent of relative_abundance; pair with absolute_abundance_unit. |
|---|
TaxonomicComposition.absolute_abundance_unit | string | Unit/basis for absolute_abundance (e.g. cells/mL, CFU/mL, reads, copies/g). |
|---|
TaxonomicComposition.abundance_level | AbundanceEnum | Ordinal prominence of this taxon among the members of this record. Not a percentage: see AbundanceEnum, and use `relative_abundance` for a measured share (#748). |
|---|
TaxonomicComposition.abundance_value | string | DEPRECATED free-text quantitative abundance. Prefer the typed absolute_abundance / relative_abundance fields below; retained for back-compatibility with records that used a single combined value. |
|---|
TaxonomicComposition.common_taxon | string | Reference to a reusable CommonTaxon record (kb/taxa/) that holds the genome and gene annotations for this organism, so the same curated gene set can be shared across community records. |
|---|
TaxonomicComposition.evidence | EvidenceItem | Evidence for this organism's presence and role |
|---|
TaxonomicComposition.functional_role | FunctionalRoleEnum | Role(s) in the community |
|---|
TaxonomicComposition.relative_abundance | float | Relative abundance of this taxon within the community. Optional and independent of absolute_abundance. Interpreted as a fraction in [0, 1] unless relative_abundance_unit says otherwise (e.g. percent). |
|---|
TaxonomicComposition.relative_abundance_unit | string | Unit/basis for relative_abundance (e.g. "fraction", "percent", "16S rRNA reads", "metagenome relative abundance"). Defaults to a fraction in [0, 1] when omitted. |
|---|
TaxonomicComposition.strain_designation | StrainDesignation | Strain-level identification and culture collection info |
|---|
TaxonomicComposition.taxon_term | TaxonDescriptor | The organism |
|---|
Term.id | string | The ontology term ID (e.g., NCBITaxon:1140, CHEBI:17992) |
|---|
Term.label | string | The CANONICAL ontology label for `id` (e.g. "activated sludge" for ENVO:00002046). Verified against the ontology by the id↔label gate; free/project names belong in the sibling `preferred_term`, not here. |