diff --git a/docs/communities/Copper_Biomining_Heap_Leach.html b/docs/communities/Copper_Biomining_Heap_Leach.html
index d9b6f18b7..28f2aaf2b 100644
--- a/docs/communities/Copper_Biomining_Heap_Leach.html
+++ b/docs/communities/Copper_Biomining_Heap_Leach.html
@@ -735,7 +735,7 @@
"Acidithiobacillus thiooxidans kept constant throughout the leaching cycle, and Firmicutes group showed a low and a patchy distribution in the heap"
@@ -1025,7 +989,7 @@ "Bioleaching, the microbial dissolution of metal sulfides, is caused by Fe3+ ions as the crucial oxidizing reagent"
@@ -1136,7 +1098,7 @@ "Then iron-oxidizing microorganisms re-oxidize Fe2+ to Fe3+, and sulfur-oxidizing microorganisms oxidize RISCs to sulfuric acid"
@@ -1149,20 +1111,14 @@ "the prokaryotic acidophile microarray (PAM) analysis showed active members of Alphaproteobacteria in all samples and of Sulfobacillus genus in older ones"
@@ -1236,6 +1192,25 @@ "No synergistic effects between bacteria in the presence of the diatom was observed"
+ "We further established a synthetic phytoplankton/bacteria community with the centric diatom, Coscinodiscus radiatus, and 4 phylogenetically distinctive bacterial isolates, Mameliella sp., Roseovarius sp., Croceibacter sp., and Marinobacter sp. Supported by a Lotka-Volterra model, we show that interactions within the consortium are specific and that the sum of the pairwise interactions can explain algal and bacterial growth in the community"
+ "Bacteria utilize substrates produced by the phototrophic algae, while algal growth can be supported by bacterial exudates"
+ "The activity of bacteria can even change during the aging of an algal culture from inhibitory to stimulatory or vice versa"
@@ -956,11 +936,9 @@ "We further established a synthetic phytoplankton/bacteria community with the centric diatom, Coscinodiscus radiatus, and 4 phylogenetically distinctive bacterial isolates, Mameliella sp., Roseovarius sp., Croceibacter sp., and Marinobacter sp. Supported by a Lotka-Volterra model, we show that interactions within the consortium are specific and that the sum of the pairwise interactions can explain algal and bacterial growth in the community"
+
-
When all four bacteria were combined with the diatom, an overall inhibitory effect on algal growth emerged throughout all growth phases. The growth-promoting effects of CS4 and Rose1 observed in pairwise cultures did not prevail in the four-member community, demonstrating emergent community-level properties. A Lotka-Volterra model successfully predicted community composition using only pairwise interaction parameters, indicating that higher-order bacterial-bacterial interactions were negligible and that the community dynamics arose primarily from pairwise diatom-bacteria interactions.
-
+
The all-member culture generally had lower algal cell counts than the axenic control, especially before day 17; the paper also describes a very-late survival benefit. Bacteria performed similarly or slightly better than in mono/pairwise cultures, so this is not reciprocal competitive harm. A generalized Lotka-Volterra model fitted to mono/pairwise data with distinct days 1-17 and 17-41 parameter sets predicted the algal community trajectory; a neutral model failed. Bacterial-bacterial terms were unnecessary for this tested fit, not proven universally absent, and chemical cross-feeding was not thereby established.
-
Source Taxon: Coscinodiscus radiatus
-
Participating Taxa:
@@ -1113,6 +1083,25 @@
Evidence
+
+ Knowledge gaps & discussions (1)
+
+
+
+ KNOWLEDGE_GAP
+ OPEN
+ Which exchanged compounds mediate the partner- and phase-specific growth responses?
+
+
Complete primary main text, tables and captions support pairwise growth, pooled nutrient supplementation and a phase-specific community model. Direct DMSP release/consumption flux, individual nutrient rescue and mediator-specific perturbations remain unresolved; carbon-only supplementation was negative. CS4 is a nonresponding supplementation control despite predicted deficits. Prior rich-medium stores may buffer responses. The model fit does not rule out interactions under other nutrient conditions. The publisher-provided preview was read without copying its copyrighted body; three brief Results excerpts remain a documented abstract-cache retrieval gap under #596. No figure images or supplementary files were inspected. Non-graph roles, cultivation parameters and source discrepancies remain in #1359.
+
+
Attaches to: ecological_interactions#Candidate Diatom Resource Provision, ecological_interactions#Bacterial DMSP Catabolic Potential, ecological_interactions#Growth Phase-Dependent Bacterial Effects, ecological_interactions#Bacterial Nutrient Supplement Responses, ecological_interactions#Community Growth and Pairwise Model
+
+
+
+
+
+
+
@@ -1638,7 +1627,7 @@
Evidence
(function() {
var intId = "interaction:0";
- var intType = "MUTUALISM";
+ var intType = "UNKNOWN";
var metabolites = [];
@@ -1661,7 +1650,7 @@
Evidence
nodes.push({
id: intId,
- label: "Diatom Primary Production and Carbon Release",
+ label: "Candidate Diatom Resource Provision",
type: "interaction",
interactionType: intType,
metabolites: metabolites,
@@ -1681,7 +1670,7 @@
Evidence
(function() {
var intId = "interaction:1";
- var intType = "MUTUALISM";
+ var intType = "UNKNOWN";
var metabolites = [];
@@ -1702,7 +1691,7 @@
Evidence
nodes.push({
id: intId,
- label: "Bacterial DMSP Metabolism",
+ label: "Bacterial DMSP Catabolic Potential",
type: "interaction",
interactionType: intType,
metabolites: metabolites,
@@ -1711,18 +1700,26 @@
Evidence
});
- var srcKey = "Mameliella CS4";
- if (taxonNodeIds[srcKey]) {
- links.push({ source: taxonNodeIds[srcKey], target: intId });
- }
+ var participantKeys = [
+
+ "Mameliella CS4",
+
+ "Roseovarius Rose1"
+
+ ];
+ participantKeys.forEach(function(key) {
+ if (taxonNodeIds[key]) {
+ links.push({ source: taxonNodeIds[key], target: intId });
+ }
+ });
})();
(function() {
var intId = "interaction:2";
- var intType = "MUTUALISM";
+ var intType = "UNKNOWN";
var metabolites = [];
var processes = [];
@@ -1746,26 +1743,38 @@
Evidence
});
- var srcKey = "Mameliella CS4";
- if (taxonNodeIds[srcKey]) {
- links.push({ source: taxonNodeIds[srcKey], target: intId });
- }
+ var participantKeys = [
+
+ "Coscinodiscus radiatus",
+
+ "Mameliella CS4",
+
+ "Roseovarius Rose1",
+
+ "Croceibacter Crocei1",
+
+ "Marinobacter CS1"
+
+ ];
+ participantKeys.forEach(function(key) {
+ if (taxonNodeIds[key]) {
+ links.push({ source: taxonNodeIds[key], target: intId });
+ }
+ });
})();
(function() {
var intId = "interaction:3";
- var intType = "COMMENSALISM";
+ var intType = "UNKNOWN";
var metabolites = [];
metabolites.push("amino acids");
- metabolites.push("cobalamin");
-
- metabolites.push("niacin");
+ metabolites.push("vitamins");
var processes = [];
@@ -1780,7 +1789,7 @@
Evidence
nodes.push({
id: intId,
- label: "Bacterial Auxotrophy and Nutrient Dependence",
+ label: "Bacterial Nutrient Supplement Responses",
type: "interaction",
interactionType: intType,
metabolites: metabolites,
@@ -1810,7 +1819,7 @@
Evidence
(function() {
var intId = "interaction:4";
- var intType = "COMPETITION";
+ var intType = "UNKNOWN";
var metabolites = [];
var processes = [];
@@ -1825,7 +1834,7 @@
Evidence
nodes.push({
id: intId,
- label: "Community-Level Emergent Effects",
+ label: "Community Growth and Pairwise Model",
type: "interaction",
interactionType: intType,
metabolites: metabolites,
@@ -1834,12 +1843,26 @@
Evidence
});
- var srcKey = "Coscinodiscus radiatus";
- if (taxonNodeIds[srcKey]) {
- links.push({ source: taxonNodeIds[srcKey], target: intId });
- }
+ var participantKeys = [
+
+ "Coscinodiscus radiatus",
+
+ "Mameliella CS4",
+
+ "Roseovarius Rose1",
+
+ "Croceibacter Crocei1",
+
+ "Marinobacter CS1"
+
+ ];
+ participantKeys.forEach(function(key) {
+ if (taxonNodeIds[key]) {
+ links.push({ source: taxonNodeIds[key], target: intId });
+ }
+ });
})();
diff --git a/history/records/Copper_Biomining_Heap_Leach/2026-10-06T025228Z-codex-9c8b7f.yaml b/history/records/Copper_Biomining_Heap_Leach/2026-10-06T025228Z-codex-9c8b7f.yaml
new file mode 100644
index 000000000..62cee0916
--- /dev/null
+++ b/history/records/Copper_Biomining_Heap_Leach/2026-10-06T025228Z-codex-9c8b7f.yaml
@@ -0,0 +1,30 @@
+history_version: 1
+target:
+ kind: record
+ path: kb/communities/Copper_Biomining_Heap_Leach.yaml
+ slug: Copper_Biomining_Heap_Leach
+session:
+ id: 2026-10-06T025228Z-codex-9c8b7f
+ timestamp: '2026-10-06T02:52:28Z'
+ actors:
+ - type: ai_agent
+ name: codex
+ model: unspecified
+ agent_tool: codex
+links:
+ issues:
+ - https://github.com/CultureBotAI/CommunityMech/issues/1356
+events:
+- type: EDIT
+ outcome: changed
+ sections:
+ - interactions
+ - discussions
+ summary: Separate measured intrinsic iron oxidation from early-heap association and failed
+ recovery under SX reagent.; Retain observed succession with correct abundance scale and
+ species boundaries, without competition or resolved field flux.; Distinguish sulfur-oxidation
+ capacity and RNA activity from stable DNA counts, constant acid flux and selective passivation
+ removal.; Retain conditional mineral/redox feedback and direct laboratory outcomes without
+ a closed five-member consortium claim.; Preserve laboratory Sulfobacillus oxidation/leaching
+ and low-ORP advantage; bound field genus-to-species and thermal inference.
+ details: Source-based self-adversarial review; no new nodes/arrows. reports/causal_graph_review/decisions/20261005-two-records-batch25.yaml
diff --git a/history/records/Coscinodiscus_Synthetic_Community/2026-10-06T025228Z-codex-c5e0cf.yaml b/history/records/Coscinodiscus_Synthetic_Community/2026-10-06T025228Z-codex-c5e0cf.yaml
new file mode 100644
index 000000000..2f7696c43
--- /dev/null
+++ b/history/records/Coscinodiscus_Synthetic_Community/2026-10-06T025228Z-codex-c5e0cf.yaml
@@ -0,0 +1,31 @@
+history_version: 1
+target:
+ kind: record
+ path: kb/communities/Coscinodiscus_Synthetic_Community.yaml
+ slug: Coscinodiscus_Synthetic_Community
+session:
+ id: 2026-10-06T025228Z-codex-c5e0cf
+ timestamp: '2026-10-06T02:52:28Z'
+ actors:
+ - type: ai_agent
+ name: codex
+ model: unspecified
+ agent_tool: codex
+links:
+ issues:
+ - https://github.com/CultureBotAI/CommunityMech/issues/1357
+events:
+- type: EDIT
+ outcome: changed
+ sections:
+ - interactions
+ - discussions
+ summary: Retain candidate diatom resource provision and actual Crocei1 promotion without
+ universal dependence or measured metabolite donation.; Keep DMSP homology potential computational,
+ distinct from consumption, product flux and a negative carbon-only growth assay.; Preserve
+ distinct reciprocal growth signs and control-relative algal recovery rather than global
+ mutualism.; Preserve real pooled nutrient responses and the CS4 negative control without
+ individual-vitamin rescue or exact B12-form claims.; Retain empirical community inhibition
+ and phase-specific model success without reciprocal harm or universal exclusion of higher-order
+ interactions.
+ details: Source-based self-adversarial review; no new nodes/arrows. reports/causal_graph_review/decisions/20261005-two-records-batch25.yaml
diff --git a/kb/communities/Copper_Biomining_Heap_Leach.yaml b/kb/communities/Copper_Biomining_Heap_Leach.yaml
index dd885b305..30f94f746 100644
--- a/kb/communities/Copper_Biomining_Heap_Leach.yaml
+++ b/kb/communities/Copper_Biomining_Heap_Leach.yaml
@@ -256,24 +256,13 @@ taxonomy:
to Sulfobacillus thermosulfidooxidans, Acidithiobacillus caldus and Acidimicrobium ferrooxidans
explanation: Establishes metal tolerance crucial for biomining
ecological_interactions:
-- name: Ferrous Iron Oxidation in Early Heaps
- description: 'Acidithiobacillus ferrooxidans oxidizes ferrous iron (Fe²⁺) to ferric iron (Fe³⁺) during
- early heap stages (pH >2, <200 days). The bacterium uses Fe²⁺ as electron donor for chemolithoautotrophic
- growth, fixing CO₂ and generating reducing equivalents. The Fe³⁺ produced serves as the primary oxidant
- for copper sulfide mineral dissolution according to: CuFeS₂ + 4Fe³⁺ → Cu²⁺ + 5Fe²⁺ + 2S⁰. This reaction
- releases copper ions and additional Fe²⁺ substrate, creating a closed iron redox cycle. At. ferrooxidans
- thrives when pH >2 and Fe concentrations are moderate, reaching peak abundance (~10⁷ copies/ml) around
- day 200. As heap aging produces more acidic conditions (pH <2) and elevates Fe³⁺ concentrations (>1.8
- g/L), At. ferrooxidans is outcompeted by more acid-tolerant Leptospirillum and Ferroplasma.
-
- '
- interaction_type: SYNTROPHY
- scope: COMMUNITY_LEVEL
- participating_taxa:
- - preferred_term: Acidithiobacillus ferrooxidans
- term:
- id: NCBITaxon:920
- label: Acidithiobacillus ferrooxidans
+- name: Acidithiobacillus Iron Oxidation and Early-Heap Association
+ description: A. ferrooxidans has measured iron-oxidation capacity in separate laboratory assays and was abundant
+ during the early part of the 2009 industrial leaching cycle. Field DNA counts, rRNA and solution chemistry support
+ occurrence and activity, not taxon-resolved iron flux or demonstrated displacement by competitors. In the 2022
+ monoculture assay, 100-300 mg/L SX reagent allowed iron oxidation while copper extraction fell from about 15%
+ to the approximately 5% abiotic level; oxidation capacity alone did not ensure copper recovery.
+ scope: PAIRWISE
metabolites:
- preferred_term: Fe(II)
term:
@@ -284,44 +273,43 @@ ecological_interactions:
term:
id: CHEBI:29034
label: iron(3+)
- concentration: Generated product; reaches 1.86-1.9 g/L in aged heaps
+ concentration: Ferric iron measured in heap solution is not assigned solely to this taxon
biological_processes:
- - preferred_term: iron ion transport
- term:
- id: GO:0006826
- label: iron ion transport
- preferred_term: carbon fixation
term:
id: GO:0015977
label: carbon fixation
downstream:
- target: Copper Sulfide Dissolution
- description: Fe³⁺ oxidizes chalcopyrite to release Cu²⁺ and regenerate Fe²⁺
+ description: PARTIAL - A. ferrooxidans iron oxidation can replenish ferric oxidant for mineral attack. The chemical
+ cycle and laboratory oxidation support this direction, but the SX assay shows that retained iron oxidation
+ need not sustain copper recovery, and the field contribution is not taxon-resolved.
evidence:
- reference: doi:10.1111/j.1751-7915.2009.00112.x
supports: SUPPORT
evidence_source: IN_VIVO
- snippet: At. ferrooxidans phylotypes were the most abundant microorganisms during the first
- part of the leaching cycle (around 200 days of operation)
- explanation: Anchors At. ferrooxidans as the dominant taxon during the early industrial heap stage
+ snippet: At. ferrooxidans phylotypes were the most abundant microorganisms during the first part of the leaching
+ cycle (around 200 days of operation)
+ explanation: Supports early field abundance, not direct taxon-resolved iron-oxidation flux or competition. Field
+ rRNA assays add activity evidence but do not quantify that reaction.
- reference: doi:10.3389/fmicb.2022.820052
supports: SUPPORT
evidence_source: IN_VITRO
snippet: 100 and 300 mg/L SX reagent could hardly inhibit At. ferrooxidans from oxidizing Fe2+
- explanation: Demonstrates ferrous-iron oxidation by At. ferrooxidans during chalcopyrite bioleaching
- assays
-- name: Ferrous Iron Oxidation in Aged Heaps
- description: 'In aged heaps (>250 days, pH 1.67-1.83), Leptospirillum ferriphilum and Ferroplasma acidiphilum
- take over iron oxidation as conditions become too extreme for At. ferrooxidans. These organisms oxidize
- Fe²⁺ at pH values approaching 1.67 and tolerate elevated Fe³⁺ concentrations (1.86-1.9 g/L). Leptospirillum
- is particularly effective at colonizing mineral surfaces and maintaining Fe³⁺ supply for chalcopyrite
- dissolution. Both organisms reach ~10⁵ copies/ml in aged heaps. The shift from At. ferrooxidans to
- Leptospirillum/Ferroplasma reflects thermodynamic constraints - as pH drops and Fe³⁺/Fe²⁺ ratio increases,
- specialists adapted to extreme acidity outcompete generalists. This succession ensures sustained iron
- oxidation throughout the multi-year heap lifetime.
-
- '
- interaction_type: NICHE_PARTITIONING
+ explanation: Supports iron oxidation in a separate A. ferrooxidans monoculture. Primary Results also show reduced
+ copper extraction under SX reagent despite retained iron oxidation.
+ source_taxon:
+ preferred_term: Acidithiobacillus ferrooxidans
+ term:
+ id: NCBITaxon:920
+ label: Acidithiobacillus ferrooxidans
+- name: Aged-Heap Iron-Oxidizer Association
+ description: The 2009 field survey found increasing L. ferriphilum and F. acidiphilum representation as heap strips
+ aged. Late L. ferriphilum DNA reached about 10^5 copies/mL, whereas Ferroplasma was around 10^3 copies/mL; neither
+ count is a direct oxidation flux. Lower pH and changing iron redox chemistry were proposed drivers of succession,
+ not selectively demonstrated competitive exclusion or reduced competition through niche partitioning. L. ferriphilum
+ oxidation is experimentally supported in the separate 2018 cultures; the 2022 Leptospirillum strain is L. ferrooxidans,
+ not this canonical species.
scope: COMMUNITY_LEVEL
participating_taxa:
- preferred_term: Leptospirillum ferriphilum
@@ -341,59 +329,46 @@ ecological_interactions:
term:
id: CHEBI:29034
label: iron(3+)
- concentration: 1.86-1.9 g/L in aged heaps
- biological_processes:
- - preferred_term: iron ion transport
- term:
- id: GO:0006826
- label: iron ion transport
+ concentration: Selected 2009 heap solutions contained about 1.86-1.9 g/L ferric iron; not a species-resolved
+ production rate
downstream:
- target: Copper Sulfide Dissolution
- description: Sustained Fe³⁺ generation maintains copper leaching in aged heaps
+ description: PARTIAL - iron oxidation by the aged-heap associated taxa could replenish ferric oxidant for dissolution.
+ Field succession and separate L. ferriphilum cultures support the proposed contribution without measuring
+ their individual heap fluxes or proving displacement-driven leaching.
evidence:
- reference: doi:10.1111/j.1751-7915.2009.00112.x
supports: SUPPORT
evidence_source: IN_VIVO
- snippet: Acidithiobacillus ferrooxidans was the most abundant during the first part of the leaching
- cycle, while the abundance of Leptospirillum ferriphilum and Ferroplasma acidiphilum increased with
- age of the heap
- explanation: Documents succession from At. ferrooxidans toward Leptospirillum and Ferroplasma in
- older industrial heap strips
+ snippet: Acidithiobacillus ferrooxidans was the most abundant during the first part of the leaching cycle, while
+ the abundance of Leptospirillum ferriphilum and Ferroplasma acidiphilum increased with age of the heap
+ explanation: Supports observed field succession. DNA abundance, rRNA activity and bulk solution chemistry do
+ not assign the oxidation flux to individual taxa.
- reference: doi:10.1111/j.1751-7915.2009.00112.x
supports: PARTIAL
evidence_source: IN_VIVO
- snippet: changes during the leaching cycle in chemical and physical conditions, such as pH and
- Fe3+/Fe2+ ion rate, are primary factors shaping the microbial dynamic in the heap
- explanation: Supports heap-age pH and iron-redox gradients as drivers of the iron-oxidizer shift
+ snippet: changes during the leaching cycle in chemical and physical conditions, such as pH and Fe3+/Fe2+ ion
+ rate, are primary factors shaping the microbial dynamic in the heap
+ explanation: The authors propose physical/chemical drivers from field associations; this is not a selective
+ competition or niche-partitioning experiment.
- name: Sulfur Oxidation to Sulfuric Acid
- description: 'Acidithiobacillus thiooxidans oxidizes elemental sulfur (S⁰) and reduced inorganic sulfur
- compounds (RISCs) released from chalcopyrite dissolution to sulfuric acid (H₂SO₄). This process maintains
- the acidic pH (1.5-2.5) essential for copper leaching by continuously generating protons. Sulfur oxidation
- follows: S⁰ + 1.5O₂ + H₂O → H₂SO₄. The sulfuric acid protonates mineral surfaces, enhancing Fe³⁺ attack
- and preventing precipitation of iron hydroxides. At. thiooxidans maintains constant abundance (10⁵
- copies/ml) throughout the leaching cycle, providing stable acid generation regardless of heap age
- or pH. This contrasts with iron oxidizers that undergo succession. The organism prevents accumulation
- of passivating sulfur layers on mineral surfaces that would inhibit leaching.
-
- '
- interaction_type: SYNTROPHY
- scope: COMMUNITY_LEVEL
- participating_taxa:
- - preferred_term: Acidithiobacillus thiooxidans
- term:
- id: NCBITaxon:930
- label: Acidithiobacillus thiooxidans
+ description: A. thiooxidans is associated with sulfur oxidation and acid generation, and its approximately 10^5
+ DNA copies/mL remained relatively stable in the 2009 heap survey. rRNA measurements support activity across
+ strips, not constant sulfur flux. Oxidation of reduced inorganic sulfur can sustain acidity and limit sulfur
+ accumulation, but the field study does not selectively assign acid production or passivation removal to this
+ taxon. The 2018 mixed-culture sulfur oxidizer was A. caldus, not A. thiooxidans.
+ scope: PAIRWISE
metabolites:
- preferred_term: sulfur
term:
id: CHEBI:26833
label: sulfur atom
- notes: Elemental sulfur (S⁰) substrate
+ notes: Existing sulfur-atom annotation is elemental context, not a measured molecular allotrope or concentration
- preferred_term: sulfuric acid
term:
id: CHEBI:26836
label: sulfuric acid
- concentration: Maintains pH 1.5-2.5
+ concentration: Candidate contribution to acidic leaching conditions; taxon-specific acid flux not measured
biological_processes:
- preferred_term: sulfur compound metabolic process
term:
@@ -401,33 +376,36 @@ ecological_interactions:
label: sulfur compound metabolic process
downstream:
- target: Copper Sulfide Dissolution
- description: Sulfuric acid production sustains the low pH needed for ferric-iron attack on chalcopyrite
+ description: PARTIAL - sulfur oxidation can generate acidity and limit reduced-sulfur accumulation, helping
+ sustain mineral attack under suitable conditions. A. thiooxidans-specific acid flux and passivation removal
+ were not selectively established in the field survey.
evidence:
- reference: doi:10.1111/j.1751-7915.2009.00112.x
- supports: SUPPORT
+ supports: PARTIAL
evidence_source: IN_VIVO
- snippet: Acidithiobacillus thiooxidans kept constant throughout the leaching cycle, and Firmicutes
- group showed a low and a patchy distribution in the heap
- explanation: Documents stable sulfur oxidation activity
+ snippet: Acidithiobacillus thiooxidans kept constant throughout the leaching cycle, and Firmicutes group showed
+ a low and a patchy distribution in the heap
+ explanation: The quoted constancy concerns abundance, not stable sulfur oxidation. Primary rRNA results support
+ physiological activity without measuring sulfur flux.
- reference: doi:10.3389/fmicb.2022.820052
- supports: SUPPORT
- evidence_source: IN_VITRO
+ supports: PARTIAL
+ evidence_source: OTHER
snippet: sulfur-oxidizing microorganisms oxidize RISCs to sulfuric acid
- explanation: Establishes sulfuric acid production from reduced inorganic sulfur compounds as a
- bioleaching reaction
+ explanation: General bioleaching chemistry in the 2022 Introduction, not an A. thiooxidans experiment in that
+ study.
+ source_taxon:
+ preferred_term: Acidithiobacillus thiooxidans
+ term:
+ id: NCBITaxon:930
+ label: Acidithiobacillus thiooxidans
- name: Copper Sulfide Dissolution
- description: 'Ferric iron generated by the microbial consortium oxidizes chalcopyrite (CuFeS₂) and other
- copper sulfide minerals, releasing copper ions into solution for recovery. The primary reaction is:
- CuFeS₂ + 4Fe³⁺ → Cu²⁺ + 5Fe²⁺ + 2S⁰. This process is enhanced by the acidic pH (1.5-2.5) maintained
- by sulfur oxidizers. The released Fe²⁺ is re-oxidized by iron-oxidizing bacteria/archaea, closing
- the iron cycle. Elemental sulfur (S⁰) is oxidized by At. thiooxidans to sulfuric acid. This biohydrometallurgical
- process extracts copper from low-grade ores uneconomical for conventional smelting. Industrial heaps
- operate for 200-300+ days, with copper recovery continuing as long as Fe³⁺ generation and acid production
- are sustained. The process produces pregnant leach solution (PLS) containing dissolved copper that
- is processed by solvent extraction and electrowinning.
-
- '
- interaction_type: SYNTROPHY
+ description: Ferric iron attacks copper sulfide minerals and releases copper and reduced substrates that can support
+ microbial iron regeneration and sulfur oxidation. The 2009 field heap contained mixed copper sulfides, indigenous
+ organisms beyond the five canonical representatives, and a 400-day leaching cycle. Separate 2018 cultures measured
+ copper release from chalcopyrite and favored a lower-redox-potential A. caldus/S. thermosulfidooxidans combination;
+ the triple culture did not outperform the binaries. The 2022 SX-reagent monocultures further dissociated iron
+ oxidation from copper recovery. The feedback is conditional on mineral, redox and inhibition context, not proof
+ of a closed five-member syntrophic consortium or monotonically increasing recovery with ferric iron.
scope: COMMUNITY_LEVEL
participating_taxa:
- preferred_term: Acidithiobacillus ferrooxidans
@@ -472,48 +450,46 @@ ecological_interactions:
label: iron(2+)
notes: Regenerated substrate
downstream:
- - target: Ferrous Iron Oxidation in Early Heaps
- description: Released Fe²⁺ is re-oxidized to regenerate Fe³⁺ oxidant
- - target: Ferrous Iron Oxidation in Aged Heaps
- description: Released Fe²⁺ also feeds the acid-tolerant iron oxidizers in aged heap strips
+ - target: Acidithiobacillus Iron Oxidation and Early-Heap Association
+ description: PARTIAL - mineral attack releases ferrous iron that can supply A. ferrooxidans oxidation, regenerating
+ ferric oxidant. This is a chemically grounded substrate feedback, not a measured taxon-resolved closed loop
+ in the industrial heap.
+ - target: Aged-Heap Iron-Oxidizer Association
+ description: PARTIAL - released ferrous iron can supply the iron-oxidizing taxa associated with older strips.
+ Their individual uptake and feedback fluxes were not traced by the field abundance and RNA assays.
- target: Sulfur Oxidation to Sulfuric Acid
- description: Released reduced inorganic sulfur compounds feed sulfur oxidation to sulfuric acid
- - target: Thermophilic Iron and Sulfur Oxidation
- description: Chalcopyrite-associated Fe²⁺ and sulfur substrates feed Sulfobacillus activity in hotter
- bioleaching niches
+ description: PARTIAL - mineral dissolution generates reduced inorganic sulfur substrates that can feed A. thiooxidans
+ sulfur oxidation. The reaction-cycle context supports direction, not selective proof of its share of field
+ acid generation or passivation control.
+ - target: Sulfobacillus Iron and Sulfur Oxidation Capacity
+ description: PARTIAL - chalcopyrite-associated ferrous iron and reduced sulfur can feed Sulfobacillus oxidation
+ in the tested cultures. This substrate feedback does not demonstrate exact-species transfer or activity in
+ hotter industrial heap niches.
evidence:
- reference: doi:10.3389/fmicb.2022.820052
- supports: SUPPORT
- evidence_source: IN_VIVO
- snippet: Bioleaching, the microbial dissolution of metal sulfides, is caused by Fe3+ ions as
- the crucial oxidizing reagent
- explanation: Identifies ferric iron as the oxidant responsible for dissolving copper sulfides
+ supports: PARTIAL
+ evidence_source: OTHER
+ snippet: Bioleaching, the microbial dissolution of metal sulfides, is caused by Fe3+ ions as the crucial oxidizing
+ reagent
+ explanation: General reaction-cycle context from the 2022 Introduction. Separate laboratory results and field
+ observations support conditional leaching, not an exact five-member in vivo perturbation or taxon-resolved
+ flux.
- reference: doi:10.3389/fmicb.2022.820052
- supports: SUPPORT
- evidence_source: IN_VIVO
- snippet: Then iron-oxidizing microorganisms re-oxidize Fe2+ to Fe3+, and sulfur-oxidizing
- microorganisms oxidize RISCs to sulfuric acid
- explanation: Connects mineral dissolution products to microbial iron regeneration and sulfuric
- acid production
-- name: Thermophilic Iron and Sulfur Oxidation
- description: 'Sulfobacillus thermosulfidooxidans contributes to iron and sulfur oxidation in thermophilic
- heap sections (50-60°C) where exothermic sulfide oxidation elevates temperatures. This moderately
- thermophilic organism (optimum 50-55°C) oxidizes both Fe²⁺ and S⁰, performing roles analogous to At.
- ferrooxidans and At. thiooxidans but at elevated temperatures. Sulfobacillus exhibits facultative
- autotrophy, growing mixotrophically on organic compounds plus iron or sulfur. Its spore-forming capability
- provides resilience to fluctuating heap conditions. Metal tolerance (copper, zinc, nickel, cobalt)
- enables activity in polymetallic ores. Despite low abundance (10³-10⁴ copies/ml), microarray data
- shows increased activity in aged heaps, suggesting specialized niches where thermophily and metal
- tolerance provide competitive advantage.
-
- '
- interaction_type: NICHE_PARTITIONING
- scope: COMMUNITY_LEVEL
- participating_taxa:
- - preferred_term: Sulfobacillus thermosulfidooxidans
- term:
- id: NCBITaxon:28034
- label: Sulfobacillus thermosulfidooxidans
+ supports: PARTIAL
+ evidence_source: OTHER
+ snippet: Then iron-oxidizing microorganisms re-oxidize Fe2+ to Fe3+, and sulfur-oxidizing microorganisms oxidize
+ RISCs to sulfuric acid
+ explanation: General reaction-cycle context from the 2022 Introduction. Separate laboratory results and field
+ observations support conditional leaching, not an exact five-member in vivo perturbation or taxon-resolved
+ flux.
+- name: Sulfobacillus Iron and Sulfur Oxidation Capacity
+ description: S. thermosulfidooxidans has measured iron/sulfur oxidation and leaching capacity in separate 2018
+ cultures at 38 +/- 2 C and 2022 monocultures at 45 C. In 2018, comparatively weak iron oxidation and lower redox
+ potential favored copper release, including the A. caldus binary. In 2022, 10 mg/L SX reagent delayed but did
+ not prevent recovery of iron oxidation and approximately 30% copper extraction; at 50 mg/L, sulfur oxidation
+ and growth persisted while iron oxidation and extraction were impaired. Genus-level Sulfobacillus RNA in older
+ field strips does not identify this exact species, measured 50-60 C heap niches, or competitive advantage.
+ scope: PAIRWISE
metabolites:
- preferred_term: Fe(II)
term:
@@ -527,23 +503,31 @@ ecological_interactions:
term:
id: CHEBI:26833
label: sulfur atom
+ notes: Elemental sulfur context, not a measured molecular allotrope or concentration
downstream:
- target: Copper Sulfide Dissolution
- description: Sulfobacillus iron and sulfur oxidation can maintain copper extraction in thermophilic
- chalcopyrite bioleaching
+ description: PARTIAL - Sulfobacillus iron/sulfur oxidation can support leaching in the tested laboratory systems,
+ subject to redox potential and SX inhibition. The lower-ORP advantage contradicts a universal more-iron-oxidation
+ benefit; exact field-species and hot-zone contributions remain unresolved.
evidence:
- reference: doi:10.1111/j.1751-7915.2009.00112.x
- supports: SUPPORT
+ supports: PARTIAL
evidence_source: IN_VIVO
- snippet: the prokaryotic acidophile microarray (PAM) analysis showed active members of Alphaproteobacteria
- in all samples and of Sulfobacillus genus in older ones
- explanation: Documents Sulfobacillus activity in industrial heaps
+ snippet: the prokaryotic acidophile microarray (PAM) analysis showed active members of Alphaproteobacteria in
+ all samples and of Sulfobacillus genus in older ones
+ explanation: Supports genus-level field RNA activity only; neither exact S. thermosulfidooxidans identification
+ nor a hot-zone flux measurement.
- reference: doi:10.3389/fmicb.2018.03059
supports: SUPPORT
evidence_source: IN_VITRO
snippet: microbial iron oxidation by Sulfobacillus thermosulfidooxidans meets these specifications
- explanation: Demonstrates iron oxidation by Sulfobacillus thermosulfidooxidans in chalcopyrite
- bioleaching experiments
+ explanation: The specifications refer to comparatively weak iron oxidation and favorable lower redox potential,
+ not maximal ferric-iron production or a demonstrated 50-60 C field niche.
+ source_taxon:
+ preferred_term: Sulfobacillus thermosulfidooxidans
+ term:
+ id: NCBITaxon:28034
+ label: Sulfobacillus thermosulfidooxidans
environmental_factors:
- name: pH Gradient Across Heap Age
value: 1.67-2.5
@@ -847,3 +831,34 @@ growth_media:
explanation: Confirms use of standard acidophile cultivation methods for consortium members
culturemech_id: CultureMech:003277
culturemech_url: https://github.com/CultureBotAI/CultureMech/tree/main/kb/media/CultureMech:003277
+discussions:
+- discussion_id: copper_heap_resolved_flux_and_context
+ prompt: Which taxa and mineral/redox conditions sustain the industrial leaching feedback?
+ kind: KNOWLEDGE_GAP
+ status: OPEN
+ attaches_to:
+ - ecological_interactions#Acidithiobacillus Iron Oxidation and Early-Heap Association
+ - ecological_interactions#Aged-Heap Iron-Oxidizer Association
+ - ecological_interactions#Sulfur Oxidation to Sulfuric Acid
+ - ecological_interactions#Copper Sulfide Dissolution
+ - ecological_interactions#Sulfobacillus Iron and Sulfur Oxidation Capacity
+ rationale: 'Field DNA/rRNA and solution measurements support an open indigenous community and succession, not
+ species-resolved iron/sulfur flux or competitive exclusion. Separate culture perturbations demonstrate oxidation
+ and copper release, including lower-ORP benefits and loss of recovery despite iron oxidation under SX reagent.
+ Taxon-resolved flux, selective perturbations and mineral/passivation measurements are needed to connect those
+ laboratory mechanisms to the heap. Preserve the real chemical feedback without asserting a closed five-member
+ syntrophy. Field-genus versus exact Sulfobacillus species, non-graph abundance/engineering metadata and culture-context
+ discrepancies remain in #1358.'
+ posed_by: codex
+ posed_date: '2026-10-05'
+curation_history:
+- timestamp: '2026-10-06T02:52:26Z'
+ curator: codex
+ action: REVIEW_CAUSAL_GRAPH
+ changes: 'Separate measured intrinsic iron oxidation from early-heap association and failed recovery under SX
+ reagent.; Retain observed succession with correct abundance scale and species boundaries, without competition
+ or resolved field flux.; Distinguish sulfur-oxidation capacity and RNA activity from stable DNA counts, constant
+ acid flux and selective passivation removal.; Retain conditional mineral/redox feedback and direct laboratory
+ outcomes without a closed five-member consortium claim.; Preserve laboratory Sulfobacillus oxidation/leaching
+ and low-ORP advantage; bound field genus-to-species and thermal inference. Issue #1356; reports/causal_graph_review/decisions/20261005-two-records-batch25.yaml'
+ llm_assisted: true
diff --git a/kb/communities/Coscinodiscus_Synthetic_Community.yaml b/kb/communities/Coscinodiscus_Synthetic_Community.yaml
index 877df565f..73ff4537f 100644
--- a/kb/communities/Coscinodiscus_Synthetic_Community.yaml
+++ b/kb/communities/Coscinodiscus_Synthetic_Community.yaml
@@ -204,16 +204,13 @@ taxonomy:
and bacterial growth in the community
explanation: Demonstrates dynamic temporal effect on diatom growth
ecological_interactions:
-- name: Diatom Primary Production and Carbon Release
- description: 'Coscinodiscus radiatus performs oxygenic photosynthesis, fixing atmospheric CO2 and producing
- organic carbon compounds that are released into the surrounding medium. These photosynthate and exudates
- include amino acids, vitamins, and dimethylsulfoniopropionate (DMSP), which serve as key resources
- for the associated bacteria. The release of dissolved organic carbon supports bacterial growth and
- metabolism in this synthetic community.
-
- '
- interaction_type: MUTUALISM
- scope: COMMUNITY_LEVEL
+- name: Candidate Diatom Resource Provision
+ description: The phototrophic diatom is a candidate supplier of bacterial resources. Coculture increased Crocei1
+ abundance, but did not significantly increase CS4 or Rose1 and inhibited CS1 after day 9. Thus diatom presence
+ has partner-specific effects; neither universal bacterial dependence nor direct release and transfer of DMSP,
+ amino acids or vitamins was established. Photosynthetic resource provision is a proposed mediator rather than
+ a measured metabolite flux.
+ scope: PAIRWISE
source_taxon:
preferred_term: Coscinodiscus radiatus
term:
@@ -224,17 +221,17 @@ ecological_interactions:
term:
id: CHEBI:16457
label: S,S-dimethyl-beta-propiothetin
- concentration: Diatom-produced organic sulfur compound
+ concentration: Candidate exchanged resource; release and partner-resolved transfer not measured
- preferred_term: amino acids
term:
id: CHEBI:33709
label: amino acid
- concentration: Organic nutrients released by diatom
+ concentration: Candidate exchanged resource; release and partner-resolved transfer not measured
- preferred_term: vitamins
term:
id: CHEBI:33229
label: vitamin (role)
- concentration: Growth factors released by diatom
+ concentration: Candidate exchanged resource; release and partner-resolved transfer not measured
biological_processes:
- preferred_term: photosynthesis
term:
@@ -245,23 +242,25 @@ ecological_interactions:
id: GO:0015977
label: carbon fixation
downstream:
- - target: Bacterial DMSP Metabolism
- description: Diatom-released DMSP and organic compounds support bacterial growth
+ - target: Bacterial DMSP Catabolic Potential
+ description: HYPOTHESIZED - diatom-derived DMSP could provide substrate for the genomic catabolic potential
+ of CS4 and Rose1. No partner-resolved release, consumption or flux was measured, and added DMSP as the carbon-only
+ supplement did not promote growth under the tested minimal-medium conditions.
evidence:
- reference: PMID:36300970
- supports: SUPPORT
+ supports: PARTIAL
evidence_source: IN_VITRO
- snippet: No synergistic effects between bacteria in the presence of the diatom was observed
- explanation: Demonstrates diatom provision of organic nutrients to bacteria
-- name: Bacterial DMSP Metabolism
- description: 'The Roseobacteraceae members (Mameliella CS4 and Roseovarius Rose1) metabolize dimethylsulfoniopropionate
- (DMSP) released by the diatom through demethylation and cleavage pathways. This sulfur cycling activity
- is important for carbon and sulfur biogeochemistry in marine systems. The differential capacity for
- DMSP metabolism among the bacteria (with Croceibacter lacking this capability) reflects functional
- specialization within the community.
-
- '
- interaction_type: MUTUALISM
+ snippet: Crocei1 grew to significantly higher density
+ explanation: 'Primary Results, pairwise bacterial growth paragraph (Fig. 3d): supports increased Crocei1 abundance
+ in diatom coculture, not a measured chemical mediator. qPCR was calibrated against cells; it is not viable
+ coculture plating. Short excerpt verified against the publisher preview; absent from the abstract-only local
+ cache.'
+- name: Bacterial DMSP Catabolic Potential
+ description: BLASTP comparisons of predicted bacterial proteins support DMSP demethylation/cleavage potential
+ in CS4 and Rose1. Crocei1 had weak homologs and CS1 lacked the key DmdA sequence, although downstream homologs
+ suggest possible MMPA use. This is sequence-based potential, not measured DMSP consumption, DMS release or diatom-to-bacterium
+ flux. DMSP carbon-only supplementation did not promote growth; that negative growth result does not itself prove
+ absence of catabolic activity.
scope: COMMUNITY_LEVEL
participating_taxa:
- preferred_term: Mameliella CS4
@@ -272,11 +271,6 @@ ecological_interactions:
term:
id: NCBITaxon:74030
label: Roseovarius
- source_taxon:
- preferred_term: Mameliella CS4
- term:
- id: NCBITaxon:1434019
- label: Mameliella
metabolites:
- preferred_term: dimethylsulfoniopropionate
term:
@@ -286,7 +280,7 @@ ecological_interactions:
term:
id: CHEBI:17437
label: dimethyl sulfide
- concentration: Product of DMSP cleavage pathway
+ concentration: Candidate cleavage product; production not assayed in this community
biological_processes:
- preferred_term: dimethylsulfoniopropionate metabolic process
term:
@@ -298,24 +292,24 @@ ecological_interactions:
label: sulfur compound metabolic process
evidence:
- reference: PMID:36300970
- supports: SUPPORT
- evidence_source: IN_VITRO
- snippet: We further established a synthetic phytoplankton/bacteria community with the centric diatom,
- Coscinodiscus radiatus, and 4 phylogenetically distinctive bacterial isolates, Mameliella sp., Roseovarius
- sp., Croceibacter sp., and Marinobacter sp. Supported by a Lotka-Volterra model, we show that interactions
- within the consortium are specific and that the sum of the pairwise interactions can explain algal
- and bacterial growth in the community
- explanation: Demonstrates bacterial capacity to metabolize diatom-derived DMSP
+ supports: PARTIAL
+ evidence_source: COMPUTATIONAL
+ snippet: potential for DMSP consumption
+ explanation: Primary Results and Table 2 infer catabolic potential from genome-protein homology. Not a metabolite-consumption
+ assay or reciprocal-benefit test. Short excerpt checked in the publisher preview, absent from the abstract-only
+ cache.
+ computational_provenance:
+ prediction_type: SEQUENCE_HOMOLOGY
+ tools:
+ - tool_name: BLASTP
+ parameters: Known DMSP-pathway proteins compared with predicted proteins from four bacterial genomes; Table
+ 2 reports coverage and identity.
- name: Growth Phase-Dependent Bacterial Effects
- description: 'The bacterial members exert context-dependent effects on diatom growth that vary with
- algal fitness state and growth phase. Mameliella CS4 and Roseovarius Rose1 extended the stationary
- phase and promoted survival during late growth phases, while Croceibacter Crocei1 consistently inhibited
- growth. Marinobacter CS1 initially suppressed growth but later enabled recovery. These dynamic temporal
- effects demonstrate that bacterial function depends on the physiological state of the diatom and timing
- of the interaction, with no universal growth-promoting or algicidal bacteria.
-
- '
- interaction_type: MUTUALISM
+ description: 'In pairwise cultures, CS4 and Rose1 prolonged algal stationary-phase survival; Crocei1 inhibited
+ the diatom across phases. CS1 initially suppressed algal growth, followed by recovery to control-like density
+ after day 9, not necessarily growth above control. Reciprocal bacterial responses differed: Crocei1 benefited,
+ CS1 was inhibited significantly on days 11-21, and CS4/Rose1 showed no significant diatom effect. These measured
+ responses do not support one global mutualism label or identify their chemical mediators.'
scope: COMMUNITY_LEVEL
participating_taxa:
- preferred_term: Coscinodiscus radiatus
@@ -338,11 +332,6 @@ ecological_interactions:
term:
id: NCBITaxon:2742
label: Marinobacter
- source_taxon:
- preferred_term: Mameliella CS4
- term:
- id: NCBITaxon:1434019
- label: Mameliella
biological_processes:
- preferred_term: interspecies interaction between organisms
term:
@@ -353,26 +342,26 @@ ecological_interactions:
id: GO:0009607
label: response to biotic stimulus
downstream:
- - target: Community-Level Emergent Effects
- description: Pairwise C. radiatus-bacterium effects vary across partners and growth phases and combine
- into an all-member culture whose net effect on algal growth is inhibitory without requiring bacterial-bacterial
- synergy.
+ - target: Community Growth and Pairwise Model
+ description: PARTIAL - the measured partner- and phase-specific effects combine into the observed predominantly
+ inhibitory all-member algal trajectory. A generalized Lotka-Volterra model fitted to monocultures and pairwise
+ cultures reproduces that trajectory with separate early/late parameter sets; this supports the proposed contribution
+ without isolating chemical mediators or proving higher-order interactions universally absent.
evidence:
- reference: PMID:36300970
supports: SUPPORT
evidence_source: IN_VITRO
- snippet: Bacteria utilize substrates produced by the phototrophic algae, while algal growth can be
- supported by bacterial exudates
- explanation: Demonstrates context-dependent nature of diatom-bacteria interactions
-- name: Bacterial Auxotrophy and Nutrient Dependence
- description: 'Genome analysis revealed extensive auxotrophic requirements among the bacteria, with Croceibacter
- Crocei1 showing the highest dependence on external nutrients. Most bacteria required amino acids and
- vitamins (Rose1 needed niacin/B3, while Crocei1 and CS1 needed vitamin B12), indicating strong reliance
- on diatom-derived compounds for growth. This auxotrophy drives the dependence of bacteria on the photosynthetic
- diatom and shapes community assembly and dynamics.
-
- '
- interaction_type: COMMENSALISM
+ snippet: The activity of bacteria can even change during the aging of an algal culture from inhibitory to stimulatory
+ or vice versa
+ explanation: Supports phase-dependent response. Primary Results and Figs. 2-3 text distinguish partner-specific
+ algal and bacterial trajectories, not a universal positive fitness sign or resolved chemical mechanism.
+- name: Bacterial Nutrient Supplement Responses
+ description: Minimal-medium supplementation with a pooled 13-amino-acid mixture plus vitamins improved growth
+ of Rose1, Crocei1 and CS1; CS4 did not respond. DMSP or glucose supplied as carbon alone did not promote any
+ of the four bacteria. These are direct nutrient-response assays, not merely genomic predictions. Genome analysis
+ separately predicted amino-acid deficits, Rose1 niacin deficiency and Crocei1/CS1 vitamin B12 biosynthesis deficits.
+ The pooled rescue does not establish which individual nutrient was limiting, its exact B12 chemical form, or
+ donation by the diatom.
scope: COMMUNITY_LEVEL
participating_taxa:
- preferred_term: Roseovarius Rose1
@@ -392,16 +381,12 @@ ecological_interactions:
term:
id: CHEBI:33709
label: amino acid
- - preferred_term: cobalamin
- term:
- id: CHEBI:15982
- label: cob(I)alamin
- concentration: Vitamin B12 required by Crocei1 and CS1
- - preferred_term: niacin
+ concentration: Externally supplied pooled amino-acid/vitamin supplement; no individual nutrient rescue assigned
+ - preferred_term: vitamins
term:
- id: CHEBI:15940
- label: nicotinic acid
- concentration: Vitamin B3 required by Rose1
+ id: CHEBI:33229
+ label: vitamin (role)
+ concentration: Externally supplied pooled amino-acid/vitamin supplement; no individual nutrient rescue assigned
biological_processes:
- preferred_term: vitamin metabolic process
term:
@@ -415,22 +400,18 @@ ecological_interactions:
- reference: PMID:36300970
supports: SUPPORT
evidence_source: IN_VITRO
- snippet: We further established a synthetic phytoplankton/bacteria community with the centric diatom,
- Coscinodiscus radiatus, and 4 phylogenetically distinctive bacterial isolates, Mameliella sp., Roseovarius
- sp., Croceibacter sp., and Marinobacter sp. Supported by a Lotka-Volterra model, we show that interactions
- within the consortium are specific and that the sum of the pairwise interactions can explain algal
- and bacterial growth in the community
- explanation: Demonstrates bacterial auxotrophy and dependence on diatom-derived nutrients
-- name: Community-Level Emergent Effects
- description: 'When all four bacteria were combined with the diatom, an overall inhibitory effect on
- algal growth emerged throughout all growth phases. The growth-promoting effects of CS4 and Rose1 observed
- in pairwise cultures did not prevail in the four-member community, demonstrating emergent community-level
- properties. A Lotka-Volterra model successfully predicted community composition using only pairwise
- interaction parameters, indicating that higher-order bacterial-bacterial interactions were negligible
- and that the community dynamics arose primarily from pairwise diatom-bacteria interactions.
-
- '
- interaction_type: COMPETITION
+ snippet: all other bacteria grew better
+ explanation: Primary Results nutrient-supplementation paragraph and Fig. 5 caption report improved Rose1/Crocei1/CS1
+ growth with amino acids plus vitamins, with CS4 as the nonresponding comparison. Methods describe the pooled
+ mixture. Not individual B12/B3 rescue or diatom transfer. Short excerpt verified in publisher preview, absent
+ from abstract-only cache.
+- name: Community Growth and Pairwise Model
+ description: The all-member culture generally had lower algal cell counts than the axenic control, especially
+ before day 17; the paper also describes a very-late survival benefit. Bacteria performed similarly or slightly
+ better than in mono/pairwise cultures, so this is not reciprocal competitive harm. A generalized Lotka-Volterra
+ model fitted to mono/pairwise data with distinct days 1-17 and 17-41 parameter sets predicted the algal community
+ trajectory; a neutral model failed. Bacterial-bacterial terms were unnecessary for this tested fit, not proven
+ universally absent, and chemical cross-feeding was not thereby established.
scope: COMMUNITY_LEVEL
participating_taxa:
- preferred_term: Coscinodiscus radiatus
@@ -453,11 +434,6 @@ ecological_interactions:
term:
id: NCBITaxon:2742
label: Marinobacter
- source_taxon:
- preferred_term: Coscinodiscus radiatus
- term:
- id: NCBITaxon:33642
- label: Coscinodiscus radiatus
biological_processes:
- preferred_term: interspecies interaction between organisms
term:
@@ -472,7 +448,9 @@ ecological_interactions:
supports: SUPPORT
evidence_source: IN_VITRO
snippet: No synergistic effects between bacteria in the presence of the diatom was observed
- explanation: Demonstrates emergent community-level effects and predictability from pairwise interactions
+ explanation: Supports the condition-bounded lack of detected bacterial synergy. Primary Results/Methods report
+ empirical community counts and a phase-specific pairwise model, not universal absence of higher-order ecology
+ or reciprocal competitive harm.
related_ingredients:
- preferred_term: carbon dioxide
chebi_term:
@@ -715,3 +693,35 @@ environmental_factors:
within the consortium are specific and that the sum of the pairwise interactions can explain algal
and bacterial growth in the community
explanation: Demonstrates role of nutrient availability in shaping community structure
+discussions:
+- discussion_id: coscinodiscus_resource_transfer_and_mediation
+ prompt: Which exchanged compounds mediate the partner- and phase-specific growth responses?
+ kind: KNOWLEDGE_GAP
+ status: OPEN
+ attaches_to:
+ - ecological_interactions#Candidate Diatom Resource Provision
+ - ecological_interactions#Bacterial DMSP Catabolic Potential
+ - ecological_interactions#Growth Phase-Dependent Bacterial Effects
+ - ecological_interactions#Bacterial Nutrient Supplement Responses
+ - ecological_interactions#Community Growth and Pairwise Model
+ rationale: 'Complete primary main text, tables and captions support pairwise growth, pooled nutrient supplementation
+ and a phase-specific community model. Direct DMSP release/consumption flux, individual nutrient rescue and mediator-specific
+ perturbations remain unresolved; carbon-only supplementation was negative. CS4 is a nonresponding supplementation
+ control despite predicted deficits. Prior rich-medium stores may buffer responses. The model fit does not rule
+ out interactions under other nutrient conditions. The publisher-provided preview was read without copying its
+ copyrighted body; three brief Results excerpts remain a documented abstract-cache retrieval gap under #596.
+ No figure images or supplementary files were inspected. Non-graph roles, cultivation parameters and source discrepancies
+ remain in #1359.'
+ posed_by: codex
+ posed_date: '2026-10-05'
+curation_history:
+- timestamp: '2026-10-06T02:52:27Z'
+ curator: codex
+ action: REVIEW_CAUSAL_GRAPH
+ changes: 'Retain candidate diatom resource provision and actual Crocei1 promotion without universal dependence
+ or measured metabolite donation.; Keep DMSP homology potential computational, distinct from consumption, product
+ flux and a negative carbon-only growth assay.; Preserve distinct reciprocal growth signs and control-relative
+ algal recovery rather than global mutualism.; Preserve real pooled nutrient responses and the CS4 negative control
+ without individual-vitamin rescue or exact B12-form claims.; Retain empirical community inhibition and phase-specific
+ model success without reciprocal harm or universal exclusion of higher-order interactions. Issue #1357; reports/causal_graph_review/decisions/20261005-two-records-batch25.yaml'
+ llm_assisted: true
diff --git a/reports/causal_graph_review/adversarial-review-20261005-batch25.yaml b/reports/causal_graph_review/adversarial-review-20261005-batch25.yaml
new file mode 100644
index 000000000..90b3ce6d2
--- /dev/null
+++ b/reports/causal_graph_review/adversarial-review-20261005-batch25.yaml
@@ -0,0 +1,130 @@
+reviewer: codex
+review_mode: source_based_self_adversarial_review
+independent_approval: false
+base_commit: 2eb1818f3d94f9420099a991136254501b543891
+decision_ledger: reports/causal_graph_review/decisions/20261005-two-records-batch25.yaml
+validation_report: reports/causal_graph_review/validation-20261005-batch25.json
+scope:
+- kb/communities/Copper_Biomining_Heap_Leach.yaml
+- kb/communities/Coscinodiscus_Synthetic_Community.yaml
+findings:
+- issue: 1356
+ severity: P2
+ finding: Field DNA/RNA succession promoted into resolved flux, competition and a closed syntrophic cycle; laboratory
+ conditions and species conflated.
+ disposition: addressed_and_locally_verified
+- issue: 1357
+ severity: P2
+ finding: DMSP homology and pooled nutrient rescue promoted into specific vitamin donation, chemical flux and global
+ ecological fitness signs.
+ disposition: addressed_with_documented_reference_cache_limit
+- issue: 1360
+ severity: P2
+ finding: Legitimate intrinsic-source corrections exceed the previous mixed-scope census ceiling of 122.
+ disposition: Exact census verified; only ceiling/comment changed to 124; full regression rerun passes and initial
+ failure remains recorded.
+open_nongraph_followups:
+- issue: 1358
+ disposition: not_closed_by_graph_only_patch
+- issue: 1359
+ disposition: not_closed_by_graph_only_patch
+adversarial_checks:
+- Every original node and arrow reviewed against whole records and cited primary sources. Retain ten nodes/ten arrows
+ with seven exact renames; no new structure or Edison job.
+- Copper field DNA/rRNA supports abundance/activity, not species-resolved oxidation flux or selective competition.
+ Ferroplasma approximately 10^3 copies/mL differs from late L. ferriphilum approximately 10^5.
+- The indigenous 2009 heap is an open community with a 400-day cycle and mixed copper sulfides, not a closed five-member
+ culture. Preserve conditional substrate/regeneration feedback, not unsupported syntrophy or niche partitioning.
+- Separate 2018 A. caldus/L. ferriphilum/S. thermosulfidooxidans cultures at 38 +/- 2 C from 2022 monocultures including
+ L. ferrooxidans, and from field genus-level Sulfobacillus RNA. Remove iron-ion-transport overannotation.
+- 'Preserve measured lower-redox leaching advantage and nonmonotonic response: A. ferrooxidans retains iron oxidation
+ under SX reagent despite copper recovery falling to abiotic level; Sulfobacillus low-dose recovery differs from
+ high-dose impairment.'
+- Stable A. thiooxidans DNA counts do not measure constant acid flux; RNA supports activity. General chemistry quoted
+ from the 2022 Introduction is OTHER/PARTIAL, not an in vivo five-member assay.
+- Coscinodiscus has real pooled amino-acid/vitamin supplementation assays. Preserve the three responders and CS4
+ negative control. Do not substitute a genome-only account, individual B12/B3 rescue or demonstrated diatom donation.
+- DMSP pathway BLASTP is computational homology with provenance, not measured consumption or DMS release. Carbon-only
+ supplementation failure does not prove no catabolism.
+- Remove unsupported cob(I)alamin exact-form assignment from the pooled supplement node while retaining specific
+ genome predictions in bounded prose. Use existing amino-acid and vitamin-role annotations for the tested mixture.
+- Preserve Crocei1 promotion, CS1 suppression, CS4/Rose1 neutral bacterial effects, and control-relative algal recovery.
+ Do not assert one global mutualism/commensalism or reciprocal competition sign.
+- Retain empirical all-member inhibition with late-survival nuance and generalized Lotka-Volterra model success
+ using separate days 1-17 and 17-41 parameter sets. No bacterial-bacterial terms needed for this fit does not prove
+ universal absence of higher-order interactions.
+- Three brief Results quotes total 15 words. They were verified in the ASM-provided primary preview and remain absent
+ from the abstract-only cache. Reference exit 1 and three MISMATCH diagnostics are preserved, not mislabeled passed
+ or repaired by circular cache text.
+- Four complete primary main bodies and three contextual abstracts reviewed. No figure images or supplementary files
+ inspected, no visually validated OCR equations, no new full copyrighted body or PDF in git.
+- 'Eight tracked cache artifacts, canonical taxonomy and unrelated raw YAML blocks preserved. Metadata followups
+ #1358/#1359 and broader cache/link issues remain open.'
+- 'Four intrinsic source-only scopes move four taxa from solely community credit while total canonical/community
+ coverage remains 1499. Both records become mixed-scope. Initial regressions: 292 pass and one stale ceiling failure.
+ #1360 changes only the ceiling 122 -> 124 and its explanatory comment; all other bounds, participant checks and
+ connectivity behavior remain unchanged. The complete suite is rerun successfully.'
+- Coverage is 123/460, not completion. This is source-based self-adversarial review, not independent approval or
+ protected CI success.
+verification:
+ status: complete_with_documented_reference_retrieval_gaps
+ checks: 27
+ passing_command_exits: 25
+ failed_reference_commands: 1
+ records: 460
+ nodes: 1474
+ edges: 710
+ review_status_counts:
+ needs_research: 3
+ pending: 334
+ reviewed: 123
+ structural_defects: 0
+ network_errors: 0
+ network_warnings: 25
+ new_network_warnings: 0
+ unchanged_raw_blocks: 27
+ snippet_counts:
+ MATCH: 46
+ RENDERING: 0
+ ASSEMBLED: 0
+ WEAK: 0
+ MISMATCH: 3
+ NOCONTENT: 0
+ published_description_coverage:
+ pages: 456
+ node_descriptions: 1460
+ edge_descriptions: 702
+ render_determinism: passed
+ regressions: 293 passed in 187.32s (0:03:07)
+ rights: 3 passed in 1.93s
+ rights_import_root_verified: true
+ caches_unchanged: true
+ primary_artifact_hashes_rechecked: true
+ corpus_sentinels_unchanged: false
+ connectivity_survey_before:
+ records: 460
+ with_community_level: 389
+ mixed: 122
+ community_level_only: 267
+ taxa: 1499
+ credited_solely_by_the_rule: 1221
+ connectivity_survey:
+ records: 460
+ with_community_level: 389
+ mixed: 124
+ community_level_only: 265
+ taxa: 1499
+ credited_solely_by_the_rule: 1217
+ connectivity_delta:
+ records: 0
+ with_community_level: 0
+ mixed: 2
+ community_level_only: -2
+ taxa: 0
+ credited_solely_by_the_rule: -4
+ main_commands: 23
+ remediation_commands: 4
+ initial_regression_failure_fixed: true
+ unresolved_failed_commands: 1
+ other_corpus_sentinels_unchanged: true
+ census_bound_issue: 1360
diff --git a/reports/causal_graph_review/decisions/20261005-two-records-batch25.yaml b/reports/causal_graph_review/decisions/20261005-two-records-batch25.yaml
new file mode 100644
index 000000000..dfdf2fcab
--- /dev/null
+++ b/reports/causal_graph_review/decisions/20261005-two-records-batch25.yaml
@@ -0,0 +1,323 @@
+reviewer: codex
+review_mode: source_based_self_adversarial_review
+independent_approval: false
+base_commit: 2eb1818f3d94f9420099a991136254501b543891
+issues:
+- 1356
+- 1357
+- 1360
+open_nongraph_followups:
+- 1358
+- 1359
+issue_deduplication:
+ all_state_issue_titles_bodies: 691
+ ignored_hidden_local_files_included: true
+ comments_exhaustive: false
+ relevant_issues_read:
+ - 596
+ - 1082
+ - 1289
+ - 1344
+ finding: No exact new graph duplicate in searched scope; broad cache and external-link issues remain open.
+reference_cache_original_hashes:
+ references_cache/PMID_36300970.md: 27c42cb32ffce7ca994a115959fbb6aa13ef7d2d64fc9c6179ab588a0007daad
+ references_cache/doi_10.3389_fmicb.2022.820052.md: 17d049e355cb0e99c41ab947a8336594a3bf6313204209ca59a1f8538d0cb2cd
+ references_cache/doi_10.3389_fmicb.2018.03059.md: a20b7009f3ea56dcba891cac42b9b8cae962b80ccb470e37ee8945f76122fffd
+ references_cache/PMID_22123759.txt: 7ced7a1e9863755e1af1bc7cf3de11d6c889770e4a7dd725423cd937134393f3
+ references_cache/doi_10.1038_s41598-021-95324-9.md: 9186374fcd627ba15f1d6f5cc3473c0032d872ab2073459e61068347b8995577
+ references_cache/PMID_19104861.txt: 8aa57bcf203a71cd9b5df4b79c3c668ed5eec29e43c787deeb347a72aa391538
+ references_cache/doi_10.1111_j.1751-7915.2009.00112.x.md: 9e3ea21b12625ecc4e829d5677761bd3dbf5aadb29b1970e0956cac93ace72e9
+ references_cache/doi_DOI:10.3389_fmicb.2018.03059.json: 14a45425d23cbb930e450dd34ea6b8eba7e1c605b28b0efad6c0ad1e3798c2b2
+limitations:
+- Two records, ten nodes and ten arrows retained; seven renames and two focused gaps/histories. No new graph structure
+ or Edison spend.
+- Four complete primary main bodies and three contextual abstracts reviewed; no figure images or supplementary files
+ inspected.
+- 'Three short Coscinodiscus Results quotes (15 words total) were verified in publisher-provided preview but remain
+ absent from abstract-only local cache; automated mismatch is a documented retrieval gap under #596, not a silently
+ passed independent match.'
+- Eight tracked cache artifacts unchanged; no full copyrighted body or PDF added.
+- 'Unrelated metadata and canonical taxa preserved, not certified; #1358/#1359 remain separate followups.'
+- 'Issue #1360 accounts for the measured mixed-scope count 122 -> 124; only that census ceiling and its explanatory comment change. Other bounds, participant checks and connectivity behavior stay unchanged.'
+- Self-adversarial review is not independent approval, protected CI success or full-corpus completion.
+records:
+- path: kb/communities/Copper_Biomining_Heap_Leach.yaml
+ id: CommunityMech:000019
+ original_sha256: 49e5dcc2b5ca5164ebb9437f56bddbb7806d97d8f04ee8b89d68d170ffd3c1e3
+ record_sha256: 5c620e46ecbe040463098d40373531e88b5b2bc12f08bb57b4d926b3537a0c4e
+ status: reviewed
+ outcome: changed
+ review_file: reports/causal_graph_review/decisions/20261005-two-records-batch25.yaml
+ scope: Whole record and every original node/arrow; primary access and cache limits below.
+ summary: Separate measured intrinsic iron oxidation from early-heap association and failed recovery under SX reagent.;
+ Retain observed succession with correct abundance scale and species boundaries, without competition or resolved
+ field flux.; Distinguish sulfur-oxidation capacity and RNA activity from stable DNA counts, constant acid flux
+ and selective passivation removal.; Retain conditional mineral/redox feedback and direct laboratory outcomes
+ without a closed five-member consortium claim.; Preserve laboratory Sulfobacillus oxidation/leaching and low-ORP
+ advantage; bound field genus-to-species and thermal inference.
+ renamed_nodes:
+ Ferrous Iron Oxidation in Early Heaps: Acidithiobacillus Iron Oxidation and Early-Heap Association
+ Ferrous Iron Oxidation in Aged Heaps: Aged-Heap Iron-Oxidizer Association
+ Thermophilic Iron and Sulfur Oxidation: Sulfobacillus Iron and Sulfur Oxidation Capacity
+ node_decisions:
+ - node: Acidithiobacillus Iron Oxidation and Early-Heap Association
+ rationale: Separate measured intrinsic iron oxidation from early-heap association and failed recovery under
+ SX reagent.
+ - node: Aged-Heap Iron-Oxidizer Association
+ rationale: Retain observed succession with correct abundance scale and species boundaries, without competition
+ or resolved field flux.
+ - node: Sulfur Oxidation to Sulfuric Acid
+ rationale: Distinguish sulfur-oxidation capacity and RNA activity from stable DNA counts, constant acid flux
+ and selective passivation removal.
+ - node: Copper Sulfide Dissolution
+ rationale: Retain conditional mineral/redox feedback and direct laboratory outcomes without a closed five-member
+ consortium claim.
+ - node: Sulfobacillus Iron and Sulfur Oxidation Capacity
+ rationale: Preserve laboratory Sulfobacillus oxidation/leaching and low-ORP advantage; bound field genus-to-species
+ and thermal inference.
+ edges_before:
+ - source: Ferrous Iron Oxidation in Early Heaps
+ target: Copper Sulfide Dissolution
+ description: Fe³⁺ oxidizes chalcopyrite to release Cu²⁺ and regenerate Fe²⁺
+ - source: Ferrous Iron Oxidation in Aged Heaps
+ target: Copper Sulfide Dissolution
+ description: Sustained Fe³⁺ generation maintains copper leaching in aged heaps
+ - source: Sulfur Oxidation to Sulfuric Acid
+ target: Copper Sulfide Dissolution
+ description: Sulfuric acid production sustains the low pH needed for ferric-iron attack on chalcopyrite
+ - source: Copper Sulfide Dissolution
+ target: Ferrous Iron Oxidation in Early Heaps
+ description: Released Fe²⁺ is re-oxidized to regenerate Fe³⁺ oxidant
+ - source: Copper Sulfide Dissolution
+ target: Ferrous Iron Oxidation in Aged Heaps
+ description: Released Fe²⁺ also feeds the acid-tolerant iron oxidizers in aged heap strips
+ - source: Copper Sulfide Dissolution
+ target: Sulfur Oxidation to Sulfuric Acid
+ description: Released reduced inorganic sulfur compounds feed sulfur oxidation to sulfuric acid
+ - source: Copper Sulfide Dissolution
+ target: Thermophilic Iron and Sulfur Oxidation
+ description: Chalcopyrite-associated Fe²⁺ and sulfur substrates feed Sulfobacillus activity in hotter bioleaching
+ niches
+ - source: Thermophilic Iron and Sulfur Oxidation
+ target: Copper Sulfide Dissolution
+ description: Sulfobacillus iron and sulfur oxidation can maintain copper extraction in thermophilic chalcopyrite
+ bioleaching
+ edges_after:
+ - source: Acidithiobacillus Iron Oxidation and Early-Heap Association
+ target: Copper Sulfide Dissolution
+ description: PARTIAL - A. ferrooxidans iron oxidation can replenish ferric oxidant for mineral attack. The chemical
+ cycle and laboratory oxidation support this direction, but the SX assay shows that retained iron oxidation
+ need not sustain copper recovery, and the field contribution is not taxon-resolved.
+ - source: Aged-Heap Iron-Oxidizer Association
+ target: Copper Sulfide Dissolution
+ description: PARTIAL - iron oxidation by the aged-heap associated taxa could replenish ferric oxidant for dissolution.
+ Field succession and separate L. ferriphilum cultures support the proposed contribution without measuring
+ their individual heap fluxes or proving displacement-driven leaching.
+ - source: Sulfur Oxidation to Sulfuric Acid
+ target: Copper Sulfide Dissolution
+ description: PARTIAL - sulfur oxidation can generate acidity and limit reduced-sulfur accumulation, helping
+ sustain mineral attack under suitable conditions. A. thiooxidans-specific acid flux and passivation removal
+ were not selectively established in the field survey.
+ - source: Copper Sulfide Dissolution
+ target: Acidithiobacillus Iron Oxidation and Early-Heap Association
+ description: PARTIAL - mineral attack releases ferrous iron that can supply A. ferrooxidans oxidation, regenerating
+ ferric oxidant. This is a chemically grounded substrate feedback, not a measured taxon-resolved closed loop
+ in the industrial heap.
+ - source: Copper Sulfide Dissolution
+ target: Aged-Heap Iron-Oxidizer Association
+ description: PARTIAL - released ferrous iron can supply the iron-oxidizing taxa associated with older strips.
+ Their individual uptake and feedback fluxes were not traced by the field abundance and RNA assays.
+ - source: Copper Sulfide Dissolution
+ target: Sulfur Oxidation to Sulfuric Acid
+ description: PARTIAL - mineral dissolution generates reduced inorganic sulfur substrates that can feed A. thiooxidans
+ sulfur oxidation. The reaction-cycle context supports direction, not selective proof of its share of field
+ acid generation or passivation control.
+ - source: Copper Sulfide Dissolution
+ target: Sulfobacillus Iron and Sulfur Oxidation Capacity
+ description: PARTIAL - chalcopyrite-associated ferrous iron and reduced sulfur can feed Sulfobacillus oxidation
+ in the tested cultures. This substrate feedback does not demonstrate exact-species transfer or activity in
+ hotter industrial heap niches.
+ - source: Sulfobacillus Iron and Sulfur Oxidation Capacity
+ target: Copper Sulfide Dissolution
+ description: PARTIAL - Sulfobacillus iron/sulfur oxidation can support leaching in the tested laboratory systems,
+ subject to redox potential and SX inhibition. The lower-ORP advantage contradicts a universal more-iron-oxidation
+ benefit; exact field-species and hot-zone contributions remain unresolved.
+ retained_edge_decisions:
+ - source: Acidithiobacillus Iron Oxidation and Early-Heap Association
+ target: Copper Sulfide Dissolution
+ rationale: PARTIAL - A. ferrooxidans iron oxidation can replenish ferric oxidant for mineral attack. The chemical
+ cycle and laboratory oxidation support this direction, but the SX assay shows that retained iron oxidation
+ need not sustain copper recovery, and the field contribution is not taxon-resolved.
+ - source: Aged-Heap Iron-Oxidizer Association
+ target: Copper Sulfide Dissolution
+ rationale: PARTIAL - iron oxidation by the aged-heap associated taxa could replenish ferric oxidant for dissolution.
+ Field succession and separate L. ferriphilum cultures support the proposed contribution without measuring
+ their individual heap fluxes or proving displacement-driven leaching.
+ - source: Sulfur Oxidation to Sulfuric Acid
+ target: Copper Sulfide Dissolution
+ rationale: PARTIAL - sulfur oxidation can generate acidity and limit reduced-sulfur accumulation, helping sustain
+ mineral attack under suitable conditions. A. thiooxidans-specific acid flux and passivation removal were not
+ selectively established in the field survey.
+ - source: Copper Sulfide Dissolution
+ target: Acidithiobacillus Iron Oxidation and Early-Heap Association
+ rationale: PARTIAL - mineral attack releases ferrous iron that can supply A. ferrooxidans oxidation, regenerating
+ ferric oxidant. This is a chemically grounded substrate feedback, not a measured taxon-resolved closed loop
+ in the industrial heap.
+ - source: Copper Sulfide Dissolution
+ target: Aged-Heap Iron-Oxidizer Association
+ rationale: PARTIAL - released ferrous iron can supply the iron-oxidizing taxa associated with older strips.
+ Their individual uptake and feedback fluxes were not traced by the field abundance and RNA assays.
+ - source: Copper Sulfide Dissolution
+ target: Sulfur Oxidation to Sulfuric Acid
+ rationale: PARTIAL - mineral dissolution generates reduced inorganic sulfur substrates that can feed A. thiooxidans
+ sulfur oxidation. The reaction-cycle context supports direction, not selective proof of its share of field
+ acid generation or passivation control.
+ - source: Copper Sulfide Dissolution
+ target: Sulfobacillus Iron and Sulfur Oxidation Capacity
+ rationale: PARTIAL - chalcopyrite-associated ferrous iron and reduced sulfur can feed Sulfobacillus oxidation
+ in the tested cultures. This substrate feedback does not demonstrate exact-species transfer or activity in
+ hotter industrial heap niches.
+ - source: Sulfobacillus Iron and Sulfur Oxidation Capacity
+ target: Copper Sulfide Dissolution
+ rationale: PARTIAL - Sulfobacillus iron/sulfur oxidation can support leaching in the tested laboratory systems,
+ subject to redox potential and SX inhibition. The lower-ORP advantage contradicts a universal more-iron-oxidation
+ benefit; exact field-species and hot-zone contributions remain unresolved.
+ removed_edge_decisions: []
+ references:
+ - doi:10.1111/j.1751-7915.2009.00112.x
+ - doi:10.3389/fmicb.2018.03059
+ - doi:10.3389/fmicb.2022.820052
+ - doi:10.1038/s41598-021-95324-9
+ - PMID:22123759
+ - PMID:19104861
+ issues:
+ - 1356
+ allowed_changed_fields:
+ - curation_history
+ - discussions
+ - ecological_interactions
+ curation_events_added: 1
+ history_files:
+ - history/records/Copper_Biomining_Heap_Leach/2026-10-06T025228Z-codex-9c8b7f.yaml
+ source_review:
+ doi:10.1111/j.1751-7915.2009.00112.x:
+ url: https://pmc.ncbi.nlm.nih.gov/articles/PMC3815317/
+ path: /private/tmp/communitymech-batch24/PMC3815317.xml
+ sha256: 98fa9e2416d7d3e7a8505121448bd4aadd44eac77603d59fb3d3fecc1fa6fdc6
+ license: Copyright 2009 authors/journal; no new full body committed
+ reviewed_scope: 'Complete primary main body: Methods, Results, Discussion/Conclusion, main tables and displayed
+ captions. No figure images or supplementary files inspected.'
+ doi:10.3389/fmicb.2018.03059:
+ url: https://pmc.ncbi.nlm.nih.gov/articles/PMC6315122/
+ path: /private/tmp/communitymech-batch24/PMC6315122.xml
+ sha256: 78bc2cc1d5990d5f151e3bb67114f5a850473a1f10eb92f7eca824c503a1039b
+ license: CC BY
+ reviewed_scope: 'Complete primary main body: Methods, Results, Discussion/Conclusion, main tables and displayed
+ captions. No figure images or supplementary files inspected.'
+ doi:10.3389/fmicb.2022.820052:
+ url: https://pmc.ncbi.nlm.nih.gov/articles/PMC8972061/
+ path: /private/tmp/communitymech-batch24/PMC8972061.xml
+ sha256: 0aa10fd1dcac06b5e769dd0042ad638227aa38e54ccaa06d3607ab4bb108018a
+ license: CC BY 4.0
+ reviewed_scope: 'Complete primary main body: Methods, Results, Discussion/Conclusion, main tables and displayed
+ captions. No figure images or supplementary files inspected.'
+ doi:10.1038/s41598-021-95324-9:
+ url: https://pubmed.ncbi.nlm.nih.gov/34381075/
+ reviewed_scope: Complete abstract only, contextual source; not a full-body or exact-field mechanistic review.
+ PMID:22123759:
+ url: https://pubmed.ncbi.nlm.nih.gov/22123759/
+ reviewed_scope: Complete abstract only, contextual source; not a full-body or exact-field mechanistic review.
+ PMID:19104861:
+ url: https://pubmed.ncbi.nlm.nih.gov/19104861/
+ reviewed_scope: Complete abstract only, contextual source; not a full-body or exact-field mechanistic review.
+- path: kb/communities/Coscinodiscus_Synthetic_Community.yaml
+ id: CommunityMech:000020
+ original_sha256: f92a79a6011428899eba0cc8e8de5bbd1410bb2e2e7e13b10593869ad1fd3b32
+ record_sha256: 96bf155c9e47de5f8934bbf367f392bfcee5073098125c841db171fd0b9dda1a
+ status: reviewed
+ outcome: changed
+ review_file: reports/causal_graph_review/decisions/20261005-two-records-batch25.yaml
+ scope: Whole record and every original node/arrow; primary access and cache limits below.
+ summary: Retain candidate diatom resource provision and actual Crocei1 promotion without universal dependence
+ or measured metabolite donation.; Keep DMSP homology potential computational, distinct from consumption, product
+ flux and a negative carbon-only growth assay.; Preserve distinct reciprocal growth signs and control-relative
+ algal recovery rather than global mutualism.; Preserve real pooled nutrient responses and the CS4 negative control
+ without individual-vitamin rescue or exact B12-form claims.; Retain empirical community inhibition and phase-specific
+ model success without reciprocal harm or universal exclusion of higher-order interactions.
+ renamed_nodes:
+ Diatom Primary Production and Carbon Release: Candidate Diatom Resource Provision
+ Bacterial DMSP Metabolism: Bacterial DMSP Catabolic Potential
+ Bacterial Auxotrophy and Nutrient Dependence: Bacterial Nutrient Supplement Responses
+ Community-Level Emergent Effects: Community Growth and Pairwise Model
+ node_decisions:
+ - node: Candidate Diatom Resource Provision
+ rationale: Retain candidate diatom resource provision and actual Crocei1 promotion without universal dependence
+ or measured metabolite donation.
+ - node: Bacterial DMSP Catabolic Potential
+ rationale: Keep DMSP homology potential computational, distinct from consumption, product flux and a negative
+ carbon-only growth assay.
+ - node: Growth Phase-Dependent Bacterial Effects
+ rationale: Preserve distinct reciprocal growth signs and control-relative algal recovery rather than global
+ mutualism.
+ - node: Bacterial Nutrient Supplement Responses
+ rationale: Preserve real pooled nutrient responses and the CS4 negative control without individual-vitamin rescue
+ or exact B12-form claims.
+ - node: Community Growth and Pairwise Model
+ rationale: Retain empirical community inhibition and phase-specific model success without reciprocal harm or
+ universal exclusion of higher-order interactions.
+ edges_before:
+ - source: Diatom Primary Production and Carbon Release
+ target: Bacterial DMSP Metabolism
+ description: Diatom-released DMSP and organic compounds support bacterial growth
+ - source: Growth Phase-Dependent Bacterial Effects
+ target: Community-Level Emergent Effects
+ description: Pairwise C. radiatus-bacterium effects vary across partners and growth phases and combine into
+ an all-member culture whose net effect on algal growth is inhibitory without requiring bacterial-bacterial
+ synergy.
+ edges_after:
+ - source: Candidate Diatom Resource Provision
+ target: Bacterial DMSP Catabolic Potential
+ description: HYPOTHESIZED - diatom-derived DMSP could provide substrate for the genomic catabolic potential
+ of CS4 and Rose1. No partner-resolved release, consumption or flux was measured, and added DMSP as the carbon-only
+ supplement did not promote growth under the tested minimal-medium conditions.
+ - source: Growth Phase-Dependent Bacterial Effects
+ target: Community Growth and Pairwise Model
+ description: PARTIAL - the measured partner- and phase-specific effects combine into the observed predominantly
+ inhibitory all-member algal trajectory. A generalized Lotka-Volterra model fitted to monocultures and pairwise
+ cultures reproduces that trajectory with separate early/late parameter sets; this supports the proposed contribution
+ without isolating chemical mediators or proving higher-order interactions universally absent.
+ retained_edge_decisions:
+ - source: Candidate Diatom Resource Provision
+ target: Bacterial DMSP Catabolic Potential
+ rationale: HYPOTHESIZED - diatom-derived DMSP could provide substrate for the genomic catabolic potential of
+ CS4 and Rose1. No partner-resolved release, consumption or flux was measured, and added DMSP as the carbon-only
+ supplement did not promote growth under the tested minimal-medium conditions.
+ - source: Growth Phase-Dependent Bacterial Effects
+ target: Community Growth and Pairwise Model
+ rationale: PARTIAL - the measured partner- and phase-specific effects combine into the observed predominantly
+ inhibitory all-member algal trajectory. A generalized Lotka-Volterra model fitted to monocultures and pairwise
+ cultures reproduces that trajectory with separate early/late parameter sets; this supports the proposed contribution
+ without isolating chemical mediators or proving higher-order interactions universally absent.
+ removed_edge_decisions: []
+ references:
+ - PMID:36300970
+ issues:
+ - 1357
+ allowed_changed_fields:
+ - curation_history
+ - discussions
+ - ecological_interactions
+ curation_events_added: 1
+ history_files:
+ - history/records/Coscinodiscus_Synthetic_Community/2026-10-06T025228Z-codex-c5e0cf.yaml
+ source_review:
+ PMID:36300970:
+ url: https://www.researchgate.net/publication/364814644_Dynamic_Diatom-Bacteria_Consortia_in_Synthetic_Plankton_Communities
+ doi: 10.1128/aem.01619-22
+ publisher_attribution: ASM-provided publisher full-text preview, explicitly identified on page
+ license: Copyright 2022 American Society for Microbiology, all rights reserved
+ reviewed_scope: Complete primary main body, Methods, Results, Discussion/Conclusion, Tables 1-2 and displayed
+ captions. No figure images or supplementary files inspected; OCR equations not visually validated.
+ cache_scope: Existing abstract-only cache byte-preserved; three new short Results quotes independently read
+ in publisher preview, not matched by local abstract. No curated excerpt promoted to independent cache text.
+ new_body_quotes_words: 15
diff --git a/reports/causal_graph_review/inventory.tsv b/reports/causal_graph_review/inventory.tsv
index 816daee6e..c60d18cc4 100644
--- a/reports/causal_graph_review/inventory.tsv
+++ b/reports/causal_graph_review/inventory.tsv
@@ -120,10 +120,10 @@ kb/communities/Coastal_Forested_Wetland_Seawater_Ion_Microcosm_Community.yaml Co
kb/communities/Community_G_GenX_Biodegradation_Consortium.yaml CommunityMech:000387 4aefdcd766a663a1d8fd547207b3f754cfcf6bc938f2212ea4389ca221aacb8d 1 0 55.0 reports/causal_graph_review/decisions/20261005-three-records-batch23.yaml reviewed
kb/communities/Composting_SynCom_Lignocellulose_Degradation_Humus.yaml CommunityMech:000277 16e496ddf18a513d3b3ca26c61999146cdf18b0675044ad7ae0d1425482ed270 3 2 90.0 reports/causal_graph_review/decisions/20261005-three-records-batch23.yaml reviewed
kb/communities/Coniochaeta_Sphingobacterium_Citrobacter_Wheat_Straw_Consortium.yaml CommunityMech:000195 eb6927ba0ac59c0884bc3f479f20606ca4ae1f80b0855c415759db879a03fd2f 4 2 90.0 reports/causal_graph_review/decisions/20261005-three-records-batch23.yaml reviewed
-kb/communities/Copper_Biomining_Heap_Leach.yaml CommunityMech:000019 49e5dcc2b5ca5164ebb9437f56bddbb7806d97d8f04ee8b89d68d170ffd3c1e3 5 8 100.0 pending
+kb/communities/Copper_Biomining_Heap_Leach.yaml CommunityMech:000019 5c620e46ecbe040463098d40373531e88b5b2bc12f08bb57b4d926b3537a0c4e 5 8 90.0 reports/causal_graph_review/decisions/20261005-two-records-batch25.yaml reviewed
kb/communities/Cordyceps_Malbranchea_Antimicrobial_Coculture.yaml CommunityMech:000453 2b61b970b93b4db345670df9f86f00ba299b29ba76cb56b99333fd8bf68e7c6d 2 0 55.0 reports/causal_graph_review/decisions/20261005-three-records-batch24.yaml reviewed
kb/communities/Corynebacterium_glutamicum_Shewanella_oneidensis_Succinic_Acid_Coculture.yaml CommunityMech:000294 1522534e0e993cff111c4fcde85182868aeae81389cb47120d97a3882b88250d 3 2 90.0 reports/causal_graph_review/decisions/20261005-three-records-batch24.yaml reviewed
-kb/communities/Coscinodiscus_Synthetic_Community.yaml CommunityMech:000020 f92a79a6011428899eba0cc8e8de5bbd1410bb2e2e7e13b10593869ad1fd3b32 5 2 100.0 pending
+kb/communities/Coscinodiscus_Synthetic_Community.yaml CommunityMech:000020 96bf155c9e47de5f8934bbf367f392bfcee5073098125c841db171fd0b9dda1a 5 2 90.0 reports/causal_graph_review/decisions/20261005-two-records-batch25.yaml reviewed
kb/communities/Crucian_Carp_Gut_Disease_Resistance_SynCom.yaml CommunityMech:000293 5dc07af806fbaa10b2eb522c2e5221c404aabc6ff58ea1f9cec7062ba079f09e 3 2 90.0 reports/causal_graph_review/decisions/20261005-three-records-batch24.yaml reviewed
kb/communities/Crystal_Geyser_CO2_Aquifer_CPR_Lipid_Community.yaml CommunityMech:000252 57f51f8d2b027fa5a47e9cb28eac879906288e696892879c71a63c2db1091662 3 2 100.0 pending
kb/communities/Cultivated_Meat_Contaminant_SynCom.yaml CommunityMech:000366 432da24bbdadb8fb88ea3c7aec46d75743748ef94449b645a1a199bd651d047e 2 0 70.0 pending
diff --git a/reports/causal_graph_review/summary.json b/reports/causal_graph_review/summary.json
index 7578237d0..83847f943 100644
--- a/reports/causal_graph_review/summary.json
+++ b/reports/causal_graph_review/summary.json
@@ -8,8 +8,8 @@
"records_without_edges": 141,
"review_status_counts": {
"needs_research": 3,
- "pending": 336,
- "reviewed": 121
+ "pending": 334,
+ "reviewed": 123
},
"structural_defects": [],
"network_audit": [
diff --git a/reports/causal_graph_review/validation-20261005-batch25.json b/reports/causal_graph_review/validation-20261005-batch25.json
new file mode 100644
index 000000000..400b5f88f
--- /dev/null
+++ b/reports/causal_graph_review/validation-20261005-batch25.json
@@ -0,0 +1,601 @@
+{
+ "base_commit": "2eb1818f3d94f9420099a991136254501b543891",
+ "scope": [
+ "kb/communities/Copper_Biomining_Heap_Leach.yaml",
+ "kb/communities/Coscinodiscus_Synthetic_Community.yaml"
+ ],
+ "reference_validator_version": "0.1.7",
+ "results": [
+ {
+ "check": "Copper_Biomining_Heap_Leach-schema",
+ "command": [
+ "linkml-validate",
+ "-s",
+ "src/communitymech/schema/communitymech.yaml",
+ "kb/communities/Copper_Biomining_Heap_Leach.yaml"
+ ],
+ "exit_code": 0,
+ "expected_exit_codes": [
+ 0
+ ],
+ "output": "No issues found\n"
+ },
+ {
+ "check": "Copper_Biomining_Heap_Leach-strict",
+ "command": [
+ "python3",
+ "scripts/validate_strict.py",
+ "--workers",
+ "1",
+ "--out",
+ "
/Copper_Biomining_Heap_Leach-strict.tsv",
+ "kb/communities/Copper_Biomining_Heap_Leach.yaml"
+ ],
+ "exit_code": 0,
+ "expected_exit_codes": [
+ 0
+ ],
+ "output": "Validating 1 files with 1 workers; schema=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: /Copper_Biomining_Heap_Leach-strict.tsv\n"
+ },
+ {
+ "check": "Copper_Biomining_Heap_Leach-terms",
+ "command": [
+ "linkml-term-validator",
+ "validate-data",
+ "kb/communities/Copper_Biomining_Heap_Leach.yaml",
+ "-s",
+ "src/communitymech/schema/communitymech.yaml",
+ "--labels"
+ ],
+ "exit_code": 0,
+ "expected_exit_codes": [
+ 0
+ ],
+ "output": "\u2705 Validation passed\n"
+ },
+ {
+ "check": "Copper_Biomining_Heap_Leach-references-explained",
+ "command": [
+ "linkml-reference-validator",
+ "validate",
+ "data",
+ "kb/communities/Copper_Biomining_Heap_Leach.yaml",
+ "-s",
+ "src/communitymech/schema/communitymech.yaml",
+ "--config",
+ "conf/reference_validator.yaml"
+ ],
+ "exit_code": 0,
+ "expected_exit_codes": [
+ 0
+ ],
+ "output": "Validating kb/communities/Copper_Biomining_Heap_Leach.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": "Copper_Biomining_Heap_Leach-snippets",
+ "command": [
+ "python3",
+ "scripts/evidence_snippet_audit.py",
+ "kb/communities/Copper_Biomining_Heap_Leach.yaml",
+ "--list-mismatch",
+ "--list-nocontent",
+ "--list-rendering",
+ "--list-assembled"
+ ],
+ "exit_code": 0,
+ "expected_exit_codes": [
+ 0
+ ],
+ "output": "# 32 evidence snippets scanned across 1 files\n MATCH 32\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": "Copper_Biomining_Heap_Leach-rank",
+ "command": [
+ "python3",
+ "scripts/rank_causal_graph_readiness.py",
+ "kb/communities/Copper_Biomining_Heap_Leach.yaml",
+ "--format",
+ "json"
+ ],
+ "exit_code": 0,
+ "expected_exit_codes": [
+ 0
+ ],
+ "output": "[\n {\n \"rank\": 1,\n \"id\": \"CommunityMech:000019\",\n \"name\": \"Copper Biomining Heap Leach Consortium\",\n \"score\": 90.0,\n \"taxonomy\": 5,\n \"connected_taxa\": 5,\n \"disconnected_taxa\": 0,\n \"ecological_interactions\": 5,\n \"downstream_edges\": 8,\n \"interaction_evidence\": 10,\n \"dangling_downstream\": 0,\n \"self_downstream\": 0,\n \"missing\": [\n \"interaction_type\"\n ],\n \"path\": \"kb/communities/Copper_Biomining_Heap_Leach.yaml\"\n }\n]\n"
+ },
+ {
+ "check": "Copper_Biomining_Heap_Leach-history-0",
+ "command": [
+ "linkml-validate",
+ "-s",
+ "src/communitymech/schema/history.yaml",
+ "--target-class",
+ "HistoryRecord",
+ "history/records/Copper_Biomining_Heap_Leach/2026-10-06T025228Z-codex-9c8b7f.yaml"
+ ],
+ "exit_code": 0,
+ "expected_exit_codes": [
+ 0
+ ],
+ "output": "No issues found\n"
+ },
+ {
+ "check": "Coscinodiscus_Synthetic_Community-schema",
+ "command": [
+ "linkml-validate",
+ "-s",
+ "src/communitymech/schema/communitymech.yaml",
+ "kb/communities/Coscinodiscus_Synthetic_Community.yaml"
+ ],
+ "exit_code": 0,
+ "expected_exit_codes": [
+ 0
+ ],
+ "output": "No issues found\n"
+ },
+ {
+ "check": "Coscinodiscus_Synthetic_Community-strict",
+ "command": [
+ "python3",
+ "scripts/validate_strict.py",
+ "--workers",
+ "1",
+ "--out",
+ "/Coscinodiscus_Synthetic_Community-strict.tsv",
+ "kb/communities/Coscinodiscus_Synthetic_Community.yaml"
+ ],
+ "exit_code": 0,
+ "expected_exit_codes": [
+ 0
+ ],
+ "output": "Validating 1 files with 1 workers; schema=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: /Coscinodiscus_Synthetic_Community-strict.tsv\n"
+ },
+ {
+ "check": "Coscinodiscus_Synthetic_Community-terms",
+ "command": [
+ "linkml-term-validator",
+ "validate-data",
+ "kb/communities/Coscinodiscus_Synthetic_Community.yaml",
+ "-s",
+ "src/communitymech/schema/communitymech.yaml",
+ "--labels"
+ ],
+ "exit_code": 0,
+ "expected_exit_codes": [
+ 0
+ ],
+ "output": "\u2705 Validation passed\n"
+ },
+ {
+ "check": "Coscinodiscus_Synthetic_Community-references-explained",
+ "command": [
+ "linkml-reference-validator",
+ "validate",
+ "data",
+ "kb/communities/Coscinodiscus_Synthetic_Community.yaml",
+ "-s",
+ "src/communitymech/schema/communitymech.yaml",
+ "--config",
+ "conf/reference_validator.yaml"
+ ],
+ "exit_code": 1,
+ "expected_exit_codes": [
+ 0
+ ],
+ "output": "Validating kb/communities/Coscinodiscus_Synthetic_Community.yaml against schema src/communitymech/schema/communitymech.yaml\nCache directory: references_cache\n\nValidation Issues (3):\n [ERROR] Text part not found as substring: 'Crocei1 grew to significantly higher density' (note: only the abstract is cached for PMID:36300970; try `just cache-fulltext PMID:36300970`)\n Location: ecological_interactions[0].evidence[0].snippet\n Reference: PMID:36300970\n [ERROR] Text part not found as substring: 'potential for DMSP consumption' (note: only the abstract is cached for PMID:36300970; try `just cache-fulltext PMID:36300970`)\n Location: ecological_interactions[1].evidence[0].snippet\n Reference: PMID:36300970\n [ERROR] Text part not found as substring: 'all other bacteria grew better' (note: only the abstract is cached for PMID:36300970; try `just cache-fulltext PMID:36300970`)\n Location: ecological_interactions[3].evidence[0].snippet\n Reference: PMID:36300970\n\nValidation Summary:\n Total checks: 3\n Issues found: 3\n\n[annotate] rewrote 3 misleading 'only abstract available' note(s) (#496)\n"
+ },
+ {
+ "check": "Coscinodiscus_Synthetic_Community-snippets",
+ "command": [
+ "python3",
+ "scripts/evidence_snippet_audit.py",
+ "kb/communities/Coscinodiscus_Synthetic_Community.yaml",
+ "--list-mismatch",
+ "--list-nocontent",
+ "--list-rendering",
+ "--list-assembled"
+ ],
+ "exit_code": 0,
+ "expected_exit_codes": [
+ 0
+ ],
+ "output": "# 17 evidence snippets scanned across 1 files\n MATCH 14\n RENDERING 0\n ASSEMBLED 0\n WEAK 0\n MISMATCH 3\n NOCONTENT 0\n\n# Files with MISMATCH/WEAK (content present but snippet absent) \u2014 fabrication suspects\n 3 (3 hard) kb/communities/Coscinodiscus_Synthetic_Community.yaml\n\n# MISMATCH/WEAK detail\n [MISMATCH cov=0.03] kb/communities/Coscinodiscus_Synthetic_Community.yaml PMID:36300970\n Crocei1 grew to significantly higher density...\n [MISMATCH cov=0.0] kb/communities/Coscinodiscus_Synthetic_Community.yaml PMID:36300970\n potential for DMSP consumption...\n [MISMATCH cov=0.04] kb/communities/Coscinodiscus_Synthetic_Community.yaml PMID:36300970\n all other bacteria grew better...\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": "Coscinodiscus_Synthetic_Community-rank",
+ "command": [
+ "python3",
+ "scripts/rank_causal_graph_readiness.py",
+ "kb/communities/Coscinodiscus_Synthetic_Community.yaml",
+ "--format",
+ "json"
+ ],
+ "exit_code": 0,
+ "expected_exit_codes": [
+ 0
+ ],
+ "output": "[\n {\n \"rank\": 1,\n \"id\": \"CommunityMech:000020\",\n \"name\": \"Coscinodiscus Synthetic Community\",\n \"score\": 90.0,\n \"taxonomy\": 5,\n \"connected_taxa\": 5,\n \"disconnected_taxa\": 0,\n \"ecological_interactions\": 5,\n \"downstream_edges\": 2,\n \"interaction_evidence\": 5,\n \"dangling_downstream\": 0,\n \"self_downstream\": 0,\n \"missing\": [\n \"interaction_type\"\n ],\n \"path\": \"kb/communities/Coscinodiscus_Synthetic_Community.yaml\"\n }\n]\n"
+ },
+ {
+ "check": "Coscinodiscus_Synthetic_Community-history-0",
+ "command": [
+ "linkml-validate",
+ "-s",
+ "src/communitymech/schema/history.yaml",
+ "--target-class",
+ "HistoryRecord",
+ "history/records/Coscinodiscus_Synthetic_Community/2026-10-06T025228Z-codex-c5e0cf.yaml"
+ ],
+ "exit_code": 0,
+ "expected_exit_codes": [
+ 0
+ ],
+ "output": "No issues found\n"
+ },
+ {
+ "check": "inventory",
+ "command": [
+ "python3",
+ "reports/causal_graph_review/build_inventory.py"
+ ],
+ "exit_code": 0,
+ "expected_exit_codes": [
+ 0
+ ],
+ "output": "{\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\": 1474,\n \"edges\": 710,\n \"records_without_nodes\": 8,\n \"records_without_edges\": 141,\n \"review_status_counts\": {\n \"needs_research\": 3,\n \"pending\": 334,\n \"reviewed\": 123\n },\n \"structural_defects\": []\n}\n"
+ },
+ {
+ "check": "network",
+ "command": [
+ "python3",
+ "-m",
+ "communitymech.cli",
+ "audit-network",
+ "--json"
+ ],
+ "exit_code": 1,
+ "expected_exit_codes": [
+ 1
+ ],
+ "output": "Pinus massoniana' not found in taxonomy section (community-level scope)\"\n },\n {\n \"type\": \"UNKNOWN_TARGET\",\n \"interaction\": \"Protective Enzyme and Resistance-Gene Activation\",\n \"interaction_index\": 2,\n \"taxon\": \"Pinus massoniana\",\n \"severity\": \"warning\",\n \"message\": \"Target taxon 'Pinus massoniana' not found in taxonomy section (community-level scope)\"\n }\n ],\n \"Brocadia_Low_Nitrogen_Anammox_Consortium\": [\n {\n \"type\": \"DISCONNECTED\",\n \"taxon\": \"Ca. Kuenenia early-acclimation lineage\",\n \"taxon_id\": \"NCBITaxon:380738\",\n \"taxon_data\": {\n \"taxon_term\": {\n \"preferred_term\": \"Ca. Kuenenia early-acclimation lineage\",\n \"term\": {\n \"id\": \"NCBITaxon:380738\",\n \"label\": \"Candidatus Kuenenia\"\n },\n \"gtdb_grounding_status\": \"UNRESOLVED\",\n \"notes\": \"Ca. Kuenenia was resolved at genus level as an early-acclimation anammox lineage that was ultimately replaced by Ca. Brocadia.\"\n },\n \"functional_role\": [\n \"PRIMARY_PRODUCER\"\n ],\n \"evidence\": [\n {\n \"reference\": \"PMID:42323145\",\n \"supports\": \"SUPPORT\",\n \"evidence_source\": \"COMPUTATIONAL\",\n \"snippet\": \"During early acclimation, Ca. Kuenenia reduced the expression of costly biosynthetic pathways\",\n \"explanation\": \"Supports Ca. Kuenenia as the early-acclimation lineage tracked in the biofilter succession study.\"\n }\n ]\n },\n \"message\": \"Taxon 'Ca. Kuenenia early-acclimation lineage' has no interactions\"\n }\n ],\n \"Mangrove_Benzene_MFC_Bioanode_Consortium\": [\n {\n \"type\": \"DISCONNECTED\",\n \"taxon\": \"Pelobacter\",\n \"taxon_id\": \"NCBITaxon:18\",\n \"taxon_data\": {\n \"taxon_term\": {\n \"preferred_term\": \"Pelobacter\",\n \"term\": {\n \"id\": \"NCBITaxon:18\",\n \"label\": \"Pelobacter\"\n },\n \"gtdb_grounding_status\": \"UNRESOLVED\",\n \"notes\": \"Pelobacter was a lower-abundance genus in the benzene-fed 16S profile; no species-level identity or functional role was resolved.\\n\"\n },\n \"relative_abundance\": 2.22,\n \"relative_abundance_unit\": \"percent\",\n \"evidence\": [\n {\n \"reference\": \"PMID:41210787\",\n \"supports\": \"SUPPORT\",\n \"evidence_source\": \"IN_VITRO\",\n \"snippet\": \"Pelobacter, Desulfurumonas, and Pseudomonas were also identified at 2.22, 1.64, and 0.87%\",\n \"explanation\": \"Supports Pelobacter as a minor detected genus in the benzene-fed MFC biofilm.\"\n }\n ]\n },\n \"message\": \"Taxon 'Pelobacter' has no interactions\"\n },\n {\n \"type\": \"DISCONNECTED\",\n \"taxon\": \"Pseudomonas\",\n \"taxon_id\": \"NCBITaxon:286\",\n \"taxon_data\": {\n \"taxon_term\": {\n \"preferred_term\": \"Pseudomonas\",\n \"term\": {\n \"id\": \"NCBITaxon:286\",\n \"label\": \"Pseudomonas\"\n },\n \"gtdb_grounding_status\": \"UNRESOLVED\",\n \"notes\": \"Pseudomonas was a lower-abundance genus in the benzene-fed 16S profile; no species-level identity or functional role was resolved.\\n\"\n },\n \"relative_abundance\": 0.87,\n \"relative_abundance_unit\": \"percent\",\n \"evidence\": [\n {\n \"reference\": \"PMID:41210787\",\n \"supports\": \"SUPPORT\",\n \"evidence_source\": \"IN_VITRO\",\n \"snippet\": \"Pelobacter, Desulfurumonas, and Pseudomonas were also identified at 2.22, 1.64, and 0.87%\",\n \"explanation\": \"Supports Pseudomonas as a minor detected genus in the benzene-fed MFC biofilm.\"\n }\n ]\n },\n \"message\": \"Taxon 'Pseudomonas' has no interactions\"\n }\n ],\n \"Nitrifying_Wastewater_Ammonia_Oxidizing_Consortium\": [\n {\n \"type\": \"DISCONNECTED\",\n \"taxon\": \"Legionella MAGs\",\n \"taxon_id\": \"NCBITaxon:445\",\n \"taxon_data\": {\n \"taxon_term\": {\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": "render",
+ "command": [
+ "python3",
+ "-m",
+ "communitymech.render"
+ ],
+ "exit_code": 0,
+ "expected_exit_codes": [
+ 0
+ ],
+ "output": "South_Bay_Salt_Pond_Methane_Restoration_Community.html\n \u2713 Soy_Sauce_Temporal_SevenSpecies_SynCom.yaml \u2192 docs/communities/Soy_Sauce_Temporal_SevenSpecies_SynCom.html\n \u2713 Soybean_Chlorophyll_Selected_Biofertilizer_SynCom.yaml \u2192 docs/communities/Soybean_Chlorophyll_Selected_Biofertilizer_SynCom.html\n \u2713 Soybean_N_Fixation_sfSynCom.yaml \u2192 docs/communities/Soybean_N_Fixation_sfSynCom.html\n \u2713 Soymilk_Mixed_Starter_Metabolic_Division_SynCom.yaml \u2192 docs/communities/Soymilk_Mixed_Starter_Metabolic_Division_SynCom.html\n \u2713 Space_Habitat_SevenMember_Stress_Tolerance_SynCom.yaml \u2192 docs/communities/Space_Habitat_SevenMember_Stress_Tolerance_SynCom.html\n \u2713 Sphingobium_Nitrososphaera_Phenanthrene_Carbon_SynCom.yaml \u2192 docs/communities/Sphingobium_Nitrososphaera_Phenanthrene_Carbon_SynCom.html\n \u2713 Sphingobium_Rhodococcus_Lignin_Dimer_Valorization_Coculture.yaml \u2192 docs/communities/Sphingobium_Rhodococcus_Lignin_Dimer_Valorization_Coculture.html\n \u2713 Staged_Cattle_Manure_Ensifer_Bacillus_SynCom.yaml \u2192 docs/communities/Staged_Cattle_Manure_Ensifer_Bacillus_SynCom.html\n \u2713 Staphylococcus_Candida_Context_Dependent_Biofilm_Coculture.yaml \u2192 docs/communities/Staphylococcus_Candida_Context_Dependent_Biofilm_Coculture.html\n \u2713 Stordalen_Mire_Methylotrophic_Methanogenesis_Community.yaml \u2192 docs/communities/Stordalen_Mire_Methylotrophic_Methanogenesis_Community.html\n \u2713 Streptomyces_A2_A5_A11_M7_Pesticide_Consortium.yaml \u2192 docs/communities/Streptomyces_A2_A5_A11_M7_Pesticide_Consortium.html\n \u2713 Subsurface_Carboxydocella_CO_Aquifer_Community.yaml \u2192 docs/communities/Subsurface_Carboxydocella_CO_Aquifer_Community.html\n \u2713 Suillus_Bacillus_Thiamine_Ectomycorrhizal_SynCom.yaml \u2192 docs/communities/Suillus_Bacillus_Thiamine_Ectomycorrhizal_SynCom.html\n \u2713 Sulfide_Spring_Autotrophic_CPR_Biofilm.yaml \u2192 docs/communities/Sulfide_Spring_Autotrophic_CPR_Biofilm.html\n \u2713 SynComBac10_Chicken_Intestinal_SynCom.yaml \u2192 docs/communities/SynComBac10_Chicken_Intestinal_SynCom.html\n \u2713 SynCom_ARC_Peanut_Aflatoxin_Nodulation.yaml \u2192 docs/communities/SynCom_ARC_Peanut_Aflatoxin_Nodulation.html\n \u2713 SynCom_BsBv_Cigar_Tobacco_Leaf_Fermentation.yaml \u2192 docs/communities/SynCom_BsBv_Cigar_Tobacco_Leaf_Fermentation.html\n \u2713 SynCom_Chlorella_sorokiniana_Biogas_Slurry_Coupling_System.yaml \u2192 docs/communities/SynCom_Chlorella_sorokiniana_Biogas_Slurry_Coupling_System.html\n \u2713 SynCom_MetG2_Rhizobacteria_Sugarcane_Stress_Resilience.yaml \u2192 docs/communities/SynCom_MetG2_Rhizobacteria_Sugarcane_Stress_Resilience.html\n \u2713 SynCom_Pseudomonas_Rahnella_Artemisia_Phytoremediation.yaml \u2192 docs/communities/SynCom_Pseudomonas_Rahnella_Artemisia_Phytoremediation.html\n \u2713 SynCom_Sesame_Flavor_Baijiu_Fuqu_13Genus.yaml \u2192 docs/communities/SynCom_Sesame_Flavor_Baijiu_Fuqu_13Genus.html\n \u2713 SynCom_Y_Agrobacterium_Bacillus_Biofilm_Biocontrol_Coculture.yaml \u2192 docs/communities/SynCom_Y_Agrobacterium_Bacillus_Biofilm_Biocontrol_Coculture.html\n \u2713 Synechococcus_Azotobacter_Photoproduction_Mutualism.yaml \u2192 docs/communities/Synechococcus_Azotobacter_Photoproduction_Mutualism.html\n \u2713 Synechococcus_Bacillus_SPC.yaml \u2192 docs/communities/Synechococcus_Bacillus_SPC.html\n \u2713 Synechococcus_Ecoli_SPC.yaml \u2192 docs/communities/Synechococcus_Ecoli_SPC.html\n \u2713 Synechococcus_Halomonas_Light_Driven_PHB_Coculture.yaml \u2192 docs/communities/Synechococcus_Halomonas_Light_Driven_PHB_Coculture.html\n \u2713 Synechococcus_Pseudomonas_PhotoPHA_DNT_Coculture.yaml \u2192 docs/communities/Synechococcus_Pseudomonas_PhotoPHA_DNT_Coculture.html\n \u2713 Synechococcus_Saccharomyces_SPC.yaml \u2192 docs/communities/Synechococcus_Saccharomyces_SPC.html\n \u2713 Synechococcus_Shewanella_Dlactate_Biophotovoltaic_Consortium.yaml \u2192 docs/communities/Synechococcus_Shewanella_Dlactate_Biophotovoltaic_Consortium.html\n \u2713 Synechocystis_Pseudomonas_Acetate_Butanol_Coculture.yaml \u2192 docs/communities/Synechocystis_Pseudomonas_Acetate_Butanol_Coculture.html\n \u2713 Synthetic_Lichen_Synechococcus_Rhodotorula_Coculture.yaml \u2192 docs/communities/Synthetic_Lichen_Synechococcus_Rhodotorula_Coculture.html\n \u2713 Synthetic_Periphyton_Freshwater_Biofilm.yaml \u2192 docs/communities/Synthetic_Periphyton_Freshwater_Biofilm.html\n \u2713 Syntrophobacter_Methanobacterium_Syntrophy.yaml \u2192 docs/communities/Syntrophobacter_Methanobacterium_Syntrophy.html\n \u2713 Syntrophobacter_Methanospirillum_Syntrophy.yaml \u2192 docs/communities/Syntrophobacter_Methanospirillum_Syntrophy.html\n \u2713 Syntrophomonas_Methanococcus_Butyrate_Growth_Coordination_Coculture.yaml \u2192 docs/communities/Syntrophomonas_Methanococcus_Butyrate_Growth_Coordination_Coculture.html\n \u2713 Syntrophomonas_Methanospirillum_Syntrophy.yaml \u2192 docs/communities/Syntrophomonas_Methanospirillum_Syntrophy.html\n \u2713 Syntrophus_Benzoate_Degrader.yaml \u2192 docs/communities/Syntrophus_Benzoate_Degrader.html\n \u2713 Syntrophus_Methanospirillum_Gentianae_Benzoate_Coculture.yaml \u2192 docs/communities/Syntrophus_Methanospirillum_Gentianae_Benzoate_Coculture.html\n \u2713 TCP_NonDehalogenimonas_Groundwater_Consortium.yaml \u2192 docs/communities/TCP_NonDehalogenimonas_Groundwater_Consortium.html\n \u2713 THOR_Rhizosphere_Model_Community.yaml \u2192 docs/communities/THOR_Rhizosphere_Model_Community.html\n \u2713 TYQ1_Nematode_Biocontrol_SynCom.yaml \u2192 docs/communities/TYQ1_Nematode_Biocontrol_SynCom.html\n \u2713 Teosinte_Maize_Biofertilizer_SynCom7.yaml \u2192 docs/communities/Teosinte_Maize_Biofertilizer_SynCom7.html\n \u2713 Thalassiosira_Marinobacter_Marine_Snow_Coculture.yaml \u2192 docs/communities/Thalassiosira_Marinobacter_Marine_Snow_Coculture.html\n \u2713 Thalassiosira_Ruegeria_Phycosphere_Coculture.yaml \u2192 docs/communities/Thalassiosira_Ruegeria_Phycosphere_Coculture.html\n \u2713 Thermacetogenium_Methanothermobacter_Acetate_Oxidation_Coculture.yaml \u2192 docs/communities/Thermacetogenium_Methanothermobacter_Acetate_Oxidation_Coculture.html\n \u2713 Thermoleptolyngbya_Chelatococcus_Arsenic_Detoxification_Coculture.yaml \u2192 docs/communities/Thermoleptolyngbya_Chelatococcus_Arsenic_Detoxification_Coculture.html\n \u2713 Thermophilic_ExSitu_Biomethanation_Mixed_Culture.yaml \u2192 docs/communities/Thermophilic_ExSitu_Biomethanation_Mixed_Culture.html\n \u2713 Thermophilic_Lignocellulose_Composting_SynCom_Biosanitization.yaml \u2192 docs/communities/Thermophilic_Lignocellulose_Composting_SynCom_Biosanitization.html\n \u2713 Thermophilic_Pyrite_QS_Consortium.yaml \u2192 docs/communities/Thermophilic_Pyrite_QS_Consortium.html\n \u2713 Thermotoga_Methanocaldococcus_Hyperthermophilic_Syntrophy.yaml \u2192 docs/communities/Thermotoga_Methanocaldococcus_Hyperthermophilic_Syntrophy.html\n \u2713 Thiocyanate_Afipia_Thiobacillus_Bioreactor_Community.yaml \u2192 docs/communities/Thiocyanate_Afipia_Thiobacillus_Bioreactor_Community.html\n \u2713 Tinto_River_Iron_Cycling_Community.yaml \u2192 docs/communities/Tinto_River_Iron_Cycling_Community.html\n \u2713 Tobacco_Chemotactic_Biocontrol_SynCom.yaml \u2192 docs/communities/Tobacco_Chemotactic_Biocontrol_SynCom.html\n \u2713 Tomato_Oxylipin_SynCom3.yaml \u2192 docs/communities/Tomato_Oxylipin_SynCom3.html\n \u2713 Tribromophenol_Anaerobic_Bioremediation_SynCom.yaml \u2192 docs/communities/Tribromophenol_Anaerobic_Bioremediation_SynCom.html\n \u2713 Trichococcus_Syntrophomonas_Methanospirillum_Butyrate_Coculture.yaml \u2192 docs/communities/Trichococcus_Syntrophomonas_Methanospirillum_Butyrate_Coculture.html\n \u2713 Trichoderma_Ecoli_Cellulosic_Isobutanol_Coculture.yaml \u2192 docs/communities/Trichoderma_Ecoli_Cellulosic_Isobutanol_Coculture.html\n \u2713 Trichoderma_Lactate_Platform.yaml \u2192 docs/communities/Trichoderma_Lactate_Platform.html\n \u2713 Trichoderma_Streptomyces_Filamentous_Cellulose_Coculture.yaml \u2192 docs/communities/Trichoderma_Streptomyces_Filamentous_Cellulose_Coculture.html\n \u2713 Trichodesmium_Alteromonas_Marine_Consortium.yaml \u2192 docs/communities/Trichodesmium_Alteromonas_Marine_Consortium.html\n \u2713 Tropidoatractus_Magnetotacticus_Tripartite_Syntrophy.yaml \u2192 docs/communities/Tropidoatractus_Magnetotacticus_Tripartite_Syntrophy.html\n \u2713 Urine_Nitrification_SynCom.yaml \u2192 docs/communities/Urine_Nitrification_SynCom.html\n \u2713 Variovorax_Cryptococcus_Vitamin_Mutualism_Microcosm.yaml \u2192 docs/communities/Variovorax_Cryptococcus_Vitamin_Mutualism_Microcosm.html\n \u2713 Viili_Fungus_Bacterium_EPS_SynCom.yaml \u2192 docs/communities/Viili_Fungus_Bacterium_EPS_SynCom.html\n \u2713 Waste_Sludge_Electrofermentation_Biofilm_Suspension_Community.yaml \u2192 docs/communities/Waste_Sludge_Electrofermentation_Biofilm_Suspension_Community.html\n \u2713 Watermelon_Rhizosphere_Fusarium_SynCom8.yaml \u2192 docs/communities/Watermelon_Rhizosphere_Fusarium_SynCom8.html\n \u2713 Wetland_Oxygen_Sulfate_GHG_Microcosm_Community.yaml \u2192 docs/communities/Wetland_Oxygen_Sulfate_GHG_Microcosm_Community.html\n \u2713 Wheat_Consortium_C1.yaml \u2192 docs/communities/Wheat_Consortium_C1.html\n \u2713 Wheat_Consortium_C6.yaml \u2192 docs/communities/Wheat_Consortium_C6.html\n \u2713 Wheat_CrownRot_SixStrain_CrossKingdom_SMC.yaml \u2192 docs/communities/Wheat_CrownRot_SixStrain_CrossKingdom_SMC.html\n \u2713 Wheat_CrownRot_TB_CrossKingdom_SynCom.yaml \u2192 docs/communities/Wheat_CrownRot_TB_CrossKingdom_SynCom.html\n \u2713 Wheat_DT_Rhizosphere_SynCom.yaml \u2192 docs/communities/Wheat_DT_Rhizosphere_SynCom.html\n \u2713 Wheat_Straw_Biogas_Pretreatment_SynCom.yaml \u2192 docs/communities/Wheat_Straw_Biogas_Pretreatment_SynCom.html\n \u2713 Wheat_SynCom_SASW01_Drought_Inoculant.yaml \u2192 docs/communities/Wheat_SynCom_SASW01_Drought_Inoculant.html\n \u2713 Wine_Yeast_FiveSpecies_Strain_Substitution_Consortium.yaml \u2192 docs/communities/Wine_Yeast_FiveSpecies_Strain_Substitution_Consortium.html\n \u2713 Wine_Yeast_ThreeSpecies_Contact_Consortium.yaml \u2192 docs/communities/Wine_Yeast_ThreeSpecies_Contact_Consortium.html\n \u2713 Wolffia_Mankai_Endosphere_Cobamide_Guild.yaml \u2192 docs/communities/Wolffia_Mankai_Endosphere_Cobamide_Guild.html\n \u2713 Wollastonite_Ramichloridium_Talaromyces_Fungal_Consortium.yaml \u2192 docs/communities/Wollastonite_Ramichloridium_Talaromyces_Fungal_Consortium.html\n \u2713 Yarrowia_lipolytica_Division_of_Labor_Lipid_Consortium.yaml \u2192 docs/communities/Yarrowia_lipolytica_Division_of_Labor_Lipid_Consortium.html\n \u2713 Yogurt_TwoSpecies_Starter_Culture.yaml \u2192 docs/communities/Yogurt_TwoSpecies_Starter_Culture.html\n \u2713 Zymomonas_Ecoli_Exometabolomics_Obligate_Mutualism.yaml \u2192 docs/communities/Zymomonas_Ecoli_Exometabolomics_Obligate_Mutualism.html\n \u2713 hCom2_Complex_Gut_Microbiome.yaml \u2192 docs/communities/hCom2_Complex_Gut_Microbiome.html\n \u2713 mCAFEs_Brachypodium_RCC.yaml \u2192 docs/communities/mCAFEs_Brachypodium_RCC.html\n\n\u2705 Rendered 456 communities to docs/communities\n \u2713 Generated browser at docs/browser.html\n \u2713 Generated landing at docs/index.html\n"
+ },
+ {
+ "check": "render-repeat",
+ "command": [
+ "python3",
+ "-m",
+ "communitymech.render"
+ ],
+ "exit_code": 0,
+ "expected_exit_codes": [
+ 0
+ ],
+ "output": "South_Bay_Salt_Pond_Methane_Restoration_Community.html\n \u2713 Soy_Sauce_Temporal_SevenSpecies_SynCom.yaml \u2192 docs/communities/Soy_Sauce_Temporal_SevenSpecies_SynCom.html\n \u2713 Soybean_Chlorophyll_Selected_Biofertilizer_SynCom.yaml \u2192 docs/communities/Soybean_Chlorophyll_Selected_Biofertilizer_SynCom.html\n \u2713 Soybean_N_Fixation_sfSynCom.yaml \u2192 docs/communities/Soybean_N_Fixation_sfSynCom.html\n \u2713 Soymilk_Mixed_Starter_Metabolic_Division_SynCom.yaml \u2192 docs/communities/Soymilk_Mixed_Starter_Metabolic_Division_SynCom.html\n \u2713 Space_Habitat_SevenMember_Stress_Tolerance_SynCom.yaml \u2192 docs/communities/Space_Habitat_SevenMember_Stress_Tolerance_SynCom.html\n \u2713 Sphingobium_Nitrososphaera_Phenanthrene_Carbon_SynCom.yaml \u2192 docs/communities/Sphingobium_Nitrososphaera_Phenanthrene_Carbon_SynCom.html\n \u2713 Sphingobium_Rhodococcus_Lignin_Dimer_Valorization_Coculture.yaml \u2192 docs/communities/Sphingobium_Rhodococcus_Lignin_Dimer_Valorization_Coculture.html\n \u2713 Staged_Cattle_Manure_Ensifer_Bacillus_SynCom.yaml \u2192 docs/communities/Staged_Cattle_Manure_Ensifer_Bacillus_SynCom.html\n \u2713 Staphylococcus_Candida_Context_Dependent_Biofilm_Coculture.yaml \u2192 docs/communities/Staphylococcus_Candida_Context_Dependent_Biofilm_Coculture.html\n \u2713 Stordalen_Mire_Methylotrophic_Methanogenesis_Community.yaml \u2192 docs/communities/Stordalen_Mire_Methylotrophic_Methanogenesis_Community.html\n \u2713 Streptomyces_A2_A5_A11_M7_Pesticide_Consortium.yaml \u2192 docs/communities/Streptomyces_A2_A5_A11_M7_Pesticide_Consortium.html\n \u2713 Subsurface_Carboxydocella_CO_Aquifer_Community.yaml \u2192 docs/communities/Subsurface_Carboxydocella_CO_Aquifer_Community.html\n \u2713 Suillus_Bacillus_Thiamine_Ectomycorrhizal_SynCom.yaml \u2192 docs/communities/Suillus_Bacillus_Thiamine_Ectomycorrhizal_SynCom.html\n \u2713 Sulfide_Spring_Autotrophic_CPR_Biofilm.yaml \u2192 docs/communities/Sulfide_Spring_Autotrophic_CPR_Biofilm.html\n \u2713 SynComBac10_Chicken_Intestinal_SynCom.yaml \u2192 docs/communities/SynComBac10_Chicken_Intestinal_SynCom.html\n \u2713 SynCom_ARC_Peanut_Aflatoxin_Nodulation.yaml \u2192 docs/communities/SynCom_ARC_Peanut_Aflatoxin_Nodulation.html\n \u2713 SynCom_BsBv_Cigar_Tobacco_Leaf_Fermentation.yaml \u2192 docs/communities/SynCom_BsBv_Cigar_Tobacco_Leaf_Fermentation.html\n \u2713 SynCom_Chlorella_sorokiniana_Biogas_Slurry_Coupling_System.yaml \u2192 docs/communities/SynCom_Chlorella_sorokiniana_Biogas_Slurry_Coupling_System.html\n \u2713 SynCom_MetG2_Rhizobacteria_Sugarcane_Stress_Resilience.yaml \u2192 docs/communities/SynCom_MetG2_Rhizobacteria_Sugarcane_Stress_Resilience.html\n \u2713 SynCom_Pseudomonas_Rahnella_Artemisia_Phytoremediation.yaml \u2192 docs/communities/SynCom_Pseudomonas_Rahnella_Artemisia_Phytoremediation.html\n \u2713 SynCom_Sesame_Flavor_Baijiu_Fuqu_13Genus.yaml \u2192 docs/communities/SynCom_Sesame_Flavor_Baijiu_Fuqu_13Genus.html\n \u2713 SynCom_Y_Agrobacterium_Bacillus_Biofilm_Biocontrol_Coculture.yaml \u2192 docs/communities/SynCom_Y_Agrobacterium_Bacillus_Biofilm_Biocontrol_Coculture.html\n \u2713 Synechococcus_Azotobacter_Photoproduction_Mutualism.yaml \u2192 docs/communities/Synechococcus_Azotobacter_Photoproduction_Mutualism.html\n \u2713 Synechococcus_Bacillus_SPC.yaml \u2192 docs/communities/Synechococcus_Bacillus_SPC.html\n \u2713 Synechococcus_Ecoli_SPC.yaml \u2192 docs/communities/Synechococcus_Ecoli_SPC.html\n \u2713 Synechococcus_Halomonas_Light_Driven_PHB_Coculture.yaml \u2192 docs/communities/Synechococcus_Halomonas_Light_Driven_PHB_Coculture.html\n \u2713 Synechococcus_Pseudomonas_PhotoPHA_DNT_Coculture.yaml \u2192 docs/communities/Synechococcus_Pseudomonas_PhotoPHA_DNT_Coculture.html\n \u2713 Synechococcus_Saccharomyces_SPC.yaml \u2192 docs/communities/Synechococcus_Saccharomyces_SPC.html\n \u2713 Synechococcus_Shewanella_Dlactate_Biophotovoltaic_Consortium.yaml \u2192 docs/communities/Synechococcus_Shewanella_Dlactate_Biophotovoltaic_Consortium.html\n \u2713 Synechocystis_Pseudomonas_Acetate_Butanol_Coculture.yaml \u2192 docs/communities/Synechocystis_Pseudomonas_Acetate_Butanol_Coculture.html\n \u2713 Synthetic_Lichen_Synechococcus_Rhodotorula_Coculture.yaml \u2192 docs/communities/Synthetic_Lichen_Synechococcus_Rhodotorula_Coculture.html\n \u2713 Synthetic_Periphyton_Freshwater_Biofilm.yaml \u2192 docs/communities/Synthetic_Periphyton_Freshwater_Biofilm.html\n \u2713 Syntrophobacter_Methanobacterium_Syntrophy.yaml \u2192 docs/communities/Syntrophobacter_Methanobacterium_Syntrophy.html\n \u2713 Syntrophobacter_Methanospirillum_Syntrophy.yaml \u2192 docs/communities/Syntrophobacter_Methanospirillum_Syntrophy.html\n \u2713 Syntrophomonas_Methanococcus_Butyrate_Growth_Coordination_Coculture.yaml \u2192 docs/communities/Syntrophomonas_Methanococcus_Butyrate_Growth_Coordination_Coculture.html\n \u2713 Syntrophomonas_Methanospirillum_Syntrophy.yaml \u2192 docs/communities/Syntrophomonas_Methanospirillum_Syntrophy.html\n \u2713 Syntrophus_Benzoate_Degrader.yaml \u2192 docs/communities/Syntrophus_Benzoate_Degrader.html\n \u2713 Syntrophus_Methanospirillum_Gentianae_Benzoate_Coculture.yaml \u2192 docs/communities/Syntrophus_Methanospirillum_Gentianae_Benzoate_Coculture.html\n \u2713 TCP_NonDehalogenimonas_Groundwater_Consortium.yaml \u2192 docs/communities/TCP_NonDehalogenimonas_Groundwater_Consortium.html\n \u2713 THOR_Rhizosphere_Model_Community.yaml \u2192 docs/communities/THOR_Rhizosphere_Model_Community.html\n \u2713 TYQ1_Nematode_Biocontrol_SynCom.yaml \u2192 docs/communities/TYQ1_Nematode_Biocontrol_SynCom.html\n \u2713 Teosinte_Maize_Biofertilizer_SynCom7.yaml \u2192 docs/communities/Teosinte_Maize_Biofertilizer_SynCom7.html\n \u2713 Thalassiosira_Marinobacter_Marine_Snow_Coculture.yaml \u2192 docs/communities/Thalassiosira_Marinobacter_Marine_Snow_Coculture.html\n \u2713 Thalassiosira_Ruegeria_Phycosphere_Coculture.yaml \u2192 docs/communities/Thalassiosira_Ruegeria_Phycosphere_Coculture.html\n \u2713 Thermacetogenium_Methanothermobacter_Acetate_Oxidation_Coculture.yaml \u2192 docs/communities/Thermacetogenium_Methanothermobacter_Acetate_Oxidation_Coculture.html\n \u2713 Thermoleptolyngbya_Chelatococcus_Arsenic_Detoxification_Coculture.yaml \u2192 docs/communities/Thermoleptolyngbya_Chelatococcus_Arsenic_Detoxification_Coculture.html\n \u2713 Thermophilic_ExSitu_Biomethanation_Mixed_Culture.yaml \u2192 docs/communities/Thermophilic_ExSitu_Biomethanation_Mixed_Culture.html\n \u2713 Thermophilic_Lignocellulose_Composting_SynCom_Biosanitization.yaml \u2192 docs/communities/Thermophilic_Lignocellulose_Composting_SynCom_Biosanitization.html\n \u2713 Thermophilic_Pyrite_QS_Consortium.yaml \u2192 docs/communities/Thermophilic_Pyrite_QS_Consortium.html\n \u2713 Thermotoga_Methanocaldococcus_Hyperthermophilic_Syntrophy.yaml \u2192 docs/communities/Thermotoga_Methanocaldococcus_Hyperthermophilic_Syntrophy.html\n \u2713 Thiocyanate_Afipia_Thiobacillus_Bioreactor_Community.yaml \u2192 docs/communities/Thiocyanate_Afipia_Thiobacillus_Bioreactor_Community.html\n \u2713 Tinto_River_Iron_Cycling_Community.yaml \u2192 docs/communities/Tinto_River_Iron_Cycling_Community.html\n \u2713 Tobacco_Chemotactic_Biocontrol_SynCom.yaml \u2192 docs/communities/Tobacco_Chemotactic_Biocontrol_SynCom.html\n \u2713 Tomato_Oxylipin_SynCom3.yaml \u2192 docs/communities/Tomato_Oxylipin_SynCom3.html\n \u2713 Tribromophenol_Anaerobic_Bioremediation_SynCom.yaml \u2192 docs/communities/Tribromophenol_Anaerobic_Bioremediation_SynCom.html\n \u2713 Trichococcus_Syntrophomonas_Methanospirillum_Butyrate_Coculture.yaml \u2192 docs/communities/Trichococcus_Syntrophomonas_Methanospirillum_Butyrate_Coculture.html\n \u2713 Trichoderma_Ecoli_Cellulosic_Isobutanol_Coculture.yaml \u2192 docs/communities/Trichoderma_Ecoli_Cellulosic_Isobutanol_Coculture.html\n \u2713 Trichoderma_Lactate_Platform.yaml \u2192 docs/communities/Trichoderma_Lactate_Platform.html\n \u2713 Trichoderma_Streptomyces_Filamentous_Cellulose_Coculture.yaml \u2192 docs/communities/Trichoderma_Streptomyces_Filamentous_Cellulose_Coculture.html\n \u2713 Trichodesmium_Alteromonas_Marine_Consortium.yaml \u2192 docs/communities/Trichodesmium_Alteromonas_Marine_Consortium.html\n \u2713 Tropidoatractus_Magnetotacticus_Tripartite_Syntrophy.yaml \u2192 docs/communities/Tropidoatractus_Magnetotacticus_Tripartite_Syntrophy.html\n \u2713 Urine_Nitrification_SynCom.yaml \u2192 docs/communities/Urine_Nitrification_SynCom.html\n \u2713 Variovorax_Cryptococcus_Vitamin_Mutualism_Microcosm.yaml \u2192 docs/communities/Variovorax_Cryptococcus_Vitamin_Mutualism_Microcosm.html\n \u2713 Viili_Fungus_Bacterium_EPS_SynCom.yaml \u2192 docs/communities/Viili_Fungus_Bacterium_EPS_SynCom.html\n \u2713 Waste_Sludge_Electrofermentation_Biofilm_Suspension_Community.yaml \u2192 docs/communities/Waste_Sludge_Electrofermentation_Biofilm_Suspension_Community.html\n \u2713 Watermelon_Rhizosphere_Fusarium_SynCom8.yaml \u2192 docs/communities/Watermelon_Rhizosphere_Fusarium_SynCom8.html\n \u2713 Wetland_Oxygen_Sulfate_GHG_Microcosm_Community.yaml \u2192 docs/communities/Wetland_Oxygen_Sulfate_GHG_Microcosm_Community.html\n \u2713 Wheat_Consortium_C1.yaml \u2192 docs/communities/Wheat_Consortium_C1.html\n \u2713 Wheat_Consortium_C6.yaml \u2192 docs/communities/Wheat_Consortium_C6.html\n \u2713 Wheat_CrownRot_SixStrain_CrossKingdom_SMC.yaml \u2192 docs/communities/Wheat_CrownRot_SixStrain_CrossKingdom_SMC.html\n \u2713 Wheat_CrownRot_TB_CrossKingdom_SynCom.yaml \u2192 docs/communities/Wheat_CrownRot_TB_CrossKingdom_SynCom.html\n \u2713 Wheat_DT_Rhizosphere_SynCom.yaml \u2192 docs/communities/Wheat_DT_Rhizosphere_SynCom.html\n \u2713 Wheat_Straw_Biogas_Pretreatment_SynCom.yaml \u2192 docs/communities/Wheat_Straw_Biogas_Pretreatment_SynCom.html\n \u2713 Wheat_SynCom_SASW01_Drought_Inoculant.yaml \u2192 docs/communities/Wheat_SynCom_SASW01_Drought_Inoculant.html\n \u2713 Wine_Yeast_FiveSpecies_Strain_Substitution_Consortium.yaml \u2192 docs/communities/Wine_Yeast_FiveSpecies_Strain_Substitution_Consortium.html\n \u2713 Wine_Yeast_ThreeSpecies_Contact_Consortium.yaml \u2192 docs/communities/Wine_Yeast_ThreeSpecies_Contact_Consortium.html\n \u2713 Wolffia_Mankai_Endosphere_Cobamide_Guild.yaml \u2192 docs/communities/Wolffia_Mankai_Endosphere_Cobamide_Guild.html\n \u2713 Wollastonite_Ramichloridium_Talaromyces_Fungal_Consortium.yaml \u2192 docs/communities/Wollastonite_Ramichloridium_Talaromyces_Fungal_Consortium.html\n \u2713 Yarrowia_lipolytica_Division_of_Labor_Lipid_Consortium.yaml \u2192 docs/communities/Yarrowia_lipolytica_Division_of_Labor_Lipid_Consortium.html\n \u2713 Yogurt_TwoSpecies_Starter_Culture.yaml \u2192 docs/communities/Yogurt_TwoSpecies_Starter_Culture.html\n \u2713 Zymomonas_Ecoli_Exometabolomics_Obligate_Mutualism.yaml \u2192 docs/communities/Zymomonas_Ecoli_Exometabolomics_Obligate_Mutualism.html\n \u2713 hCom2_Complex_Gut_Microbiome.yaml \u2192 docs/communities/hCom2_Complex_Gut_Microbiome.html\n \u2713 mCAFEs_Brachypodium_RCC.yaml \u2192 docs/communities/mCAFEs_Brachypodium_RCC.html\n\n\u2705 Rendered 456 communities to docs/communities\n \u2713 Generated browser at docs/browser.html\n \u2713 Generated landing at docs/index.html\n"
+ },
+ {
+ "check": "regressions",
+ "command": [
+ "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_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_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"
+ ],
+ "exit_code": 1,
+ "expected_exit_codes": [
+ 0
+ ],
+ "output": "........................................................................ [ 24%]\n........................................................................ [ 49%]\n........................................................................ [ 73%]\n........................................................................ [ 98%]\n.F... [100%]\n=================================== FAILURES ===================================\n____________ test_the_mixed_records_are_where_the_coarseness_bites _____________\n\nsurvey = {'records': 460, 'with_community_level': 389, 'mixed': 124, 'community_level_only': 265, ...}\n\n def test_the_mixed_records_are_where_the_coarseness_bites(survey):\n \"\"\"A record with both kinds is where an unrelated edge credits a lone taxon.\n \n #1344 adds two source-backed mixed-scope records (120 -> 122).\n #312 measured 46. In the\n community-level-only records the credit is not\n coarse \u2014 there is no pairwise edge it could be masking.\n \"\"\"\n> assert 35 <= survey[\"mixed\"] <= 122, survey\nE AssertionError: {'records': 460, 'with_community_level': 389, 'mixed': 124, 'community_level_only': 265, ...}\nE assert 124 <= 122\n\ntests/test_community_level_connectivity_credit.py:120: AssertionError\n=========================== short test summary info ============================\nFAILED tests/test_community_level_connectivity_credit.py::test_the_mixed_records_are_where_the_coarseness_bites\n1 failed, 292 passed in 181.14s (0:03:01)\n"
+ },
+ {
+ "check": "workspace-rights",
+ "command": [
+ "python3",
+ "-m",
+ "pytest",
+ "-q",
+ "tests/test_no_paywalled_text_in_repo.py"
+ ],
+ "exit_code": 0,
+ "expected_exit_codes": [
+ 0
+ ],
+ "output": "... [100%]\n3 passed in 1.93s\n"
+ },
+ {
+ "check": "black",
+ "command": [
+ "black",
+ "--check",
+ "tests/test_causal_review_batch25.py"
+ ],
+ "exit_code": 0,
+ "expected_exit_codes": [
+ 0
+ ],
+ "output": "All done! \u2728 \ud83c\udf70 \u2728\n1 file would be left unchanged.\n"
+ },
+ {
+ "check": "ruff",
+ "command": [
+ "ruff",
+ "check",
+ "tests/test_causal_review_batch25.py"
+ ],
+ "exit_code": 0,
+ "expected_exit_codes": [
+ 0
+ ],
+ "output": "All checks passed!\n"
+ },
+ {
+ "check": "diff-check",
+ "command": [
+ "git",
+ "diff",
+ "--check"
+ ],
+ "exit_code": 0,
+ "expected_exit_codes": [
+ 0
+ ],
+ "output": ""
+ }
+ ],
+ "limitations": [
+ "Two records, ten nodes and ten arrows retained; seven renames and two focused gaps/histories. No new graph structure or Edison spend.",
+ "Four complete primary main bodies and three contextual abstracts reviewed; no figure images or supplementary files inspected.",
+ "Three short Coscinodiscus Results quotes (15 words total) were verified in publisher-provided preview but remain absent from abstract-only local cache; automated mismatch is a documented retrieval gap under #596, not a silently passed independent match.",
+ "Eight tracked cache artifacts unchanged; no full copyrighted body or PDF added.",
+ "Unrelated metadata and canonical taxa preserved, not certified; #1358/#1359 remain separate followups.",
+ "Self-adversarial review is not independent approval, protected CI success or full-corpus completion.",
+ "Baseline just audit-network-json lacked the console entry point; exact repository CLI was used without dependency edits.",
+ "Published descriptions verified by exact HTML parsing and repeat renders, not browser screenshots.",
+ "The initial full suite had one stale mixed-scope ceiling failure (292 passed). #1360 changes only the ceiling/comment and the full suite is rerun below."
+ ],
+ "unchanged_raw_blocks": 27,
+ "reference_caches_unchanged": true,
+ "corpus_sentinels_unchanged": false,
+ "connectivity_survey_before": {
+ "records": 460,
+ "with_community_level": 389,
+ "mixed": 122,
+ "community_level_only": 267,
+ "taxa": 1499,
+ "credited_solely_by_the_rule": 1221
+ },
+ "new_network_warnings": [],
+ "render_determinism": "passed",
+ "published_description_coverage": {
+ "pages": 456,
+ "node_descriptions": 1460,
+ "edge_descriptions": 702
+ },
+ "rights_import_root_verified": true,
+ "connectivity_survey": {
+ "records": 460,
+ "with_community_level": 389,
+ "mixed": 124,
+ "community_level_only": 265,
+ "taxa": 1499,
+ "credited_solely_by_the_rule": 1217
+ },
+ "connectivity_delta": {
+ "records": 0,
+ "with_community_level": 0,
+ "mixed": 2,
+ "community_level_only": -2,
+ "taxa": 0,
+ "credited_solely_by_the_rule": -4
+ },
+ "snippet_counts": {
+ "MATCH": 46,
+ "RENDERING": 0,
+ "ASSEMBLED": 0,
+ "WEAK": 0,
+ "MISMATCH": 3,
+ "NOCONTENT": 0
+ },
+ "documented_retrieval_gaps": {
+ "reference": "PMID:36300970",
+ "count": 3,
+ "issue": 596,
+ "verified_at": "https://www.researchgate.net/publication/364814644_Dynamic_Diatom-Bacteria_Consortia_in_Synthetic_Plankton_Communities",
+ "disposition": "Primary Results verified manually; local abstract cache does not independently validate these three short quotes. No copied full body or forged cache match."
+ },
+ "corpus": {
+ "scope": "Every YAML under kb/communities and data/isolates; filesystem discovery includes hidden/ignored files.",
+ "records": 460,
+ "nodes": 1474,
+ "edges": 710,
+ "records_without_nodes": 8,
+ "records_without_edges": 141,
+ "review_status_counts": {
+ "needs_research": 3,
+ "pending": 334,
+ "reviewed": 123
+ },
+ "structural_defects": []
+ },
+ "network_warning_count": 25,
+ "status": "complete_with_documented_reference_retrieval_gaps",
+ "remediation": {
+ "issue": 1360,
+ "initial_failure": {
+ "check": "regressions",
+ "command": [
+ "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_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_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"
+ ],
+ "exit_code": 1,
+ "expected_exit_codes": [
+ 0
+ ],
+ "output": "........................................................................ [ 24%]\n........................................................................ [ 49%]\n........................................................................ [ 73%]\n........................................................................ [ 98%]\n.F... [100%]\n=================================== FAILURES ===================================\n____________ test_the_mixed_records_are_where_the_coarseness_bites _____________\n\nsurvey = {'records': 460, 'with_community_level': 389, 'mixed': 124, 'community_level_only': 265, ...}\n\n def test_the_mixed_records_are_where_the_coarseness_bites(survey):\n \"\"\"A record with both kinds is where an unrelated edge credits a lone taxon.\n \n #1344 adds two source-backed mixed-scope records (120 -> 122).\n #312 measured 46. In the\n community-level-only records the credit is not\n coarse \u2014 there is no pairwise edge it could be masking.\n \"\"\"\n> assert 35 <= survey[\"mixed\"] <= 122, survey\nE AssertionError: {'records': 460, 'with_community_level': 389, 'mixed': 124, 'community_level_only': 265, ...}\nE assert 124 <= 122\n\ntests/test_community_level_connectivity_credit.py:120: AssertionError\n=========================== short test summary info ============================\nFAILED tests/test_community_level_connectivity_credit.py::test_the_mixed_records_are_where_the_coarseness_bites\n1 failed, 292 passed in 181.14s (0:03:01)\n"
+ },
+ "changed_test": "tests/test_community_level_connectivity_credit.py",
+ "change": "Mixed-scope ceiling 122 -> 124 plus explicit comment only; all other bounds/behavior unchanged.",
+ "results": [
+ {
+ "check": "regressions-rerun",
+ "command": [
+ "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_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_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"
+ ],
+ "exit_code": 0,
+ "output": "........................................................................ [ 24%]\n........................................................................ [ 49%]\n........................................................................ [ 73%]\n........................................................................ [ 98%]\n..... [100%]\n293 passed in 187.32s (0:03:07)\n"
+ },
+ {
+ "check": "census-test-black",
+ "command": [
+ "black",
+ "--check",
+ "tests/test_community_level_connectivity_credit.py"
+ ],
+ "exit_code": 0,
+ "output": "All done! \u2728 \ud83c\udf70 \u2728\n1 file would be left unchanged.\n"
+ },
+ {
+ "check": "census-test-ruff",
+ "command": [
+ "ruff",
+ "check",
+ "tests/test_community_level_connectivity_credit.py"
+ ],
+ "exit_code": 0,
+ "output": "All checks passed!\n"
+ },
+ {
+ "check": "diff-check-rerun",
+ "command": [
+ "git",
+ "diff",
+ "--check"
+ ],
+ "exit_code": 0,
+ "output": ""
+ }
+ ],
+ "verified_test_sha256": "ab2a788ad92a39fa635bbda66e9c98828aaa59113048500310aca1ef4c297834",
+ "status": "passed"
+ },
+ "other_corpus_sentinels_unchanged": true,
+ "raw_gate_status": "failed",
+ "diagnostic_disposition": {
+ "failed_gate": "Coscinodiscus_Synthetic_Community-references-explained",
+ "exit_code_preserved": 1,
+ "issue": 596,
+ "primary_source_verified": true,
+ "independent_local_cache_verification": false,
+ "reason": "Exactly three brief Results quotes were read in the publisher-provided primary preview; the byte-preserved cache is abstract-only. Do not report this gate as passed or copy curated snippets into a trusted cache."
+ }
+}
diff --git a/tests/test_causal_review_batch25.py b/tests/test_causal_review_batch25.py
new file mode 100644
index 000000000..ecbba72e9
--- /dev/null
+++ b/tests/test_causal_review_batch25.py
@@ -0,0 +1,160 @@
+"""Keep measured assays distinct from field association and proposed resource flux."""
+
+import hashlib
+from collections import Counter
+from pathlib import Path
+
+import yaml
+
+ROOT = Path(__file__).resolve().parents[1]
+LEDGER = ROOT / "reports/causal_graph_review/decisions/20261005-two-records-batch25.yaml"
+
+
+def records():
+ ledger = yaml.safe_load(LEDGER.read_text())
+ return ledger, [yaml.safe_load((ROOT / r["path"]).read_text()) for r in ledger["records"]]
+
+
+def test_copper_intrinsic_capacity_and_field_subset_have_correct_scope():
+ _, docs = records()
+ nodes = docs[0]["ecological_interactions"]
+ for index, taxon in [(0, "NCBITaxon:920"), (2, "NCBITaxon:930"), (4, "NCBITaxon:28034")]:
+ assert nodes[index]["scope"] == "PAIRWISE"
+ assert nodes[index]["source_taxon"]["term"]["id"] == taxon
+ assert not {"target_taxon", "participating_taxa", "interaction_type"} & nodes[index].keys()
+ assert nodes[1]["scope"] == nodes[3]["scope"] == "COMMUNITY_LEVEL"
+ assert len(nodes[1]["participating_taxa"]) == 2
+ assert len(nodes[3]["participating_taxa"]) == 5
+ assert all("interaction_type" not in n for n in nodes)
+ assert all(
+ p["term"]["id"] != "GO:0006826" for n in nodes for p in n.get("biological_processes", [])
+ )
+
+
+def test_copper_preserves_positive_assays_and_nonmonotonic_leaching():
+ _, docs = records()
+ early, aged, sulfur, output, sulfo = docs[0]["ecological_interactions"]
+ assert "15% to the approximately 5% abiotic level" in early["description"]
+ assert "Ferroplasma was around 10^3 copies/mL" in aged["description"]
+ assert "L. ferrooxidans, not this canonical species" in aged["description"]
+ assert "rRNA measurements support activity" in sulfur["description"]
+ assert "not constant sulfur flux" in sulfur["description"]
+ assert "400-day leaching cycle" in output["description"]
+ assert "triple culture did not outperform the binaries" in output["description"]
+ assert "38 +/- 2 C" in sulfo["description"] and "45 C" in sulfo["description"]
+ assert "approximately 30% copper extraction" in sulfo["description"]
+ assert "Genus-level Sulfobacillus RNA" in sulfo["description"]
+ assert all(e["evidence_source"] == "OTHER" for e in output["evidence"])
+ assert sulfur["evidence"][1]["evidence_source"] == "OTHER"
+
+
+def test_copper_retains_bounded_bidirectional_substrate_feedback():
+ _, docs = records()
+ nodes = docs[0]["ecological_interactions"]
+ output = nodes[3]
+ others = [n for n in nodes if n is not output]
+ assert {e["target"] for e in output["downstream"]} == {n["name"] for n in others}
+ assert all(n["downstream"][0]["target"] == output["name"] for n in others)
+ assert all(
+ e["description"].startswith("PARTIAL -") for n in nodes for e in n.get("downstream", [])
+ )
+
+
+def test_coscinodiscus_dmsp_is_potential_not_measured_transfer():
+ _, docs = records()
+ production, dmsp, *_ = docs[1]["ecological_interactions"]
+ assert production["scope"] == "PAIRWISE"
+ assert production["source_taxon"]["term"]["id"] == "NCBITaxon:33642"
+ assert "participating_taxa" not in production and "target_taxon" not in production
+ assert len(dmsp["participating_taxa"]) == 2 and "source_taxon" not in dmsp
+ assert dmsp["evidence"][0]["evidence_source"] == "COMPUTATIONAL"
+ provenance = dmsp["evidence"][0]["computational_provenance"]
+ assert provenance["prediction_type"] == "SEQUENCE_HOMOLOGY"
+ assert provenance["tools"] == [{"tool_name": "BLASTP"}]
+ assert "negative growth result does not itself prove absence" in dmsp["description"]
+ assert production["downstream"][0]["target"] == dmsp["name"]
+ assert production["downstream"][0]["description"].startswith("HYPOTHESIZED -")
+
+
+def test_coscinodiscus_keeps_pooled_assay_and_nonresponding_control():
+ _, docs = records()
+ nutrient = docs[1]["ecological_interactions"][3]
+ assert len(nutrient["participating_taxa"]) == 3
+ assert nutrient["evidence"][0]["evidence_source"] == "IN_VITRO"
+ assert nutrient["evidence"][0]["supports"] == "SUPPORT"
+ for phrase in [
+ "pooled 13-amino-acid mixture plus vitamins",
+ "CS4 did not respond",
+ "not merely genomic predictions",
+ "does not establish which individual nutrient was limiting",
+ ]:
+ assert phrase in nutrient["description"]
+ assert {m["term"]["id"] for m in nutrient["metabolites"]} == {"CHEBI:33709", "CHEBI:33229"}
+
+
+def test_coscinodiscus_signs_and_model_are_partner_phase_and_condition_specific():
+ _, docs = records()
+ nodes = docs[1]["ecological_interactions"]
+ phases, output = nodes[2], nodes[4]
+ assert all("interaction_type" not in n for n in nodes)
+ assert "recovery to control-like density after day 9" in phases["description"]
+ assert "CS1 was inhibited significantly on days 11-21" in phases["description"]
+ assert "CS4/Rose1 showed no significant diatom effect" in phases["description"]
+ assert "distinct days 1-17 and 17-41 parameter sets" in output["description"]
+ assert "very-late survival benefit" in output["description"]
+ assert "not proven universally absent" in output["description"]
+ assert phases["downstream"][0]["target"] == output["name"]
+ assert phases["downstream"][0]["description"].startswith("PARTIAL -")
+
+
+def test_batch25_sources_and_cache_limit_are_explicit():
+ ledger, docs = records()
+ assert ledger["independent_approval"] is False
+ assert ledger["open_nongraph_followups"] == [1358, 1359]
+ assert len(ledger["records"][0]["source_review"]) == 6
+ source = ledger["records"][1]["source_review"]["PMID:36300970"]
+ assert "Complete primary main body" in source["reviewed_scope"]
+ assert "No figure images or supplementary files inspected" in source["reviewed_scope"]
+ assert source["new_body_quotes_words"] == 15
+ quotes = [docs[1]["ecological_interactions"][i]["evidence"][0]["snippet"] for i in [0, 1, 3]]
+ assert sum(len(q.split()) for q in quotes) == 15
+ cache = (ROOT / "references_cache/PMID_36300970.md").read_text()
+ assert "content_type: abstract_only" in cache
+ assert all(q not in cache for q in quotes)
+ assert "#1358" in docs[0]["discussions"][0]["rationale"]
+ assert "#1359" in docs[1]["discussions"][0]["rationale"]
+
+
+def test_batch25_accounts_for_every_node_arrow_history_and_unchanged_cache():
+ ledger, docs = records()
+ rows = ledger["records"]
+ assert len(rows) == 2
+ assert sum(len(r["node_decisions"]) for r in rows) == 10
+ assert sum(len(r["retained_edge_decisions"]) for r in rows) == 10
+ assert sum(len(r["renamed_nodes"]) for r in rows) == 7
+ assert not any(r["removed_edge_decisions"] for r in rows)
+ assert sum(len(r["history_files"]) for r in rows) == 2
+ for row, doc in zip(rows, docs, strict=True):
+ assert hashlib.sha256((ROOT / row["path"]).read_bytes()).hexdigest() == row["record_sha256"]
+ names = {n["name"] for n in doc["ecological_interactions"]}
+ assert Counter(d["node"] for d in row["node_decisions"]) == Counter(names)
+ edges = [
+ {"source": n["name"], **e}
+ for n in doc["ecological_interactions"]
+ for e in n.get("downstream", [])
+ ]
+ assert edges == row["edges_after"]
+ rename = row["renamed_nodes"]
+ assert {(e["source"], e["target"]) for e in edges} == {
+ (rename.get(e["source"], e["source"]), rename.get(e["target"], e["target"]))
+ for e in row["edges_before"]
+ }
+ assert all(
+ a.split("#", 1)[1] in names
+ for d in doc.get("discussions", [])
+ for a in d.get("attaches_to", [])
+ if a.startswith("ecological_interactions#")
+ )
+ assert len(ledger["reference_cache_original_hashes"]) == 8
+ for path, expected in ledger["reference_cache_original_hashes"].items():
+ assert hashlib.sha256((ROOT / path).read_bytes()).hexdigest() == expected
diff --git a/tests/test_community_level_connectivity_credit.py b/tests/test_community_level_connectivity_credit.py
index 08d3d7c27..efb34ae56 100644
--- a/tests/test_community_level_connectivity_credit.py
+++ b/tests/test_community_level_connectivity_credit.py
@@ -113,11 +113,12 @@ def test_the_mixed_records_are_where_the_coarseness_bites(survey):
"""A record with both kinds is where an unrelated edge credits a lone taxon.
#1344 adds two source-backed mixed-scope records (120 -> 122).
+ #1360 adds Copper and Coscinodiscus intrinsic-source corrections (122 -> 124).
#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"] <= 122, survey
+ assert 35 <= survey["mixed"] <= 124, survey
assert survey["mixed"] + survey["community_level_only"] == survey["with_community_level"]