From d7d4c45d1730c8705353cef1ee2bbf74a2432458 Mon Sep 17 00:00:00 2001 From: "marcin p. joachimiak" <4625870+realmarcin@users.noreply.github.com> Date: Tue, 19 May 2026 18:37:12 -0700 Subject: [PATCH 1/4] Add METPO ROBOT-template proposal lifting CommunityMech enums Three files under proposals/metpo_communitymech_v1/ mirror the existing kg-microbe METPO proposal format and lift 9 CommunityMech enums plus 14 schema predicates into METPO classes and object properties: - metpo_proposal_classes_robot.tsv: 74 class rows (11 columns, two-row ROBOT header). Includes 3 new top-level domain classes (microbial community, microbial community ecological interaction, microbial community evidence item) plus 9 enum-parent grouping classes, 10 intermediate grouping classes (positive/negative/ partitioning interaction valence; primary/secondary trophic role; 5 thematic community-category groupings), and 52 enum-leaf classes. All 52 CommunityMech enum permissible values are covered; all parent references resolve within the file or to known METPO IRIs (METPO:1000000 root, METPO:1000525 microbe). - metpo_proposal_properties_robot.tsv: 14 owl:ObjectProperty rows (12 columns) with domain/range mapped to the new top-level classes or external IRIs (NCBITaxon, CHEBI, GO). Captures EcologicalInteraction.source_taxon/target_taxon/interaction_type/ scope/metabolites/biological_processes/evidence, TaxonomicComposition.functional_role/abundance_level, MicrobialCommunity.community_category/community_origin/ ecological_state, and EvidenceItem.supports/evidence_source. - proposal.md: narrative walking through scope, hierarchy decisions (InteractionType valence groupings, FunctionalRole trophic tiers, CommunityCategory thematic groupings, COMPETITION / STRAIN_COMPETITION parent/child relationship), predicate domain/range rationale, ID-space conventions, verification procedure (robot template + reason), and the upstream path to kg-microbe/mappings/. ID space: METPO:1007100-1007220 for classes and METPO:2007100-2007113 for properties, all marked as placeholder per the kg-microbe SKILL.md placeholder policy; real METPO IDs will be minted upstream after sign-off. Subset tag on every row: metpo_communitymech_2026_05. Co-Authored-By: Claude Opus 4.7 (1M context) --- .../metpo_proposal_classes_robot.tsv | 76 +++++++ .../metpo_proposal_properties_robot.tsv | 16 ++ proposals/metpo_communitymech_v1/proposal.md | 202 ++++++++++++++++++ 3 files changed, 294 insertions(+) create mode 100644 proposals/metpo_communitymech_v1/metpo_proposal_classes_robot.tsv create mode 100644 proposals/metpo_communitymech_v1/metpo_proposal_properties_robot.tsv create mode 100644 proposals/metpo_communitymech_v1/proposal.md diff --git a/proposals/metpo_communitymech_v1/metpo_proposal_classes_robot.tsv b/proposals/metpo_communitymech_v1/metpo_proposal_classes_robot.tsv new file mode 100644 index 00000000..1b61b0ad --- /dev/null +++ b/proposals/metpo_communitymech_v1/metpo_proposal_classes_robot.tsv @@ -0,0 +1,76 @@ +proposed_id label definition definition_source parent synonyms xrefs subset priority observations traits_addressed +ID LABEL A IAO:0000115 >A IAO:0000119 SC % A oboInOwl:hasExactSynonym SPLIT=| A oboInOwl:hasDbXref SPLIT=| A oboInOwl:inSubset +METPO:1007100 microbial community A collection of microorganisms (bacteria, archaea, microeukaryotes) that co-occur in a defined habitat and whose members can be linked by ecological interactions, shared environmental factors, and shared evidence sources. Top-level entry point for CommunityMech-lifted classes. CommunityMech:communitymech.yaml#MicrobialCommunity METPO:1000000 microbial consortium|microbiome|microbial assemblage metpo_communitymech_2026_05 HIGH root domain class +METPO:1007101 microbial community ecological interaction An ecological interaction between two or more microbial community members (or between the community and an emergent property), characterized by a directionality, a type (e.g., mutualism, competition), and supporting evidence. CommunityMech:communitymech.yaml#EcologicalInteraction METPO:1000000 ecological interaction metpo_communitymech_2026_05 HIGH root domain class +METPO:1007102 microbial community evidence item A reference-anchored piece of evidence (publication snippet plus citation) used to substantiate a claim about a microbial community or one of its ecological interactions. CommunityMech:communitymech.yaml#EvidenceItem METPO:1000000 evidence item|community claim evidence metpo_communitymech_2026_05 HIGH root domain class +METPO:1007103 microbial community member functional role A functional role played by a microbial community member, describing its position in the community's trophic and metabolic network. CommunityMech:communitymech.yaml#FunctionalRoleEnum METPO:1007100 community member role|community functional role metpo_communitymech_2026_05 HIGH enum-parent for FunctionalRoleEnum +METPO:1007104 primary trophic role A community functional role in which the organism initiates carbon and energy flow into the community by fixing inorganic carbon or by degrading complex polymeric substrates that other members cannot directly use. TODO:add_citation METPO:1007103 primary producer or degrader role metpo_communitymech_2026_05 HIGH intermediate parent for FunctionalRoleEnum primary tier +METPO:1007105 secondary trophic role A community functional role in which the organism depends on metabolites produced by primary members of the community, including fermentation, syntrophic, and cross-feeding lifestyles. TODO:add_citation METPO:1007103 dependent trophic role metpo_communitymech_2026_05 HIGH intermediate parent for FunctionalRoleEnum secondary tier +METPO:1007106 primary producer role The functional role of a community member that fixes inorganic carbon (autotroph), providing reduced organic carbon to other community members. CommunityMech:communitymech.yaml#FunctionalRoleEnum.PRIMARY_PRODUCER METPO:1007104 autotroph role|carbon fixer role metpo_communitymech_2026_05 HIGH FunctionalRoleEnum.PRIMARY_PRODUCER +METPO:1007107 primary degrader role The functional role of a community member that degrades complex polymeric substrates (e.g., cellulose, chitin, hydrocarbons), releasing oligomeric or monomeric products that other members can consume. CommunityMech:communitymech.yaml#FunctionalRoleEnum.PRIMARY_DEGRADER METPO:1007104 hydrolyzer role|polymer degrader role metpo_communitymech_2026_05 HIGH FunctionalRoleEnum.PRIMARY_DEGRADER +METPO:1007108 secondary fermenter role The functional role of a community member that ferments the products released by primary degraders into smaller organic acids, alcohols, hydrogen, and CO2. CommunityMech:communitymech.yaml#FunctionalRoleEnum.SECONDARY_FERMENTER METPO:1007105 fermenter role metpo_communitymech_2026_05 HIGH FunctionalRoleEnum.SECONDARY_FERMENTER +METPO:1007109 syntrophic partner role The functional role of a community member that engages in obligate metabolic cooperation (syntrophy) with another member, typically through interspecies electron, hydrogen, or formate transfer. CommunityMech:communitymech.yaml#FunctionalRoleEnum.SYNTROPHIC_PARTNER METPO:1007105 syntroph role metpo_communitymech_2026_05 HIGH FunctionalRoleEnum.SYNTROPHIC_PARTNER +METPO:1007110 cross-feeder role The functional role of a community member that utilizes metabolites secreted or produced by other community members without requiring obligate physical or metabolic coupling. CommunityMech:communitymech.yaml#FunctionalRoleEnum.CROSS_FEEDER METPO:1007105 metabolite cross-feeder role metpo_communitymech_2026_05 HIGH FunctionalRoleEnum.CROSS_FEEDER +METPO:1007120 ecological interaction type A typology of ecological interactions between microbial community members, organized by interaction valence (positive, negative, partitioning) and by intra- vs interspecific scope. CommunityMech:communitymech.yaml#InteractionTypeEnum METPO:1007101 interaction type|interaction valence class metpo_communitymech_2026_05 HIGH enum-parent for InteractionTypeEnum +METPO:1007121 positive ecological interaction An ecological interaction in which at least one participant benefits (+/+, +/0) without the other being harmed. Includes mutualism, commensalism, cross-feeding, syntrophy, and colonization facilitation. TODO:add_citation METPO:1007120 positive-valence interaction metpo_communitymech_2026_05 HIGH intermediate parent grouping positive interactions +METPO:1007122 negative ecological interaction An ecological interaction in which at least one participant is harmed (-/-, +/-). Includes competition (interspecific and intraspecific) and predation. TODO:add_citation METPO:1007120 negative-valence interaction metpo_communitymech_2026_05 HIGH intermediate parent grouping negative interactions +METPO:1007123 partitioning ecological interaction An ecological interaction in which participants coexist by occupying distinct ecological niches (spatially, temporally, or by substrate), reducing direct competition without conferring a clear positive or negative outcome. TODO:add_citation METPO:1007120 niche-partitioning interaction metpo_communitymech_2026_05 HIGH intermediate parent grouping partitioning interactions +METPO:1007124 mutualism interaction An ecological interaction in which both participants benefit (+/+). CommunityMech:communitymech.yaml#InteractionTypeEnum.MUTUALISM METPO:1007121 mutualistic interaction|symbiotic mutualism metpo_communitymech_2026_05 HIGH InteractionTypeEnum.MUTUALISM +METPO:1007125 commensalism interaction An ecological interaction in which one participant benefits while the other is unaffected (+/0). CommunityMech:communitymech.yaml#InteractionTypeEnum.COMMENSALISM METPO:1007121 commensal interaction metpo_communitymech_2026_05 HIGH InteractionTypeEnum.COMMENSALISM +METPO:1007126 cross-feeding interaction An ecological interaction characterized by exchange of metabolites between organisms, where one organism's metabolic byproduct is consumed by another. CommunityMech:communitymech.yaml#InteractionTypeEnum.CROSS_FEEDING METPO:1007121 metabolite cross-feeding|metabolic exchange interaction metpo_communitymech_2026_05 HIGH InteractionTypeEnum.CROSS_FEEDING +METPO:1007127 syntrophy interaction An ecological interaction characterized by obligate metabolic cooperation between organisms, typically involving interspecies electron, hydrogen, or formate transfer that is thermodynamically infeasible for either partner alone. CommunityMech:communitymech.yaml#InteractionTypeEnum.SYNTROPHY METPO:1007121 syntrophic interaction|interspecies electron transfer interaction metpo_communitymech_2026_05 HIGH InteractionTypeEnum.SYNTROPHY +METPO:1007128 colonization facilitation interaction An ecological interaction in which one organism facilitates the colonization or establishment of another through priority effects, niche modification, or cross-feeding that supports early-stage establishment. CommunityMech:communitymech.yaml#InteractionTypeEnum.COLONIZATION_FACILITATION METPO:1007121 priority-effect facilitation|colonization priming metpo_communitymech_2026_05 HIGH InteractionTypeEnum.COLONIZATION_FACILITATION +METPO:1007129 competition interaction An ecological interaction in which both participants are negatively affected (-/-) through shared use of a limiting resource or active inhibition. Captures interspecific competition; intraspecific strain-level competition is the child class METPO:1007130. CommunityMech:communitymech.yaml#InteractionTypeEnum.COMPETITION METPO:1007122 interspecific competition|resource competition metpo_communitymech_2026_05 HIGH InteractionTypeEnum.COMPETITION +METPO:1007130 strain competition interaction An ecological interaction in which two closely related strains of the same species compete through allelopathy, resource competition, or interference competition. Subclass of competition interaction, distinguished by intraspecific scope. CommunityMech:communitymech.yaml#InteractionTypeEnum.STRAIN_COMPETITION METPO:1007129 intraspecific strain competition|allelopathy interaction metpo_communitymech_2026_05 HIGH InteractionTypeEnum.STRAIN_COMPETITION +METPO:1007131 predation interaction An ecological interaction in which one participant benefits at the cost of the other (+/-), typically through direct consumption (e.g., Bdellovibrio attack, protozoan grazing, phage lysis). CommunityMech:communitymech.yaml#InteractionTypeEnum.PREDATION METPO:1007122 predator-prey interaction|grazing metpo_communitymech_2026_05 HIGH InteractionTypeEnum.PREDATION +METPO:1007132 niche partitioning interaction An ecological interaction in which strains or species occupy distinct ecological niches (spatial, temporal, or substrate-based), reducing direct competition. Common in intraspecific strain dynamics where closely related organisms coexist by utilizing different microhabitats or resources. CommunityMech:communitymech.yaml#InteractionTypeEnum.NICHE_PARTITIONING METPO:1007123 niche differentiation|resource partitioning metpo_communitymech_2026_05 HIGH InteractionTypeEnum.NICHE_PARTITIONING +METPO:1007140 interaction scope The scope of an ecological interaction, distinguishing pairwise organism-level edges from community-wide emergent phenomena. CommunityMech:communitymech.yaml#InteractionScopeEnum METPO:1007101 scope of interaction metpo_communitymech_2026_05 HIGH enum-parent for InteractionScopeEnum +METPO:1007141 pairwise interaction scope An interaction scope value indicating a standard pairwise edge between an identified source organism and a target. Source taxon is required at this scope. CommunityMech:communitymech.yaml#InteractionScopeEnum.PAIRWISE METPO:1007140 pairwise interaction metpo_communitymech_2026_05 HIGH InteractionScopeEnum.PAIRWISE +METPO:1007142 community-level interaction scope An interaction scope value indicating a community-wide or emergent phenomenon (e.g., division of labor, host-microbiota colonization patterns, abiotic-input-driven processes such as electrolysis-supplied H2) for which no single organism is the source. CommunityMech:communitymech.yaml#InteractionScopeEnum.COMMUNITY_LEVEL METPO:1007140 emergent community interaction|community-wide interaction metpo_communitymech_2026_05 HIGH InteractionScopeEnum.COMMUNITY_LEVEL +METPO:1007150 evidence item support level The relationship between a cited reference and the claim it is cited for, ranging from direct support through partial support, no evidence, misattribution, and active contradiction. CommunityMech:communitymech.yaml#EvidenceItemSupportEnum METPO:1007102 support level metpo_communitymech_2026_05 HIGH enum-parent for EvidenceItemSupportEnum +METPO:1007151 evidence supports claim An evidence-support level indicating that the cited reference directly supports the claim; the snippet is a substring of the reference and the surrounding context endorses the interaction or property as stated. CommunityMech:communitymech.yaml#EvidenceItemSupportEnum.SUPPORT METPO:1007150 supporting evidence|direct support metpo_communitymech_2026_05 HIGH EvidenceItemSupportEnum.SUPPORT +METPO:1007152 evidence partially supports claim An evidence-support level indicating that the cited reference supports part but not all of the claim (e.g., supports the mechanism but not the specific site, taxa, or quantitative figure asserted; or supports a related but weaker version of the claim). CommunityMech:communitymech.yaml#EvidenceItemSupportEnum.PARTIAL METPO:1007150 partial support metpo_communitymech_2026_05 HIGH EvidenceItemSupportEnum.PARTIAL +METPO:1007153 evidence refutes claim An evidence-support level indicating that the cited reference actively contradicts the claim (e.g., reports the opposite effect, or shows the proposed mechanism does not occur under the cited conditions). CommunityMech:communitymech.yaml#EvidenceItemSupportEnum.REFUTE METPO:1007150 contradicting evidence|refuting evidence metpo_communitymech_2026_05 HIGH EvidenceItemSupportEnum.REFUTE +METPO:1007154 evidence does not address claim An evidence-support level indicating that the cited reference does not contain a passage that addresses the claim. Used when the paper is on-topic and a reference is required by the schema, but the curator could not locate a supporting or contradicting excerpt. Stronger than 'evidence misattributed' (which signals misattribution) and weaker than 'evidence refutes claim'. CommunityMech:communitymech.yaml#EvidenceItemSupportEnum.NO_EVIDENCE METPO:1007150 no evidence found|on-topic but unsupported metpo_communitymech_2026_05 HIGH EvidenceItemSupportEnum.NO_EVIDENCE +METPO:1007155 evidence misattributed to claim An evidence-support level indicating that the cited reference is misattributed - the paper does not address the curated claim at all (e.g., wrong DOI/PMID, paper about a different system). Distinct from 'evidence refutes claim', which is reserved for references that actively contradict the claim. CommunityMech:communitymech.yaml#EvidenceItemSupportEnum.WRONG_STATEMENT METPO:1007150 wrong-paper citation|misattributed reference metpo_communitymech_2026_05 HIGH EvidenceItemSupportEnum.WRONG_STATEMENT +METPO:1007160 evidence item source The provenance category of a piece of evidence, distinguishing in vitro experiments, in vivo studies, computational predictions, review articles, and other sources. CommunityMech:communitymech.yaml#EvidenceSourceEnum METPO:1007102 evidence provenance|evidence source type metpo_communitymech_2026_05 HIGH enum-parent for EvidenceSourceEnum +METPO:1007161 in vitro evidence source An evidence-source value indicating an in vitro experiment (batch culture, bioreactor, defined coculture, etc.). CommunityMech:communitymech.yaml#EvidenceSourceEnum.IN_VITRO METPO:1007160 in-vitro experiment evidence|batch culture evidence metpo_communitymech_2026_05 HIGH EvidenceSourceEnum.IN_VITRO +METPO:1007162 in vivo evidence source An evidence-source value indicating an in vivo experiment (field study, host-associated study, environmental sampling). CommunityMech:communitymech.yaml#EvidenceSourceEnum.IN_VIVO METPO:1007160 field study evidence|in-vivo evidence metpo_communitymech_2026_05 HIGH EvidenceSourceEnum.IN_VIVO +METPO:1007163 computational evidence source An evidence-source value indicating in silico modeling, simulation, or prediction (e.g., flux balance analysis, genome-scale model, machine-learning prediction). CommunityMech:communitymech.yaml#EvidenceSourceEnum.COMPUTATIONAL METPO:1007160 in-silico evidence|modeling evidence metpo_communitymech_2026_05 HIGH EvidenceSourceEnum.COMPUTATIONAL +METPO:1007164 review evidence source An evidence-source value indicating a review article or meta-analysis rather than primary experimental work. CommunityMech:communitymech.yaml#EvidenceSourceEnum.REVIEW METPO:1007160 review article evidence|meta-analysis evidence metpo_communitymech_2026_05 HIGH EvidenceSourceEnum.REVIEW +METPO:1007165 other evidence source An evidence-source value indicating a provenance type that does not fit the in vitro, in vivo, computational, or review categories. CommunityMech:communitymech.yaml#EvidenceSourceEnum.OTHER METPO:1007160 other evidence type metpo_communitymech_2026_05 MEDIUM EvidenceSourceEnum.OTHER +METPO:1007170 taxon abundance level A relative-abundance category describing how much of a microbial community is occupied by a given taxon, binned by percentage thresholds. CommunityMech:communitymech.yaml#AbundanceEnum METPO:1007100 relative abundance category metpo_communitymech_2026_05 HIGH enum-parent for AbundanceEnum +METPO:1007171 dominant abundance level A taxon-abundance level indicating greater than 1% relative abundance in the community. CommunityMech:communitymech.yaml#AbundanceEnum.DOMINANT METPO:1007170 dominant taxon|>1% abundance metpo_communitymech_2026_05 HIGH AbundanceEnum.DOMINANT +METPO:1007172 abundant abundance level A taxon-abundance level indicating 0.1-1% relative abundance in the community. CommunityMech:communitymech.yaml#AbundanceEnum.ABUNDANT METPO:1007170 abundant taxon|0.1-1% abundance metpo_communitymech_2026_05 HIGH AbundanceEnum.ABUNDANT +METPO:1007173 common abundance level A taxon-abundance level indicating 0.01-0.1% relative abundance in the community. CommunityMech:communitymech.yaml#AbundanceEnum.COMMON METPO:1007170 common taxon|0.01-0.1% abundance metpo_communitymech_2026_05 HIGH AbundanceEnum.COMMON +METPO:1007174 rare abundance level A taxon-abundance level indicating less than 0.01% relative abundance in the community. CommunityMech:communitymech.yaml#AbundanceEnum.RARE METPO:1007170 rare taxon|rare biosphere member|<0.01% abundance metpo_communitymech_2026_05 HIGH AbundanceEnum.RARE +METPO:1007180 community ecological state A description of the ecological or health state of a microbial community, distinguishing stable equilibrium, recent perturbation, engineered assembly, and transient succession. CommunityMech:communitymech.yaml#EcologicalStateEnum METPO:1007100 community ecological-state category metpo_communitymech_2026_05 HIGH enum-parent for EcologicalStateEnum +METPO:1007181 stable community state An ecological state indicating a stable, equilibrium community in which composition and function do not change appreciably over the observation period. CommunityMech:communitymech.yaml#EcologicalStateEnum.STABLE METPO:1007180 equilibrium community metpo_communitymech_2026_05 HIGH EcologicalStateEnum.STABLE +METPO:1007182 perturbed community state An ecological state indicating a recently perturbed community (e.g., after antibiotic treatment, nutrient shift, environmental disturbance) whose composition and function are diverging from a previous equilibrium. CommunityMech:communitymech.yaml#EcologicalStateEnum.PERTURBED METPO:1007180 perturbed community metpo_communitymech_2026_05 HIGH EcologicalStateEnum.PERTURBED +METPO:1007183 engineered community state An ecological state indicating a synthetic or engineered community assembled by the researcher (defined membership, controlled conditions). CommunityMech:communitymech.yaml#EcologicalStateEnum.ENGINEERED METPO:1007180 engineered community|defined community metpo_communitymech_2026_05 HIGH EcologicalStateEnum.ENGINEERED +METPO:1007184 transient community state An ecological state indicating a transient or developing community (e.g., during colonization, succession, or active enrichment). CommunityMech:communitymech.yaml#EcologicalStateEnum.TRANSIENT METPO:1007180 developing community|successional community metpo_communitymech_2026_05 HIGH EcologicalStateEnum.TRANSIENT +METPO:1007190 community origin type The origin or assembly mode of a microbial community, distinguishing natural environmental communities from engineered or fully synthetic laboratory communities. CommunityMech:communitymech.yaml#CommunityOriginEnum METPO:1007100 community origin category metpo_communitymech_2026_05 HIGH enum-parent for CommunityOriginEnum +METPO:1007191 natural community origin A community-origin value indicating a naturally occurring community sampled from its environment without bottom-up assembly by the researcher. CommunityMech:communitymech.yaml#CommunityOriginEnum.NATURAL METPO:1007190 naturally occurring community metpo_communitymech_2026_05 HIGH CommunityOriginEnum.NATURAL +METPO:1007192 engineered community origin A community-origin value indicating a deliberately engineered community (e.g., an enrichment culture, a defined coculture, a synthetic consortium designed for a specific function). CommunityMech:communitymech.yaml#CommunityOriginEnum.ENGINEERED METPO:1007190 engineered consortium metpo_communitymech_2026_05 HIGH CommunityOriginEnum.ENGINEERED +METPO:1007193 synthetic community origin A community-origin value indicating a fully synthetic community designed and assembled in laboratory from defined, axenic strains. CommunityMech:communitymech.yaml#CommunityOriginEnum.SYNTHETIC METPO:1007190 SynCom origin|defined synthetic community metpo_communitymech_2026_05 HIGH CommunityOriginEnum.SYNTHETIC +METPO:1007200 community functional category A broad functional or ecological category for grouping microbial communities by the dominant process they mediate, the habitat they inhabit, or the biotechnology application they support. CommunityMech:communitymech.yaml#CommunityCategoryEnum METPO:1007100 community category|community functional grouping metpo_communitymech_2026_05 HIGH enum-parent for CommunityCategoryEnum +METPO:1007201 metal and waste processing community category A community-category grouping for communities that mediate metal cycling, ore bioleaching, or acid mine drainage chemistry. TODO:add_citation METPO:1007200 metal-cycling community metpo_communitymech_2026_05 HIGH intermediate parent for metal/waste processing community categories +METPO:1007202 host-associated community category A community-category grouping for communities that live in obligate or facultative association with a plant, animal, or other host organism. TODO:add_citation METPO:1007200 host-associated community metpo_communitymech_2026_05 HIGH intermediate parent for host-associated community categories +METPO:1007203 engineered metabolic community category A community-category grouping for communities engineered or enriched around a specific metabolic process such as lignocellulose breakdown, methanogenesis, or direct interspecies electron transfer. TODO:add_citation METPO:1007200 metabolic-process community metpo_communitymech_2026_05 HIGH intermediate parent for engineered metabolic community categories +METPO:1007204 remediation and synthesis community category A community-category grouping for communities applied to bioremediation of pollutants, carbon sequestration, or industrial bioproduct synthesis. TODO:add_citation METPO:1007200 applied biotechnology community metpo_communitymech_2026_05 HIGH intermediate parent for remediation/synthesis community categories +METPO:1007205 environmental-setting community category A community-category grouping for communities defined by their natural environmental setting rather than by a specific metabolic process or application. TODO:add_citation METPO:1007200 environment-defined community metpo_communitymech_2026_05 HIGH intermediate parent for environmental-setting community categories +METPO:1007206 biomining community A microbial community category for metal extraction and bioleaching systems in which microbial oxidation of sulfide minerals solubilizes target metals. CommunityMech:communitymech.yaml#CommunityCategoryEnum.BIOMINING METPO:1007201 bioleaching community|biohydrometallurgy community metpo_communitymech_2026_05 HIGH CommunityCategoryEnum.BIOMINING +METPO:1007207 acid mine drainage community A microbial community category for acid mine drainage communities, typically dominated by iron-oxidizing chemolithoautotrophs in highly acidic mineral-rich water. CommunityMech:communitymech.yaml#CommunityCategoryEnum.AMD METPO:1007201 AMD community|acidophile community metpo_communitymech_2026_05 HIGH CommunityCategoryEnum.AMD +METPO:1007208 metal-reducing community A microbial community category for metal-reducing communities, typically dissimilatory Fe(III) or Mn(IV) reducers and their downstream metabolic partners. CommunityMech:communitymech.yaml#CommunityCategoryEnum.METAL_REDUCTION METPO:1007201 dissimilatory metal reduction community metpo_communitymech_2026_05 HIGH CommunityCategoryEnum.METAL_REDUCTION +METPO:1007209 phytoplankton-associated community A microbial community category for algae-bacteria associations, including diatom-bacterium cocultures and phytoplankton-microbiome systems. CommunityMech:communitymech.yaml#CommunityCategoryEnum.PHYTOPLANKTON METPO:1007202 algae-bacteria community|phycosphere community metpo_communitymech_2026_05 HIGH CommunityCategoryEnum.PHYTOPLANKTON +METPO:1007210 rhizosphere community A microbial community category for plant root-associated communities, including bulk rhizosphere, rhizoplane, and endosphere microbiomes. CommunityMech:communitymech.yaml#CommunityCategoryEnum.RHIZOSPHERE METPO:1007202 plant root microbiome metpo_communitymech_2026_05 HIGH CommunityCategoryEnum.RHIZOSPHERE +METPO:1007211 oral community A microbial community category for oral microbiome and dental biofilm communities, including supragingival and subgingival biofilms. CommunityMech:communitymech.yaml#CommunityCategoryEnum.ORAL METPO:1007202 dental biofilm community|oral microbiome metpo_communitymech_2026_05 HIGH CommunityCategoryEnum.ORAL +METPO:1007212 lignocellulose-degrading community A microbial community category for lignocellulose degradation systems, typically including primary cellulolytic, hemicellulolytic, and ligninolytic specialists and downstream fermentation partners. CommunityMech:communitymech.yaml#CommunityCategoryEnum.LIGNOCELLULOSE METPO:1007203 cellulose-degrading community|plant biomass community metpo_communitymech_2026_05 HIGH CommunityCategoryEnum.LIGNOCELLULOSE +METPO:1007213 methanogenic community A microbial community category for methane-producing communities, typically including methanogenic archaea and their syntrophic fermenter or homoacetogenic partners. CommunityMech:communitymech.yaml#CommunityCategoryEnum.METHANOGENESIS METPO:1007203 methanogenesis community metpo_communitymech_2026_05 HIGH CommunityCategoryEnum.METHANOGENESIS +METPO:1007214 direct interspecies electron transfer community A microbial community category for communities mediating direct interspecies electron transfer (DIET) between electroactive partners, often via conductive pili or extracellular minerals. CommunityMech:communitymech.yaml#CommunityCategoryEnum.DIET METPO:1007203 DIET community|electrogenic community metpo_communitymech_2026_05 HIGH CommunityCategoryEnum.DIET +METPO:1007215 bioremediation community A microbial community category for communities engineered or selected for pollutant degradation and environmental remediation (chlorinated solvents, hydrocarbons, heavy metals, plastics, etc.). CommunityMech:communitymech.yaml#CommunityCategoryEnum.BIOREMEDIATION METPO:1007204 pollutant-degrading community metpo_communitymech_2026_05 HIGH CommunityCategoryEnum.BIOREMEDIATION +METPO:1007216 carbon sequestration community A microbial community category for communities applied to carbon fixation and storage, including photosynthetic, chemolithoautotrophic, and engineered C1-fixing systems. CommunityMech:communitymech.yaml#CommunityCategoryEnum.CARBON_SEQUESTRATION METPO:1007204 carbon capture community|carbon fixation community metpo_communitymech_2026_05 HIGH CommunityCategoryEnum.CARBON_SEQUESTRATION +METPO:1007217 biotechnology community A microbial community category for communities applied to industrial biotechnology, including bioproduction of chemicals, biofuels, and bioactive compounds. CommunityMech:communitymech.yaml#CommunityCategoryEnum.BIOTECHNOLOGY METPO:1007204 industrial biotechnology community|bioproduction community metpo_communitymech_2026_05 HIGH CommunityCategoryEnum.BIOTECHNOLOGY +METPO:1007218 extreme environment community A microbial community category for communities from extreme conditions (acidophilic, alkaliphilic, thermophilic, halophilic, hyperbaric, irradiated, etc.). CommunityMech:communitymech.yaml#CommunityCategoryEnum.EXTREME_ENVIRONMENT METPO:1007205 extremophile community metpo_communitymech_2026_05 HIGH CommunityCategoryEnum.EXTREME_ENVIRONMENT +METPO:1007219 syntrophy-defined community A microbial community category for communities defined primarily by syntrophic metabolic cooperation between members (e.g., interspecies hydrogen transfer in anaerobic digestion). CommunityMech:communitymech.yaml#CommunityCategoryEnum.SYNTROPHY METPO:1007205 syntrophic community metpo_communitymech_2026_05 HIGH CommunityCategoryEnum.SYNTROPHY +METPO:1007220 other community category A microbial community category for communities that do not fit any of the predefined functional or environmental groupings. CommunityMech:communitymech.yaml#CommunityCategoryEnum.OTHER METPO:1007200 uncategorized community metpo_communitymech_2026_05 MEDIUM CommunityCategoryEnum.OTHER diff --git a/proposals/metpo_communitymech_v1/metpo_proposal_properties_robot.tsv b/proposals/metpo_communitymech_v1/metpo_proposal_properties_robot.tsv new file mode 100644 index 00000000..52e23a1e --- /dev/null +++ b/proposals/metpo_communitymech_v1/metpo_proposal_properties_robot.tsv @@ -0,0 +1,16 @@ +proposed_id label definition definition_source type domain range xrefs subset priority traits_addressed observations +ID LABEL A IAO:0000115 >A IAO:0000119 TYPE DOMAIN RANGE A oboInOwl:hasDbXref SPLIT=| A oboInOwl:inSubset +METPO:2007100 has source taxon A relation between a microbial community ecological interaction and the NCBITaxon that is the source (initiator) of the interaction. For pairwise scope this slot is required; for community-level scope it may be omitted because no single organism is the source. CommunityMech:communitymech.yaml#EcologicalInteraction.source_taxon owl:ObjectProperty METPO:1007101 NCBITaxon:1 metpo_communitymech_2026_05 HIGH source taxon of community interaction directional, 0..1 cardinality +METPO:2007101 has target taxon A relation between a microbial community ecological interaction and the NCBITaxon that is the target (recipient) of the interaction. Used when the interaction is directional (e.g., one organism preys on another, facilitates colonization of another). CommunityMech:communitymech.yaml#EcologicalInteraction.target_taxon owl:ObjectProperty METPO:1007101 NCBITaxon:1 metpo_communitymech_2026_05 HIGH target taxon of community interaction directional, 0..1 cardinality +METPO:2007102 has interaction type A relation between a microbial community ecological interaction and the interaction-type class describing its valence and mechanism (mutualism, competition, syntrophy, etc.). CommunityMech:communitymech.yaml#EcologicalInteraction.interaction_type owl:ObjectProperty METPO:1007101 METPO:1007120 metpo_communitymech_2026_05 HIGH interaction valence/mechanism required, 1..1 cardinality +METPO:2007103 has interaction scope A relation between a microbial community ecological interaction and its scope class, distinguishing pairwise organism-level edges from community-wide emergent phenomena. CommunityMech:communitymech.yaml#EcologicalInteraction.scope owl:ObjectProperty METPO:1007101 METPO:1007140 metpo_communitymech_2026_05 HIGH interaction scope required, 1..1 cardinality +METPO:2007104 has exchanged metabolite A relation between a microbial community ecological interaction and a CHEBI metabolite that is produced, consumed, transferred, or competed for during the interaction. CommunityMech:communitymech.yaml#EcologicalInteraction.metabolites owl:ObjectProperty METPO:1007101 CHEBI:24431 metpo_communitymech_2026_05 HIGH metabolite exchange or competition 0..* cardinality +METPO:2007105 participates in biological process A relation between a microbial community ecological interaction and a GO biological process term that captures the molecular or cellular function underlying the interaction (e.g., methanogenesis, nitrogen fixation, cellulose catabolic process). CommunityMech:communitymech.yaml#EcologicalInteraction.biological_processes owl:ObjectProperty METPO:1007101 GO:0008150 metpo_communitymech_2026_05 HIGH biological process underlying interaction 0..* cardinality +METPO:2007106 has supporting evidence A relation between a microbial community ecological interaction (or community claim) and a microbial community evidence item that substantiates it, anchoring the claim to a citable reference and snippet. CommunityMech:communitymech.yaml#EcologicalInteraction.evidence owl:ObjectProperty METPO:1007101 METPO:1007102 metpo_communitymech_2026_05 HIGH evidence linkage 0..* cardinality +METPO:2007107 has functional role A relation between a microbial community member (microbe-level taxon) and a community functional role class describing its trophic and metabolic position in the community. CommunityMech:communitymech.yaml#TaxonomicComposition.functional_role owl:ObjectProperty METPO:1000525 METPO:1007103 metpo_communitymech_2026_05 HIGH functional role assignment to community member 0..* cardinality +METPO:2007108 has abundance level A relation between a microbial community member (microbe-level taxon) and an abundance-level class describing its relative abundance in the community. CommunityMech:communitymech.yaml#TaxonomicComposition.abundance_level owl:ObjectProperty METPO:1000525 METPO:1007170 metpo_communitymech_2026_05 HIGH relative abundance assignment to community member 0..1 cardinality +METPO:2007109 has community category A relation between a microbial community and a community functional category class that groups it by dominant process or environment (biomining, methanogenesis, rhizosphere, etc.). CommunityMech:communitymech.yaml#MicrobialCommunity.community_category owl:ObjectProperty METPO:1007100 METPO:1007200 metpo_communitymech_2026_05 HIGH community category assignment 0..1 cardinality +METPO:2007110 has community origin A relation between a microbial community and a community-origin class indicating how the community was assembled (natural, engineered enrichment, or fully synthetic). CommunityMech:communitymech.yaml#MicrobialCommunity.community_origin owl:ObjectProperty METPO:1007100 METPO:1007190 metpo_communitymech_2026_05 HIGH community origin/assembly mode 0..1 cardinality +METPO:2007111 has ecological state A relation between a microbial community and an ecological-state class describing whether the community is stable, perturbed, engineered, or transient/developing. CommunityMech:communitymech.yaml#MicrobialCommunity.ecological_state owl:ObjectProperty METPO:1007100 METPO:1007180 metpo_communitymech_2026_05 HIGH community ecological state 0..1 cardinality +METPO:2007112 has evidence support level A relation between a microbial community evidence item and an evidence-support-level class indicating how the cited reference relates to the claim (direct support, partial support, no evidence, misattribution, or active refutation). CommunityMech:communitymech.yaml#EvidenceItem.supports owl:ObjectProperty METPO:1007102 METPO:1007150 metpo_communitymech_2026_05 HIGH support level of cited reference required, 1..1 cardinality +METPO:2007113 has evidence source type A relation between a microbial community evidence item and an evidence-source class indicating the provenance category of the evidence (in vitro, in vivo, computational, review, other). CommunityMech:communitymech.yaml#EvidenceItem.evidence_source owl:ObjectProperty METPO:1007102 METPO:1007160 metpo_communitymech_2026_05 HIGH provenance of evidence required, 1..1 cardinality diff --git a/proposals/metpo_communitymech_v1/proposal.md b/proposals/metpo_communitymech_v1/proposal.md new file mode 100644 index 00000000..dedf7ff1 --- /dev/null +++ b/proposals/metpo_communitymech_v1/proposal.md @@ -0,0 +1,202 @@ +# METPO ROBOT Template Proposal — CommunityMech Lift (v1, 2026-05) + +## Context + +The [CommunityMech](https://github.com/CultureBotAI/CommunityMech) LinkML schema +(`src/communitymech/schema/communitymech.yaml`) defines 13 enums that classify +microbial community members, their interactions, and the evidence supporting +claims about them. The +[METPO proposal pipeline](../../../kg-microbe/.claude/skills/metpo-proposal/SKILL.md) +in `kg-microbe/mappings/` currently covers phenotypic traits, tolerance ranges, +and enzyme assays — but has **zero** coverage of community-level roles, +interaction types, and evidence framing. This proposal closes that gap by +lifting 9 community-shaped enums into METPO classes (with grouping parents to +give them a hierarchy) and proposing 14 object properties that connect them. + +After upstream sign-off and ID minting, KGs in the KG-Microbe ecosystem will +be able to express CommunityMech assertions as METPO triples, so reasoners +that already work over phenotypic METPO triples can reason over community- +level assertions the same way. + +## Scope + +| CommunityMech enum | METPO parent | # leaf classes | # intermediate parents | Schema lines | +| --- | --- | ---: | ---: | --- | +| `FunctionalRoleEnum` | `microbial community member functional role` (`METPO:1007103`) | 5 | 2 (primary / secondary trophic role) | 214–226 | +| `InteractionTypeEnum` | `ecological interaction type` (`METPO:1007120`) | 10 (incl. `STRAIN_COMPETITION` ⊂ `COMPETITION`) | 3 (positive / negative / partitioning) | 157–189 | +| `EvidenceItemSupportEnum` | `evidence item support level` (`METPO:1007150`) | 5 | 0 (flat) | 33–69 | +| `EvidenceSourceEnum` | `evidence item source` (`METPO:1007160`) | 5 | 0 (flat) | 71–83 | +| `InteractionScopeEnum` | `interaction scope` (`METPO:1007140`) | 2 | 0 (flat) | 191–200 | +| `AbundanceEnum` | `taxon abundance level` (`METPO:1007170`) | 4 | 0 (flat) | 202–212 | +| `CommunityCategoryEnum` | `community functional category` (`METPO:1007200`) | 15 | 5 (thematic groupings) | 123–155 | +| `CommunityOriginEnum` | `community origin type` (`METPO:1007190`) | 3 | 0 (flat) | 97–105 | +| `EcologicalStateEnum` | `community ecological state` (`METPO:1007180`) | 4 | 0 (flat) | 85–95 | + +Plus three new **top-level domain classes** (children of `METPO:1000000`): + +| ID | Label | Lifts CommunityMech class | +| --- | --- | --- | +| `METPO:1007100` | microbial community | `MicrobialCommunity` | +| `METPO:1007101` | microbial community ecological interaction | `EcologicalInteraction` | +| `METPO:1007102` | microbial community evidence item | `EvidenceItem` | + +Each `enum-parent` class is a child of one of those three domain classes (e.g., +`community functional category` sits under `microbial community`; +`evidence item support level` sits under `microbial community evidence item`). + +Total class rows: **74** (3 top-level domain + 9 enum-parents + 10 intermediate +groupings + 52 leaves from enums). + +## Hierarchy decisions + +### `InteractionTypeEnum` — three valence groupings + +The CommunityMech enum already distinguishes positive- vs negative-outcome +interactions in its `+/+, +/0, -/-, +/-` annotations and has explicit `comments:` +fields placing `NICHE_PARTITIONING` outside the positive/negative axis. Lifting +these into METPO with three intermediate parents (positive, negative, +partitioning) makes the implicit valence axis queryable and lets reasoners +collapse the 10 leaves to 3 groups when needed. + +`STRAIN_COMPETITION` is a child of `COMPETITION` (not a sibling) per the +schema's own comment: *"Distinct from interspecific COMPETITION, this captures +strain-level competitive dynamics within a single species."* The class +hierarchy preserves this `is_a`. + +### `FunctionalRoleEnum` — two trophic tiers + +The five roles fall naturally into two tiers based on how they enter the +trophic network: `PRIMARY_PRODUCER` and `PRIMARY_DEGRADER` introduce carbon +or fixed substrate; `SECONDARY_FERMENTER`, `SYNTROPHIC_PARTNER`, and +`CROSS_FEEDER` all depend on metabolites that primary members produce. We +encode this as `primary trophic role` (`METPO:1007104`) and `secondary trophic +role` (`METPO:1007105`), each a child of the enum-parent. + +### `CommunityCategoryEnum` — five thematic groupings + +The 15 categories cluster into five thematic groups visible from the schema +descriptions: + +| Group | Members | +| --- | --- | +| metal and waste processing | `BIOMINING`, `AMD`, `METAL_REDUCTION` | +| host-associated | `PHYTOPLANKTON`, `RHIZOSPHERE`, `ORAL` | +| engineered metabolic | `LIGNOCELLULOSE`, `METHANOGENESIS`, `DIET` | +| remediation and synthesis | `BIOREMEDIATION`, `CARBON_SEQUESTRATION`, `BIOTECHNOLOGY` | +| environmental-setting | `EXTREME_ENVIRONMENT`, `SYNTROPHY` | + +`OTHER` stays flat under `community functional category`. + +### `EvidenceItemSupportEnum`, `EvidenceSourceEnum`, and the small enums + +These have no obvious internal hierarchy in the schema — every value is a +distinct mutually-exclusive state — so we keep them flat under their +enum-parent. + +## Predicate proposals + +14 object properties, all in the `METPO:2007NNN` placeholder range. Domains and +ranges reuse either the new top-level classes declared in this proposal or +existing METPO/external IRIs (NCBITaxon, CHEBI, GO). + +| Property | Domain | Range | Source CommunityMech slot | +| --- | --- | --- | --- | +| `has source taxon` (`METPO:2007100`) | community interaction | NCBITaxon | `EcologicalInteraction.source_taxon` | +| `has target taxon` (`METPO:2007101`) | community interaction | NCBITaxon | `EcologicalInteraction.target_taxon` | +| `has interaction type` (`METPO:2007102`) | community interaction | interaction-type class | `EcologicalInteraction.interaction_type` | +| `has interaction scope` (`METPO:2007103`) | community interaction | scope class | `EcologicalInteraction.scope` | +| `has exchanged metabolite` (`METPO:2007104`) | community interaction | CHEBI | `EcologicalInteraction.metabolites` | +| `participates in biological process` (`METPO:2007105`) | community interaction | GO | `EcologicalInteraction.biological_processes` | +| `has supporting evidence` (`METPO:2007106`) | community interaction | evidence item | `EcologicalInteraction.evidence` | +| `has functional role` (`METPO:2007107`) | microbe (`METPO:1000525`) | functional role class | `TaxonomicComposition.functional_role` | +| `has abundance level` (`METPO:2007108`) | microbe (`METPO:1000525`) | abundance class | `TaxonomicComposition.abundance_level` | +| `has community category` (`METPO:2007109`) | microbial community | community category class | `MicrobialCommunity.community_category` | +| `has community origin` (`METPO:2007110`) | microbial community | community origin class | `MicrobialCommunity.community_origin` | +| `has ecological state` (`METPO:2007111`) | microbial community | ecological state class | `MicrobialCommunity.ecological_state` | +| `has evidence support level` (`METPO:2007112`) | evidence item | evidence support class | `EvidenceItem.supports` | +| `has evidence source type` (`METPO:2007113`) | evidence item | evidence source class | `EvidenceItem.evidence_source` | + +No paired "does not X" predicates are proposed here. The SKILL.md +positive/negative pairing convention is intended for parametric +chemical-tolerance relationships (organism × chemical axis); the predicates in +this proposal are domain-modeling relationships (community ↔ category, +interaction ↔ taxa, evidence ↔ reference) for which a negative form is not +semantically meaningful. + +## ID space and subset + +- **Classes**: `METPO:1007100`–`METPO:1007220` (placeholder, within the + KG-Microbe-reserved 1007xxx range per the SKILL.md placeholder policy) +- **Properties**: `METPO:2007100`–`METPO:2007113` (placeholder) +- **Subset tag** on every row: `metpo_communitymech_2026_05` +- **Definition source** on every leaf row: `CommunityMech:communitymech.yaml#.` + for direct enum lifts; `TODO:add_citation` for the 10 intermediate grouping + parents (which are introduced in this proposal, not lifted from the schema). +- **Priority**: `HIGH` on all rows that come directly from CommunityMech enums; + `MEDIUM` on `OTHER` catch-all leaves. + +## Files + +| File | Rows | Notes | +| --- | --- | --- | +| `metpo_proposal_classes_robot.tsv` | 1 column header + 1 ROBOT header + 74 class rows = 76 lines | mirror of `kg-microbe/mappings/metpo_proposal_classes_robot.tsv` schema | +| `metpo_proposal_properties_robot.tsv` | 1 column header + 1 ROBOT header + 14 property rows = 16 lines | mirror of `kg-microbe/mappings/metpo_proposal_properties_robot.tsv` schema | +| `proposal.md` | (this file) | narrative for reviewer | + +## Verification + +Run ROBOT on each TSV against the existing METPO ontology to catch parse, +reasoning, or merge errors: + +```bash +# Parse the two templates standalone +robot template \ + --template metpo_proposal_classes_robot.tsv \ + --output classes.owl +robot template \ + --template metpo_proposal_properties_robot.tsv \ + --output properties.owl + +# Merge with the current METPO core and reason with ELK; assert no unsat +robot merge \ + --input metpo-edit.owl \ + --input classes.owl \ + --input properties.owl \ + --output merged.owl +robot reason --reasoner ELK \ + --input merged.owl \ + --output reasoned.owl +``` + +Manual cross-checks: + +1. Every CommunityMech enum permissible value + (e.g., `FunctionalRoleEnum.PRIMARY_DEGRADER`) maps to a leaf class row. +2. Every CommunityMech slot exercised by the community YAML corpus + (e.g., `EcologicalInteraction.source_taxon`) maps to a property row. +3. Round-trip on three community YAMLs that span the scope: + `Alaska_Tundra_Permafrost_Iron_Redox_Community.yaml` (Fe-redox cycling, + metal-reduction category), `BioModels_MODEL2204300001_Kefir_Community_Model.yaml` + (engineered metabolic, with external_resources evidence), and + `Propanotrophic_Chlorinated_Ethene_Cometabolism_Enrichment.yaml` + (bioremediation category, COMPETITION + CROSS_FEEDING interactions, PARTIAL + and SUPPORT evidence levels). Confirm every enum value cited in these YAMLs + resolves to a class in this proposal. + +## Upstream path + +When this proposal is approved here in CommunityMech: + +1. Copy `metpo_proposal_classes_robot.tsv` and `metpo_proposal_properties_robot.tsv` + into `kg-microbe/mappings/` (alongside the existing 2026_04 cohort files). +2. Run the SKILL.md validation checklist on the merged proposal. +3. METPO maintainers mint real IDs to replace the `METPO:1007xxx` / + `METPO:2007xxx` placeholders. +4. The CommunityMech `datamodel/communitymech.py` regeneration can later be + extended to emit METPO IRIs for the lifted enum values, enabling round-trip + KGX export to KG-Microbe-compatible TSVs. + +## Change log + +- **v1, 2026-05**: Initial proposal. 74 class rows (9 enums, 3 top-level + domain classes, 10 intermediate grouping parents) + 14 property rows. From 554c52eb0b67f257f3d0e7875bd701d31406753d Mon Sep 17 00:00:00 2001 From: "marcin p. joachimiak" <4625870+realmarcin@users.noreply.github.com> Date: Tue, 19 May 2026 18:57:23 -0700 Subject: [PATCH 2/4] Add metpo-proposal skill Document the workflow used to produce proposals/metpo_communitymech_v1/ (PR #74) so future cohorts can follow the same conventions: ROBOT-template column structure (11 classes / 12 properties), ID-space conventions (METPO:1007NNN and METPO:2007NNN placeholder ranges), Aristotelian definitions with schema-anchored definition_source values, hierarchy-design rules for intermediate parents, predicate domain/range conventions, trailing-tab fix-up for the ROBOT header row, and the verification commands (awk column-count check, enum-coverage check, parent- integrity check, optional robot template + reason). Points at the upstream kg-microbe metpo-proposal SKILL.md for the shared conventions and at proposals/metpo_communitymech_v1/ as the reference cohort. Co-Authored-By: Claude Opus 4.7 (1M context) --- .claude/skills/metpo-proposal/skill.md | 303 +++++++++++++++++++++++++ 1 file changed, 303 insertions(+) create mode 100644 .claude/skills/metpo-proposal/skill.md diff --git a/.claude/skills/metpo-proposal/skill.md b/.claude/skills/metpo-proposal/skill.md new file mode 100644 index 00000000..9f2a2da2 --- /dev/null +++ b/.claude/skills/metpo-proposal/skill.md @@ -0,0 +1,303 @@ +--- +name: metpo-proposal +description: Generate a ROBOT-template METPO proposal that lifts CommunityMech LinkML enums, classes, and slots into METPO classes and predicates with a curated hierarchy +category: workflow +requires_database: false +requires_internet: false +version: 1.0.0 +tags: [metpo, ontology, robot, linkml, proposal, schema-lift, kg-microbe] +--- + +# METPO Proposal Skill + +## Overview + +Turn a slice of the CommunityMech LinkML schema (one or more `*Enum` +permissible-value sets, plus the slots that connect them) into a METPO +ROBOT-template proposal that can be merged with the existing kg-microbe +METPO proposal pipeline. + +Three artifacts are produced under `proposals//`: + +| File | Format | +|---|---| +| `metpo_proposal_classes_robot.tsv` | 11-column ROBOT template (mirrors kg-microbe convention) | +| `metpo_proposal_properties_robot.tsv` | 12-column ROBOT template | +| `proposal.md` | Reviewer narrative: scope, hierarchy decisions, predicate rationale, verification, upstream path | + +**Run from `CommunityMech/CommunityMech/` directory.** Reference example: +[PR #74](https://github.com/CultureBotAI/CommunityMech/pull/74) and the files +under `proposals/metpo_communitymech_v1/`. + +--- + +## When to use this skill + +- A new CommunityMech enum (or set of enums) is added to + `src/communitymech/schema/communitymech.yaml` and should be exposed to + KG-Microbe consumers as METPO classes. +- An existing METPO proposal cohort needs an additional batch of community + scope (e.g., lifting `AtmosphereEnum` after a previous round shipped the + 9 community-shaped enums). +- A reviewer asks for "the METPO version" of a CommunityMech slot + (e.g., `EcologicalInteraction.source_taxon` → `has source taxon` object + property). + +Do NOT use for: lifting PATO/GO/CHEBI cross-references (those already exist +upstream), lifting tolerance ranges (use the upstream +[kg-microbe metpo-proposal skill](../../../../../kg-microbe/.claude/skills/metpo-proposal/SKILL.md) +which handles the paired positive/negative predicate convention). + +--- + +## Required reading + +Before generating a proposal, read: + +1. **`/Users/marcin/Documents/VIMSS/ontology/KG-Hub/KG-Microbe/kg-microbe/.claude/skills/metpo-proposal/SKILL.md`** — + the upstream metpo-proposal skill. Defines: + - Aristotelian definition style + - `definition_source` citation forms (PMID, DOI, BacDive, `TODO:add_citation`) + - Numeric ID-range conventions + - Parent-class selection (audit for siblings before falling back to + `METPO:1000000`) + - The 12-point pre-submission checklist +2. **`/Users/marcin/Documents/VIMSS/ontology/KG-Hub/KG-Microbe/kg-microbe/mappings/metpo_proposal_classes_robot.tsv`** — + the canonical 11-column class template. Copy the two-row header verbatim. +3. **`/Users/marcin/Documents/VIMSS/ontology/KG-Hub/KG-Microbe/kg-microbe/mappings/metpo_proposal_properties_robot.tsv`** — + the canonical 12-column property template. +4. **`proposals/metpo_communitymech_v1/`** in this repo — the reference + example. Read all three files end-to-end before writing a new cohort. + +--- + +## ROBOT template column conventions + +These are the only column structures that will parse cleanly. Tab-separated, +two header rows. + +**Classes** (11 columns): + +``` +proposed_idlabeldefinitiondefinition_sourceparentsynonymsxrefssubsetpriorityobservationstraits_addressed +IDLABELA IAO:0000115>A IAO:0000119SC %A oboInOwl:hasExactSynonym SPLIT=|A oboInOwl:hasDbXref SPLIT=|A oboInOwl:inSubset +``` + +**Properties** (12 columns): + +``` +proposed_idlabeldefinitiondefinition_sourcetypedomainrangexrefssubsetprioritytraits_addressedobservations +IDLABELA IAO:0000115>A IAO:0000119TYPEDOMAINRANGEA oboInOwl:hasDbXref SPLIT=|A oboInOwl:inSubset +``` + +The **second row (ROBOT header) must have trailing tabs to reach the full +column count**, even when the trailing columns are blank. Validate with: + +```bash +awk -F'\t' 'NF != 11 {print NR": "NF" cols"}' proposals//metpo_proposal_classes_robot.tsv +awk -F'\t' 'NF != 12 {print NR": "NF" cols"}' proposals//metpo_proposal_properties_robot.tsv +``` + +Both commands should print nothing. + +--- + +## ID-space conventions + +| Range | Use | +|---|---| +| `METPO:1000000` | METPO root (use as `SC %` parent only when no closer parent exists) | +| `METPO:1000525` | "microbe" — use as `DOMAIN` for predicates whose subject is a microbial taxon | +| `METPO:1007NNN` | **Placeholder** range for new class proposals from KG-Microbe / CommunityMech (reserved per the SKILL.md placeholder policy). Real METPO IDs are minted upstream after sign-off. | +| `METPO:2007NNN` | **Placeholder** range for new predicate proposals from this pipeline. | + +Within `METPO:1007NNN` and `METPO:2007NNN`, allocate contiguous numeric blocks +per enum so the file scans easily. The v1 proposal uses: + +- `1007100`–`1007102` — top-level domain classes +- `1007103`–`1007110` — `FunctionalRoleEnum` +- `1007120`–`1007132` — `InteractionTypeEnum` +- `1007140`–`1007142` — `InteractionScopeEnum` +- `1007150`–`1007155` — `EvidenceItemSupportEnum` +- `1007160`–`1007165` — `EvidenceSourceEnum` +- `1007170`–`1007174` — `AbundanceEnum` +- `1007180`–`1007184` — `EcologicalStateEnum` +- `1007190`–`1007193` — `CommunityOriginEnum` +- `1007200`–`1007220` — `CommunityCategoryEnum` + +Future cohorts should pick a fresh block starting at `1007300+` or higher to +avoid collision; document the new block in `proposal.md`. + +--- + +## Subset tag + +Every row must carry the same `oboInOwl:inSubset` value in column 8 (classes) +or column 9 (properties). Format: `metpo___`. + +Examples: +- `metpo_communitymech_2026_05` — initial CommunityMech cohort (v1) +- `metpo_kgmicrobe_2026_04` — existing kg-microbe cohort + +--- + +## Workflow + +### 1. Pick the scope + +For each LinkML enum or class you intend to lift, write a one-line statement +of why it belongs in METPO. If the answer is "because KG-Microbe consumers +need to filter by it", proceed; if it's "because it's in the schema", +reconsider — METPO is a curated ontology, not a schema dump. + +Skip enums that are pure machine identifiers (e.g., `DatasetTypeEnum`, +`CultureCollectionEnum`); those belong in NMDC / re3data, not METPO. + +### 2. Design the hierarchy + +For each enum: + +- **Pick a parent class** (will be `METPO:1007NNN` enum-parent — invent one if + none exists). Definition source: schema enum's own `description:` field. + Cite as `CommunityMech:communitymech.yaml#`. +- **Decide on intermediate parents**: + - Use them when the enum description or comments group values by valence + (e.g., InteractionTypeEnum's `+/+, -/-` annotations → positive/negative + parents). + - Use them when the schema has explicit `is_a` hints in comments + (e.g., `STRAIN_COMPETITION` ⊂ `COMPETITION`). + - Use them when there is an obvious ecological / functional grouping (e.g., + `CommunityCategoryEnum` clusters into metal-processing, host-associated, + etc.). + - Otherwise leave the enum flat. +- **Lift each permissible value as a leaf class**. The leaf's + `definition_source` is `CommunityMech:communitymech.yaml#.`. + The leaf's `parent` (`SC %`) is the appropriate intermediate parent or the + enum-parent. + +For each top-level CommunityMech class (e.g., `MicrobialCommunity`, +`EcologicalInteraction`, `EvidenceItem`) that is referenced as a predicate +domain or range, declare a **top-level domain class** under `METPO:1000000`. +These get IDs like `1007100`–`1007102` in the v1 cohort. + +### 3. Design the predicates + +For each LinkML slot that: +- has a non-primitive range (i.e., references another class or enum), AND +- is exercised by at least one community YAML in `kb/communities/`, + +write one object-property row. Domain and range MUST resolve either to: +- another row in the same proposal (e.g., `METPO:1007101` for community + interaction), or +- an existing METPO IRI (`METPO:1000525` for microbe), or +- an external IRI (`NCBITaxon:1`, `CHEBI:24431`, `GO:0008150`). + +Skip slots that just hold metadata (e.g., `community_id`, `created_at`). + +Use the `does not X` paired-negative convention only when the predicate +relates a microbe to a chemical/physical capability (per the kg-microbe +SKILL.md). Domain-modeling slots (community ↔ taxon, interaction ↔ scope) +have no meaningful negative form; do not pair them. + +### 4. Write the TSVs + +Write `metpo_proposal_classes_robot.tsv` and +`metpo_proposal_properties_robot.tsv` directly with the `Write` tool. Build +each row as a literal tab-separated string. After writing, fix the ROBOT +header row's trailing tabs: + +```bash +python3 -c " +lines = open('proposals//metpo_proposal_classes_robot.tsv').readlines() +lines[1] = lines[1].rstrip('\n') + '\t\t\t\n' # 3 trailing tabs to reach 11 cols +with open('proposals//metpo_proposal_classes_robot.tsv', 'w') as f: + f.writelines(lines) +" +``` + +### 5. Verify + +```bash +# Column-count sanity (must print nothing) +awk -F'\t' 'NF != 11 {print NR": "NF" cols"}' proposals//metpo_proposal_classes_robot.tsv +awk -F'\t' 'NF != 12 {print NR": "NF" cols"}' proposals//metpo_proposal_properties_robot.tsv + +# Enum coverage — every CommunityMech permissible value should appear as a leaf row +# Use the per-enum-value definition_source markers (e.g., "FunctionalRoleEnum.PRIMARY_DEGRADER") +python3 <<'EOF' +import re +schema = open('src/communitymech/schema/communitymech.yaml').read() +target_enums = ['FunctionalRoleEnum', 'InteractionTypeEnum', 'EvidenceItemSupportEnum'] +# ... see proposals/metpo_communitymech_v1/ for the canonical coverage check +EOF + +# Parent integrity — every SC % parent must resolve in-file or to a known METPO IRI +# See proposals/metpo_communitymech_v1/ for the canonical integrity check +``` + +If you have ROBOT installed locally, also run: + +```bash +robot template --template proposals//metpo_proposal_classes_robot.tsv \ + --output /tmp/classes.owl +robot template --template proposals//metpo_proposal_properties_robot.tsv \ + --output /tmp/properties.owl +robot merge --input metpo-edit.owl --input /tmp/classes.owl --input /tmp/properties.owl \ + --output /tmp/merged.owl +robot reason --reasoner ELK --input /tmp/merged.owl --output /tmp/reasoned.owl +``` + +ROBOT must parse both TSVs and ELK must reason without unsatisfiable classes. + +### 6. Write the narrative + +`proposal.md` is the reviewer's entry point. Required sections: + +| Section | Content | +|---|---| +| **Context** | Why this cohort exists; what gap it fills in METPO | +| **Scope** | Table of enums lifted × parent class × leaf count | +| **Hierarchy decisions** | Per intermediate-parent: why you grouped these enum values together (cite schema comments where possible) | +| **Predicate proposals** | Table of property rows × domain × range × source slot | +| **ID space and subset** | The blocks you allocated and the subset tag | +| **Files** | Three-row table listing each artifact and row count | +| **Verification** | ROBOT commands plus the column-count and coverage checks | +| **Upstream path** | What happens after CommunityMech sign-off (typically: copy TSVs to `kg-microbe/mappings/`, run SKILL.md checklist, mint real METPO IDs) | +| **Change log** | Version + date + headline change | + +### 7. Open a PR + +Standard CommunityMech workflow: + +```bash +git checkout -b claude/metpo--proposal +git add proposals// +git commit -m "Add METPO ROBOT-template proposal: " +git push -u origin claude/metpo--proposal +gh pr create --title "METPO ROBOT-template proposal: " +gh api repos/CultureBotAI/CommunityMech/pulls//requested_reviewers -X POST -f "reviewers[]=Copilot" +``` + +--- + +## Common pitfalls + +| Symptom | Cause | Fix | +|---|---|---| +| `awk` reports row 2 has 8/9 columns | Trailing tabs missing on ROBOT header | Append `\t\t\t` to row 2 (see step 4) | +| ROBOT error "subject of axiom is not a class" | Property row referencing a class IRI in the `RANGE` column when ROBOT expects a class declaration | Declare the range class as its own row in the classes TSV first | +| ELK reports unsatisfiable class | Intermediate parent created with conflicting `SC %` axioms | Inspect the parent chain — usually a copy-paste error in the `parent` column | +| Copilot flags "schema lifted incorrectly" | The leaf's definition doesn't match the schema enum's description verbatim | Copy the schema description verbatim into the `definition` column; reword in the proposal narrative if you want a different phrasing | +| Reviewer asks for an existing METPO ID | The lifted concept already exists in METPO under a different label | Use the existing IRI; record the alias in `mappings/metpo_existing_aliases.tsv` upstream when copying to kg-microbe | + +--- + +## Canonical example + +The v1 cohort `proposals/metpo_communitymech_v1/` lifts 9 CommunityMech enums +(74 leaf + parent classes) and 14 predicates. Inspect that directory before +writing a new cohort — every convention in this skill was instantiated there. + +Coverage check from v1: **52/52 enum permissible values** mapped to leaf class +rows; **74/74 `SC %` parent references** resolved. PR #74 in the CommunityMech +repo has the full reviewer trace. From 3a89bff35bb99eaad7a8afb1f4035815bd7c8f7c Mon Sep 17 00:00:00 2001 From: "marcin p. joachimiak" <4625870+realmarcin@users.noreply.github.com> Date: Tue, 19 May 2026 19:04:52 -0700 Subject: [PATCH 3/4] Extend metpo-proposal skill with update-path guidance The initial skill assumed every invocation creates a new cohort. Add an "Updating an existing proposal" section covering the three real update paths and the decision rule for picking between them: - Path A: edit in place on an open PR before merge. IDs and subset tag unchanged; just modify rows in response to reviewer feedback. - Path B: extend in place after merge. Append-only rows in the same cohort directory, contiguous fresh ID block at least 10 above the highest existing ID, same subset tag, new entries in the Scope/ID-space/Change-log sections of proposal.md. - Path C: new cohort version. Fresh proposals/_v/ dir, fresh subset tag, non-overlapping ID block, mandatory "Relationship to vN-1" section in the new proposal.md, original cohort marked superseded but retained on disk. Each path lists what NOT to do: never edit merged IDs, never mix Path B + Path C in the same PR, never delete rows (mark LOW priority instead and retire via Path C). Decision rule lives at the top of the section as a table keyed on review/merge state and the type of change. Co-Authored-By: Claude Opus 4.7 (1M context) --- .claude/skills/metpo-proposal/skill.md | 87 ++++++++++++++++++++++++++ 1 file changed, 87 insertions(+) diff --git a/.claude/skills/metpo-proposal/skill.md b/.claude/skills/metpo-proposal/skill.md index 9f2a2da2..813ac0d0 100644 --- a/.claude/skills/metpo-proposal/skill.md +++ b/.claude/skills/metpo-proposal/skill.md @@ -280,6 +280,93 @@ gh api repos/CultureBotAI/CommunityMech/pulls//requested_reviewers -X POST -f --- +## Updating an existing proposal + +The workflow above produces a **new** cohort. When work on an existing cohort +isn't finished, pick one of three update paths instead of starting fresh. + +### Decision rule + +| Situation | Path | Why | +|---|---|---| +| Reviewer (human or Copilot) asks for changes on an open PR before merge | **Edit in place** | The IDs and subset tag are still proposal-stage; no downstream consumer has pinned them yet. | +| Cohort is merged on main and you want to add more enum lifts (e.g., `AtmosphereEnum` after the original 9 enums) | **Extend in place** | Append-only is non-breaking; reviewers can diff the new rows against the same cohort. | +| Cohort is merged and the underlying schema changed in a way that invalidates existing rows (e.g., an enum value was renamed or removed, or a definition was sharpened in a way that breaks substring lifts) | **New cohort version** | A breaking semantic change needs a fresh subset tag and ID block so consumers can pin to the old or new version. | +| Real METPO IDs have been minted upstream and a row has been re-IDed | **New cohort version** | Mutating an already-minted ID is hostile to downstream consumers. | + +### Path A — Edit in place (open PR) + +Modify rows directly in +`proposals//metpo_proposal_*.tsv`. Keep the original +`proposed_id`, `subset`, and column structure. Update +`definition`, `definition_source`, `parent`, `synonyms`, or +`label` in place. Re-run the verification steps (column-count, +enum-coverage, parent-integrity). Commit on the same branch and +let the Copilot review thread close. + +If the edit is to the narrative only (no TSV change), edit +`proposal.md` and add a one-line note under the Change log +section: `- v1, 2026-05 (revised ): `. + +### Path B — Extend in place (merged cohort) + +Add new rows to the **same** `metpo_proposal_*.tsv` files in the +**same** cohort directory. Append-only — never reorder or +renumber existing rows. Conventions: + +- New rows use a **contiguous fresh block** within the same + `METPO:1007NNN` / `METPO:2007NNN` range. Pick a block at least + 10 above the highest existing ID to leave room for v1 patches. + Document the new block in `proposal.md` under the ID space + section. +- Same `subset` tag as the rest of the cohort. The tag identifies + the cohort, not the round of additions. +- New `parent` references may point at existing rows in the cohort + (this is the main reason to extend rather than re-version). +- Update `proposal.md`: + - Add the new enum(s) to the Scope table. + - Add the new ID block to the ID space section. + - Append a Change log entry: `- v1.N, : extended with + (+ classes / + + properties)`. + +Open a new PR titled `Extend METPO proposal with +`. Re-request Copilot review. + +### Path C — New cohort version + +Create a fresh directory +`proposals/_v/` (e.g., `metpo_communitymech_v2/`) +with: + +- Fresh `subset` tag: bump the month-year suffix + (`metpo_communitymech_2026_05` → `metpo_communitymech_2026_07`). +- Fresh **ID block** in the `1007NNN` / `2007NNN` placeholder + range, **not overlapping with v1**. Document the new block in + v2's `proposal.md`. +- v2 `proposal.md` must include a `## Relationship to v1` section + that names every v1 ID retired or redefined, with the reason. +- v1 stays on disk read-only. Add a top-of-file note to v1's + `proposal.md`: `> Superseded by + proposals/_v/proposal.md (). v1 is retained + for traceability.` + +Use this path sparingly — the kg-microbe pipeline assumes one +active cohort per source repository at a time, and re-versioning +forces downstream consumers to switch their queries. + +### What not to do + +- Do **not** edit IDs after they've been merged on main (use + Path B or C instead). +- Do **not** mix Path B (extend) and Path C (re-version) in the + same PR — reviewers can't tell what's append-only vs. breaking. +- Do **not** delete rows in Path B. If a row is obsolete, mark it + by setting `priority` to `LOW` and adding an observation note; + let Path C retire it cleanly. + +--- + ## Common pitfalls | Symptom | Cause | Fix | From 76176bc64efcfc87a6c2aedb27b3a91712bdcdc8 Mon Sep 17 00:00:00 2001 From: "marcin p. joachimiak" <4625870+realmarcin@users.noreply.github.com> Date: Tue, 19 May 2026 20:25:41 -0700 Subject: [PATCH 4/4] Address Copilot review on PR #75: replace kg-microbe relative links Per the same broken-link finding that triggered the Path A fix on PR #74, the skill.md had two more relative paths into the kg-microbe repo that 404 on GitHub: - "Do NOT use for..." section: relative link to upstream skill replaced with absolute GitHub URL - "Required reading" section: three local absolute paths under /Users/marcin/... replaced with GitHub URLs to the kg-microbe source files, keeping the local clone path as a hint for developers with a checkout. Co-Authored-By: Claude Opus 4.7 (1M context) --- .claude/skills/metpo-proposal/skill.md | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/.claude/skills/metpo-proposal/skill.md b/.claude/skills/metpo-proposal/skill.md index 813ac0d0..ec0ed511 100644 --- a/.claude/skills/metpo-proposal/skill.md +++ b/.claude/skills/metpo-proposal/skill.md @@ -45,7 +45,7 @@ under `proposals/metpo_communitymech_v1/`. Do NOT use for: lifting PATO/GO/CHEBI cross-references (those already exist upstream), lifting tolerance ranges (use the upstream -[kg-microbe metpo-proposal skill](../../../../../kg-microbe/.claude/skills/metpo-proposal/SKILL.md) +[kg-microbe metpo-proposal skill](https://github.com/Knowledge-Graph-Hub/kg-microbe/blob/main/.claude/skills/metpo-proposal/SKILL.md) which handles the paired positive/negative predicate convention). --- @@ -54,7 +54,8 @@ which handles the paired positive/negative predicate convention). Before generating a proposal, read: -1. **`/Users/marcin/Documents/VIMSS/ontology/KG-Hub/KG-Microbe/kg-microbe/.claude/skills/metpo-proposal/SKILL.md`** — +1. **[kg-microbe/.claude/skills/metpo-proposal/SKILL.md](https://github.com/Knowledge-Graph-Hub/kg-microbe/blob/main/.claude/skills/metpo-proposal/SKILL.md)** + (local clone path: `~/Documents/VIMSS/ontology/KG-Hub/KG-Microbe/kg-microbe/.claude/skills/metpo-proposal/SKILL.md`) — the upstream metpo-proposal skill. Defines: - Aristotelian definition style - `definition_source` citation forms (PMID, DOI, BacDive, `TODO:add_citation`) @@ -62,9 +63,9 @@ Before generating a proposal, read: - Parent-class selection (audit for siblings before falling back to `METPO:1000000`) - The 12-point pre-submission checklist -2. **`/Users/marcin/Documents/VIMSS/ontology/KG-Hub/KG-Microbe/kg-microbe/mappings/metpo_proposal_classes_robot.tsv`** — +2. **[kg-microbe/mappings/metpo_proposal_classes_robot.tsv](https://github.com/Knowledge-Graph-Hub/kg-microbe/blob/main/mappings/metpo_proposal_classes_robot.tsv)** — the canonical 11-column class template. Copy the two-row header verbatim. -3. **`/Users/marcin/Documents/VIMSS/ontology/KG-Hub/KG-Microbe/kg-microbe/mappings/metpo_proposal_properties_robot.tsv`** — +3. **[kg-microbe/mappings/metpo_proposal_properties_robot.tsv](https://github.com/Knowledge-Graph-Hub/kg-microbe/blob/main/mappings/metpo_proposal_properties_robot.tsv)** — the canonical 12-column property template. 4. **`proposals/metpo_communitymech_v1/`** in this repo — the reference example. Read all three files end-to-end before writing a new cohort.