From bcd937cb7cd7121fce4af64a776ccadd850f48a4 Mon Sep 17 00:00:00 2001 From: "marcin p. joachimiak" <4625870+realmarcin@users.noreply.github.com> Date: Tue, 6 Oct 2026 04:51:00 -0700 Subject: [PATCH] Bound Variovorax graph and correct strain-aware connectivity census --- .../GLBRC_Populus_Variovorax_SynCom28.html | 402 +++++++++--- .../2026-10-06T113342Z-codex-0ba641.yaml | 27 + .../GLBRC_Populus_Variovorax_SynCom28.yaml | 411 ++++++++++--- reports/causal_graph_review/README.md | 11 + .../adversarial-review-20261006-batch43.yaml | 150 +++++ .../20261006-variovorax-batch43.yaml | 101 +++ reports/causal_graph_review/inventory.tsv | 2 +- reports/causal_graph_review/summary.json | 8 +- .../validation-20261006-batch43.json | 579 ++++++++++++++++++ tests/test_causal_review_batch43.py | 110 ++++ ...est_community_level_connectivity_credit.py | 60 +- tests/test_participating_taxa.py | 12 +- 12 files changed, 1664 insertions(+), 209 deletions(-) create mode 100644 history/records/GLBRC_Populus_Variovorax_SynCom28/2026-10-06T113342Z-codex-0ba641.yaml create mode 100644 reports/causal_graph_review/adversarial-review-20261006-batch43.yaml create mode 100644 reports/causal_graph_review/decisions/20261006-variovorax-batch43.yaml create mode 100644 reports/causal_graph_review/validation-20261006-batch43.json create mode 100644 tests/test_causal_review_batch43.py diff --git a/docs/communities/GLBRC_Populus_Variovorax_SynCom28.html b/docs/communities/GLBRC_Populus_Variovorax_SynCom28.html index b86d07b3e..61a348b15 100644 --- a/docs/communities/GLBRC_Populus_Variovorax_SynCom28.html +++ b/docs/communities/GLBRC_Populus_Variovorax_SynCom28.html @@ -1650,22 +1650,12 @@

Ecological Interactions

Ecological interaction network for GLBRC Populus Variovorax SynCom28 - Bipartite graph where circle nodes represent taxa and each ecological interaction is drawn as a distinct non-circular symbol, with colour repeating the same distinction (niche partitioning, colonization facilitation). + Bipartite graph where circle nodes represent taxa and each ecological interaction is drawn as a distinct non-circular symbol, with colour repeating the same distinction.
Taxon
-
- Niche partitioning -
-
- Colonization facilitation -
-

Rhizosphere-Endosphere Niche Partitioning

- NICHE_PARTITIONING +

Variovorax Relative Compartment Enrichment

-

The 28 Variovorax strains exhibit compartment partitioning between rhizosphere and endosphere niches in Populus roots. Strain-resolved metagenomic profiling demonstrates that different strains specialize for either external root surface colonization (rhizosphere) or internal root tissue colonization (endosphere). This spatial niche partitioning reduces direct competition among closely related strains by separating them into distinct microhabitats with different selective pressures. Endosphere colonizers are enriched in genes for nutrient metabolism, redox balance, and transcriptional regulation, while rhizosphere strains exhibit different trait profiles.

+

After equal-OD preparation and three weeks in axenic P. deltoides or P. trichocarpa microcosms, strain-resolved metagenomic profiles showed relative endosphere-versus-rhizosphere enrichment. Five strains accounted for about 80% of mapped endosphere reads, while enrichment and normalized read abundance identified distinct patterns. This is relative DNA compartment association, not absolute colonization efficiency, physical exclusion, or demonstrated reduction of competition. Some abundant strains were generalists in both compartments. Isolation source and shared genus do not establish fixed niche identity or a single species; the authors distinguish ANI-defined lineages and putative species.

+

Participating Taxa: + Variovorax sp. BK119, + Variovorax sp. BK151, + + Variovorax sp. BK370, + + Variovorax sp. BK460, + + Variovorax sp. BK613, + + Variovorax sp. BK658, + + Variovorax sp. BT01, + + Variovorax sp. CF079, + + Variovorax sp. CF313, + + Variovorax sp. GV004, + + Variovorax sp. GV008, + + Variovorax sp. GV014, + + Variovorax sp. GV035, + + Variovorax sp. GV040, + + Variovorax sp. GV042, + + Variovorax sp. GV051, + + Variovorax sp. OK202, + + Variovorax sp. OK212, + + Variovorax sp. OK605, + + Variovorax sp. OV084, + + Variovorax sp. OV329, + + Variovorax sp. OV700, + + Variovorax sp. PDC80, + + Variovorax sp. YR216, + + Variovorax sp. YR266, + + Variovorax sp. YR634, + + Variovorax sp. YR750, + + Variovorax sp. YR752 + +

-

Biological Processes:

-
    -
  • - biological process involved in interspecies interaction between organisms - (GO:0044419) -
  • -
@@ -1726,53 +1764,104 @@

Evidence

PMID:41543249 - - SUPPORT (IN_VIVO) + - SUPPORT (COMPUTATIONAL)
"dominant endosphere colonizers are enriched in genes related to nutrient metabolism, redox balance, transcriptional regulation, and a conserved L-fucose utilization pathway"
+
  • +
    + + PMID:41543249 + + - SUPPORT (IN_VIVO) +
    + +
    "Log₂ fold changes (endosphere vs. rhizosphere) were used to quantify differential compartment association rather than absolute colonization efficiency"
    + +
  • +
    -

    Intraspecific Metabolic Competition

    - STRAIN_COMPETITION +

    Proposed Variovorax Resource Competition

    -

    Multiple Variovorax strains compete for resources within both rhizosphere and endosphere compartments. Strain-level analyses reveal that not all strains succeed through the same strategy - some benefit from rapid growth on plant-derived carbon sources, while others rely on stress tolerance or fine-tuned regulation. This metabolic competition among closely related strains shapes community composition, with host filtering selecting for distinct and sometimes complementary microbial strategies. The endosphere exhibits a distinct and reduced set of functional traits compared to the rhizosphere, reflecting intense selective pressure.

    +

    HYPOTHESIZED: The authors propose metabolic competitiveness alongside regulatory adaptation as alternative routes to successful endosphere colonization. Associations among community abundance, genomic traits and separate sole-fucose growth assays support this interpretation, not directly measured depletion of host resources, reciprocal partner harm, or selective mediation of compartment enrichment. Host fucose concentrations were not quantified. All 28 canonical participants denote the assayed community, not 28 demonstrated competitive pairs; these isolates span putative species within Variovorax, so intraspecific competition is not established.

    +

    Participating Taxa: + Variovorax sp. BK119, + Variovorax sp. BK151, + Variovorax sp. BK370, -

    Biological Processes:

    - -
    - Downstream Effects: -
    - → Rhizosphere-Endosphere Niche Partitioning -

    Competition is one of the ecological strategies that lets Variovorax strains succeed during Populus endosphere colonization and produces distinct, host-filtered rhizosphere and endosphere assemblages.

    -
    -
    @@ -1785,7 +1874,7 @@

    Evidence

    PMID:41543249 - - SUPPORT (IN_VIVO) + - PARTIAL (IN_VIVO)
    "These findings reveal that multiple ecological strategies, such as metabolic competition, regulatory adaptation, and niche specialization, can support endosphere colonization."
    @@ -1798,7 +1887,7 @@

    Evidence

    PMID:41543249 - - SUPPORT (IN_VIVO) + - PARTIAL (IN_VIVO)
    "Not all strains succeed through the same strategy. Community-wide functional profiling revealed a distinct and reduced set of traits in the endosphere"
    @@ -1811,11 +1900,12 @@

    Evidence

    -

    L-Fucose Pathway Colonization Enhancement

    - COLONIZATION_FACILITATION +

    CF313 Fucose-Pathway-Associated Root Recovery

    -

    A conserved L-fucose utilization pathway shared among certain Variovorax strains experimentally enhances root colonization success. Strains possessing this pathway gain an advantage in establishing endosphere colonization, potentially facilitating their own persistence and indirectly affecting community assembly by modifying the selective environment. This represents a genomic trait that enables successful colonization and may influence the establishment of other community members through priority effects or niche modification.

    +

    In the separate CF313 assay, deletion of the L-fuconolactonase gene PMI12_01353 abolished growth with L-fucose as sole carbon source and reduced recoverable root CFUs in sterile P. deltoides microcosms relative to wild type (reported P=0.0022). This supports a locus-associated contribution to recovered colonization in the tested strain and host, not facilitation of other strains, priority effects, or a community-wide cause of relative compartment enrichment. Only CF313, OV700 and YR750 showed the reported sole-fucose growth among 28 strains; several intact-pathway strains did not grow. Gene presence alone is not sufficient, and host fucose was not quantified. Complementation rescue and full-panel mutant replacement are not established by the inspected main body; no distinct entry, persistence or in planta flux mechanism is assigned.

    + +

    Source Taxon: Variovorax sp. CF313

    @@ -1824,40 +1914,32 @@

    L-Fucose Pathway Colonization Enhancement

    Metabolites: L-fucose - (CHEBI:2181) + (CHEBI:18287)

    -

    Biological Processes:

    - -
    - Downstream Effects: +

    Evidence

    +
    +
    "The resulting CF313Δfuc strain failed to grow on L-fucose as a sole carbon source, while the wild type showed robust growth under the same conditions"
    -

    Evidence

    -
    -
    "host filtering selects for distinct, and sometimes complementary, microbial strategies"
    +
    "Other strains, which included those with intact fucose pathways, such as BK151, BK613, BK370, and YR634, showed little to no growth."
    @@ -1961,6 +2043,25 @@

    Associated Datasets

    +
    +

    Knowledge gaps & discussions (1)

    + +
    +

    + KNOWLEDGE_GAP + OPEN + Which resource and regulatory mechanisms explain strain-resolved compartment enrichment? +

    +

    The 28-strain metagenomic profiles describe relative DNA enrichment, while CF313 deletion and root CFU recovery are a separate strain-specific perturbation. Resource competition remains an author-proposed hypothesis. The study did not quantify host fucose; intact pathways did not guarantee growth. Complementation, full-panel mutant replacement, absolute strain abundance and resource/flux perturbations would distinguish direct metabolic mediation, regulatory effects and host filtering. No priority effects or facilitation of other strains are established. Existing-node and arrow corrections address #1471 without new structure or provider spend. Non-graph metadata and source-cache front matter are preserved, not certified. Complete cached main body and Methods/captions read; no figure images, separate supplements, raw data or analysis code audited.

    + +

    Attaches to: ecological_interactions#Variovorax Relative Compartment Enrichment, ecological_interactions#Proposed Variovorax Resource Competition, ecological_interactions#CF313 Fucose-Pathway-Associated Root Recovery

    + + + + +
    + +
    @@ -2446,20 +2547,16 @@

    Evidence

    (function() { var intId = "interaction:0"; - var intType = "NICHE_PARTITIONING"; + var intType = "UNKNOWN"; var metabolites = []; var processes = []; - - processes.push("biological process involved in interspecies interaction between organisms"); - - - var evidenceCount = 2; + var evidenceCount = 3; nodes.push({ id: intId, - label: "Rhizosphere-Endosphere Niche Partitioning", + label: "Variovorax Relative Compartment Enrichment", type: "interaction", interactionType: intType, metabolites: metabolites, @@ -2470,24 +2567,85 @@

    Evidence

    + var participantKeys = [ + + "Variovorax sp. BK119", + + "Variovorax sp. BK151", + + "Variovorax sp. BK370", + + "Variovorax sp. BK460", + + "Variovorax sp. BK613", + + "Variovorax sp. BK658", + + "Variovorax sp. BT01", + + "Variovorax sp. CF079", + + "Variovorax sp. CF313", + + "Variovorax sp. GV004", + + "Variovorax sp. GV008", + + "Variovorax sp. GV014", + + "Variovorax sp. GV035", + + "Variovorax sp. GV040", + + "Variovorax sp. GV042", + + "Variovorax sp. GV051", + + "Variovorax sp. OK202", + + "Variovorax sp. OK212", + + "Variovorax sp. OK605", + + "Variovorax sp. OV084", + + "Variovorax sp. OV329", + + "Variovorax sp. OV700", + + "Variovorax sp. PDC80", + + "Variovorax sp. YR216", + + "Variovorax sp. YR266", + + "Variovorax sp. YR634", + + "Variovorax sp. YR750", + + "Variovorax sp. YR752" + + ]; + participantKeys.forEach(function(key) { + if (taxonNodeIds[key]) { + links.push({ source: taxonNodeIds[key], target: intId }); + } + }); + })(); (function() { var intId = "interaction:1"; - var intType = "STRAIN_COMPETITION"; + var intType = "UNKNOWN"; var metabolites = []; var processes = []; - - processes.push("biological process involved in interspecies interaction between organisms"); - - var evidenceCount = 2; nodes.push({ id: intId, - label: "Intraspecific Metabolic Competition", + label: "Proposed Variovorax Resource Competition", type: "interaction", interactionType: intType, metabolites: metabolites, @@ -2498,11 +2656,76 @@

    Evidence

    + var participantKeys = [ + + "Variovorax sp. BK119", + + "Variovorax sp. BK151", + + "Variovorax sp. BK370", + + "Variovorax sp. BK460", + + "Variovorax sp. BK613", + + "Variovorax sp. BK658", + + "Variovorax sp. BT01", + + "Variovorax sp. CF079", + + "Variovorax sp. CF313", + + "Variovorax sp. GV004", + + "Variovorax sp. GV008", + + "Variovorax sp. GV014", + + "Variovorax sp. GV035", + + "Variovorax sp. GV040", + + "Variovorax sp. GV042", + + "Variovorax sp. GV051", + + "Variovorax sp. OK202", + + "Variovorax sp. OK212", + + "Variovorax sp. OK605", + + "Variovorax sp. OV084", + + "Variovorax sp. OV329", + + "Variovorax sp. OV700", + + "Variovorax sp. PDC80", + + "Variovorax sp. YR216", + + "Variovorax sp. YR266", + + "Variovorax sp. YR634", + + "Variovorax sp. YR750", + + "Variovorax sp. YR752" + + ]; + participantKeys.forEach(function(key) { + if (taxonNodeIds[key]) { + links.push({ source: taxonNodeIds[key], target: intId }); + } + }); + })(); (function() { var intId = "interaction:2"; - var intType = "COLONIZATION_FACILITATION"; + var intType = "UNKNOWN"; var metabolites = []; @@ -2511,15 +2734,11 @@

    Evidence

    var processes = []; - - processes.push("root colonization"); - - - var evidenceCount = 2; + var evidenceCount = 3; nodes.push({ id: intId, - label: "L-Fucose Pathway Colonization Enhancement", + label: "CF313 Fucose-Pathway-Associated Root Recovery", type: "interaction", interactionType: intType, metabolites: metabolites, @@ -2528,6 +2747,11 @@

    Evidence

    }); + var srcKey = "Variovorax sp. CF313"; + if (taxonNodeIds[srcKey]) { + links.push({ source: taxonNodeIds[srcKey], target: intId }); + } + })(); diff --git a/history/records/GLBRC_Populus_Variovorax_SynCom28/2026-10-06T113342Z-codex-0ba641.yaml b/history/records/GLBRC_Populus_Variovorax_SynCom28/2026-10-06T113342Z-codex-0ba641.yaml new file mode 100644 index 000000000..c1aad446c --- /dev/null +++ b/history/records/GLBRC_Populus_Variovorax_SynCom28/2026-10-06T113342Z-codex-0ba641.yaml @@ -0,0 +1,27 @@ +history_version: 1 +target: + kind: record + path: kb/communities/GLBRC_Populus_Variovorax_SynCom28.yaml + slug: GLBRC_Populus_Variovorax_SynCom28 +session: + id: 2026-10-06T113342Z-codex-0ba641 + timestamp: '2026-10-06T11:33:42Z' + actors: + - type: ai_agent + name: codex + model: unspecified + agent_tool: codex +links: + issues: + - https://github.com/CultureBotAI/CommunityMech/issues/1471 +events: +- type: EDIT + outcome: changed + sections: + - interactions + - discussions + summary: Retain relative compartment enrichment, not reduced competition or absolute colonization + efficiency.; Retain author-proposed resource competition as HYPOTHESIZED without a selective + compartment-causation claim.; Restrict the existing fucose node to canonical CF313 locus-associated + root recovery, not interstrain facilitation or pathway sufficiency. + details: Source-based self-adversarial repairs to existing graph; no new structure. reports/causal_graph_review/decisions/20261006-variovorax-batch43.yaml diff --git a/kb/communities/GLBRC_Populus_Variovorax_SynCom28.yaml b/kb/communities/GLBRC_Populus_Variovorax_SynCom28.yaml index 6313e6d46..c408e731c 100644 --- a/kb/communities/GLBRC_Populus_Variovorax_SynCom28.yaml +++ b/kb/communities/GLBRC_Populus_Variovorax_SynCom28.yaml @@ -1017,113 +1017,328 @@ environmental_factors: with endosphere specialization. explanation: Supports dual-compartment design and the endosphere specialization objective. ecological_interactions: -- name: Rhizosphere-Endosphere Niche Partitioning - description: The 28 Variovorax strains exhibit compartment partitioning between rhizosphere and endosphere - niches in Populus roots. Strain-resolved metagenomic profiling demonstrates that different strains - specialize for either external root surface colonization (rhizosphere) or internal root tissue colonization - (endosphere). This spatial niche partitioning reduces direct competition among closely related strains - by separating them into distinct microhabitats with different selective pressures. Endosphere colonizers - are enriched in genes for nutrient metabolism, redox balance, and transcriptional regulation, while - rhizosphere strains exhibit different trait profiles. - interaction_type: NICHE_PARTITIONING +- name: Variovorax Relative Compartment Enrichment + description: After equal-OD preparation and three weeks in axenic P. deltoides or P. trichocarpa microcosms, strain-resolved + metagenomic profiles showed relative endosphere-versus-rhizosphere enrichment. Five strains accounted for about + 80% of mapped endosphere reads, while enrichment and normalized read abundance identified distinct patterns. This + is relative DNA compartment association, not absolute colonization efficiency, physical exclusion, or demonstrated + reduction of competition. Some abundant strains were generalists in both compartments. Isolation source and + shared genus do not establish fixed niche identity or a single species; the authors distinguish ANI-defined + lineages and putative species. scope: COMMUNITY_LEVEL - biological_processes: - - preferred_term: biological process involved in interspecies interaction - between organisms - term: - id: GO:0044419 - label: biological process involved in interspecies interaction between - organisms evidence: - reference: PMID:41543249 supports: SUPPORT evidence_source: IN_VIVO - snippet: we use a defined, genome-resolved community of 28 Variovorax strains isolated from the roots - of Populus deltoides and Populus trichocarpa (poplar trees) to determine which strains partition - between rhizosphere and endosphere compartments - explanation: Demonstrates spatial niche partitioning of Variovorax strains across rhizosphere and - endosphere compartments. + snippet: we use a defined, genome-resolved community of 28 Variovorax strains isolated from the roots of Populus + deltoides and Populus trichocarpa (poplar trees) to determine which strains partition between rhizosphere + and endosphere compartments + explanation: The complete main body supports compartment-associated relative strain profiles; the study aim + alone does not demonstrate reduced competition or absolute colonization efficiency. + - reference: PMID:41543249 + supports: SUPPORT + evidence_source: COMPUTATIONAL + snippet: dominant endosphere colonizers are enriched in genes related to nutrient metabolism, redox balance, + transcriptional regulation, and a conserved L-fucose utilization pathway + explanation: Gene-content enrichment is inferred potential associated with selected lineages, not directly measured + expression or mediator necessity. - reference: PMID:41543249 supports: SUPPORT evidence_source: IN_VIVO - snippet: dominant endosphere colonizers are enriched in genes related to nutrient metabolism, redox - balance, transcriptional regulation, and a conserved L-fucose utilization pathway - explanation: Shows genomic differentiation associated with endosphere vs rhizosphere niche specialization. -- name: Intraspecific Metabolic Competition - description: Multiple Variovorax strains compete for resources within both rhizosphere and endosphere - compartments. Strain-level analyses reveal that not all strains succeed through the same strategy - - some benefit from rapid growth on plant-derived carbon sources, while others rely on stress tolerance - or fine-tuned regulation. This metabolic competition among closely related strains shapes community - composition, with host filtering selecting for distinct and sometimes complementary microbial strategies. - The endosphere exhibits a distinct and reduced set of functional traits compared to the rhizosphere, - reflecting intense selective pressure. - interaction_type: STRAIN_COMPETITION + snippet: Log₂ fold changes (endosphere vs. rhizosphere) were used to quantify differential compartment association + rather than absolute colonization efficiency + explanation: The Methods explicitly limit the metagenomic comparison to differential compartment association. + participating_taxa: + - preferred_term: Variovorax sp. BK119 + term: + id: NCBITaxon:34072 + label: Variovorax + - preferred_term: Variovorax sp. BK151 + term: + id: NCBITaxon:34072 + label: Variovorax + - preferred_term: Variovorax sp. BK370 + term: + id: NCBITaxon:34072 + label: Variovorax + - preferred_term: Variovorax sp. BK460 + term: + id: NCBITaxon:34072 + label: Variovorax + - preferred_term: Variovorax sp. BK613 + term: + id: NCBITaxon:34072 + label: Variovorax + - preferred_term: Variovorax sp. BK658 + term: + id: NCBITaxon:34072 + label: Variovorax + - preferred_term: Variovorax sp. BT01 + term: + id: NCBITaxon:34072 + label: Variovorax + - preferred_term: Variovorax sp. CF079 + term: + id: NCBITaxon:34072 + label: Variovorax + - preferred_term: Variovorax sp. CF313 + term: + id: NCBITaxon:34072 + label: Variovorax + - preferred_term: Variovorax sp. GV004 + term: + id: NCBITaxon:34072 + label: Variovorax + - preferred_term: Variovorax sp. GV008 + term: + id: NCBITaxon:34072 + label: Variovorax + - preferred_term: Variovorax sp. GV014 + term: + id: NCBITaxon:34072 + label: Variovorax + - preferred_term: Variovorax sp. GV035 + term: + id: NCBITaxon:34072 + label: Variovorax + - preferred_term: Variovorax sp. GV040 + term: + id: NCBITaxon:34072 + label: Variovorax + - preferred_term: Variovorax sp. GV042 + term: + id: NCBITaxon:34072 + label: Variovorax + - preferred_term: Variovorax sp. GV051 + term: + id: NCBITaxon:34072 + label: Variovorax + - preferred_term: Variovorax sp. OK202 + term: + id: NCBITaxon:34072 + label: Variovorax + - preferred_term: Variovorax sp. OK212 + term: + id: NCBITaxon:34072 + label: Variovorax + - preferred_term: Variovorax sp. OK605 + term: + id: NCBITaxon:34072 + label: Variovorax + - preferred_term: Variovorax sp. OV084 + term: + id: NCBITaxon:34072 + label: Variovorax + - preferred_term: Variovorax sp. OV329 + term: + id: NCBITaxon:34072 + label: Variovorax + - preferred_term: Variovorax sp. OV700 + term: + id: NCBITaxon:34072 + label: Variovorax + - preferred_term: Variovorax sp. PDC80 + term: + id: NCBITaxon:34072 + label: Variovorax + - preferred_term: Variovorax sp. YR216 + term: + id: NCBITaxon:34072 + label: Variovorax + - preferred_term: Variovorax sp. YR266 + term: + id: NCBITaxon:34072 + label: Variovorax + - preferred_term: Variovorax sp. YR634 + term: + id: NCBITaxon:34072 + label: Variovorax + - preferred_term: Variovorax sp. YR750 + term: + id: NCBITaxon:34072 + label: Variovorax + - preferred_term: Variovorax sp. YR752 + term: + id: NCBITaxon:34072 + label: Variovorax +- name: Proposed Variovorax Resource Competition + description: 'HYPOTHESIZED: The authors propose metabolic competitiveness alongside regulatory adaptation as alternative + routes to successful endosphere colonization. Associations among community abundance, genomic traits and separate + sole-fucose growth assays support this interpretation, not directly measured depletion of host resources, reciprocal + partner harm, or selective mediation of compartment enrichment. Host fucose concentrations were not quantified. + All 28 canonical participants denote the assayed community, not 28 demonstrated competitive pairs; these isolates + span putative species within Variovorax, so intraspecific competition is not established.' scope: COMMUNITY_LEVEL - biological_processes: - - preferred_term: biological process involved in interspecies interaction - between organisms - term: - id: GO:0044419 - label: biological process involved in interspecies interaction between - organisms - downstream: - - target: Rhizosphere-Endosphere Niche Partitioning - description: Competition is one of the ecological strategies that lets - Variovorax strains succeed during Populus endosphere colonization and - produces distinct, host-filtered rhizosphere and endosphere assemblages. evidence: - reference: PMID:41543249 - supports: SUPPORT + supports: PARTIAL evidence_source: IN_VIVO - snippet: These findings reveal that multiple ecological strategies, such as metabolic competition, - regulatory adaptation, and niche specialization, can support endosphere colonization. - explanation: Explicitly identifies metabolic competition as one of the ecological strategies among - Variovorax strains. + snippet: These findings reveal that multiple ecological strategies, such as metabolic competition, regulatory + adaptation, and niche specialization, can support endosphere colonization. + explanation: Supports the authors' ecological interpretation of genomic, growth and enrichment observations, + not selective measurement of resource competition or a causal arrow to compartment partitioning. - reference: PMID:41543249 - supports: SUPPORT + supports: PARTIAL evidence_source: IN_VIVO - snippet: Not all strains succeed through the same strategy. Community-wide functional profiling revealed - a distinct and reduced set of traits in the endosphere - explanation: Demonstrates competitive selection and differentiation of strain-level strategies within - the community. -- name: L-Fucose Pathway Colonization Enhancement - description: A conserved L-fucose utilization pathway shared among certain Variovorax strains experimentally - enhances root colonization success. Strains possessing this pathway gain an advantage in establishing - endosphere colonization, potentially facilitating their own persistence and indirectly affecting community - assembly by modifying the selective environment. This represents a genomic trait that enables successful - colonization and may influence the establishment of other community members through priority effects - or niche modification. - interaction_type: COLONIZATION_FACILITATION - scope: COMMUNITY_LEVEL + snippet: Not all strains succeed through the same strategy. Community-wide functional profiling revealed a distinct + and reduced set of traits in the endosphere + explanation: Supports the authors' ecological interpretation of genomic, growth and enrichment observations, + not selective measurement of resource competition or a causal arrow to compartment partitioning. + participating_taxa: + - preferred_term: Variovorax sp. BK119 + term: + id: NCBITaxon:34072 + label: Variovorax + - preferred_term: Variovorax sp. BK151 + term: + id: NCBITaxon:34072 + label: Variovorax + - preferred_term: Variovorax sp. BK370 + term: + id: NCBITaxon:34072 + label: Variovorax + - preferred_term: Variovorax sp. BK460 + term: + id: NCBITaxon:34072 + label: Variovorax + - preferred_term: Variovorax sp. BK613 + term: + id: NCBITaxon:34072 + label: Variovorax + - preferred_term: Variovorax sp. BK658 + term: + id: NCBITaxon:34072 + label: Variovorax + - preferred_term: Variovorax sp. BT01 + term: + id: NCBITaxon:34072 + label: Variovorax + - preferred_term: Variovorax sp. CF079 + term: + id: NCBITaxon:34072 + label: Variovorax + - preferred_term: Variovorax sp. CF313 + term: + id: NCBITaxon:34072 + label: Variovorax + - preferred_term: Variovorax sp. GV004 + term: + id: NCBITaxon:34072 + label: Variovorax + - preferred_term: Variovorax sp. GV008 + term: + id: NCBITaxon:34072 + label: Variovorax + - preferred_term: Variovorax sp. GV014 + term: + id: NCBITaxon:34072 + label: Variovorax + - preferred_term: Variovorax sp. GV035 + term: + id: NCBITaxon:34072 + label: Variovorax + - preferred_term: Variovorax sp. GV040 + term: + id: NCBITaxon:34072 + label: Variovorax + - preferred_term: Variovorax sp. GV042 + term: + id: NCBITaxon:34072 + label: Variovorax + - preferred_term: Variovorax sp. GV051 + term: + id: NCBITaxon:34072 + label: Variovorax + - preferred_term: Variovorax sp. OK202 + term: + id: NCBITaxon:34072 + label: Variovorax + - preferred_term: Variovorax sp. OK212 + term: + id: NCBITaxon:34072 + label: Variovorax + - preferred_term: Variovorax sp. OK605 + term: + id: NCBITaxon:34072 + label: Variovorax + - preferred_term: Variovorax sp. OV084 + term: + id: NCBITaxon:34072 + label: Variovorax + - preferred_term: Variovorax sp. OV329 + term: + id: NCBITaxon:34072 + label: Variovorax + - preferred_term: Variovorax sp. OV700 + term: + id: NCBITaxon:34072 + label: Variovorax + - preferred_term: Variovorax sp. PDC80 + term: + id: NCBITaxon:34072 + label: Variovorax + - preferred_term: Variovorax sp. YR216 + term: + id: NCBITaxon:34072 + label: Variovorax + - preferred_term: Variovorax sp. YR266 + term: + id: NCBITaxon:34072 + label: Variovorax + - preferred_term: Variovorax sp. YR634 + term: + id: NCBITaxon:34072 + label: Variovorax + - preferred_term: Variovorax sp. YR750 + term: + id: NCBITaxon:34072 + label: Variovorax + - preferred_term: Variovorax sp. YR752 + term: + id: NCBITaxon:34072 + label: Variovorax +- name: CF313 Fucose-Pathway-Associated Root Recovery + description: In the separate CF313 assay, deletion of the L-fuconolactonase gene PMI12_01353 abolished growth + with L-fucose as sole carbon source and reduced recoverable root CFUs in sterile P. deltoides microcosms relative + to wild type (reported P=0.0022). This supports a locus-associated contribution to recovered colonization in + the tested strain and host, not facilitation of other strains, priority effects, or a community-wide cause of + relative compartment enrichment. Only CF313, OV700 and YR750 showed the reported sole-fucose growth among 28 + strains; several intact-pathway strains did not grow. Gene presence alone is not sufficient, and host fucose + was not quantified. Complementation rescue and full-panel mutant replacement are not established by the inspected + main body; no distinct entry, persistence or in planta flux mechanism is assigned. + scope: PAIRWISE metabolites: - preferred_term: L-fucose term: - id: CHEBI:2181 - label: L-fucopyranose - concentration: Plant-derived sugar utilized for colonization - biological_processes: - - preferred_term: root colonization - term: - id: GO:0044409 - label: symbiont entry into host - downstream: - - target: Rhizosphere-Endosphere Niche Partitioning - description: The conserved L-fucose utilization pathway enhances root - colonization and gives pathway-bearing strains an experimentally - validated route through the endosphere selection bottleneck. + id: CHEBI:18287 + label: L-fucose + notes: Substrate in the separate sole-carbon-source assay; concentration and flux in the host were not measured. evidence: - reference: PMID:41543249 supports: SUPPORT - evidence_source: IN_VIVO - snippet: a conserved L-fucose utilization pathway experimentally shown to enhance root colonization - explanation: Demonstrates that L-fucose metabolism facilitates endosphere colonization in Variovorax - strains. + evidence_source: IN_VITRO + snippet: The resulting CF313Δfuc strain failed to grow on L-fucose as a sole carbon source, while the wild type + showed robust growth under the same conditions + explanation: Supports the strain-specific growth phenotype after locus deletion, not universal sufficiency of + pathway possession. - reference: PMID:41543249 supports: SUPPORT evidence_source: IN_VIVO - snippet: host filtering selects for distinct, and sometimes complementary, microbial strategies - explanation: Suggests that colonization traits like L-fucose utilization can enable complementary - strategies among strains. + snippet: When inoculated into sterile P. deltoides microcosms, the mutant exhibited significantly reduced colonization + compared to wild-type CF313 + explanation: Supports the reported mutant-versus-wild-type root recovery endpoint in the separate assay; not + partner facilitation or mediation of the complete SynCom compartment pattern. + - reference: PMID:41543249 + supports: SUPPORT + evidence_source: IN_VITRO + snippet: Other strains, which included those with intact fucose pathways, such as BK151, BK613, BK370, and YR634, + showed little to no growth. + explanation: Bounds gene-presence claims with the separate strain growth screen. + source_taxon: + preferred_term: Variovorax sp. CF313 + term: + id: NCBITaxon:34072 + label: Variovorax associated_datasets: - title: Primary publication dataset_type: OTHER @@ -1208,3 +1423,31 @@ growth_media: evidence_source: IN_VIVO snippet: A single colony from each plate was used to inoculate 5 mL of R2A and incubated overnight at 30°C and 200 rpm by continually shaking explanation: Source states the R2A medium and 30 °C / 200 rpm conditions used to propagate the strains before inoculation. +discussions: +- discussion_id: variovorax_competition_and_fucose_scope + prompt: Which resource and regulatory mechanisms explain strain-resolved compartment enrichment? + kind: KNOWLEDGE_GAP + status: OPEN + attaches_to: + - ecological_interactions#Variovorax Relative Compartment Enrichment + - ecological_interactions#Proposed Variovorax Resource Competition + - ecological_interactions#CF313 Fucose-Pathway-Associated Root Recovery + rationale: 'The 28-strain metagenomic profiles describe relative DNA enrichment, while CF313 deletion and root + CFU recovery are a separate strain-specific perturbation. Resource competition remains an author-proposed hypothesis. + The study did not quantify host fucose; intact pathways did not guarantee growth. Complementation, full-panel + mutant replacement, absolute strain abundance and resource/flux perturbations would distinguish direct metabolic + mediation, regulatory effects and host filtering. No priority effects or facilitation of other strains are established. + Existing-node and arrow corrections address #1471 without new structure or provider spend. Non-graph metadata + and source-cache front matter are preserved, not certified. Complete cached main body and Methods/captions read; + no figure images, separate supplements, raw data or analysis code audited.' + posed_by: codex + posed_date: '2026-10-06' +curation_history: +- timestamp: '2026-10-06T11:33:41Z' + curator: codex + action: REVIEW_CAUSAL_GRAPH + changes: 'Retain relative compartment enrichment, not reduced competition or absolute colonization efficiency.; + Retain author-proposed resource competition as HYPOTHESIZED without a selective compartment-causation claim.; + Restrict the existing fucose node to canonical CF313 locus-associated root recovery, not interstrain facilitation + or pathway sufficiency. Issue #1471; reports/causal_graph_review/decisions/20261006-variovorax-batch43.yaml' + llm_assisted: true diff --git a/reports/causal_graph_review/README.md b/reports/causal_graph_review/README.md index 5cc7e7fbb..28b20130a 100644 --- a/reports/causal_graph_review/README.md +++ b/reports/causal_graph_review/README.md @@ -5,6 +5,17 @@ source-based self-adversarial review. These records are not independent approval or proof that every graph is complete. The current inventory and summary distinguish `reviewed`, `pending` and `needs_research`. +## Connectivity Census Correction (2026-10-06) + +The historical test survey unioned names, labels and CURIEs for pairwise endpoints. +This could credit every strain sharing a genus ID even when an endpoint named only +one strain. Batch43 reuses the already strain-aware readiness resolver; production +auditor behavior is unchanged. Historical raw survey outputs remain unchanged, but +their `credited_solely_by_the_rule` counts must not be interpreted as exact +strain-resolved counts. [Batch43 validation](validation-20261006-batch43.json) +records both algorithms on both the pre-edit and post-edit corpus, separating this +measurement correction from the CF313 scope change. See [issue 1472](https://github.com/CultureBotAI/CommunityMech/issues/1472). + ## Reference-Validator Correction (2026-10-06) Some historical batch reports incorrectly interpret `Total checks: 0` as zero diff --git a/reports/causal_graph_review/adversarial-review-20261006-batch43.yaml b/reports/causal_graph_review/adversarial-review-20261006-batch43.yaml new file mode 100644 index 000000000..55e416d65 --- /dev/null +++ b/reports/causal_graph_review/adversarial-review-20261006-batch43.yaml @@ -0,0 +1,150 @@ +reviewer: codex +review_mode: source_based_self_adversarial_review +independent_approval: false +base_commit: 22b5b12c2386a949d1ec4ddb1f79ee288085bd1c +scope: +- kb/communities/GLBRC_Populus_Variovorax_SynCom28.yaml +decision_ledger: reports/causal_graph_review/decisions/20261006-variovorax-batch43.yaml +validation_report: reports/causal_graph_review/validation-20261006-batch43.json +findings: +- issue: 1471 + severity: P2 + status: addressed_in_this_change + finding: Relative community enrichment and a separate CF313 mutant result were overstated as competitive + partitioning and interstrain facilitation. + disposition: Three existing nodes bounded/renamed, both unsupported arrows removed, exact canonical + participants, focused gap and history. No new graph structure. Close only after protected main merge. +- issue: 1472 + severity: P2 + status: addressed_in_this_change + finding: Legacy test census credited every shared-genus strain to a precisely named single-strain endpoint. + disposition: Reuse existing exact-name-aware ranker resolver; production auditor/ranker unchanged. Compare + both algorithms on both corpus versions, retain synthetic shared-CURIE canaries and add live CF313 + test. Historical counts retained but not certified as exact strain counts. Close only after main merge. +adversarial_checks: +- Whole 1,210-line original record and all three nodes/two arrows read. All 28 canonical members retain + their strain preferred names with the shared genus CURIE; no invented strain/species IDs or genus self-edge. +- Complete cached primary main body, Methods and embedded captions read despite stale abstract_only front + matter. Primary public PMC request presented reCAPTCHA, with no bypass. No figure images, supplementary + files, raw data, code or complementation rescue independently inspected. +- Compartment metagenomics measures relative DNA enrichment and normalized abundance, not absolute viable + colonization or experimentally reduced competition. A draft absolute-read-abundance phrase was caught + during self-review, corrected before commit and followed by fresh complete verification. Initial run + and its hashes remain archived. +- Resource competition remains HYPOTHESIZED and evidence PARTIAL. The source proposes alternative metabolic/regulatory + strategies but does not selectively measure resource-mediated partner harm. Shared genus is not proof + of a single species; no intraspecific category retained. +- CF313 PMI12_01353 deletion abolishes sole-fucose growth and reduces recovered root CFUs in P. deltoides, + reported P=0.0022. This existing node is source-only CF313; not partner facilitation, priority effects, + whole-panel compartment causation or proven entry/flux mechanism. Other intact-pathway strains fail + growth; pathway possession alone is not sufficient. Host fucose not quantified. +- Both downstream arrows removed because their targets represent relative community compartment profiles + rather than the separate mutant root-recovery endpoint. No new causal nodes/arrows, no Edison job or + provider spend. Canonical L-fucose grounding reused from this record. +- The historic all-community-level auditor fixture is now explicitly synthetic, preserving exact-name + versus ambiguous-CURIE behavior tests without freezing scientific data. The live record has two full-panel + observations and one intrinsic source. New test verifies one of 28 precise matches and no fan-out for + ambiguous ID-only pairwise endpoints. +- 'Census legacy/current and corrected/baseline comparisons distinguish algorithm correction from biology. + Mixed count changes 124 to 125 and CL-only 263 to 262; only that bound changes. Historical raw numeric + outputs are not rewritten or represented as exact strain-aware counts. README and issue document correction; + broader #524 remains open.' +- 459 other records, 920 source caches, taxonomy and all non-graph raw blocks preserved. Prior history + artifacts byte-identical; one append-only event/artifact. Both initially selected UFMP/GOM records remain + pending, not silently counted as reviewed. +- Schema, strict semantics, term correspondence, reference, snippet, history and rank checks passed on + final bytes. No new audit findings; all 33 baseline warnings preserved, zero structural errors. Repeat + renders deterministic and all published node/edge descriptions checked. No browser screenshot claimed. +- 'Five new focused tests plus the combined historical batch/shared suite pass. The initial run passed + 445 tests but failed Ruff on import ordering and dict-constructor style; fixes and its actual failure + output are retained, followed by a fresh complete run. Positive/negative reference-validator canaries + remain included. Total checks:0 is an issue count, not a no-op; SupportingReference #476 remains incomplete. + Text matching is not source-grounding validation.' +- All-state 788 issue title/body snapshot and ignored/hidden local search used. Relevant biological and + census matches read; initial mistaken data/history scan corrected to history/ before concluding dedup. + Not every issue comment or PR review inspected. +- Self-adversarial review is not independent approval. Exact-head COMMENT and actual post-commit docs-current + are publication steps; protected main checks and dependent-parent merges remain mandatory. Neither complete + corpus review nor completed merge is asserted here. +verification: + combined_regressions: 445 passed in 176.93s (0:02:56) + new_regression_tests: 5 + schema_strict_terms_history: passed with actual outputs and digests + references: 'CLI Total checks counts reported issues, not executed checks. This record exits 0 with + no reported issues; 44 snippet-audit matches are textual matching, not proof of scientific support + or independently verified provenance. SupportingReference coverage remains incomplete under #476; + earlier counter interpretation is corrected by batch42.' + snippet_counts_by_record: + kb/communities/GLBRC_Populus_Variovorax_SynCom28.yaml: + MATCH: 44 + RENDERING: 0 + ASSEMBLED: 0 + WEAK: 0 + MISMATCH: 0 + NOCONTENT: 0 + network: Zero errors; exactly 33 existing warnings, none added. + black_ruff_diff: passed + tested_file_sha256: + reports/causal_graph_review/decisions/20261006-variovorax-batch43.yaml: 8740238b2df4bbb42e8cdceb7e8ca47dd1734b96a96fc161b766f5ccb7973f41 + tests/test_causal_review_batch43.py: 3444fc98c3cf63e9dcaf90de30f761252799087b74821b3ac155b995ec138afe + tests/test_participating_taxa.py: c78bbb89bc2afc5c6a9e646bb9c5103e1cbb22d0f19b09f9fa7001e7ed2ba8a5 + tests/test_community_level_connectivity_credit.py: a9ba9fbacb9edaffbd1590ecc2f8fbc1b4ab36a3caf358f90c943c8a64fd76fd + kb/communities/GLBRC_Populus_Variovorax_SynCom28.yaml: c251f6d716591cd391dbb09ad961f6ccb7b123988b9c677d925356b8463d2c28 + reports/causal_graph_review/README.md: 494d79788f9b4c63def8d22ef421081ea2facff92a709d5ca577b4ede46958f3 + post_commit_docs_current: Separate publication gate, not asserted before commit. +participant_census: + measurements: + corrected_baseline: + community_level_only: 263 + credited_solely_by_the_rule: 1222 + mixed: 124 + records: 460 + taxa: 1494 + with_community_level: 387 + corrected_current: + community_level_only: 262 + credited_solely_by_the_rule: 1221 + mixed: 125 + records: 460 + taxa: 1494 + with_community_level: 387 + legacy_baseline: + community_level_only: 263 + credited_solely_by_the_rule: 1219 + mixed: 124 + records: 460 + taxa: 1494 + with_community_level: 387 + legacy_current: + community_level_only: 262 + credited_solely_by_the_rule: 1191 + mixed: 125 + records: 460 + taxa: 1494 + with_community_level: 387 + correction_issue: 1472 + scientific_issue: 1471 + interpretation: Production auditor/ranker unchanged. Legacy survey falsely credits all 28 shared-genus + members to CF313; corrected algorithm credits exactly CF313. Historical survey outputs are retained + but withdrawn as exact strain-resolved counts. One new participant record, 189 to 190. Mixed-scope + ceiling increases only 124 to 125; other bounds unchanged. +corpus: + records: 460 + nodes: 1468 + edges: 684 + review_status_counts: + needs_research: 12 + pending: 284 + reviewed: 164 +limitations: +- Complete cached primary main body, Methods and embedded captions read despite stale abstract_only front + matter; no figure images, separate supplements, raw data or analysis code independently inspected. Public + PMC browser path presented reCAPTCHA; no bypass. +- Three existing nodes retained/renamed, two unsupported arrows removed. No new causal structure or Edison + spend. +- Canonical taxonomy, non-graph raw blocks, historical records and all original caches preserved, not + certified. Both initially selected UFMP/GOM candidates remain pending. +- 'The reference CLI Total checks counter counts reported issues, not executed checks; SupportingReference + coverage remains incomplete under #476. Text matching is not scientific support or independent cache + provenance.' +- Source-based self-adversarial review is not independent approval or corpus completion. diff --git a/reports/causal_graph_review/decisions/20261006-variovorax-batch43.yaml b/reports/causal_graph_review/decisions/20261006-variovorax-batch43.yaml new file mode 100644 index 000000000..bbcfa0235 --- /dev/null +++ b/reports/causal_graph_review/decisions/20261006-variovorax-batch43.yaml @@ -0,0 +1,101 @@ +reviewer: codex +review_mode: source_based_self_adversarial_review +independent_approval: false +base_commit: 22b5b12c2386a949d1ec4ddb1f79ee288085bd1c +baseline_commit: 22b5b12c2386a949d1ec4ddb1f79ee288085bd1c +base_tree: 71133d5dcc9a140865ceb58ccfe7b26125738c40 +issues: +- 1471 +open_nongraph_followups: +- 524 +issue_deduplication: + all_state_issue_titles_and_bodies: 788 + ignored_hidden_local_search: true + relevant_bodies_read: + - 1251 + - 762 + - 615 + - 524 + - 485 + - 312 + - 18 + - 12 + limitations: Not all issue comments or PR reviews inspected; initial nonexistent data/history scan corrected to + history/ before dedup conclusion. +reference_cache_original_hashes: + references_cache/PMID_41543249.md: 8efa077f04918a0c73cc55cb4dcb14326c01c2a62b6a41ef727f340b19e40ec6 +limitations: +- Complete cached primary main body, Methods and embedded captions read despite stale abstract_only front matter; + no figure images, separate supplements, raw data or analysis code independently inspected. Public PMC browser + path presented reCAPTCHA; no bypass. +- Three existing nodes retained/renamed, two unsupported arrows removed. No new causal structure or Edison spend. +- Canonical taxonomy, non-graph raw blocks, historical records and all original caches preserved, not certified. + Both initially selected UFMP/GOM candidates remain pending. +- 'The reference CLI Total checks counter counts reported issues, not executed checks; SupportingReference coverage + remains incomplete under #476. Text matching is not scientific support or independent cache provenance.' +- Source-based self-adversarial review is not independent approval or corpus completion. +records: +- path: kb/communities/GLBRC_Populus_Variovorax_SynCom28.yaml + id: CommunityMech:000028 + original_sha256: e6b9446f0f493eb1c8b2666dae051146e4375795c7d5bf51f485d09cb1e8170d + record_sha256: c251f6d716591cd391dbb09ad961f6ccb7b123988b9c677d925356b8463d2c28 + status: reviewed + outcome: changed + review_file: reports/causal_graph_review/decisions/20261006-variovorax-batch43.yaml + scope: Whole record and all three original nodes/two arrows reviewed; source and scientific limits explicit. + summary: Retain relative compartment enrichment, not reduced competition or absolute colonization efficiency.; + Retain author-proposed resource competition as HYPOTHESIZED without a selective compartment-causation claim.; + Restrict the existing fucose node to canonical CF313 locus-associated root recovery, not interstrain facilitation + or pathway sufficiency. + renamed_nodes: + Rhizosphere-Endosphere Niche Partitioning: Variovorax Relative Compartment Enrichment + Intraspecific Metabolic Competition: Proposed Variovorax Resource Competition + L-Fucose Pathway Colonization Enhancement: CF313 Fucose-Pathway-Associated Root Recovery + node_decisions: + - node: Variovorax Relative Compartment Enrichment + rationale: Retain relative compartment enrichment, not reduced competition or absolute colonization efficiency. + - node: Proposed Variovorax Resource Competition + rationale: Retain author-proposed resource competition as HYPOTHESIZED without a selective compartment-causation + claim. + - node: CF313 Fucose-Pathway-Associated Root Recovery + rationale: Restrict the existing fucose node to canonical CF313 locus-associated root recovery, not interstrain + facilitation or pathway sufficiency. + removed_node_decisions: [] + edges_before: + - source: Intraspecific Metabolic Competition + target: Rhizosphere-Endosphere Niche Partitioning + description: Competition is one of the ecological strategies that lets Variovorax strains succeed during Populus + endosphere colonization and produces distinct, host-filtered rhizosphere and endosphere assemblages. + - source: L-Fucose Pathway Colonization Enhancement + target: Rhizosphere-Endosphere Niche Partitioning + description: The conserved L-fucose utilization pathway enhances root colonization and gives pathway-bearing + strains an experimentally validated route through the endosphere selection bottleneck. + edges_after: [] + retained_edge_decisions: [] + removed_edge_decisions: + - source: Intraspecific Metabolic Competition + target: Rhizosphere-Endosphere Niche Partitioning + rationale: Resource competition is an interpretation of associated traits, not a selectively demonstrated driver + of compartment partitioning. + - source: L-Fucose Pathway Colonization Enhancement + target: Rhizosphere-Endosphere Niche Partitioning + rationale: The separate mutant root-recovery endpoint does not establish community compartment mediation. + references: + - PMID:41543249 + issues: + - 1471 + allowed_changed_fields: + - curation_history + - discussions + - ecological_interactions + curation_events_added: 1 + history_files: + - history/records/GLBRC_Populus_Variovorax_SynCom28/2026-10-06T113342Z-codex-0ba641.yaml + source_review: + PMID:41543249: + cache: references_cache/PMID_41543249.md + sha256: 8efa077f04918a0c73cc55cb4dcb14326c01c2a62b6a41ef727f340b19e40ec6 + url: https://doi.org/10.1128/msystems.01605-25 + scope: Complete cached primary main body, Methods and embedded captions read despite stale abstract_only front + matter; no figure images, separate supplements, raw data or analysis code independently inspected. Public + PMC browser path presented reCAPTCHA; no bypass. diff --git a/reports/causal_graph_review/inventory.tsv b/reports/causal_graph_review/inventory.tsv index 32caec1ee..95a5e3342 100644 --- a/reports/causal_graph_review/inventory.tsv +++ b/reports/causal_graph_review/inventory.tsv @@ -176,7 +176,7 @@ kb/communities/FourSpecies_Aerobic_Lung_Microbiome_Model.yaml CommunityMech:0004 kb/communities/Fucoidan_Seven_Degrader_Combinatorial_SynCom.yaml CommunityMech:000449 61c3e21e1a830b7d0b3e2d3ee2fc7bc17ecc1724aa79414c106e04312c63f468 2 0 60.0 reports/causal_graph_review/decisions/20261006-three-records-batch42.yaml needs_research kb/communities/GENIA_NineMember_MultiPollutant_Bioremediation_SynCom.yaml CommunityMech:000352 72fcc1720a4bb6b3a0a464f98524ab2bbf999b2b73eaf71efa0fa98be433b9c3 3 1 78.3 reports/causal_graph_review/decisions/20261006-three-records-batch42.yaml reviewed kb/communities/GLBRC_Exometabolite_Transwell_SynCom.yaml CommunityMech:000091 8d1ef9c4d9c8b8b0f2c203a984747b02cfa32e10fe648d3fd5bf0a9548c8208f 2 0 70.0 reports/causal_graph_review/decisions/20261006-three-records-batch42.yaml needs_research -kb/communities/GLBRC_Populus_Variovorax_SynCom28.yaml CommunityMech:000028 e6b9446f0f493eb1c8b2666dae051146e4375795c7d5bf51f485d09cb1e8170d 3 2 100.0 pending +kb/communities/GLBRC_Populus_Variovorax_SynCom28.yaml CommunityMech:000028 c251f6d716591cd391dbb09ad961f6ccb7b123988b9c677d925356b8463d2c28 3 0 61.7 reports/causal_graph_review/decisions/20261006-variovorax-batch43.yaml reviewed kb/communities/GLBRC_UFMP_Fermentation_Community.yaml CommunityMech:000029 da03a0180a9a75c6105755fe0f061f05964c258bf108a21ecd7ad11c4b14b755 3 2 100.0 pending kb/communities/GOM_Oil_Degrading_Consortium.yaml CommunityMech:000030 6b90550db3bc1cc1a75459278ec2541043eab31f177007facca1d41229489f2f 3 2 100.0 pending kb/communities/Garlic_Pseudomonas_SynCom6.yaml CommunityMech:000095 1336853814eb3ca22d64ec0a5c8663861c7ab544704d9216731b6b60816aef76 3 0 75.0 pending diff --git a/reports/causal_graph_review/summary.json b/reports/causal_graph_review/summary.json index 39a3a502b..8e290facb 100644 --- a/reports/causal_graph_review/summary.json +++ b/reports/causal_graph_review/summary.json @@ -3,13 +3,13 @@ "semantic_review_rule": "Structural checks and readiness scores do not establish causal support. Completed reviews must match the current record SHA-256, cover every node once with a rationale, and reproduce the current edge list.", "records": 460, "nodes": 1468, - "edges": 686, + "edges": 684, "records_without_nodes": 8, - "records_without_edges": 146, + "records_without_edges": 147, "review_status_counts": { "needs_research": 12, - "pending": 285, - "reviewed": 163 + "pending": 284, + "reviewed": 164 }, "structural_defects": [], "network_audit": [ diff --git a/reports/causal_graph_review/validation-20261006-batch43.json b/reports/causal_graph_review/validation-20261006-batch43.json new file mode 100644 index 000000000..04cd61275 --- /dev/null +++ b/reports/causal_graph_review/validation-20261006-batch43.json @@ -0,0 +1,579 @@ +{ + "base_commit": "22b5b12c2386a949d1ec4ddb1f79ee288085bd1c", + "scope": [ + "kb/communities/GLBRC_Populus_Variovorax_SynCom28.yaml" + ], + "reference_validator_version": "0.1.7", + "results": [ + { + "check": "GLBRC_Populus_Variovorax_SynCom28-schema", + "command": [ + "/Users/marcin/.cache/uv/archive-v0/l58VlyFvdmnkl0CcAx5Gk/bin/linkml-validate", + "-s", + "src/communitymech/schema/communitymech.yaml", + "kb/communities/GLBRC_Populus_Variovorax_SynCom28.yaml" + ], + "exit_code": 0, + "expected_exit_codes": [ + 0 + ], + "log": "/private/tmp/communitymech-batch43/GLBRC_Populus_Variovorax_SynCom28-schema.log", + "log_sha256": "de6087f4be8c0adc015333597cd864406ad889bbde42d9ee20db0df5932bb2de", + "output_tail": "No issues found\n" + }, + { + "check": "GLBRC_Populus_Variovorax_SynCom28-strict", + "command": [ + "/Users/marcin/.cache/uv/archive-v0/neDBQyZXv0RYv8B1GH0dI/bin/python3", + "scripts/validate_strict.py", + "--workers", + "1", + "--out", + "/private/tmp/communitymech-batch43/GLBRC_Populus_Variovorax_SynCom28-strict.tsv", + "kb/communities/GLBRC_Populus_Variovorax_SynCom28.yaml" + ], + "exit_code": 0, + "expected_exit_codes": [ + 0 + ], + "log": "/private/tmp/communitymech-batch43/GLBRC_Populus_Variovorax_SynCom28-strict.log", + "log_sha256": "d4bbe884ac3a8b52310f0e032ec70967566613f0870f0c5d71c7f4d62e85c9d2", + "output_tail": "Validating 1 files with 1 workers; schema=/private/tmp/communitymech-causal-batch43/src/communitymech/schema/communitymech.yaml\n\n=== validate-strict summary ===\n files scanned: 1\n files with ERROR: 0\n total ERROR rows: 0\n TSV: /private/tmp/communitymech-batch43/GLBRC_Populus_Variovorax_SynCom28-strict.tsv\n" + }, + { + "check": "GLBRC_Populus_Variovorax_SynCom28-terms", + "command": [ + "/Users/marcin/.cache/uv/archive-v0/neDBQyZXv0RYv8B1GH0dI/bin/linkml-term-validator", + "validate-data", + "kb/communities/GLBRC_Populus_Variovorax_SynCom28.yaml", + "-s", + "src/communitymech/schema/communitymech.yaml", + "--labels" + ], + "exit_code": 0, + "expected_exit_codes": [ + 0 + ], + "log": "/private/tmp/communitymech-batch43/GLBRC_Populus_Variovorax_SynCom28-terms.log", + "log_sha256": "23acda1c1d3194d12bc947d897d07de83f4a076a9d93c135148885108530e018", + "output_tail": "\u2705 Validation passed\n" + }, + { + "check": "GLBRC_Populus_Variovorax_SynCom28-references", + "command": [ + "/Users/marcin/.cache/uv/archive-v0/l58VlyFvdmnkl0CcAx5Gk/bin/linkml-reference-validator", + "validate", + "data", + "kb/communities/GLBRC_Populus_Variovorax_SynCom28.yaml", + "-s", + "src/communitymech/schema/communitymech.yaml", + "--config", + "conf/reference_validator.yaml" + ], + "exit_code": 0, + "expected_exit_codes": [ + 0 + ], + "log": "/private/tmp/communitymech-batch43/GLBRC_Populus_Variovorax_SynCom28-references.log", + "log_sha256": "9b9bc64e7d4a682aba4ee1def2aae9900a955ea7515022e89aa2e9d7cd5ad5d5", + "output_tail": "Validating kb/communities/GLBRC_Populus_Variovorax_SynCom28.yaml against schema src/communitymech/schema/communitymech.yaml\nCache directory: references_cache\n\nValidation Summary:\n Total checks: 0\n All validations passed!\n", + "explained_output_tail": "Validating kb/communities/GLBRC_Populus_Variovorax_SynCom28.yaml against schema src/communitymech/schema/communitymech.yaml\nCache directory: references_cache\n\nValidation Summary:\n Total checks: 0\n All validations passed!\n" + }, + { + "check": "GLBRC_Populus_Variovorax_SynCom28-snippets", + "command": [ + "/Users/marcin/.cache/uv/archive-v0/l58VlyFvdmnkl0CcAx5Gk/bin/python3", + "scripts/evidence_snippet_audit.py", + "kb/communities/GLBRC_Populus_Variovorax_SynCom28.yaml", + "--list-mismatch", + "--list-nocontent", + "--list-rendering", + "--list-assembled" + ], + "exit_code": 0, + "expected_exit_codes": [ + 0 + ], + "log": "/private/tmp/communitymech-batch43/GLBRC_Populus_Variovorax_SynCom28-snippets.log", + "log_sha256": "c6bc6a54b979d09bb0c31977695a565dba4334c09c7caa8f10a2864f127691d3", + "output_tail": "# 44 evidence snippets scanned across 1 files\n MATCH 44\n RENDERING 0\n ASSEMBLED 0\n WEAK 0\n MISMATCH 0\n NOCONTENT 0\n\n# Files with MISMATCH/WEAK (content present but snippet absent) \u2014 fabrication suspects\n\n# MISMATCH/WEAK detail\n\n# Files by RENDERING (faithful quote; differs from cache only by\n# punctuation/whitespace/Greek \u2014 this is what validate-references flags)\n\n# Top files by NOCONTENT (unverifiable; cache stub/missing)\n\n# ASSEMBLED (every part is in the source; the join is not \u2014\n# a table flattened into prose, or a quote welded from two places)\n" + }, + { + "check": "GLBRC_Populus_Variovorax_SynCom28-rank", + "command": [ + "/Users/marcin/.cache/uv/archive-v0/l58VlyFvdmnkl0CcAx5Gk/bin/python3", + "scripts/rank_causal_graph_readiness.py", + "kb/communities/GLBRC_Populus_Variovorax_SynCom28.yaml", + "--format", + "json" + ], + "exit_code": 0, + "expected_exit_codes": [ + 0 + ], + "log": "/private/tmp/communitymech-batch43/GLBRC_Populus_Variovorax_SynCom28-rank.log", + "log_sha256": "5574335a3d03e20129e51ce9615df922388047e6480bfbc50a4eeb12e180373b", + "output_tail": "[\n {\n \"rank\": 1,\n \"id\": \"CommunityMech:000028\",\n \"name\": \"GLBRC Populus Variovorax SynCom28\",\n \"score\": 61.7,\n \"taxonomy\": 28,\n \"connected_taxa\": 28,\n \"disconnected_taxa\": 0,\n \"ecological_interactions\": 3,\n \"downstream_edges\": 0,\n \"interaction_evidence\": 8,\n \"dangling_downstream\": 0,\n \"self_downstream\": 0,\n \"missing\": [\n \"downstream\",\n \"metabolites_or_biological_processes\",\n \"interaction_type\"\n ],\n \"path\": \"kb/communities/GLBRC_Populus_Variovorax_SynCom28.yaml\"\n }\n]\n" + }, + { + "check": "GLBRC_Populus_Variovorax_SynCom28-history-0", + "command": [ + "/Users/marcin/.cache/uv/archive-v0/l58VlyFvdmnkl0CcAx5Gk/bin/linkml-validate", + "-s", + "src/communitymech/schema/history.yaml", + "--target-class", + "HistoryRecord", + "history/records/GLBRC_Populus_Variovorax_SynCom28/2026-10-06T113342Z-codex-0ba641.yaml" + ], + "exit_code": 0, + "expected_exit_codes": [ + 0 + ], + "log": "/private/tmp/communitymech-batch43/GLBRC_Populus_Variovorax_SynCom28-history-0.log", + "log_sha256": "de6087f4be8c0adc015333597cd864406ad889bbde42d9ee20db0df5932bb2de", + "output_tail": "No issues found\n" + }, + { + "check": "inventory", + "command": [ + "/Users/marcin/.cache/uv/archive-v0/l58VlyFvdmnkl0CcAx5Gk/bin/python3", + "reports/causal_graph_review/build_inventory.py" + ], + "exit_code": 0, + "expected_exit_codes": [ + 0 + ], + "log": "/private/tmp/communitymech-batch43/inventory.log", + "log_sha256": "6bbe49f2af7a7269afd17182c1e6fa08216b33eef72b58c499ada37fbbd06307", + "output_tail": "{\n \"scope\": \"Every YAML under kb/communities and data/isolates; filesystem discovery includes hidden/ignored files.\",\n \"semantic_review_rule\": \"Structural checks and readiness scores do not establish causal support. Completed reviews must match the current record SHA-256, cover every node once with a rationale, and reproduce the current edge list.\",\n \"records\": 460,\n \"nodes\": 1468,\n \"edges\": 684,\n \"records_without_nodes\": 8,\n \"records_without_edges\": 147,\n \"review_status_counts\": {\n \"needs_research\": 12,\n \"pending\": 284,\n \"reviewed\": 164\n },\n \"structural_defects\": []\n}\n" + }, + { + "check": "network", + "command": [ + "/Users/marcin/.cache/uv/archive-v0/l58VlyFvdmnkl0CcAx5Gk/bin/python3", + "-m", + "communitymech.cli", + "audit-network", + "--json" + ], + "exit_code": 1, + "expected_exit_codes": [ + 1 + ], + "log": "/private/tmp/communitymech-batch43/network.log", + "log_sha256": "c035fe6ed0bbf90371ab58d6557716c51eea79ac628e204173d70075f9efaa26", + "output_tail": "{\n \"preferred_term\": \"Legionella MAGs\",\n \"term\": {\n \"id\": \"NCBITaxon:445\",\n \"label\": \"Legionella\"\n },\n \"gtdb_grounding_status\": \"UNRESOLVED\",\n \"notes\": \"The study detected Legionella-affiliated MAGs and used them in a virulence-gene risk assessment; the source did not assert pathogenicity for a cultured Legionella isolate.\\n\"\n },\n \"abundance_value\": \"Lower-abundance Legionella-affiliated MAGs detected during metagenomic risk assessment.\\n\",\n \"evidence\": [\n {\n \"reference\": \"PMID:41457319\",\n \"supports\": \"SUPPORT\",\n \"evidence_source\": \"COMPUTATIONAL\",\n \"snippet\": \"detection of waterborne pathogens from the Legionella genus\",\n \"explanation\": \"Supports Legionella-affiliated lower-abundance bins as monitored biosafety-relevant members of the consortium.\\n\"\n }\n ]\n },\n \"message\": \"Taxon 'Legionella MAGs' has no interactions\"\n }\n ],\n \"Sclerotinia_Sclerotia_12Strain_Biocontrol_SynCom\": [\n {\n \"type\": \"UNKNOWN_TARGET\",\n \"interaction\": \"Twelve-Strain SynCom Suppression of Sclerotinia Sclerotia\",\n \"interaction_index\": 0,\n \"taxon\": \"Sclerotinia sclerotiorum\",\n \"severity\": \"warning\",\n \"message\": \"Target taxon 'Sclerotinia sclerotiorum' not found in taxonomy section (community-level scope)\"\n },\n {\n \"type\": \"UNKNOWN_TARGET\",\n \"interaction\": \"Trinickia MC Key Contribution to Sclerotia Mortality\",\n \"interaction_index\": 1,\n \"taxon\": \"Sclerotinia sclerotiorum\",\n \"severity\": \"warning\",\n \"message\": \"Target taxon 'Sclerotinia sclerotiorum' not found in taxonomy section (community-level scope)\"\n }\n ],\n \"Space_Habitat_SevenMember_Stress_Tolerance_SynCom\": [\n {\n \"type\": \"DISCONNECTED\",\n \"taxon\": \"Acinetobacter radioresistens 50V1\",\n \"taxon_id\": \"NCBITaxon:40216\",\n \"taxon_data\": {\n \"taxon_term\": {\n \"preferred_term\": \"Acinetobacter radioresistens 50V1\",\n \"term\": {\n \"id\": \"NCBITaxon:40216\",\n \"label\": \"Acinetobacter radioresistens\"\n },\n \"gtdb_grounding_status\": \"UNRESOLVED\",\n \"notes\": \"The isolate came from the preflight Mars Odyssey Orbiter; ontology grounding is at species level.\"\n },\n \"strain_designation\": {\n \"strain_name\": \"50V1\",\n \"genome_accession\": \"GCA_002834555.1\"\n },\n \"evidence\": [\n {\n \"reference\": \"PMID:42577390\",\n \"supports\": \"SUPPORT\",\n \"evidence_source\": \"IN_VITRO\",\n \"snippet\": \"Acinetobacter radioresistens | 50V1 | Preflight Mars Odyssey Orbiter | \\u2013 | Mccoy et al., 2012 | GCA_002834555.1 | TSYB/TSYA | 37 \\u00b0C | 16\\u201318 h\",\n \"explanation\": \"Identifies A. radioresistens 50V1 as a consortium member and gives its spacecraft-associated source, genome accession and cultivation conditions.\"\n }\n ]\n },\n \"message\": \"Taxon 'Acinetobacter radioresistens 50V1' has no interactions\"\n },\n {\n \"type\": \"DISCONNECTED\",\n \"taxon\": \"Micrococcus luteus W4-Al-K1\",\n \"taxon_id\": \"NCBITaxon:1270\",\n \"taxon_data\": {\n \"taxon_term\": {\n \"preferred_term\": \"Micrococcus luteus W4-Al-K1\",\n \"term\": {\n \"id\": \"NCBITaxon:1270\",\n \"label\": \"Micrococcus luteus\"\n },\n \"gtdb_grounding_status\": \"UNRESOLVED\",\n \"notes\": \"The isolate was recovered from an ISS aluminum-case touch array; ontology grounding is at species level.\"\n },\n \"strain_designation\": {\n \"strain_name\": \"W4-Al-K1\",\n \"genome_accession\": \"GCA_057816565.1\"\n },\n \"evidence\": [\n {\n \"reference\": \"PMID:42577390\",\n \"supports\": \"SUPPORT\",\n \"evidence_source\": \"IN_VITRO\",\n \"snippet\": \"Micrococcus luteus | W4-Al-K1 | ISS, Touch Array Aluminum Case | - | Kr\\u00e4mer et al., 2025 | GCA_057816565.1 | NB, TSYB/TSYA | 37 \\u00b0C | 24 h\",\n \"explanation\": \"Identifies M. luteus W4-Al-K1 as a consortium member and gives its ISS source, genome accession and cultivation conditions.\"\n }\n ]\n },\n \"message\": \"Taxon 'Micrococcus luteus W4-Al-K1' has no interactions\"\n },\n {\n \"type\": \"DISCONNECTED\",\n \"taxon\": \"Propionibacterium cyclohexanicum TA-12T\",\n \"taxon_id\": \"NCBITaxon:64702\",\n \"taxon_data\": {\n \"taxon_term\": {\n \"preferred_term\": \"Propionibacterium cyclohexanicum TA-12T\",\n \"term\": {\n \"id\": \"NCBITaxon:64702\",\n \"label\": \"Propionibacterium cyclohexanicum\"\n },\n \"gtdb_grounding_status\": \"UNRESOLVED\",\n \"notes\": \"The source used the P. cyclohexanicum type strain as a biosafety-level-1 representative.\"\n },\n \"strain_designation\": {\n \"strain_name\": \"TA-12T\",\n \"genome_accession\": \"GCA_900111365\",\n \"culture_collections\": [\n {\n \"collection\": \"DSM\",\n \"accession\": \"16859\"\n }\n ]\n },\n \"evidence\": [\n {\n \"reference\": \"PMID:42577390\",\n \"supports\": \"SUPPORT\",\n \"evidence_source\": \"IN_VITRO\",\n \"snippet\": \"Propionibacterium cyclohexanicum | TA-12 T | Spoilt Orange Juice | DSM 16859 T | Kusano et al., 1997 | GCA_900111365 | BHI, TSYB/TSYA | 37 \\u00b0C | 24 h\",\n \"explanation\": \"Identifies P. cyclohexanicum TA-12T as a consortium member and gives its source, DSM number, genome accession and cultivation conditions.\"\n }\n ]\n },\n \"message\": \"Taxon 'Propionibacterium cyclohexanicum TA-12T' has no interactions\"\n },\n {\n \"type\": \"DISCONNECTED\",\n \"taxon\": \"Pseudomonas antarctica CMS 35T\",\n \"taxon_id\": \"NCBITaxon:219572\",\n \"taxon_data\": {\n \"taxon_term\": {\n \"preferred_term\": \"Pseudomonas antarctica CMS 35T\",\n \"term\": {\n \"id\": \"NCBITaxon:219572\",\n \"label\": \"Pseudomonas antarctica\"\n },\n \"gtdb_grounding_status\": \"UNRESOLVED\",\n \"notes\": \"The source used the P. antarctica type strain as a biosafety-level-1 Pseudomonas surrogate.\"\n },\n \"strain_designation\": {\n \"strain_name\": \"CMS 35T\",\n \"genome_accession\": \"GCA_010634845\",\n \"culture_collections\": [\n {\n \"collection\": \"DSM\",\n \"accession\": \"15318\"\n }\n ]\n },\n \"evidence\": [\n {\n \"reference\": \"PMID:42577390\",\n \"supports\": \"SUPPORT\",\n \"evidence_source\": \"IN_VITRO\",\n \"snippet\": \"Pseudomonas antarctica | CMS 35 T | Antarctica | DSM 15318 T | Reddy et al., 2004 | GCA_010634845 | TSYB/TSYA | Ambient | 12\\u201316 h\",\n \"explanation\": \"Identifies P. antarctica CMS 35T as a consortium member and gives its source, DSM number, genome accession and cultivation conditions.\"\n }\n ]\n },\n \"message\": \"Taxon 'Pseudomonas antarctica CMS 35T' has no interactions\"\n },\n {\n \"type\": \"DISCONNECTED\",\n \"taxon\": \"Staphylococcus capitis K1-2-2-23\",\n \"taxon_id\": \"NCBITaxon:29388\",\n \"taxon_data\": {\n \"taxon_term\": {\n \"preferred_term\": \"Staphylococcus capitis K1-2-2-23\",\n \"term\": {\n \"id\": \"NCBITaxon:29388\",\n \"label\": \"Staphylococcus capitis\"\n },\n \"gtdb_grounding_status\": \"UNRESOLVED\",\n \"notes\": \"The isolate was recovered from ISS V2A steel; ontology grounding is at species level.\"\n },\n \"strain_designation\": {\n \"strain_name\": \"K1-2-2-23\",\n \"genome_accession\": \"GCA_025272695\",\n \"culture_collections\": [\n {\n \"collection\": \"DSM\",\n \"accession\": \"111179\"\n }\n ]\n },\n \"evidence\": [\n {\n \"reference\": \"PMID:42577390\",\n \"supports\": \"SUPPORT\",\n \"evidence_source\": \"IN_VITRO\",\n \"snippet\": \"Staphylococcus capitis | K1-2-2-23 | ISS, V2A Steel | DSM 111179 | Sobisch et al., 2019 | GCA_025272695 | TSYB/TSYA | 37 \\u00b0C | 16\\u201324 h\",\n \"explanation\": \"Identifies S. capitis K1-2-2-23 as a consortium member and gives its source, DSM number, genome accession and cultivation conditions.\"\n }\n ]\n },\n \"message\": \"Taxon 'Staphylococcus capitis K1-2-2-23' has no interactions\"\n },\n {\n \"type\": \"DISCONNECTED\",\n \"taxon\": \"Streptococcus halotolerans HTS9T\",\n \"taxon_id\": \"NCBITaxon:1814128\",\n \"taxon_data\": {\n \"taxon_term\": {\n \"preferred_term\": \"Streptococcus halotolerans HTS9T\",\n \"term\": {\n \"id\": \"NCBITaxon:1814128\",\n \"label\": \"Streptococcus halotolerans\"\n },\n \"gtdb_grounding_status\": \"UNRESOLVED\",\n \"notes\": \"The source used the S. halotolerans type strain as a biosafety-level-1 representative.\"\n },\n \"strain_designation\": {\n \"strain_name\": \"HTS9T\",\n \"genome_accession\": \"GCA_001598035\",\n \"culture_collections\": [\n {\n \"collection\": \"DSM\",\n \"accession\": \"101996\"\n }\n ]\n },\n \"evidence\": [\n {\n \"reference\": \"PMID:42577390\",\n \"supports\": \"SUPPORT\",\n \"evidence_source\": \"IN_VITRO\",\n \"snippet\": \"Streptococcus halotolerans | HTS9 T | Respiratory Tract of Marmota himalayana | DSM 101996 T | Niu et al., 2016 | GCA_001598035 | 2xLB, TSYB/TSYA | 37 \\u00b0C | 24 h\",\n \"explanation\": \"Identifies S. halotolerans HTS9T as a consortium member and gives its source, DSM number, genome accession and cultivation conditions.\"\n }\n ]\n },\n \"message\": \"Taxon 'Streptococcus halotolerans HTS9T' has no interactions\"\n }\n ]\n}\n" + }, + { + "check": "rank-all", + "command": [ + "just", + "rank-causal-graphs" + ], + "exit_code": 0, + "expected_exit_codes": [ + 0 + ], + "log": "/private/tmp/communitymech-batch43/rank-all.log", + "log_sha256": "f51dc0f3fede01bf4f29e4135bc257d24cc411e00a2dcea0aebd8ea8c5fa7912", + "output_tail": "ities/Soybean_N_Fixation_sfSynCom.yaml\tCommunityMech:000064\tSoybean N-Fixation Simplified SynCom\t4\t4\t0\t3\t2\t3\t\t0\t0\n402\t100.0\tkb/communities/Sphingobium_Rhodococcus_Lignin_Dimer_Valorization_Coculture.yaml\tCommunityMech:000267\tSphingobium-Rhodococcus Lignin-Dimer Valorization Coculture\t2\t2\t0\t3\t2\t7\t\t0\t0\n403\t100.0\tkb/communities/Staphylococcus_Candida_Context_Dependent_Biofilm_Coculture.yaml\tCommunityMech:000326\tStaphylococcus-Candida Context-Dependent Biofilm Coculture\t2\t2\t0\t6\t2\t13\t\t0\t0\n404\t100.0\tkb/communities/Stordalen_Mire_Methylotrophic_Methanogenesis_Community.yaml\tCommunityMech:000254\tStordalen Mire Methylotrophic Methanogenesis Community\t3\t3\t0\t4\t4\t9\t\t0\t0\n405\t100.0\tkb/communities/Streptomyces_A2_A5_A11_M7_Pesticide_Consortium.yaml\tCommunityMech:000335\tStreptomyces A2-A5-A11-M7 Pesticide-Bioremediation Consortium\t4\t4\t0\t4\t2\t5\t\t0\t0\n406\t100.0\tkb/communities/Subsurface_Carboxydocella_CO_Aquifer_Community.yaml\tCommunityMech:000251\tSubsurface Carboxydocella CO-Oxidation Aquifer Community\t1\t1\t0\t5\t2\t5\t\t0\t0\n407\t100.0\tkb/communities/Suillus_Bacillus_Thiamine_Ectomycorrhizal_SynCom.yaml\tCommunityMech:000312\tSuillus clintonianus-Bacillus altitudinis Thiamine Cross-Feeding SynCom\t3\t3\t0\t4\t3\t4\t\t0\t0\n408\t100.0\tkb/communities/Sulfide_Spring_Autotrophic_CPR_Biofilm.yaml\tCommunityMech:000222\tSulfide Spring Autotrophic CPR-Hosting Biofilm\t3\t3\t0\t3\t2\t4\t\t0\t0\n409\t100.0\tkb/communities/SynComBac10_Chicken_Intestinal_SynCom.yaml\tCommunityMech:000127\tSynComBac10 Chicken Intestinal SynCom\t3\t3\t0\t3\t2\t3\t\t0\t0\n410\t100.0\tkb/communities/SynCom_ARC_Peanut_Aflatoxin_Nodulation.yaml\tCommunityMech:000314\tSynCom ARC Peanut Aflatoxin-Control and Nodulation-Coupling Community\t5\t5\t0\t3\t2\t3\t\t0\t0\n411\t100.0\tkb/communities/SynCom_BsBv_Cigar_Tobacco_Leaf_Fermentation.yaml\tCommunityMech:000278\tSynCom BsBv Cigar Tobacco Leaf Fermentation\t2\t2\t0\t3\t2\t3\t\t0\t0\n412\t100.0\tkb/communities/SynCom_Chlorella_sorokiniana_Biogas_Slurry_Coupling_System.yaml\tCommunityMech:000285\tSynCom + Chlorella sorokiniana Biogas-slurry Coupling System\t2\t2\t0\t5\t3\t5\t\t0\t0\n413\t100.0\tkb/communities/SynCom_MetG2_Rhizobacteria_Sugarcane_Stress_Resilience.yaml\tCommunityMech:000302\tSynCom MetG2 Rhizobacteria Sugarcane Stress Resilience\t2\t2\t0\t3\t2\t4\t\t0\t0\n414\t100.0\tkb/communities/SynCom_Sesame_Flavor_Baijiu_Fuqu_13Genus.yaml\tCommunityMech:000283\tSesame-flavor Baijiu Fuqu SynCom (13-genus)\t13\t13\t0\t3\t2\t3\t\t0\t0\n415\t100.0\tkb/communities/SynCom_Y_Agrobacterium_Bacillus_Biofilm_Biocontrol_Coculture.yaml\tCommunityMech:000272\tSynCom Y Agrobacterium-Bacillus Biofilm Biocontrol Co-culture\t2\t2\t0\t4\t2\t6\t\t0\t0\n416\t100.0\tkb/communities/Synechococcus_Azotobacter_Photoproduction_Mutualism.yaml\tCommunityMech:000207\tSynechococcus-Azotobacter Photoproduction Mutualism\t2\t2\t0\t3\t2\t6\t\t0\t0\n417\t100.0\tkb/communities/Synechococcus_Bacillus_SPC.yaml\tCommunityMech:000065\tSynechococcus-Bacillus Synthetic Photosynthetic Consortium\t2\t2\t0\t3\t2\t4\t\t0\t0\n418\t100.0\tkb/communities/Synechococcus_Ecoli_SPC.yaml\tCommunityMech:000066\tSynechococcus-E.coli Synthetic Photosynthetic Consortium\t2\t2\t0\t3\t2\t4\t\t0\t0\n419\t100.0\tkb/communities/Synechococcus_Halomonas_Light_Driven_PHB_Coculture.yaml\tCommunityMech:000198\tSynechococcus-Halomonas Light-Driven PHB Coculture\t2\t2\t0\t3\t2\t6\t\t0\t0\n420\t100.0\tkb/communities/Synechococcus_Pseudomonas_PhotoPHA_DNT_Coculture.yaml\tCommunityMech:000167\tSynechococcus-Pseudomonas Phototrophic PHA and DNT Coculture\t2\t2\t0\t4\t2\t8\t\t0\t0\n421\t100.0\tkb/communities/Synechococcus_Saccharomyces_SPC.yaml\tCommunityMech:000067\tSynechococcus-Saccharomyces Synthetic Photosynthetic Consortium\t2\t2\t0\t3\t2\t4\t\t0\t0\n422\t100.0\tkb/communities/Synechococcus_Shewanella_Dlactate_Biophotovoltaic_Consortium.yaml\tCommunityMech:000211\tSynechococcus-Shewanella D-Lactate Biophotovoltaic Consortium\t2\t2\t0\t3\t2\t6\t\t0\t0\n423\t100.0\tkb/communities/Synthetic_Lichen_Synechococcus_Rhodotorula_Coculture.yaml\tCommunityMech:000149\tSynthetic Lichen Synechococcus-Rhodotorula Coculture\t2\t2\t0\t3\t2\t4\t\t0\t0\n424\t100.0\tkb/communities/Syntrophobacter_Methanobacterium_Syntrophy.yaml\tCommunityMech:000068\tSyntrophobacter-Methanobacterium Syntrophic Consortium\t2\t2\t0\t3\t3\t8\t\t0\t0\n425\t100.0\tkb/communities/Syntrophobacter_Methanospirillum_Syntrophy.yaml\tCommunityMech:000069\tSyntrophobacter-Methanospirillum Syntrophic Consortium\t2\t2\t0\t3\t3\t5\t\t0\t0\n426\t100.0\tkb/communities/Syntrophomonas_Methanococcus_Butyrate_Growth_Coordination_Coculture.yaml\tCommunityMech:000189\tSyntrophomonas-Methanococcus Butyrate Growth Coordination Coculture\t2\t2\t0\t3\t2\t6\t\t0\t0\n427\t100.0\tkb/communities/Syntrophomonas_Methanospirillum_Syntrophy.yaml\tCommunityMech:000070\tSyntrophomonas-Methanospirillum Syntrophic Consortium\t2\t2\t0\t3\t3\t7\t\t0\t0\n428\t100.0\tkb/communities/Syntrophus_Benzoate_Degrader.yaml\tCommunityMech:000071\tSyntrophus Benzoate Degrader\t2\t2\t0\t3\t2\t6\t\t0\t0\n429\t100.0\tkb/communities/Syntrophus_Methanospirillum_Gentianae_Benzoate_Coculture.yaml\tCommunityMech:000187\tSyntrophus-Methanospirillum Gentianae Benzoate Coculture\t2\t2\t0\t3\t2\t7\t\t0\t0\n430\t100.0\tkb/communities/THOR_Rhizosphere_Model_Community.yaml\tCommunityMech:000079\tTHOR Rhizosphere Model Community\t3\t3\t0\t4\t2\t5\t\t0\t0\n431\t100.0\tkb/communities/TYQ1_Nematode_Biocontrol_SynCom.yaml\tCommunityMech:000072\tTYQ1 Nematode Biocontrol SynCom\t8\t8\t0\t4\t4\t4\t\t0\t0\n432\t100.0\tkb/communities/Teosinte_Maize_Biofertilizer_SynCom7.yaml\tCommunityMech:000100\tTeosinte-Derived Maize Biofertilizer SynCom7\t4\t4\t0\t6\t2\t12\t\t0\t0\n433\t100.0\tkb/communities/Thalassiosira_Marinobacter_Marine_Snow_Coculture.yaml\tCommunityMech:000259\tThalassiosira-Marinobacter Marine Snow Coculture\t2\t2\t0\t4\t2\t10\t\t0\t0\n434\t100.0\tkb/communities/Thalassiosira_Ruegeria_Phycosphere_Coculture.yaml\tCommunityMech:000162\tThalassiosira-Ruegeria Phycosphere Coculture\t2\t2\t0\t3\t2\t4\t\t0\t0\n435\t100.0\tkb/communities/Thermacetogenium_Methanothermobacter_Acetate_Oxidation_Coculture.yaml\tCommunityMech:000182\tThermacetogenium-Methanothermobacter Acetate Oxidation Coculture\t2\t2\t0\t3\t2\t8\t\t0\t0\n436\t100.0\tkb/communities/Thermophilic_Lignocellulose_Composting_SynCom_Biosanitization.yaml\tCommunityMech:000282\tThermophilic Lignocellulose-degrading Composting SynCom\t5\t5\t0\t3\t2\t3\t\t0\t0\n437\t100.0\tkb/communities/Thermophilic_Pyrite_QS_Consortium.yaml\tCommunityMech:000073\tThermophilic Pyrite Quorum Sensing Consortium\t3\t3\t0\t6\t2\t14\t\t0\t0\n438\t100.0\tkb/communities/Thermotoga_Methanocaldococcus_Hyperthermophilic_Syntrophy.yaml\tCommunityMech:000186\tThermotoga-Methanocaldococcus Hyperthermophilic Syntrophy\t2\t2\t0\t3\t2\t8\t\t0\t0\n439\t100.0\tkb/communities/Thiocyanate_Afipia_Thiobacillus_Bioreactor_Community.yaml\tCommunityMech:000239\tThiocyanate-Degrading Afipia and Thiobacillus Bioreactor Community\t3\t3\t0\t3\t2\t3\t\t0\t0\n440\t100.0\tkb/communities/Tinto_River_Iron_Cycling_Community.yaml\tCommunityMech:000074\tTinto River Iron Cycling Community\t6\t6\t0\t5\t3\t6\t\t0\t0\n441\t100.0\tkb/communities/Tobacco_Chemotactic_Biocontrol_SynCom.yaml\tCommunityMech:000106\tTobacco Chemotactic Biocontrol SynCom\t2\t2\t0\t3\t2\t4\t\t0\t0\n442\t100.0\tkb/communities/Tomato_Oxylipin_SynCom3.yaml\tCommunityMech:000107\tTomato Oxylipin-Protective SynCom3\t3\t3\t0\t3\t2\t4\t\t0\t0\n443\t100.0\tkb/communities/Tribromophenol_Anaerobic_Bioremediation_SynCom.yaml\tCommunityMech:000112\tTribromophenol Anaerobic Bioremediation SynCom\t3\t3\t0\t4\t3\t5\t\t0\t0\n444\t100.0\tkb/communities/Trichococcus_Syntrophomonas_Methanospirillum_Butyrate_Coculture.yaml\tCommunityMech:000188\tTrichococcus-Syntrophomonas-Methanospirillum Butyrate Coculture\t3\t3\t0\t3\t2\t6\t\t0\t0\n445\t100.0\tkb/communities/Trichoderma_Ecoli_Cellulosic_Isobutanol_Coculture.yaml\tCommunityMech:000205\tTrichoderma-E. coli Cellulosic Isobutanol Coculture\t2\t2\t0\t3\t2\t5\t\t0\t0\n446\t100.0\tkb/communities/Trichoderma_Lactate_Platform.yaml\tCommunityMech:000075\tTrichoderma Lactate Platform for SCFA Production\t3\t3\t0\t3\t2\t3\t\t0\t0\n447\t100.0\tkb/communities/Trichoderma_Streptomyces_Filamentous_Cellulose_Coculture.yaml\tCommunityMech:000270\tTrichoderma-Streptomyces Filamentous Cellulose Coculture\t2\t2\t0\t3\t2\t7\t\t0\t0\n448\t100.0\tkb/communities/Trichodesmium_Alteromonas_Marine_Consortium.yaml\tCommunityMech:000147\tTrichodesmium-Alteromonas Marine Consortium\t3\t3\t0\t3\t2\t5\t\t0\t0\n449\t100.0\tkb/communities/Tropidoatractus_Magnetotacticus_Tripartite_Syntrophy.yaml\tCommunityMech:000337\tTropidoatractus magnetotacticus Magnetotactic Ciliate Tripartite Syntrophy\t3\t3\t0\t4\t2\t9\t\t0\t0\n450\t100.0\tkb/communities/Urine_Nitrification_SynCom.yaml\tCommunityMech:000117\tUrine Nitrification Synthetic Microbial Community\t5\t5\t0\t3\t2\t5\t\t0\t0\n451\t100.0\tkb/communities/Variovorax_Cryptococcus_Vitamin_Mutualism_Microcosm.yaml\tCommunityMech:000213\tVariovorax-Cryptococcus Vitamin Cross-Feeding Microcosm\t2\t2\t0\t3\t2\t4\t\t0\t0\n452\t100.0\tkb/communities/Waste_Sludge_Electrofermentation_Biofilm_Suspension_Community.yaml\tCommunityMech:000328\tWaste-Sludge Electro-Fermentation Biofilm-Suspension Community\t5\t5\t0\t4\t2\t6\t\t0\t0\n453\t100.0\tkb/communities/Watermelon_Rhizosphere_Fusarium_SynCom8.yaml\tCommunityMech:000098\tWatermelon Rhizosphere Fusarium-Protective SynCom8\t2\t2\t0\t3\t2\t7\t\t0\t0\n454\t100.0\tkb/communities/Wetland_Oxygen_Sulfate_GHG_Microcosm_Community.yaml\tCommunityMech:000255\tWetland Oxygen-Sulfate Greenhouse Gas Microcosm Community\t3\t3\t0\t3\t2\t6\t\t0\t0\n455\t100.0\tkb/communities/Wheat_Straw_Biogas_Pretreatment_SynCom.yaml\tCommunityMech:000118\tWheat Straw Biogas Pretreatment SynCom\t4\t4\t0\t3\t2\t4\t\t0\t0\n456\t100.0\tkb/communities/Yarrowia_lipolytica_Division_of_Labor_Lipid_Consortium.yaml\tCommunityMech:000354\tYarrowia lipolytica Division-of-Labor Lipid Consortium\t2\t2\t0\t3\t2\t3\t\t0\t0\n457\t100.0\tkb/communities/Yogurt_TwoSpecies_Starter_Culture.yaml\tCommunityMech:000164\tYogurt Two-Species Starter Culture\t2\t2\t0\t4\t2\t9\t\t0\t0\n458\t100.0\tkb/communities/Zymomonas_Ecoli_Exometabolomics_Obligate_Mutualism.yaml\tCommunityMech:000210\tZymomonas-E. coli Exometabolomics-Designed Obligate Mutualism\t2\t2\t0\t3\t2\t6\t\t0\t0\n459\t100.0\tkb/communities/hCom2_Complex_Gut_Microbiome.yaml\tCommunityMech:000123\thCom2 Complex Gut Microbiome\t1\t1\t0\t3\t2\t3\t\t0\t0\n460\t100.0\tkb/communities/mCAFEs_Brachypodium_RCC.yaml\tCommunityMech:000078\tm-CAFEs Brachypodium Reduced Complexity Consortia\t10\t10\t0\t6\t2\t11\t\t0\t0\nPYTHONPATH=src uv run python scripts/rank_causal_graph_readiness.py \n" + }, + { + "check": "render", + "command": [ + "/Users/marcin/.cache/uv/archive-v0/l58VlyFvdmnkl0CcAx5Gk/bin/python3", + "-m", + "communitymech.render" + ], + "exit_code": 0, + "expected_exit_codes": [ + 0 + ], + "log": "/private/tmp/communitymech-batch43/render.log", + "log_sha256": "a76b3b8c9ff3188b02a4a278f206e83233e76be612a241f8f7ba32cfcfdfbeee", + "output_tail": "sm.html\n \u2713 Synechococcus_Bacillus_SPC.yaml \u2192 /private/tmp/communitymech-causal-batch43/docs/communities/Synechococcus_Bacillus_SPC.html\n \u2713 Synechococcus_Ecoli_SPC.yaml \u2192 /private/tmp/communitymech-causal-batch43/docs/communities/Synechococcus_Ecoli_SPC.html\n \u2713 Synechococcus_Halomonas_Light_Driven_PHB_Coculture.yaml \u2192 /private/tmp/communitymech-causal-batch43/docs/communities/Synechococcus_Halomonas_Light_Driven_PHB_Coculture.html\n \u2713 Synechococcus_Pseudomonas_PhotoPHA_DNT_Coculture.yaml \u2192 /private/tmp/communitymech-causal-batch43/docs/communities/Synechococcus_Pseudomonas_PhotoPHA_DNT_Coculture.html\n \u2713 Synechococcus_Saccharomyces_SPC.yaml \u2192 /private/tmp/communitymech-causal-batch43/docs/communities/Synechococcus_Saccharomyces_SPC.html\n \u2713 Synechococcus_Shewanella_Dlactate_Biophotovoltaic_Consortium.yaml \u2192 /private/tmp/communitymech-causal-batch43/docs/communities/Synechococcus_Shewanella_Dlactate_Biophotovoltaic_Consortium.html\n \u2713 Synechocystis_Pseudomonas_Acetate_Butanol_Coculture.yaml \u2192 /private/tmp/communitymech-causal-batch43/docs/communities/Synechocystis_Pseudomonas_Acetate_Butanol_Coculture.html\n \u2713 Synthetic_Lichen_Synechococcus_Rhodotorula_Coculture.yaml \u2192 /private/tmp/communitymech-causal-batch43/docs/communities/Synthetic_Lichen_Synechococcus_Rhodotorula_Coculture.html\n \u2713 Synthetic_Periphyton_Freshwater_Biofilm.yaml \u2192 /private/tmp/communitymech-causal-batch43/docs/communities/Synthetic_Periphyton_Freshwater_Biofilm.html\n \u2713 Syntrophobacter_Methanobacterium_Syntrophy.yaml \u2192 /private/tmp/communitymech-causal-batch43/docs/communities/Syntrophobacter_Methanobacterium_Syntrophy.html\n \u2713 Syntrophobacter_Methanospirillum_Syntrophy.yaml \u2192 /private/tmp/communitymech-causal-batch43/docs/communities/Syntrophobacter_Methanospirillum_Syntrophy.html\n \u2713 Syntrophomonas_Methanococcus_Butyrate_Growth_Coordination_Coculture.yaml \u2192 /private/tmp/communitymech-causal-batch43/docs/communities/Syntrophomonas_Methanococcus_Butyrate_Growth_Coordination_Coculture.html\n \u2713 Syntrophomonas_Methanospirillum_Syntrophy.yaml \u2192 /private/tmp/communitymech-causal-batch43/docs/communities/Syntrophomonas_Methanospirillum_Syntrophy.html\n \u2713 Syntrophus_Benzoate_Degrader.yaml \u2192 /private/tmp/communitymech-causal-batch43/docs/communities/Syntrophus_Benzoate_Degrader.html\n \u2713 Syntrophus_Methanospirillum_Gentianae_Benzoate_Coculture.yaml \u2192 /private/tmp/communitymech-causal-batch43/docs/communities/Syntrophus_Methanospirillum_Gentianae_Benzoate_Coculture.html\n \u2713 TCP_NonDehalogenimonas_Groundwater_Consortium.yaml \u2192 /private/tmp/communitymech-causal-batch43/docs/communities/TCP_NonDehalogenimonas_Groundwater_Consortium.html\n \u2713 THOR_Rhizosphere_Model_Community.yaml \u2192 /private/tmp/communitymech-causal-batch43/docs/communities/THOR_Rhizosphere_Model_Community.html\n \u2713 TYQ1_Nematode_Biocontrol_SynCom.yaml \u2192 /private/tmp/communitymech-causal-batch43/docs/communities/TYQ1_Nematode_Biocontrol_SynCom.html\n \u2713 Teosinte_Maize_Biofertilizer_SynCom7.yaml \u2192 /private/tmp/communitymech-causal-batch43/docs/communities/Teosinte_Maize_Biofertilizer_SynCom7.html\n \u2713 Thalassiosira_Marinobacter_Marine_Snow_Coculture.yaml \u2192 /private/tmp/communitymech-causal-batch43/docs/communities/Thalassiosira_Marinobacter_Marine_Snow_Coculture.html\n \u2713 Thalassiosira_Ruegeria_Phycosphere_Coculture.yaml \u2192 /private/tmp/communitymech-causal-batch43/docs/communities/Thalassiosira_Ruegeria_Phycosphere_Coculture.html\n \u2713 Thermacetogenium_Methanothermobacter_Acetate_Oxidation_Coculture.yaml \u2192 /private/tmp/communitymech-causal-batch43/docs/communities/Thermacetogenium_Methanothermobacter_Acetate_Oxidation_Coculture.html\n \u2713 Thermoleptolyngbya_Chelatococcus_Arsenic_Detoxification_Coculture.yaml \u2192 /private/tmp/communitymech-causal-batch43/docs/communities/Thermoleptolyngbya_Chelatococcus_Arsenic_Detoxification_Coculture.html\n \u2713 Thermophilic_ExSitu_Biomethanation_Mixed_Culture.yaml \u2192 /private/tmp/communitymech-causal-batch43/docs/communities/Thermophilic_ExSitu_Biomethanation_Mixed_Culture.html\n \u2713 Thermophilic_Lignocellulose_Composting_SynCom_Biosanitization.yaml \u2192 /private/tmp/communitymech-causal-batch43/docs/communities/Thermophilic_Lignocellulose_Composting_SynCom_Biosanitization.html\n \u2713 Thermophilic_Pyrite_QS_Consortium.yaml \u2192 /private/tmp/communitymech-causal-batch43/docs/communities/Thermophilic_Pyrite_QS_Consortium.html\n \u2713 Thermotoga_Methanocaldococcus_Hyperthermophilic_Syntrophy.yaml \u2192 /private/tmp/communitymech-causal-batch43/docs/communities/Thermotoga_Methanocaldococcus_Hyperthermophilic_Syntrophy.html\n \u2713 Thiocyanate_Afipia_Thiobacillus_Bioreactor_Community.yaml \u2192 /private/tmp/communitymech-causal-batch43/docs/communities/Thiocyanate_Afipia_Thiobacillus_Bioreactor_Community.html\n \u2713 Tinto_River_Iron_Cycling_Community.yaml \u2192 /private/tmp/communitymech-causal-batch43/docs/communities/Tinto_River_Iron_Cycling_Community.html\n \u2713 Tobacco_Chemotactic_Biocontrol_SynCom.yaml \u2192 /private/tmp/communitymech-causal-batch43/docs/communities/Tobacco_Chemotactic_Biocontrol_SynCom.html\n \u2713 Tomato_Oxylipin_SynCom3.yaml \u2192 /private/tmp/communitymech-causal-batch43/docs/communities/Tomato_Oxylipin_SynCom3.html\n \u2713 Tribromophenol_Anaerobic_Bioremediation_SynCom.yaml \u2192 /private/tmp/communitymech-causal-batch43/docs/communities/Tribromophenol_Anaerobic_Bioremediation_SynCom.html\n \u2713 Trichococcus_Syntrophomonas_Methanospirillum_Butyrate_Coculture.yaml \u2192 /private/tmp/communitymech-causal-batch43/docs/communities/Trichococcus_Syntrophomonas_Methanospirillum_Butyrate_Coculture.html\n \u2713 Trichoderma_Ecoli_Cellulosic_Isobutanol_Coculture.yaml \u2192 /private/tmp/communitymech-causal-batch43/docs/communities/Trichoderma_Ecoli_Cellulosic_Isobutanol_Coculture.html\n \u2713 Trichoderma_Lactate_Platform.yaml \u2192 /private/tmp/communitymech-causal-batch43/docs/communities/Trichoderma_Lactate_Platform.html\n \u2713 Trichoderma_Streptomyces_Filamentous_Cellulose_Coculture.yaml \u2192 /private/tmp/communitymech-causal-batch43/docs/communities/Trichoderma_Streptomyces_Filamentous_Cellulose_Coculture.html\n \u2713 Trichodesmium_Alteromonas_Marine_Consortium.yaml \u2192 /private/tmp/communitymech-causal-batch43/docs/communities/Trichodesmium_Alteromonas_Marine_Consortium.html\n \u2713 Tropidoatractus_Magnetotacticus_Tripartite_Syntrophy.yaml \u2192 /private/tmp/communitymech-causal-batch43/docs/communities/Tropidoatractus_Magnetotacticus_Tripartite_Syntrophy.html\n \u2713 Urine_Nitrification_SynCom.yaml \u2192 /private/tmp/communitymech-causal-batch43/docs/communities/Urine_Nitrification_SynCom.html\n \u2713 Variovorax_Cryptococcus_Vitamin_Mutualism_Microcosm.yaml \u2192 /private/tmp/communitymech-causal-batch43/docs/communities/Variovorax_Cryptococcus_Vitamin_Mutualism_Microcosm.html\n \u2713 Viili_Fungus_Bacterium_EPS_SynCom.yaml \u2192 /private/tmp/communitymech-causal-batch43/docs/communities/Viili_Fungus_Bacterium_EPS_SynCom.html\n \u2713 Waste_Sludge_Electrofermentation_Biofilm_Suspension_Community.yaml \u2192 /private/tmp/communitymech-causal-batch43/docs/communities/Waste_Sludge_Electrofermentation_Biofilm_Suspension_Community.html\n \u2713 Watermelon_Rhizosphere_Fusarium_SynCom8.yaml \u2192 /private/tmp/communitymech-causal-batch43/docs/communities/Watermelon_Rhizosphere_Fusarium_SynCom8.html\n \u2713 Wetland_Oxygen_Sulfate_GHG_Microcosm_Community.yaml \u2192 /private/tmp/communitymech-causal-batch43/docs/communities/Wetland_Oxygen_Sulfate_GHG_Microcosm_Community.html\n \u2713 Wheat_Consortium_C1.yaml \u2192 /private/tmp/communitymech-causal-batch43/docs/communities/Wheat_Consortium_C1.html\n \u2713 Wheat_Consortium_C6.yaml \u2192 /private/tmp/communitymech-causal-batch43/docs/communities/Wheat_Consortium_C6.html\n \u2713 Wheat_CrownRot_SixStrain_CrossKingdom_SMC.yaml \u2192 /private/tmp/communitymech-causal-batch43/docs/communities/Wheat_CrownRot_SixStrain_CrossKingdom_SMC.html\n \u2713 Wheat_CrownRot_TB_CrossKingdom_SynCom.yaml \u2192 /private/tmp/communitymech-causal-batch43/docs/communities/Wheat_CrownRot_TB_CrossKingdom_SynCom.html\n \u2713 Wheat_DT_Rhizosphere_SynCom.yaml \u2192 /private/tmp/communitymech-causal-batch43/docs/communities/Wheat_DT_Rhizosphere_SynCom.html\n \u2713 Wheat_Straw_Biogas_Pretreatment_SynCom.yaml \u2192 /private/tmp/communitymech-causal-batch43/docs/communities/Wheat_Straw_Biogas_Pretreatment_SynCom.html\n \u2713 Wheat_SynCom_SASW01_Drought_Inoculant.yaml \u2192 /private/tmp/communitymech-causal-batch43/docs/communities/Wheat_SynCom_SASW01_Drought_Inoculant.html\n \u2713 Wine_Yeast_FiveSpecies_Strain_Substitution_Consortium.yaml \u2192 /private/tmp/communitymech-causal-batch43/docs/communities/Wine_Yeast_FiveSpecies_Strain_Substitution_Consortium.html\n \u2713 Wine_Yeast_ThreeSpecies_Contact_Consortium.yaml \u2192 /private/tmp/communitymech-causal-batch43/docs/communities/Wine_Yeast_ThreeSpecies_Contact_Consortium.html\n \u2713 Wolffia_Mankai_Endosphere_Cobamide_Guild.yaml \u2192 /private/tmp/communitymech-causal-batch43/docs/communities/Wolffia_Mankai_Endosphere_Cobamide_Guild.html\n \u2713 Wollastonite_Ramichloridium_Talaromyces_Fungal_Consortium.yaml \u2192 /private/tmp/communitymech-causal-batch43/docs/communities/Wollastonite_Ramichloridium_Talaromyces_Fungal_Consortium.html\n \u2713 Yarrowia_lipolytica_Division_of_Labor_Lipid_Consortium.yaml \u2192 /private/tmp/communitymech-causal-batch43/docs/communities/Yarrowia_lipolytica_Division_of_Labor_Lipid_Consortium.html\n \u2713 Yogurt_TwoSpecies_Starter_Culture.yaml \u2192 /private/tmp/communitymech-causal-batch43/docs/communities/Yogurt_TwoSpecies_Starter_Culture.html\n \u2713 Zymomonas_Ecoli_Exometabolomics_Obligate_Mutualism.yaml \u2192 /private/tmp/communitymech-causal-batch43/docs/communities/Zymomonas_Ecoli_Exometabolomics_Obligate_Mutualism.html\n \u2713 hCom2_Complex_Gut_Microbiome.yaml \u2192 /private/tmp/communitymech-causal-batch43/docs/communities/hCom2_Complex_Gut_Microbiome.html\n \u2713 mCAFEs_Brachypodium_RCC.yaml \u2192 /private/tmp/communitymech-causal-batch43/docs/communities/mCAFEs_Brachypodium_RCC.html\n\n\u2705 Rendered 456 communities to /private/tmp/communitymech-causal-batch43/docs/communities\n \u2713 Generated browser at /private/tmp/communitymech-causal-batch43/docs/browser.html\n \u2713 Generated landing at /private/tmp/communitymech-causal-batch43/docs/index.html\n" + }, + { + "check": "render-repeat", + "command": [ + "/Users/marcin/.cache/uv/archive-v0/l58VlyFvdmnkl0CcAx5Gk/bin/python3", + "-m", + "communitymech.render" + ], + "exit_code": 0, + "expected_exit_codes": [ + 0 + ], + "log": "/private/tmp/communitymech-batch43/render-repeat.log", + "log_sha256": "a76b3b8c9ff3188b02a4a278f206e83233e76be612a241f8f7ba32cfcfdfbeee", + "output_tail": "sm.html\n \u2713 Synechococcus_Bacillus_SPC.yaml \u2192 /private/tmp/communitymech-causal-batch43/docs/communities/Synechococcus_Bacillus_SPC.html\n \u2713 Synechococcus_Ecoli_SPC.yaml \u2192 /private/tmp/communitymech-causal-batch43/docs/communities/Synechococcus_Ecoli_SPC.html\n \u2713 Synechococcus_Halomonas_Light_Driven_PHB_Coculture.yaml \u2192 /private/tmp/communitymech-causal-batch43/docs/communities/Synechococcus_Halomonas_Light_Driven_PHB_Coculture.html\n \u2713 Synechococcus_Pseudomonas_PhotoPHA_DNT_Coculture.yaml \u2192 /private/tmp/communitymech-causal-batch43/docs/communities/Synechococcus_Pseudomonas_PhotoPHA_DNT_Coculture.html\n \u2713 Synechococcus_Saccharomyces_SPC.yaml \u2192 /private/tmp/communitymech-causal-batch43/docs/communities/Synechococcus_Saccharomyces_SPC.html\n \u2713 Synechococcus_Shewanella_Dlactate_Biophotovoltaic_Consortium.yaml \u2192 /private/tmp/communitymech-causal-batch43/docs/communities/Synechococcus_Shewanella_Dlactate_Biophotovoltaic_Consortium.html\n \u2713 Synechocystis_Pseudomonas_Acetate_Butanol_Coculture.yaml \u2192 /private/tmp/communitymech-causal-batch43/docs/communities/Synechocystis_Pseudomonas_Acetate_Butanol_Coculture.html\n \u2713 Synthetic_Lichen_Synechococcus_Rhodotorula_Coculture.yaml \u2192 /private/tmp/communitymech-causal-batch43/docs/communities/Synthetic_Lichen_Synechococcus_Rhodotorula_Coculture.html\n \u2713 Synthetic_Periphyton_Freshwater_Biofilm.yaml \u2192 /private/tmp/communitymech-causal-batch43/docs/communities/Synthetic_Periphyton_Freshwater_Biofilm.html\n \u2713 Syntrophobacter_Methanobacterium_Syntrophy.yaml \u2192 /private/tmp/communitymech-causal-batch43/docs/communities/Syntrophobacter_Methanobacterium_Syntrophy.html\n \u2713 Syntrophobacter_Methanospirillum_Syntrophy.yaml \u2192 /private/tmp/communitymech-causal-batch43/docs/communities/Syntrophobacter_Methanospirillum_Syntrophy.html\n \u2713 Syntrophomonas_Methanococcus_Butyrate_Growth_Coordination_Coculture.yaml \u2192 /private/tmp/communitymech-causal-batch43/docs/communities/Syntrophomonas_Methanococcus_Butyrate_Growth_Coordination_Coculture.html\n \u2713 Syntrophomonas_Methanospirillum_Syntrophy.yaml \u2192 /private/tmp/communitymech-causal-batch43/docs/communities/Syntrophomonas_Methanospirillum_Syntrophy.html\n \u2713 Syntrophus_Benzoate_Degrader.yaml \u2192 /private/tmp/communitymech-causal-batch43/docs/communities/Syntrophus_Benzoate_Degrader.html\n \u2713 Syntrophus_Methanospirillum_Gentianae_Benzoate_Coculture.yaml \u2192 /private/tmp/communitymech-causal-batch43/docs/communities/Syntrophus_Methanospirillum_Gentianae_Benzoate_Coculture.html\n \u2713 TCP_NonDehalogenimonas_Groundwater_Consortium.yaml \u2192 /private/tmp/communitymech-causal-batch43/docs/communities/TCP_NonDehalogenimonas_Groundwater_Consortium.html\n \u2713 THOR_Rhizosphere_Model_Community.yaml \u2192 /private/tmp/communitymech-causal-batch43/docs/communities/THOR_Rhizosphere_Model_Community.html\n \u2713 TYQ1_Nematode_Biocontrol_SynCom.yaml \u2192 /private/tmp/communitymech-causal-batch43/docs/communities/TYQ1_Nematode_Biocontrol_SynCom.html\n \u2713 Teosinte_Maize_Biofertilizer_SynCom7.yaml \u2192 /private/tmp/communitymech-causal-batch43/docs/communities/Teosinte_Maize_Biofertilizer_SynCom7.html\n \u2713 Thalassiosira_Marinobacter_Marine_Snow_Coculture.yaml \u2192 /private/tmp/communitymech-causal-batch43/docs/communities/Thalassiosira_Marinobacter_Marine_Snow_Coculture.html\n \u2713 Thalassiosira_Ruegeria_Phycosphere_Coculture.yaml \u2192 /private/tmp/communitymech-causal-batch43/docs/communities/Thalassiosira_Ruegeria_Phycosphere_Coculture.html\n \u2713 Thermacetogenium_Methanothermobacter_Acetate_Oxidation_Coculture.yaml \u2192 /private/tmp/communitymech-causal-batch43/docs/communities/Thermacetogenium_Methanothermobacter_Acetate_Oxidation_Coculture.html\n \u2713 Thermoleptolyngbya_Chelatococcus_Arsenic_Detoxification_Coculture.yaml \u2192 /private/tmp/communitymech-causal-batch43/docs/communities/Thermoleptolyngbya_Chelatococcus_Arsenic_Detoxification_Coculture.html\n \u2713 Thermophilic_ExSitu_Biomethanation_Mixed_Culture.yaml \u2192 /private/tmp/communitymech-causal-batch43/docs/communities/Thermophilic_ExSitu_Biomethanation_Mixed_Culture.html\n \u2713 Thermophilic_Lignocellulose_Composting_SynCom_Biosanitization.yaml \u2192 /private/tmp/communitymech-causal-batch43/docs/communities/Thermophilic_Lignocellulose_Composting_SynCom_Biosanitization.html\n \u2713 Thermophilic_Pyrite_QS_Consortium.yaml \u2192 /private/tmp/communitymech-causal-batch43/docs/communities/Thermophilic_Pyrite_QS_Consortium.html\n \u2713 Thermotoga_Methanocaldococcus_Hyperthermophilic_Syntrophy.yaml \u2192 /private/tmp/communitymech-causal-batch43/docs/communities/Thermotoga_Methanocaldococcus_Hyperthermophilic_Syntrophy.html\n \u2713 Thiocyanate_Afipia_Thiobacillus_Bioreactor_Community.yaml \u2192 /private/tmp/communitymech-causal-batch43/docs/communities/Thiocyanate_Afipia_Thiobacillus_Bioreactor_Community.html\n \u2713 Tinto_River_Iron_Cycling_Community.yaml \u2192 /private/tmp/communitymech-causal-batch43/docs/communities/Tinto_River_Iron_Cycling_Community.html\n \u2713 Tobacco_Chemotactic_Biocontrol_SynCom.yaml \u2192 /private/tmp/communitymech-causal-batch43/docs/communities/Tobacco_Chemotactic_Biocontrol_SynCom.html\n \u2713 Tomato_Oxylipin_SynCom3.yaml \u2192 /private/tmp/communitymech-causal-batch43/docs/communities/Tomato_Oxylipin_SynCom3.html\n \u2713 Tribromophenol_Anaerobic_Bioremediation_SynCom.yaml \u2192 /private/tmp/communitymech-causal-batch43/docs/communities/Tribromophenol_Anaerobic_Bioremediation_SynCom.html\n \u2713 Trichococcus_Syntrophomonas_Methanospirillum_Butyrate_Coculture.yaml \u2192 /private/tmp/communitymech-causal-batch43/docs/communities/Trichococcus_Syntrophomonas_Methanospirillum_Butyrate_Coculture.html\n \u2713 Trichoderma_Ecoli_Cellulosic_Isobutanol_Coculture.yaml \u2192 /private/tmp/communitymech-causal-batch43/docs/communities/Trichoderma_Ecoli_Cellulosic_Isobutanol_Coculture.html\n \u2713 Trichoderma_Lactate_Platform.yaml \u2192 /private/tmp/communitymech-causal-batch43/docs/communities/Trichoderma_Lactate_Platform.html\n \u2713 Trichoderma_Streptomyces_Filamentous_Cellulose_Coculture.yaml \u2192 /private/tmp/communitymech-causal-batch43/docs/communities/Trichoderma_Streptomyces_Filamentous_Cellulose_Coculture.html\n \u2713 Trichodesmium_Alteromonas_Marine_Consortium.yaml \u2192 /private/tmp/communitymech-causal-batch43/docs/communities/Trichodesmium_Alteromonas_Marine_Consortium.html\n \u2713 Tropidoatractus_Magnetotacticus_Tripartite_Syntrophy.yaml \u2192 /private/tmp/communitymech-causal-batch43/docs/communities/Tropidoatractus_Magnetotacticus_Tripartite_Syntrophy.html\n \u2713 Urine_Nitrification_SynCom.yaml \u2192 /private/tmp/communitymech-causal-batch43/docs/communities/Urine_Nitrification_SynCom.html\n \u2713 Variovorax_Cryptococcus_Vitamin_Mutualism_Microcosm.yaml \u2192 /private/tmp/communitymech-causal-batch43/docs/communities/Variovorax_Cryptococcus_Vitamin_Mutualism_Microcosm.html\n \u2713 Viili_Fungus_Bacterium_EPS_SynCom.yaml \u2192 /private/tmp/communitymech-causal-batch43/docs/communities/Viili_Fungus_Bacterium_EPS_SynCom.html\n \u2713 Waste_Sludge_Electrofermentation_Biofilm_Suspension_Community.yaml \u2192 /private/tmp/communitymech-causal-batch43/docs/communities/Waste_Sludge_Electrofermentation_Biofilm_Suspension_Community.html\n \u2713 Watermelon_Rhizosphere_Fusarium_SynCom8.yaml \u2192 /private/tmp/communitymech-causal-batch43/docs/communities/Watermelon_Rhizosphere_Fusarium_SynCom8.html\n \u2713 Wetland_Oxygen_Sulfate_GHG_Microcosm_Community.yaml \u2192 /private/tmp/communitymech-causal-batch43/docs/communities/Wetland_Oxygen_Sulfate_GHG_Microcosm_Community.html\n \u2713 Wheat_Consortium_C1.yaml \u2192 /private/tmp/communitymech-causal-batch43/docs/communities/Wheat_Consortium_C1.html\n \u2713 Wheat_Consortium_C6.yaml \u2192 /private/tmp/communitymech-causal-batch43/docs/communities/Wheat_Consortium_C6.html\n \u2713 Wheat_CrownRot_SixStrain_CrossKingdom_SMC.yaml \u2192 /private/tmp/communitymech-causal-batch43/docs/communities/Wheat_CrownRot_SixStrain_CrossKingdom_SMC.html\n \u2713 Wheat_CrownRot_TB_CrossKingdom_SynCom.yaml \u2192 /private/tmp/communitymech-causal-batch43/docs/communities/Wheat_CrownRot_TB_CrossKingdom_SynCom.html\n \u2713 Wheat_DT_Rhizosphere_SynCom.yaml \u2192 /private/tmp/communitymech-causal-batch43/docs/communities/Wheat_DT_Rhizosphere_SynCom.html\n \u2713 Wheat_Straw_Biogas_Pretreatment_SynCom.yaml \u2192 /private/tmp/communitymech-causal-batch43/docs/communities/Wheat_Straw_Biogas_Pretreatment_SynCom.html\n \u2713 Wheat_SynCom_SASW01_Drought_Inoculant.yaml \u2192 /private/tmp/communitymech-causal-batch43/docs/communities/Wheat_SynCom_SASW01_Drought_Inoculant.html\n \u2713 Wine_Yeast_FiveSpecies_Strain_Substitution_Consortium.yaml \u2192 /private/tmp/communitymech-causal-batch43/docs/communities/Wine_Yeast_FiveSpecies_Strain_Substitution_Consortium.html\n \u2713 Wine_Yeast_ThreeSpecies_Contact_Consortium.yaml \u2192 /private/tmp/communitymech-causal-batch43/docs/communities/Wine_Yeast_ThreeSpecies_Contact_Consortium.html\n \u2713 Wolffia_Mankai_Endosphere_Cobamide_Guild.yaml \u2192 /private/tmp/communitymech-causal-batch43/docs/communities/Wolffia_Mankai_Endosphere_Cobamide_Guild.html\n \u2713 Wollastonite_Ramichloridium_Talaromyces_Fungal_Consortium.yaml \u2192 /private/tmp/communitymech-causal-batch43/docs/communities/Wollastonite_Ramichloridium_Talaromyces_Fungal_Consortium.html\n \u2713 Yarrowia_lipolytica_Division_of_Labor_Lipid_Consortium.yaml \u2192 /private/tmp/communitymech-causal-batch43/docs/communities/Yarrowia_lipolytica_Division_of_Labor_Lipid_Consortium.html\n \u2713 Yogurt_TwoSpecies_Starter_Culture.yaml \u2192 /private/tmp/communitymech-causal-batch43/docs/communities/Yogurt_TwoSpecies_Starter_Culture.html\n \u2713 Zymomonas_Ecoli_Exometabolomics_Obligate_Mutualism.yaml \u2192 /private/tmp/communitymech-causal-batch43/docs/communities/Zymomonas_Ecoli_Exometabolomics_Obligate_Mutualism.html\n \u2713 hCom2_Complex_Gut_Microbiome.yaml \u2192 /private/tmp/communitymech-causal-batch43/docs/communities/hCom2_Complex_Gut_Microbiome.html\n \u2713 mCAFEs_Brachypodium_RCC.yaml \u2192 /private/tmp/communitymech-causal-batch43/docs/communities/mCAFEs_Brachypodium_RCC.html\n\n\u2705 Rendered 456 communities to /private/tmp/communitymech-causal-batch43/docs/communities\n \u2713 Generated browser at /private/tmp/communitymech-causal-batch43/docs/browser.html\n \u2713 Generated landing at /private/tmp/communitymech-causal-batch43/docs/index.html\n" + }, + { + "check": "connectivity-survey", + "command": [ + "/Users/marcin/.cache/uv/archive-v0/l58VlyFvdmnkl0CcAx5Gk/bin/python3", + "-c", + "import json, pathlib, runpy\nold = pathlib.Path('/private/tmp/communitymech-causal-batch42')\nnew = pathlib.Path.cwd()\nresults = {}\nfor alg, path in [('legacy', old), ('corrected', new)]:\n fn = runpy.run_path(str(path / 'tests/test_community_level_connectivity_credit.py'))['_survey']\n for version, root in [('baseline', old), ('current', new)]:\n paths = sorted(p for r in ['kb/communities','data/isolates'] for p in (root/r).rglob('*.yaml'))\n assert len(paths) == 460\n fn.__globals__['record_files'] = lambda: paths\n results[alg + '_' + version] = fn()\nprint(json.dumps(results, sort_keys=True))\n" + ], + "exit_code": 0, + "expected_exit_codes": [ + 0 + ], + "log": "/private/tmp/communitymech-batch43/connectivity-survey.log", + "log_sha256": "73d45880c6bb0a0d8b2396144a5b9114bb7db6184ba994ba59f0bf84a8626a8a", + "output_tail": "{\"corrected_baseline\": {\"community_level_only\": 263, \"credited_solely_by_the_rule\": 1222, \"mixed\": 124, \"records\": 460, \"taxa\": 1494, \"with_community_level\": 387}, \"corrected_current\": {\"community_level_only\": 262, \"credited_solely_by_the_rule\": 1221, \"mixed\": 125, \"records\": 460, \"taxa\": 1494, \"with_community_level\": 387}, \"legacy_baseline\": {\"community_level_only\": 263, \"credited_solely_by_the_rule\": 1219, \"mixed\": 124, \"records\": 460, \"taxa\": 1494, \"with_community_level\": 387}, \"legacy_current\": {\"community_level_only\": 262, \"credited_solely_by_the_rule\": 1191, \"mixed\": 125, \"records\": 460, \"taxa\": 1494, \"with_community_level\": 387}}\n" + }, + { + "check": "regressions", + "command": [ + "/Users/marcin/.cache/uv/archive-v0/l58VlyFvdmnkl0CcAx5Gk/bin/python3", + "-m", + "pytest", + "-q", + "tests/test_causal_review_batch10.py", + "tests/test_causal_review_batch11.py", + "tests/test_causal_review_batch12.py", + "tests/test_causal_review_batch13.py", + "tests/test_causal_review_batch14.py", + "tests/test_causal_review_batch15.py", + "tests/test_causal_review_batch16.py", + "tests/test_causal_review_batch17.py", + "tests/test_causal_review_batch18.py", + "tests/test_causal_review_batch19.py", + "tests/test_causal_review_batch20.py", + "tests/test_causal_review_batch21.py", + "tests/test_causal_review_batch22.py", + "tests/test_causal_review_batch23.py", + "tests/test_causal_review_batch24.py", + "tests/test_causal_review_batch25.py", + "tests/test_causal_review_batch27.py", + "tests/test_causal_review_batch28.py", + "tests/test_causal_review_batch29.py", + "tests/test_causal_review_batch30.py", + "tests/test_causal_review_batch31.py", + "tests/test_causal_review_batch32.py", + "tests/test_causal_review_batch33.py", + "tests/test_causal_review_batch34.py", + "tests/test_causal_review_batch35.py", + "tests/test_causal_review_batch36.py", + "tests/test_causal_review_batch37.py", + "tests/test_causal_review_batch38.py", + "tests/test_causal_review_batch39.py", + "tests/test_causal_review_batch40.py", + "tests/test_causal_review_batch41.py", + "tests/test_causal_review_batch42.py", + "tests/test_causal_review_batch43.py", + "tests/test_causal_review_batch5.py", + "tests/test_causal_review_batch6.py", + "tests/test_causal_review_batch7.py", + "tests/test_causal_review_batch8.py", + "tests/test_causal_review_batch9.py", + "tests/test_site_audit_fixes.py", + "tests/test_causal_review_inventory.py", + "tests/test_rank_causal_graph_readiness.py", + "tests/test_network_auditor.py", + "tests/test_participating_taxa.py", + "tests/test_causal_descriptions_are_published.py", + "tests/test_published_pages_name_real_records.py", + "tests/test_reference_validator_actually_validates.py", + "tests/test_snippet_audit_artefact_classes.py", + "tests/test_reference_error_annotation.py", + "tests/test_community_level_connectivity_credit.py", + "tests/test_no_paywalled_text_in_repo.py" + ], + "exit_code": 0, + "expected_exit_codes": [ + 0 + ], + "log": "/private/tmp/communitymech-batch43/regressions.log", + "log_sha256": "9850ef73dacd7683750bf964183d2eafae57fa43275d916f99f1657376845761", + "output_tail": "........................................................................ [ 16%]\n........................................................................ [ 32%]\n........................................................................ [ 48%]\n........................................................................ [ 64%]\n........................................................................ [ 80%]\n........................................................................ [ 97%]\n............. [100%]\n445 passed in 176.93s (0:02:56)\n" + }, + { + "check": "black", + "command": [ + "/Users/marcin/.cache/uv/archive-v0/3Q_kifQtLB624D5bBWGIf/bin/black", + "--check", + "tests/test_causal_review_batch43.py", + "tests/test_participating_taxa.py", + "tests/test_community_level_connectivity_credit.py" + ], + "exit_code": 0, + "expected_exit_codes": [ + 0 + ], + "log": "/private/tmp/communitymech-batch43/black.log", + "log_sha256": "45a468fa6205768496f23f1716ebb7575e9b723449d2099b88bf2afef60b721f", + "output_tail": "All done! \u2728 \ud83c\udf70 \u2728\n3 files would be left unchanged.\n" + }, + { + "check": "ruff", + "command": [ + "/Users/marcin/.cache/uv/archive-v0/wCcxEYRM4HeHgwYPZemHX/bin/ruff", + "check", + "tests/test_causal_review_batch43.py", + "tests/test_participating_taxa.py", + "tests/test_community_level_connectivity_credit.py" + ], + "exit_code": 0, + "expected_exit_codes": [ + 0 + ], + "log": "/private/tmp/communitymech-batch43/ruff.log", + "log_sha256": "82b3e6a6c090a57601d22943bd23fca9218d1031dbe5a7b754092f9a156b4f18", + "output_tail": "All checks passed!\n" + }, + { + "check": "diff-check", + "command": [ + "git", + "diff", + "--check" + ], + "exit_code": 0, + "expected_exit_codes": [ + 0 + ], + "log": "/private/tmp/communitymech-batch43/diff-check.log", + "log_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "output_tail": "" + } + ], + "limitations": [ + "Complete cached primary main body, Methods and embedded captions read despite stale abstract_only front matter; no figure images, separate supplements, raw data or analysis code independently inspected. Public PMC browser path presented reCAPTCHA; no bypass.", + "Three existing nodes retained/renamed, two unsupported arrows removed. No new causal structure or Edison spend.", + "Canonical taxonomy, non-graph raw blocks, historical records and all original caches preserved, not certified. Both initially selected UFMP/GOM candidates remain pending.", + "The reference CLI Total checks counter counts reported issues, not executed checks; SupportingReference coverage remains incomplete under #476. Text matching is not scientific support or independent cache provenance.", + "Source-based self-adversarial review is not independent approval or corpus completion.", + "HTML descriptions checked by exact parser and repeat renders, not browser screenshots. Post-commit docs-current is a separate publication gate.", + "CLI Total checks counts reported issues, not executed checks. This record exits 0 with no reported issues; 44 snippet-audit matches are textual matching, not proof of scientific support or independently verified provenance. SupportingReference coverage remains incomplete under #476; earlier counter interpretation is corrected by batch42." + ], + "snippet_counts_by_record": { + "kb/communities/GLBRC_Populus_Variovorax_SynCom28.yaml": { + "MATCH": 44, + "RENDERING": 0, + "ASSEMBLED": 0, + "WEAK": 0, + "MISMATCH": 0, + "NOCONTENT": 0 + } + }, + "unchanged_raw_blocks": 17, + "unchanged_record_files": 459, + "unchanged_cache_files": 920, + "network_delta": { + "existing_findings_preserved": 33, + "new_disconnected": 0, + "added_findings": {}, + "rationale": "All baseline warnings exactly preserved; no invented graph links to suppress warnings." + }, + "render_determinism": true, + "published_description_coverage": { + "pages": 456, + "nodes": 1454, + "arrows": 676 + }, + "participant_census": { + "measurements": { + "corrected_baseline": { + "community_level_only": 263, + "credited_solely_by_the_rule": 1222, + "mixed": 124, + "records": 460, + "taxa": 1494, + "with_community_level": 387 + }, + "corrected_current": { + "community_level_only": 262, + "credited_solely_by_the_rule": 1221, + "mixed": 125, + "records": 460, + "taxa": 1494, + "with_community_level": 387 + }, + "legacy_baseline": { + "community_level_only": 263, + "credited_solely_by_the_rule": 1219, + "mixed": 124, + "records": 460, + "taxa": 1494, + "with_community_level": 387 + }, + "legacy_current": { + "community_level_only": 262, + "credited_solely_by_the_rule": 1191, + "mixed": 125, + "records": 460, + "taxa": 1494, + "with_community_level": 387 + } + }, + "correction_issue": 1472, + "scientific_issue": 1471, + "interpretation": "Production auditor/ranker unchanged. Legacy survey falsely credits all 28 shared-genus members to CF313; corrected algorithm credits exactly CF313. Historical survey outputs are retained but withdrawn as exact strain-resolved counts. One new participant record, 189 to 190. Mixed-scope ceiling increases only 124 to 125; other bounds unchanged." + }, + "corpus": { + "scope": "Every YAML under kb/communities and data/isolates; filesystem discovery includes hidden/ignored files.", + "records": 460, + "nodes": 1468, + "edges": 684, + "records_without_nodes": 8, + "records_without_edges": 147, + "review_status_counts": { + "needs_research": 12, + "pending": 284, + "reviewed": 164 + }, + "structural_defects": [] + }, + "tested_file_sha256": { + "reports/causal_graph_review/decisions/20261006-variovorax-batch43.yaml": "8740238b2df4bbb42e8cdceb7e8ca47dd1734b96a96fc161b766f5ccb7973f41", + "tests/test_causal_review_batch43.py": "3444fc98c3cf63e9dcaf90de30f761252799087b74821b3ac155b995ec138afe", + "tests/test_participating_taxa.py": "c78bbb89bc2afc5c6a9e646bb9c5103e1cbb22d0f19b09f9fa7001e7ed2ba8a5", + "tests/test_community_level_connectivity_credit.py": "a9ba9fbacb9edaffbd1590ecc2f8fbc1b4ab36a3caf358f90c943c8a64fd76fd", + "kb/communities/GLBRC_Populus_Variovorax_SynCom28.yaml": "c251f6d716591cd391dbb09ad961f6ccb7b123988b9c677d925356b8463d2c28", + "reports/causal_graph_review/README.md": "494d79788f9b4c63def8d22ef421081ea2facff92a709d5ca577b4ede46958f3" + }, + "status": "verified_variovorax_graph_and_strain_aware_census", + "reference_validator_caveat": "CLI Total checks counts reported issues, not executed checks. This record exits 0 with no reported issues; 44 snippet-audit matches are textual matching, not proof of scientific support or independently verified provenance. SupportingReference coverage remains incomplete under #476; earlier counter interpretation is corrected by batch42.", + "pre_research_baseline": { + "base_commit": "22b5b12c2386a949d1ec4ddb1f79ee288085bd1c", + "base_tree": "71133d5dcc9a140865ceb58ccfe7b26125738c40", + "research_worktree": "/private/tmp/communitymech-causal-batch42", + "checks": [ + { + "name": "rank", + "command": [ + "just", + "rank-causal-graphs" + ], + "exit_code": 0, + "expected_exit_code": 0, + "log": "/private/tmp/communitymech-batch43/baseline-rank.log", + "sha256": "3aa8ec4e513af85ef029c7ae6c968753dbc633563d929f09484ad3b572006a55", + "output_tail": "nol_Anaerobic_Bioremediation_SynCom.yaml\tCommunityMech:000112\tTribromophenol Anaerobic Bioremediation SynCom\t3\t3\t0\t4\t3\t5\t\t0\t0\n444\t100.0\tkb/communities/Trichococcus_Syntrophomonas_Methanospirillum_Butyrate_Coculture.yaml\tCommunityMech:000188\tTrichococcus-Syntrophomonas-Methanospirillum Butyrate Coculture\t3\t3\t0\t3\t2\t6\t\t0\t0\n445\t100.0\tkb/communities/Trichoderma_Ecoli_Cellulosic_Isobutanol_Coculture.yaml\tCommunityMech:000205\tTrichoderma-E. coli Cellulosic Isobutanol Coculture\t2\t2\t0\t3\t2\t5\t\t0\t0\n446\t100.0\tkb/communities/Trichoderma_Lactate_Platform.yaml\tCommunityMech:000075\tTrichoderma Lactate Platform for SCFA Production\t3\t3\t0\t3\t2\t3\t\t0\t0\n447\t100.0\tkb/communities/Trichoderma_Streptomyces_Filamentous_Cellulose_Coculture.yaml\tCommunityMech:000270\tTrichoderma-Streptomyces Filamentous Cellulose Coculture\t2\t2\t0\t3\t2\t7\t\t0\t0\n448\t100.0\tkb/communities/Trichodesmium_Alteromonas_Marine_Consortium.yaml\tCommunityMech:000147\tTrichodesmium-Alteromonas Marine Consortium\t3\t3\t0\t3\t2\t5\t\t0\t0\n449\t100.0\tkb/communities/Tropidoatractus_Magnetotacticus_Tripartite_Syntrophy.yaml\tCommunityMech:000337\tTropidoatractus magnetotacticus Magnetotactic Ciliate Tripartite Syntrophy\t3\t3\t0\t4\t2\t9\t\t0\t0\n450\t100.0\tkb/communities/Urine_Nitrification_SynCom.yaml\tCommunityMech:000117\tUrine Nitrification Synthetic Microbial Community\t5\t5\t0\t3\t2\t5\t\t0\t0\n451\t100.0\tkb/communities/Variovorax_Cryptococcus_Vitamin_Mutualism_Microcosm.yaml\tCommunityMech:000213\tVariovorax-Cryptococcus Vitamin Cross-Feeding Microcosm\t2\t2\t0\t3\t2\t4\t\t0\t0\n452\t100.0\tkb/communities/Waste_Sludge_Electrofermentation_Biofilm_Suspension_Community.yaml\tCommunityMech:000328\tWaste-Sludge Electro-Fermentation Biofilm-Suspension Community\t5\t5\t0\t4\t2\t6\t\t0\t0\n453\t100.0\tkb/communities/Watermelon_Rhizosphere_Fusarium_SynCom8.yaml\tCommunityMech:000098\tWatermelon Rhizosphere Fusarium-Protective SynCom8\t2\t2\t0\t3\t2\t7\t\t0\t0\n454\t100.0\tkb/communities/Wetland_Oxygen_Sulfate_GHG_Microcosm_Community.yaml\tCommunityMech:000255\tWetland Oxygen-Sulfate Greenhouse Gas Microcosm Community\t3\t3\t0\t3\t2\t6\t\t0\t0\n455\t100.0\tkb/communities/Wheat_Straw_Biogas_Pretreatment_SynCom.yaml\tCommunityMech:000118\tWheat Straw Biogas Pretreatment SynCom\t4\t4\t0\t3\t2\t4\t\t0\t0\n456\t100.0\tkb/communities/Yarrowia_lipolytica_Division_of_Labor_Lipid_Consortium.yaml\tCommunityMech:000354\tYarrowia lipolytica Division-of-Labor Lipid Consortium\t2\t2\t0\t3\t2\t3\t\t0\t0\n457\t100.0\tkb/communities/Yogurt_TwoSpecies_Starter_Culture.yaml\tCommunityMech:000164\tYogurt Two-Species Starter Culture\t2\t2\t0\t4\t2\t9\t\t0\t0\n458\t100.0\tkb/communities/Zymomonas_Ecoli_Exometabolomics_Obligate_Mutualism.yaml\tCommunityMech:000210\tZymomonas-E. coli Exometabolomics-Designed Obligate Mutualism\t2\t2\t0\t3\t2\t6\t\t0\t0\n459\t100.0\tkb/communities/hCom2_Complex_Gut_Microbiome.yaml\tCommunityMech:000123\thCom2 Complex Gut Microbiome\t1\t1\t0\t3\t2\t3\t\t0\t0\n460\t100.0\tkb/communities/mCAFEs_Brachypodium_RCC.yaml\tCommunityMech:000078\tm-CAFEs Brachypodium Reduced Complexity Consortia\t10\t10\t0\t6\t2\t11\t\t0\t0\nPYTHONPATH=src uv run python scripts/rank_causal_graph_readiness.py \n" + }, + { + "name": "just-network", + "command": [ + "just", + "audit-network-json" + ], + "exit_code": 2, + "expected_exit_code": 2, + "log": "/private/tmp/communitymech-batch43/baseline-just-network.log", + "sha256": "8595db43420d3f0a01c57acd6ad733a531a72e962486d20b4e1c2840dda55bff", + "output_tail": "uv run communitymech audit-network --json\nerror: Failed to spawn: `communitymech`\n Caused by: No such file or directory (os error 2)\nerror: recipe `audit-network-json` failed on line 574 with exit code 2\n" + }, + { + "name": "network", + "command": [ + "/Users/marcin/.cache/uv/archive-v0/l58VlyFvdmnkl0CcAx5Gk/bin/python3", + "-m", + "communitymech.cli", + "audit-network", + "--json" + ], + "exit_code": 1, + "expected_exit_code": 1, + "log": "/private/tmp/communitymech-batch43/baseline-network.log", + "sha256": "c035fe6ed0bbf90371ab58d6557716c51eea79ac628e204173d70075f9efaa26", + "output_tail": " DSM number, genome accession and cultivation conditions.\"\n }\n ]\n },\n \"message\": \"Taxon 'Pseudomonas antarctica CMS 35T' has no interactions\"\n },\n {\n \"type\": \"DISCONNECTED\",\n \"taxon\": \"Staphylococcus capitis K1-2-2-23\",\n \"taxon_id\": \"NCBITaxon:29388\",\n \"taxon_data\": {\n \"taxon_term\": {\n \"preferred_term\": \"Staphylococcus capitis K1-2-2-23\",\n \"term\": {\n \"id\": \"NCBITaxon:29388\",\n \"label\": \"Staphylococcus capitis\"\n },\n \"gtdb_grounding_status\": \"UNRESOLVED\",\n \"notes\": \"The isolate was recovered from ISS V2A steel; ontology grounding is at species level.\"\n },\n \"strain_designation\": {\n \"strain_name\": \"K1-2-2-23\",\n \"genome_accession\": \"GCA_025272695\",\n \"culture_collections\": [\n {\n \"collection\": \"DSM\",\n \"accession\": \"111179\"\n }\n ]\n },\n \"evidence\": [\n {\n \"reference\": \"PMID:42577390\",\n \"supports\": \"SUPPORT\",\n \"evidence_source\": \"IN_VITRO\",\n \"snippet\": \"Staphylococcus capitis | K1-2-2-23 | ISS, V2A Steel | DSM 111179 | Sobisch et al., 2019 | GCA_025272695 | TSYB/TSYA | 37 \\u00b0C | 16\\u201324 h\",\n \"explanation\": \"Identifies S. capitis K1-2-2-23 as a consortium member and gives its source, DSM number, genome accession and cultivation conditions.\"\n }\n ]\n },\n \"message\": \"Taxon 'Staphylococcus capitis K1-2-2-23' has no interactions\"\n },\n {\n \"type\": \"DISCONNECTED\",\n \"taxon\": \"Streptococcus halotolerans HTS9T\",\n \"taxon_id\": \"NCBITaxon:1814128\",\n \"taxon_data\": {\n \"taxon_term\": {\n \"preferred_term\": \"Streptococcus halotolerans HTS9T\",\n \"term\": {\n \"id\": \"NCBITaxon:1814128\",\n \"label\": \"Streptococcus halotolerans\"\n },\n \"gtdb_grounding_status\": \"UNRESOLVED\",\n \"notes\": \"The source used the S. halotolerans type strain as a biosafety-level-1 representative.\"\n },\n \"strain_designation\": {\n \"strain_name\": \"HTS9T\",\n \"genome_accession\": \"GCA_001598035\",\n \"culture_collections\": [\n {\n \"collection\": \"DSM\",\n \"accession\": \"101996\"\n }\n ]\n },\n \"evidence\": [\n {\n \"reference\": \"PMID:42577390\",\n \"supports\": \"SUPPORT\",\n \"evidence_source\": \"IN_VITRO\",\n \"snippet\": \"Streptococcus halotolerans | HTS9 T | Respiratory Tract of Marmota himalayana | DSM 101996 T | Niu et al., 2016 | GCA_001598035 | 2xLB, TSYB/TSYA | 37 \\u00b0C | 24 h\",\n \"explanation\": \"Identifies S. halotolerans HTS9T as a consortium member and gives its source, DSM number, genome accession and cultivation conditions.\"\n }\n ]\n },\n \"message\": \"Taxon 'Streptococcus halotolerans HTS9T' has no interactions\"\n }\n ]\n}\n" + }, + { + "name": "downstream", + "command": [ + "rg", + "--no-ignore", + "--hidden", + "-n", + "downstream:", + "kb/communities", + "data/isolates", + "--glob", + "*.yaml" + ], + "exit_code": 0, + "expected_exit_code": 0, + "log": "/private/tmp/communitymech-batch43/baseline-downstream.log", + "sha256": "0c6142862a8273f008db0f16152a7e878b98661360eeb74d5ddf504a87f2ad4f", + "output_tail": ".yaml:339: downstream:\nkb/communities/Cable_Bacteria_Photosynthetic_Biofilm_Sediment.yaml:80: downstream:\nkb/communities/Cable_Bacteria_Photosynthetic_Biofilm_Sediment.yaml:117: downstream:\nkb/communities/Chromium_Sulfur_Reduction_Enrichment.yaml:159: downstream:\nkb/communities/Chromium_Sulfur_Reduction_Enrichment.yaml:200: downstream:\nkb/communities/Yarrowia_lipolytica_Division_of_Labor_Lipid_Consortium.yaml:223: downstream:\nkb/communities/Dangl_SynComm_35.yaml:244: downstream:\nkb/communities/Dangl_SynComm_35.yaml:322: downstream:\nkb/communities/SO3_BS3_Lithium_Battery_Bioleaching_Consortium.yaml:141: downstream:\nkb/communities/Methylacidiphilum_Galdieria_Thermoacidophilic_Coculture.yaml:268: downstream:\nkb/communities/Methylacidiphilum_Galdieria_Thermoacidophilic_Coculture.yaml:315: downstream:\nkb/communities/Shewanella_Streptococcus_Starch_Microbial_Fuel_Cell.yaml:140: downstream:\nkb/communities/Shewanella_Streptococcus_Starch_Microbial_Fuel_Cell.yaml:221: downstream:\nkb/communities/Yogurt_TwoSpecies_Starter_Culture.yaml:199: downstream:\nkb/communities/Yogurt_TwoSpecies_Starter_Culture.yaml:267: downstream:\nkb/communities/Rumen_Substrate_Adapted_Lignocellulose_Enrichment_Consortia.yaml:328: downstream:\nkb/communities/Desulfovibrio_Methanococcus_Syntrophy.yaml:138: downstream:\nkb/communities/Desulfovibrio_Methanococcus_Syntrophy.yaml:182: downstream:\nkb/communities/Desulfovibrio_Methanococcus_Syntrophy.yaml:232: downstream:\nkb/communities/SynCom_Sesame_Flavor_Baijiu_Fuqu_13Genus.yaml:342: downstream:\nkb/communities/SynCom_Sesame_Flavor_Baijiu_Fuqu_13Genus.yaml:381: downstream:\nkb/communities/Pepper_Phytophthora_SynCom5.yaml:123: downstream:\nkb/communities/Pepper_Phytophthora_SynCom5.yaml:146: downstream:\nkb/communities/GOM_Oil_Degrading_Consortium.yaml:119: downstream:\nkb/communities/GOM_Oil_Degrading_Consortium.yaml:160: downstream:\nkb/communities/Methylotuvimicrobium_Synechococcus_Gas_Feedstock_Coculture.yaml:157: downstream:\nkb/communities/Methylotuvimicrobium_Synechococcus_Gas_Feedstock_Coculture.yaml:203: downstream:\nkb/communities/Lunar_Simulant_Phosphate_Solubilizing_Bacteria_Nicotiana.yaml:285: downstream:\nkb/communities/Lunar_Simulant_Phosphate_Solubilizing_Bacteria_Nicotiana.yaml:324: downstream:\nkb/communities/Chlamydomonas_Bacterial_H2_Consortium.yaml:311: downstream:\nkb/communities/Chlamydomonas_Bacterial_H2_Consortium.yaml:365: downstream:\nkb/communities/Ferroplasma_Leptospirillum_Syntrophy.yaml:125: downstream:\nkb/communities/Clostridium_Carboxidivorans_Kluyveri_CO_Chain_Elongation_Coculture.yaml:247: downstream:\nkb/communities/Clostridium_Carboxidivorans_Kluyveri_CO_Chain_Elongation_Coculture.yaml:344: downstream:\nkb/communities/Avena_Rhizosphere_Detritusphere_Niche_Succession.yaml:104: downstream:\nkb/communities/Avena_Rhizosphere_Detritusphere_Niche_Succession.yaml:127: downstream:\nkb/communities/At_RSPHERE_SynCom.yaml:207: downstream:\nkb/communities/At_RSPHERE_SynCom.yaml:249: downstream:\n" + } + ] + }, + "prepublication_correction": { + "reason": "Initial run passed 445 regressions but failed Ruff on test import ordering and a dict-constructor style rule. Self-review also corrected absolute read abundance to normalized read abundance before publication. The initial run does not certify revised bytes; all gates are rerun.", + "initial_report_sha256": "528c6f158a9fdb0579c0a2d681fb5e42e7104c65b9057edf6053d3608c857638", + "initial_record_sha256": "e784f3ce71482d8b94ebe02bfba27e4bd8be01b6e4935a85e71eeab12911b164", + "initial_regressions": "........................................................................ [ 16%]\n........................................................................ [ 32%]\n........................................................................ [ 48%]\n........................................................................ [ 64%]\n........................................................................ [ 80%]\n........................................................................ [ 97%]\n............. [100%]\n445 passed in 195.25s (0:03:15)\n", + "initial_lint_output": "I001 [*] Import block is un-sorted or un-formatted\n --> tests/test_causal_review_batch43.py:3:1\n |\n 1 | \"\"\"Pin strain-specific perturbations, community observations and exact census credit.\"\"\"\n 2 |\n 3 | / import copy\n 4 | | import hashlib\n 5 | | from pathlib import Path\n 6 | | import runpy\n 7 | |\n 8 | | import yaml\n | |___________^\n 9 |\n10 | ROOT = Path(__file__).resolve().parents[1]\n |\nhelp: Organize imports\n |\n4 | import hashlib\n5 + import runpy\n6 | from pathlib import Path\n - import runpy\n7 |\n |\n\nC408 Unnecessary `dict()` call (rewrite as a literal)\n --> tests/test_causal_review_batch43.py:97:22\n |\n 95 | )\n 96 | result = survey()\n 97 | assert result == dict(\n | ______________________^\n 98 | | records=1,\n 99 | | with_community_level=1,\n100 | | mixed=1,\n101 | | community_level_only=0,\n102 | | taxa=28,\n103 | | credited_solely_by_the_rule=27,\n104 | | )\n | |_____^\n105 | ranker = module[\"ranker\"]\n106 | intrinsic = copy.deepcopy(doc[\"ecological_interactions\"][2])\n |\nhelp: Rewrite as a literal\n\nFound 2 errors.\n[*] 1 fixable with the `--fix` option (1 hidden fix can be enabled with the `--unsafe-fixes` option).\n", + "archived_logs": [ + { + "path": "/private/tmp/communitymech-batch43/initial-verification/GLBRC_Populus_Variovorax_SynCom28-schema.log", + "sha256": "de6087f4be8c0adc015333597cd864406ad889bbde42d9ee20db0df5932bb2de" + }, + { + "path": "/private/tmp/communitymech-batch43/initial-verification/GLBRC_Populus_Variovorax_SynCom28-strict.log", + "sha256": "d4bbe884ac3a8b52310f0e032ec70967566613f0870f0c5d71c7f4d62e85c9d2" + }, + { + "path": "/private/tmp/communitymech-batch43/initial-verification/GLBRC_Populus_Variovorax_SynCom28-terms.log", + "sha256": "23acda1c1d3194d12bc947d897d07de83f4a076a9d93c135148885108530e018" + }, + { + "path": "/private/tmp/communitymech-batch43/initial-verification/GLBRC_Populus_Variovorax_SynCom28-references.log", + "sha256": "9b9bc64e7d4a682aba4ee1def2aae9900a955ea7515022e89aa2e9d7cd5ad5d5" + }, + { + "path": "/private/tmp/communitymech-batch43/initial-verification/GLBRC_Populus_Variovorax_SynCom28-snippets.log", + "sha256": "c6bc6a54b979d09bb0c31977695a565dba4334c09c7caa8f10a2864f127691d3" + }, + { + "path": "/private/tmp/communitymech-batch43/initial-verification/GLBRC_Populus_Variovorax_SynCom28-rank.log", + "sha256": "5574335a3d03e20129e51ce9615df922388047e6480bfbc50a4eeb12e180373b" + }, + { + "path": "/private/tmp/communitymech-batch43/initial-verification/GLBRC_Populus_Variovorax_SynCom28-history-0.log", + "sha256": "de6087f4be8c0adc015333597cd864406ad889bbde42d9ee20db0df5932bb2de" + }, + { + "path": "/private/tmp/communitymech-batch43/initial-verification/inventory.log", + "sha256": "6bbe49f2af7a7269afd17182c1e6fa08216b33eef72b58c499ada37fbbd06307" + }, + { + "path": "/private/tmp/communitymech-batch43/initial-verification/network.log", + "sha256": "c035fe6ed0bbf90371ab58d6557716c51eea79ac628e204173d70075f9efaa26" + }, + { + "path": "/private/tmp/communitymech-batch43/initial-verification/rank-all.log", + "sha256": "f51dc0f3fede01bf4f29e4135bc257d24cc411e00a2dcea0aebd8ea8c5fa7912" + }, + { + "path": "/private/tmp/communitymech-batch43/initial-verification/render.log", + "sha256": "a76b3b8c9ff3188b02a4a278f206e83233e76be612a241f8f7ba32cfcfdfbeee" + }, + { + "path": "/private/tmp/communitymech-batch43/initial-verification/render-repeat.log", + "sha256": "a76b3b8c9ff3188b02a4a278f206e83233e76be612a241f8f7ba32cfcfdfbeee" + }, + { + "path": "/private/tmp/communitymech-batch43/initial-verification/connectivity-survey.log", + "sha256": "73d45880c6bb0a0d8b2396144a5b9114bb7db6184ba994ba59f0bf84a8626a8a" + }, + { + "path": "/private/tmp/communitymech-batch43/initial-verification/regressions.log", + "sha256": "a53713377e38e9bfa0422cbf51ead4c8694dabab463604159fffdfd220918ffe" + }, + { + "path": "/private/tmp/communitymech-batch43/initial-verification/black.log", + "sha256": "45a468fa6205768496f23f1716ebb7575e9b723449d2099b88bf2afef60b721f" + }, + { + "path": "/private/tmp/communitymech-batch43/initial-verification/ruff.log", + "sha256": "3b95c5f2607f2eecc6c59a53398bbaf8cc76a8a6803e0563062b88ac2f3a3c5f" + } + ], + "corrected_record_sha256": "c251f6d716591cd391dbb09ad961f6ccb7b123988b9c677d925356b8463d2c28" + }, + "issue_deduplication_retry": "Initial local scan exited 2 because data/history does not exist. No absence claim was made. Corrected scan includes actual history/, reports/, research/, tests/, scripts/ and .github/, including ignored and hidden files. All-state 788 issue bodies retained from the successful remote request; it was not repeated." +} diff --git a/tests/test_causal_review_batch43.py b/tests/test_causal_review_batch43.py new file mode 100644 index 000000000..c006895e9 --- /dev/null +++ b/tests/test_causal_review_batch43.py @@ -0,0 +1,110 @@ +"""Pin strain-specific perturbations, community observations and exact census credit.""" + +import copy +import hashlib +import runpy +from pathlib import Path + +import yaml + +ROOT = Path(__file__).resolve().parents[1] +LEDGER = ROOT / "reports/causal_graph_review/decisions/20261006-variovorax-batch43.yaml" + + +def record(): + ledger = yaml.safe_load(LEDGER.read_text()) + (row,) = ledger["records"] + return ledger, row, yaml.safe_load((ROOT / row["path"]).read_text()) + + +def test_compartment_dna_enrichment_is_not_absolute_colonization_or_competition(): + _, _, doc = record() + enrichment, competition, _ = doc["ecological_interactions"] + assert "relative DNA compartment association" in enrichment["description"] + assert "normalized read abundance" in enrichment["description"] + assert "absolute read abundance" not in enrichment["description"] + assert "not absolute colonization efficiency" in enrichment["description"] + assert "putative species" in enrichment["description"] + assert competition["description"].startswith("HYPOTHESIZED:") + assert "not directly measured depletion" in competition["description"] + assert all(e["supports"] == "PARTIAL" for e in competition["evidence"]) + for node in [enrichment, competition]: + assert len(node["participating_taxa"]) == 28 + assert len({p["preferred_term"] for p in node["participating_taxa"]}) == 28 + assert len({p["term"]["id"] for p in node["participating_taxa"]}) == 1 + + +def test_fucose_mutant_result_is_canonical_cf313_only(): + _, _, doc = record() + node = doc["ecological_interactions"][2] + assert node["scope"] == "PAIRWISE" + canonical = doc["taxonomy"][8]["taxon_term"] + assert node["source_taxon"] == { + "preferred_term": canonical["preferred_term"], + "term": canonical["term"], + } + assert canonical["preferred_term"] == "Variovorax sp. CF313" + assert "target_taxon" not in node and "participating_taxa" not in node + for boundary in [ + "PMI12_01353", + "P=0.0022", + "not facilitation of other strains", + "Gene presence alone is not sufficient", + "host fucose was not quantified", + "full-panel mutant replacement are not established", + ]: + assert boundary in node["description"] + assert node["metabolites"][0]["term"] == doc["related_ingredients"][0]["chebi_term"] + assert [e["evidence_source"] for e in node["evidence"]] == ["IN_VITRO", "IN_VIVO", "IN_VITRO"] + + +def test_all_original_nodes_and_arrows_have_decisions_without_new_structure(): + ledger, row, doc = record() + assert row["status"] == "reviewed" and ledger["independent_approval"] is False + assert len(row["node_decisions"]) == len(row["renamed_nodes"]) == 3 + assert len(row["removed_edge_decisions"]) == len(row["edges_before"]) == 2 + assert row["edges_after"] == row["retained_edge_decisions"] == [] + for node in doc["ecological_interactions"]: + assert not any( + k in node for k in ["downstream", "interaction_type", "biological_processes"] + ) + assert doc["discussions"][-1]["status"] == "OPEN" + assert "no figure images" in doc["discussions"][-1]["rationale"] + + +def test_hashes_history_and_source_limitations_are_retained(): + ledger, row, doc = record() + assert hashlib.sha256((ROOT / row["path"]).read_bytes()).hexdigest() == row["record_sha256"] + assert len(row["history_files"]) == 1 and (ROOT / row["history_files"][0]).is_file() + assert doc["curation_history"][-1]["llm_assisted"] is True + assert ledger["issue_deduplication"]["ignored_hidden_local_search"] is True + assert ledger["base_commit"] == ledger["baseline_commit"] + for path, digest in ledger["reference_cache_original_hashes"].items(): + assert hashlib.sha256((ROOT / path).read_bytes()).hexdigest() == digest + source = row["source_review"]["PMID:41543249"] + assert "stale abstract_only" in source["scope"] + assert "no figure images" in source["scope"] + + +def test_survey_uses_exact_names_not_the_shared_genus_id(monkeypatch): + _, _, doc = record() + module = runpy.run_path(str(ROOT / "tests/test_community_level_connectivity_credit.py")) + survey = module["_survey"] + monkeypatch.setitem( + survey.__globals__, + "record_files", + lambda: [ROOT / "kb/communities/GLBRC_Populus_Variovorax_SynCom28.yaml"], + ) + result = survey() + assert result == { + "records": 1, + "with_community_level": 1, + "mixed": 1, + "community_level_only": 0, + "taxa": 28, + "credited_solely_by_the_rule": 27, + } + ranker = module["ranker"] + intrinsic = copy.deepcopy(doc["ecological_interactions"][2]) + intrinsic["source_taxon"] = {"term": {"id": "NCBITaxon:34072"}} + assert ranker._connected_taxa([intrinsic], doc["taxonomy"]) == set() diff --git a/tests/test_community_level_connectivity_credit.py b/tests/test_community_level_connectivity_credit.py index efb34ae56..ea3e57cd4 100644 --- a/tests/test_community_level_connectivity_credit.py +++ b/tests/test_community_level_connectivity_credit.py @@ -25,6 +25,7 @@ from __future__ import annotations +import importlib.util import pathlib import pytest @@ -33,6 +34,11 @@ from communitymech.paths import record_files REPO = pathlib.Path(__file__).parent.parent +spec = importlib.util.spec_from_file_location( + "rank_causal_graph_readiness", REPO / "scripts/rank_causal_graph_readiness.py" +) +ranker = importlib.util.module_from_spec(spec) +spec.loader.exec_module(ranker) # Both record roots, not kb/communities alone. `data/isolates` holds the same # root class -- 4 records with 66 snippets, 3 ecological_interactions and 3 @@ -40,18 +46,6 @@ COMMUNITIES = REPO / "kb/communities" -def _names(block: dict) -> set[str]: - """Every string a pairwise edge could use to name this member.""" - found = set() - if block.get("preferred_term"): - found.add(block["preferred_term"]) - term = block.get("term") or {} - for key in ("label", "id"): - if term.get(key): - found.add(term[key]) - return found - - def _survey() -> dict[str, int]: records = with_cl = mixed = cl_only = 0 taxa = solely = 0 @@ -70,19 +64,21 @@ def _survey() -> dict[str, int]: else: cl_only += 1 - members = [(t or {}).get("taxon_term") or {} for t in (document.get("taxonomy") or [])] - pairwise: set[str] = set() - for interaction in interactions: - if interaction.get("scope") == "COMMUNITY_LEVEL": - continue - for role in ("source_taxon", "target_taxon"): - node = interaction.get(role) - if isinstance(node, dict): - pairwise |= _names(node) - elif isinstance(node, str): - pairwise.add(node) + taxonomy = document.get("taxonomy") or [] + members = [(t or {}).get("taxon_term") or {} for t in taxonomy] + pairwise = ranker._connected_taxa( + [i for i in interactions if i.get("scope") != "COMMUNITY_LEVEL"], taxonomy + ) taxa += len(members) - solely += sum(1 for m in members if not (_names(m) & pairwise)) + solely += sum( + ( + m.get("preferred_term") + or (m.get("term") or {}).get("label") + or (m.get("term") or {}).get("id") + ) + not in pairwise + for m in members + ) return { "records": records, "with_community_level": with_cl, @@ -114,11 +110,12 @@ def test_the_mixed_records_are_where_the_coarseness_bites(survey): #1344 adds two source-backed mixed-scope records (120 -> 122). #1360 adds Copper and Coscinodiscus intrinsic-source corrections (122 -> 124). + #1471 restricts the existing Variovorax fucose result to CF313 (124 -> 125). #312 measured 46. In the community-level-only records the credit is not coarse — there is no pairwise edge it could be masking. """ - assert 35 <= survey["mixed"] <= 124, survey + assert 35 <= survey["mixed"] <= 125, survey assert survey["mixed"] + survey["community_level_only"] == survey["with_community_level"] @@ -141,9 +138,9 @@ def test_the_share_credited_solely_by_the_rule_has_not_stepped_up(survey): def test_the_worked_example_still_shows_the_limit(): """`GLBRC_Populus_Variovorax_SynCom28` is #312's illustration. - 28 taxa, and one community-level interaction makes DISCONNECTED unreachable - for every one. If this record ever gains pairwise edges the example should - move rather than be quietly dropped. + The original graph is now a synthetic fixture in test_participating_taxa. + The live record names all 28 participants for community observations and + only CF313 for its separate mutant assay (#1471). """ path = COMMUNITIES / "GLBRC_Populus_Variovorax_SynCom28.yaml" assert path.exists(), "the worked example record is gone; pick another and update #312" @@ -153,7 +150,12 @@ def test_the_worked_example_still_shows_the_limit(): i for i in (document.get("ecological_interactions") or []) if isinstance(i, dict) ] assert len(members) >= 20 - assert any(i.get("scope") == "COMMUNITY_LEVEL" for i in interactions) + community = [i for i in interactions if i.get("scope") == "COMMUNITY_LEVEL"] + assert len(community) == 2 + assert all(len(i["participating_taxa"]) == 28 for i in community) + intrinsic = [i for i in interactions if i.get("scope") != "COMMUNITY_LEVEL"] + assert len(intrinsic) == 1 + assert ranker._connected_taxa(intrinsic, document["taxonomy"]) == {"Variovorax sp. CF313"} def test_the_schema_can_now_name_participants(): diff --git a/tests/test_participating_taxa.py b/tests/test_participating_taxa.py index d955977f4..4d50043dd 100644 --- a/tests/test_participating_taxa.py +++ b/tests/test_participating_taxa.py @@ -41,7 +41,7 @@ # root class -- 4 records with 66 snippets, 3 ecological_interactions and 3 # gtdb_classification blocks -- and this module could not see any of it (#689). COMMUNITIES = REPO / "kb/communities" -# #312's illustration: 28 taxa, every interaction COMMUNITY_LEVEL. +# #312's original illustration supplies 28 shared-CURIE taxa for a synthetic fixture. EXAMPLE = COMMUNITIES / "GLBRC_Populus_Variovorax_SynCom28.yaml" @@ -59,7 +59,14 @@ def _disconnected(document: dict) -> int: @pytest.fixture def example() -> dict: - return yaml.safe_load(EXAMPLE.read_text(encoding="utf-8")) + document = yaml.safe_load(EXAMPLE.read_text(encoding="utf-8")) + # Keep auditor behavior probes independent of source-backed graph curation. + document["ecological_interactions"] = [ + {"name": f"Synthetic community observation {i}", "scope": "COMMUNITY_LEVEL"} + for i in range(3) + ] + document.pop("discussions", None) + return document def _members(document: dict) -> list[dict]: @@ -265,6 +272,7 @@ def test_a_curie_is_ambiguous_where_members_share_an_id(example): "Ferroplasma_Leptospirillum_Syntrophy.yaml", "Fucoidan_Seven_Degrader_Combinatorial_SynCom.yaml", "GENIA_NineMember_MultiPollutant_Bioremediation_SynCom.yaml", + "GLBRC_Populus_Variovorax_SynCom28.yaml", "Geobacter_Methanosarcina_DIET.yaml", "Ginseng_CL95_Rusty_Root_Rot_Biocontrol_SynCom.yaml", "Glutamicibacter_S11_Aquaculture_Nitrogen_Removal_SynCom.yaml",