diff --git a/docs/communities/Cinnamate_Degradation_Consortium.html b/docs/communities/Cinnamate_Degradation_Consortium.html
index 91ca54e39..3dcea44e1 100644
--- a/docs/communities/Cinnamate_Degradation_Consortium.html
+++ b/docs/communities/Cinnamate_Degradation_Consortium.html
@@ -601,7 +601,7 @@
Ecological Interactions
Ecological interaction network for Cinnamate β-Oxidation Consortium
- Bipartite graph where circle nodes represent taxa and each ecological interaction is drawn as a distinct non-circular symbol, with colour repeating the same distinction (syntrophy, commensalism).
+ Bipartite graph where circle nodes represent taxa and each ecological interaction is drawn as a distinct non-circular symbol, with colour repeating the same distinction (syntrophy).
@@ -614,8 +614,8 @@
Ecological Interactions
Commensalism
+ aria-hidden="true" data-symbol="symbolTriangle2"
+ data-color="#929caa"> Other
@@ -624,9 +624,8 @@ Ecological Interactions
-
Papillibacter cinnamivorans initiates anaerobic cinnamate degradation by producing benzoate through beta-oxidation.
+
Papillibacter cinnamivorans converts cinnamate to benzoate, providing the intermediate for subsequent syntrophic degradation. Conversion still occurred with the methanogenesis inhibitor BESA. The authors propose beta-oxidation; the accessible abstract does not resolve its enzyme steps or establish a commensal fitness relationship.
Source Taxon: Papillibacter cinnamivorans
@@ -649,17 +648,6 @@
Cinnamate β-Oxidation to Benzoate
-
Biological Processes:
-
-
-
- fatty acid beta-oxidation
- (GO:0006635 )
-
-
-
-
@@ -667,7 +655,7 @@
Cinnamate β-Oxidation to Benzoate
→ Syntrophic Benzoate Degradation
-
Benzoate produced from cinnamate becomes the substrate for downstream Syntrophus-methanogen degradation.
+
Benzoate formed by P. cinnamivorans supplies substrate for the Syntrophus-methanogen association. The reported stepwise conversion and BESA-associated arrest at benzoate support this substrate connection without resolving every enzyme step.
@@ -699,7 +687,7 @@
Evidence
Syntrophic Benzoate Degradation
SYNTROPHY
- Syntrophus sp. syntrophically degrades the benzoate intermediate to acetate, H2, and CO2 with the hydrogen-scavenging methanogen.
+ Syntrophus sp. and the methanogen form the association reported to degrade benzoate to acetate, methane and carbon dioxide. Syntrophic interdependence is reported during growth on cinnamate. HYPOTHESIZED - H2 transfer is a candidate coupling mechanism, not an experimentally identified electron carrier in the accessible abstract.
Source Taxon: Syntrophus sp.
@@ -720,10 +708,6 @@ Syntrophic Benzoate Degradation
(CHEBI:30089 ),
- hydrogen
- (CHEBI:18276 ),
-
carbon dioxide
(CHEBI:16526 )
@@ -750,7 +734,7 @@ Syntrophic Benzoate Degradation
→ Methanogenesis
-
H2 and CO2 from benzoate degradation feed Methanobacterium methanogenesis.
+
HYPOTHESIZED - benzoate oxidation could supply H2 as reducing equivalents for CO2-reducing methanogenesis. The observed association and methane product support metabolic coupling, but the accessible abstract does not discriminate electron carriers or trace carbon and electron flux between partners.
@@ -782,7 +766,7 @@ Evidence
Methanogenesis
SYNTROPHY
- Methanobacterium formicicum consumes syntrophy-derived H2 and CO2 to produce methane during complete cinnamate mineralization.
+ PARTIAL - Methanobacterium formicicum replaced the original Methanobacterium isolate in the reconstituted consortium, and methane was reported among its degradation products. HYPOTHESIZED - consumption of partner-derived H2 with CO2 reduction explains a possible methanogenic route, but the accessible abstract does not resolve that transfer. Acetate remains among the reported products; complete mineralization of all cinnamate carbon is not established.
Source Taxon: Methanobacterium formicicum
@@ -793,10 +777,6 @@ Methanogenesis
Metabolites:
- hydrogen
- (CHEBI:18276 ),
-
carbon dioxide
(CHEBI:16526 ),
@@ -833,7 +813,7 @@
Evidence
PMID:12432464
- - SUPPORT (IN_VITRO)
+ - PARTIAL (IN_VITRO)
"In the presence of bromoethanesulfonic acid (BESA), cinnamate was transformed to benzoate, whereas under methanogenic conditions without BESA, cinnamate was first transformed to benzoate via beta-oxidation and subsequently completely degraded into acetate, CH(4), and CO(2)"
@@ -849,6 +829,25 @@ Evidence
+
+ Knowledge gaps & discussions (1)
+
+
+
+ KNOWLEDGE_GAP
+ OPEN
+ Which interspecies electron carrier and carbon balance support methanogenesis during cinnamate degradation?
+
+
The primary abstract establishes benzoate formation, syntrophic benzoate degradation and acetate/methane/CO2 products, but not an experimentally resolved H2-versus-alternative carrier or full carbon mineralization. The subscription body was unavailable; exact-system gas/carrier measurements, partner perturbations and carbon balance are needed before promoting the proposed H2 route to demonstrated transfer. The supported benzoate substrate link remains intact.
+
+
Attaches to: ecological_interactions#Cinnamate β-Oxidation to Benzoate, ecological_interactions#Syntrophic Benzoate Degradation, ecological_interactions#Methanogenesis
+
+
+
+
+
+
+
@@ -1059,7 +1058,7 @@ Evidence
(function() {
var intId = "interaction:0";
- var intType = "COMMENSALISM";
+ var intType = "UNKNOWN";
var metabolites = [];
@@ -1070,10 +1069,6 @@ Evidence
var processes = [];
-
- processes.push("fatty acid beta-oxidation");
-
-
var evidenceCount = 1;
nodes.push({
@@ -1106,8 +1101,6 @@ Evidence
metabolites.push("acetate");
- metabolites.push("hydrogen");
-
metabolites.push("carbon dioxide");
@@ -1150,8 +1143,6 @@ Evidence
var metabolites = [];
- metabolites.push("hydrogen");
-
metabolites.push("carbon dioxide");
metabolites.push("methane");
diff --git a/history/records/Cinnamate_Degradation_Consortium/2026-10-05T222800Z-codex-cd0f4a.yaml b/history/records/Cinnamate_Degradation_Consortium/2026-10-05T222800Z-codex-cd0f4a.yaml
new file mode 100644
index 000000000..30fe67818
--- /dev/null
+++ b/history/records/Cinnamate_Degradation_Consortium/2026-10-05T222800Z-codex-cd0f4a.yaml
@@ -0,0 +1,30 @@
+history_version: 1
+target:
+ kind: record
+ path: kb/communities/Cinnamate_Degradation_Consortium.yaml
+ slug: Cinnamate_Degradation_Consortium
+session:
+ id: 2026-10-05T222800Z-codex-cd0f4a
+ timestamp: '2026-10-05T22:28:00Z'
+ actors:
+ - type: ai_agent
+ name: codex
+ model: unspecified
+ agent_tool: codex
+links:
+ issues:
+ - https://github.com/CultureBotAI/CommunityMech/issues/1313
+events:
+- type: EDIT
+ outcome: changed
+ sections:
+ - interactions
+ - discussions
+ summary: Retain the supported benzoate substrate link and proposed beta-oxidation without
+ unsupported commensalism or fatty-acid process typing.; Retain measured syntrophic degradation
+ and mixed products; qualify the electron-carrier arrow and remove unqualified hydrogen
+ metabolite assertions.; Retain methane production with partial route evidence; distinguish
+ the reconstituted methanogen from the original isolate and avoid complete-mineralization
+ claims.
+ details: Source-based self-adversarial review, abstract-bounded mechanism repair, no new
+ structure. reports/causal_graph_review/decisions/20261005-two-records-batch16.yaml
diff --git a/kb/communities/Cinnamate_Degradation_Consortium.yaml b/kb/communities/Cinnamate_Degradation_Consortium.yaml
index 41a0a2e63..001f2435e 100644
--- a/kb/communities/Cinnamate_Degradation_Consortium.yaml
+++ b/kb/communities/Cinnamate_Degradation_Consortium.yaml
@@ -97,9 +97,9 @@ taxonomy:
was then replaced by a collection strain of Methanobacterium formicicum
ecological_interactions:
- name: Cinnamate β-Oxidation to Benzoate
- description: Papillibacter cinnamivorans initiates anaerobic cinnamate degradation
- by producing benzoate through beta-oxidation.
- interaction_type: COMMENSALISM
+ description: Papillibacter cinnamivorans converts cinnamate to benzoate, providing the intermediate for subsequent
+ syntrophic degradation. Conversion still occurred with the methanogenesis inhibitor BESA. The authors propose
+ beta-oxidation; the accessible abstract does not resolve its enzyme steps or establish a commensal fitness relationship.
scope: COMMUNITY_LEVEL
source_taxon:
preferred_term: Papillibacter cinnamivorans
@@ -111,29 +111,30 @@ ecological_interactions:
term:
id: CHEBI:23252
label: cinnamic acids
+ notes: Class-level cinnamic-acids grounding retained; this does not identify a specific stereoisomer or demonstrate
+ fatty-acid metabolism.
- preferred_term: benzoate
term:
id: CHEBI:30746
label: benzoic acid
- biological_processes:
- - preferred_term: fatty acid beta-oxidation
- term:
- id: GO:0006635
- label: fatty acid beta-oxidation
downstream:
- target: Syntrophic Benzoate Degradation
- description: Benzoate produced from cinnamate becomes the substrate for
- downstream Syntrophus-methanogen degradation.
+ description: Benzoate formed by P. cinnamivorans supplies substrate for the Syntrophus-methanogen association.
+ The reported stepwise conversion and BESA-associated arrest at benzoate support this substrate connection
+ without resolving every enzyme step.
evidence:
- reference: PMID:12432464
supports: SUPPORT
evidence_source: IN_VITRO
- snippet: In the presence of bromoethanesulfonic acid (BESA), cinnamate was transformed to benzoate,
- whereas under methanogenic conditions without BESA, cinnamate was first transformed to benzoate
- via beta-oxidation and subsequently completely degraded into acetate, CH(4), and CO(2)
+ snippet: In the presence of bromoethanesulfonic acid (BESA), cinnamate was transformed to benzoate, whereas
+ under methanogenic conditions without BESA, cinnamate was first transformed to benzoate via beta-oxidation
+ and subsequently completely degraded into acetate, CH(4), and CO(2)
+ explanation: Supports cinnamate-to-benzoate conversion and the inhibitor comparison. The abstract proposes beta-oxidation
+ but does not establish the fatty-acid GO process or a commensal relationship.
- name: Syntrophic Benzoate Degradation
- description: Syntrophus sp. syntrophically degrades the benzoate intermediate
- to acetate, H2, and CO2 with the hydrogen-scavenging methanogen.
+ description: Syntrophus sp. and the methanogen form the association reported to degrade benzoate to acetate, methane
+ and carbon dioxide. Syntrophic interdependence is reported during growth on cinnamate. HYPOTHESIZED - H2 transfer
+ is a candidate coupling mechanism, not an experimentally identified electron carrier in the accessible abstract.
interaction_type: SYNTROPHY
scope: PAIRWISE
source_taxon:
@@ -155,10 +156,6 @@ ecological_interactions:
term:
id: CHEBI:30089
label: acetate
- - preferred_term: hydrogen
- term:
- id: CHEBI:18276
- label: dihydrogen
- preferred_term: carbon dioxide
term:
id: CHEBI:16526
@@ -170,18 +167,23 @@ ecological_interactions:
label: benzoate metabolic process
downstream:
- target: Methanogenesis
- description: H2 and CO2 from benzoate degradation feed Methanobacterium
- methanogenesis.
+ description: HYPOTHESIZED - benzoate oxidation could supply H2 as reducing equivalents for CO2-reducing methanogenesis.
+ The observed association and methane product support metabolic coupling, but the accessible abstract does
+ not discriminate electron carriers or trace carbon and electron flux between partners.
evidence:
- reference: PMID:12432464
supports: SUPPORT
evidence_source: IN_VITRO
- snippet: Papillibacter cinnamivorans was responsible for benzoate production from cinnamate, whereas
- a syntrophic association between Syntrophus sp. and the methanogen degraded benzoate to acetate,
- CH(4), and CO(2)
+ snippet: Papillibacter cinnamivorans was responsible for benzoate production from cinnamate, whereas a syntrophic
+ association between Syntrophus sp. and the methanogen degraded benzoate to acetate, CH(4), and CO(2)
+ explanation: Supports the syntrophic association and its mixed end products, not partner-resolved H2 production
+ or consumption. Methane is a product of the association, not assigned to Syntrophus alone.
- name: Methanogenesis
- description: Methanobacterium formicicum consumes syntrophy-derived H2 and CO2
- to produce methane during complete cinnamate mineralization.
+ description: PARTIAL - Methanobacterium formicicum replaced the original Methanobacterium isolate in the reconstituted
+ consortium, and methane was reported among its degradation products. HYPOTHESIZED - consumption of partner-derived
+ H2 with CO2 reduction explains a possible methanogenic route, but the accessible abstract does not resolve that
+ transfer. Acetate remains among the reported products; complete mineralization of all cinnamate carbon is not
+ established.
interaction_type: SYNTROPHY
scope: COMMUNITY_LEVEL
source_taxon:
@@ -190,14 +192,12 @@ ecological_interactions:
id: NCBITaxon:2162
label: Methanobacterium formicicum
metabolites:
- - preferred_term: hydrogen
- term:
- id: CHEBI:18276
- label: dihydrogen
- preferred_term: carbon dioxide
term:
id: CHEBI:16526
label: carbon dioxide
+ notes: CO2 is reported among consortium products; its use in the proposed hydrogenotrophic route is not directly
+ traced in the accessible abstract.
- preferred_term: methane
term:
id: CHEBI:16183
@@ -209,11 +209,14 @@ ecological_interactions:
label: methanogenesis
evidence:
- reference: PMID:12432464
- supports: SUPPORT
+ supports: PARTIAL
evidence_source: IN_VITRO
- snippet: In the presence of bromoethanesulfonic acid (BESA), cinnamate was transformed to benzoate,
- whereas under methanogenic conditions without BESA, cinnamate was first transformed to benzoate
- via beta-oxidation and subsequently completely degraded into acetate, CH(4), and CO(2)
+ snippet: In the presence of bromoethanesulfonic acid (BESA), cinnamate was transformed to benzoate, whereas
+ under methanogenic conditions without BESA, cinnamate was first transformed to benzoate via beta-oxidation
+ and subsequently completely degraded into acetate, CH(4), and CO(2)
+ explanation: Supports methane among the consortium products and the BESA comparison. It does not demonstrate
+ a specific H2/CO2 transfer route or complete conversion of all carbon to inorganic products; acetate is also
+ reported.
related_ingredients:
- preferred_term: cinnamate
chebi_term:
@@ -326,3 +329,29 @@ growth_media:
evidence_source: IN_VITRO
snippet: "under methanogenic conditions without BESA, cinnamate was first transformed to benzoate via beta-oxidation"
explanation: "Establishes anaerobic (methanogenic) cultivation conditions."
+discussions:
+- discussion_id: cinnamate_electron_carrier_and_carbon_balance
+ prompt: Which interspecies electron carrier and carbon balance support methanogenesis during cinnamate degradation?
+ kind: KNOWLEDGE_GAP
+ status: OPEN
+ attaches_to:
+ - ecological_interactions#Cinnamate β-Oxidation to Benzoate
+ - ecological_interactions#Syntrophic Benzoate Degradation
+ - ecological_interactions#Methanogenesis
+ rationale: The primary abstract establishes benzoate formation, syntrophic benzoate degradation and acetate/methane/CO2
+ products, but not an experimentally resolved H2-versus-alternative carrier or full carbon mineralization. The
+ subscription body was unavailable; exact-system gas/carrier measurements, partner perturbations and carbon balance
+ are needed before promoting the proposed H2 route to demonstrated transfer. The supported benzoate substrate
+ link remains intact.
+ posed_by: codex
+ posed_date: '2026-10-05'
+curation_history:
+- timestamp: '2026-10-05T22:27:59Z'
+ curator: codex
+ action: REVIEW_CAUSAL_GRAPH
+ changes: 'Retain the supported benzoate substrate link and proposed beta-oxidation without unsupported commensalism
+ or fatty-acid process typing.; Retain measured syntrophic degradation and mixed products; qualify the electron-carrier
+ arrow and remove unqualified hydrogen metabolite assertions.; Retain methane production with partial route evidence;
+ distinguish the reconstituted methanogen from the original isolate and avoid complete-mineralization claims.;
+ issue #1313; reports/causal_graph_review/decisions/20261005-two-records-batch16.yaml'
+ llm_assisted: true
diff --git a/reports/causal_graph_review/adversarial-review-20261005-batch16.yaml b/reports/causal_graph_review/adversarial-review-20261005-batch16.yaml
new file mode 100644
index 000000000..aeeb51b9c
--- /dev/null
+++ b/reports/causal_graph_review/adversarial-review-20261005-batch16.yaml
@@ -0,0 +1,63 @@
+reviewer: codex
+review_mode: source_based_self_adversarial_review
+independent_approval: false
+base_commit: aa617f97b5d0ac79807d659856a8336880747559
+scope:
+- kb/communities/Cinnamate_Degradation_Consortium.yaml
+- kb/communities/Clostridial_isoDCA_Mini_Consortium.yaml
+findings:
+- issue: 1313
+ severity: P2
+ finding: Mixed acetate/methane/CO2 products are not complete carbon mineralization; the abstract does not identify
+ the electron carrier or support commensalism/fatty-acid-process typing.
+ disposition: addressed_and_locally_verified
+open_nongraph_followups:
+- issue: 1314
+ disposition: intentionally_not_closed_by_graph_only_patch
+ scope: Cinnamate environmental mineralization, abundance, metal relevance, sole-substrate and ingredient metadata.
+adversarial_checks:
+- Preserve observed syntrophic interdependence and both existing causal links; do not erase the supported benzoate
+ intermediate.
+- Distinguish a proposed hydrogenotrophic route from directly measured interspecies hydrogen flux.
+- Retain the mixed product list and distinguish original versus replacement methanogen.
+- Do not mistake aromatic-side-chain beta oxidation for measured fatty-acid beta oxidation.
+- Inspect isoDCA Figure 1 and sequential sterile spent-medium Methods; retain the valid existing interaction byte
+ unchanged.
+- Do not imply direct cell contact, peer review, quantified transfer flux or newly verified supplementary images
+ for isoDCA.
+- No new nodes/arrows or Edison spend. No change to participant/connectivity test registries.
+- Primary PDF/text/images stay outside the repository; existing reference caches unchanged.
+- Review counts include a hash-bound no-change decision, not a fabricated curation event.
+verification:
+ status: local_validation_complete
+ checks: 22
+ records: 460
+ nodes: 1475
+ edges: 718
+ review_status_counts:
+ needs_research: 3
+ pending: 358
+ reviewed: 99
+ structural_defects: 0
+ network_errors: 0
+ network_warnings: 25
+ new_network_warnings: 0
+ unchanged_raw_blocks: 29
+ snippet_counts:
+ MATCH: 36
+ RENDERING: 0
+ ASSEMBLED: 0
+ WEAK: 0
+ MISMATCH: 0
+ NOCONTENT: 0
+ published_description_coverage:
+ pages: 456
+ node_descriptions: 1461
+ edge_descriptions: 710
+ render_determinism: passed
+ regressions: 233 passed in 156.39s (0:02:36)
+ rights: 3 passed in 1.51s
+ rights_import_root_verified: true
+ caches_unchanged: true
+ primary_artifact_hashes_rechecked: true
+ participant_registry_and_connectivity_test_bytes_unchanged: true
diff --git a/reports/causal_graph_review/decisions/20261005-two-records-batch16.yaml b/reports/causal_graph_review/decisions/20261005-two-records-batch16.yaml
new file mode 100644
index 000000000..c5a8d9882
--- /dev/null
+++ b/reports/causal_graph_review/decisions/20261005-two-records-batch16.yaml
@@ -0,0 +1,150 @@
+reviewer: codex
+review_mode: source_based_self_adversarial_review
+independent_approval: false
+base_commit: aa617f97b5d0ac79807d659856a8336880747559
+issues:
+- 1313
+open_nongraph_followups:
+- 1314
+issue_deduplication:
+ count: 657
+ scope: All-state issue titles/bodies plus ignored-inclusive local reports/history/research/tests; comments not
+ exhaustive.
+ relevant_closed:
+ - 974
+ - 975
+ prior_pr: 973
+reference_cache_original_hashes:
+ references_cache/PMID_12432464.md: 059b3f75280bdc1fb31af63d6b0996a12caa55b31471b63e07a1892296d1a617
+ references_cache/doi_10.64898_2026.08.11.743107.md: f1965bd991762f8051a1012dee3556636b3fc7cc27fe49136b23499380ff87a8
+limitations:
+- No new nodes/arrows; no Edison run or spend.
+- Cinnamate primary subscription body unavailable; claims bounded to abstract.
+- IsoDCA primary PDF relevant experiments and Figure 1 inspected, not every host result or supplemental figure.
+- 'Issue #1314 is a separate non-graph metadata followup.'
+- Protected merge requires all required checks; review is self-adversarial, not independent approval.
+records:
+- path: kb/communities/Cinnamate_Degradation_Consortium.yaml
+ id: CommunityMech:000018
+ original_sha256: e0c1766f30e1d6225d8dede3b2944ca9193c45610ca6aaa194c07ecacec25edc
+ record_sha256: 6b8b4403e3b23932e5a7f59de1f2580dab061a5327e45f1d62cadd4d32c107d9
+ status: reviewed
+ outcome: changed
+ review_file: reports/causal_graph_review/decisions/20261005-two-records-batch16.yaml
+ scope: Whole record and every existing graph node/edge reviewed. Cinnamate is bounded to the accessible abstract;
+ isoDCA is an existing-graph no-change review, not exhaustive host-mechanism curation.
+ summary: Retain the supported benzoate substrate link and proposed beta-oxidation without unsupported commensalism
+ or fatty-acid process typing.; Retain measured syntrophic degradation and mixed products; qualify the electron-carrier
+ arrow and remove unqualified hydrogen metabolite assertions.; Retain methane production with partial route evidence;
+ distinguish the reconstituted methanogen from the original isolate and avoid complete-mineralization claims.
+ node_decisions:
+ - node: Cinnamate β-Oxidation to Benzoate
+ rationale: Retain the supported benzoate substrate link and proposed beta-oxidation without unsupported commensalism
+ or fatty-acid process typing.
+ - node: Syntrophic Benzoate Degradation
+ rationale: Retain measured syntrophic degradation and mixed products; qualify the electron-carrier arrow and
+ remove unqualified hydrogen metabolite assertions.
+ - node: Methanogenesis
+ rationale: Retain methane production with partial route evidence; distinguish the reconstituted methanogen from
+ the original isolate and avoid complete-mineralization claims.
+ edges_before:
+ - source: Cinnamate β-Oxidation to Benzoate
+ target: Syntrophic Benzoate Degradation
+ description: Benzoate produced from cinnamate becomes the substrate for downstream Syntrophus-methanogen degradation.
+ - source: Syntrophic Benzoate Degradation
+ target: Methanogenesis
+ description: H2 and CO2 from benzoate degradation feed Methanobacterium methanogenesis.
+ edges_after:
+ - source: Cinnamate β-Oxidation to Benzoate
+ target: Syntrophic Benzoate Degradation
+ description: Benzoate formed by P. cinnamivorans supplies substrate for the Syntrophus-methanogen association.
+ The reported stepwise conversion and BESA-associated arrest at benzoate support this substrate connection
+ without resolving every enzyme step.
+ - source: Syntrophic Benzoate Degradation
+ target: Methanogenesis
+ description: HYPOTHESIZED - benzoate oxidation could supply H2 as reducing equivalents for CO2-reducing methanogenesis.
+ The observed association and methane product support metabolic coupling, but the accessible abstract does
+ not discriminate electron carriers or trace carbon and electron flux between partners.
+ retained_edge_decisions:
+ - source: Cinnamate β-Oxidation to Benzoate
+ target: Syntrophic Benzoate Degradation
+ rationale: Benzoate formed by P. cinnamivorans supplies substrate for the Syntrophus-methanogen association.
+ The reported stepwise conversion and BESA-associated arrest at benzoate support this substrate connection
+ without resolving every enzyme step.
+ - source: Syntrophic Benzoate Degradation
+ target: Methanogenesis
+ rationale: HYPOTHESIZED - benzoate oxidation could supply H2 as reducing equivalents for CO2-reducing methanogenesis.
+ The observed association and methane product support metabolic coupling, but the accessible abstract does
+ not discriminate electron carriers or trace carbon and electron flux between partners.
+ removed_edge_decisions: []
+ references:
+ - PMID:12432464
+ history_files:
+ - history/records/Cinnamate_Degradation_Consortium/2026-10-05T222800Z-codex-cd0f4a.yaml
+ issues:
+ - 1313
+ allowed_changed_fields:
+ - curation_history
+ - discussions
+ - ecological_interactions
+ curation_events_added: 1
+ source_review:
+ primary_urls:
+ - https://pubmed.ncbi.nlm.nih.gov/12432464/
+ - https://link.springer.com/article/10.1007/s00284-002-3759-9
+ reading: Whole record, all cached reference text and fresh primary abstract read. Subscription main body unavailable
+ and not certified.
+ findings:
+ - Benzoate is the supported intermediate; BESA-associated arrest does not identify every enzyme or electron
+ carrier.
+ - The product list includes acetate, so complete mineralization is not demonstrated by the abstract.
+ - Three nodes and two existing arrows retained, one with qualified carrier mechanism.
+- path: kb/communities/Clostridial_isoDCA_Mini_Consortium.yaml
+ id: CommunityMech:000396
+ original_sha256: bb785ba51ceecbd2b3eccdee982413f11baf5df7f5f33f180dc9a9a49ef4363d
+ record_sha256: bb785ba51ceecbd2b3eccdee982413f11baf5df7f5f33f180dc9a9a49ef4363d
+ status: reviewed
+ outcome: no_change
+ review_file: reports/causal_graph_review/decisions/20261005-two-records-batch16.yaml
+ scope: Whole record and every existing graph node/edge reviewed. Cinnamate is bounded to the accessible abstract;
+ isoDCA is an existing-graph no-change review, not exhaustive host-mechanism curation.
+ summary: Retain the existing sequential bile-acid conversion interaction. Primary Figure 1 and the sterile spent-medium
+ Methods support P. hiranonis to R. gnavus WT conversion; no new host-response nodes or arrows are required to
+ repair this valid graph.
+ node_decisions:
+ - node: P. hiranonis and R. gnavus WT isoDCA production
+ rationale: Retain the existing sequential bile-acid conversion interaction. Primary Figure 1 and the sterile
+ spent-medium Methods support P. hiranonis to R. gnavus WT conversion; no new host-response nodes or arrows
+ are required to repair this valid graph.
+ edges_before: []
+ edges_after: []
+ retained_edge_decisions: []
+ removed_edge_decisions: []
+ references:
+ - doi:10.64898/2026.08.11.743107
+ history_files: []
+ issues: []
+ allowed_changed_fields: []
+ curation_events_added: 0
+ source_review:
+ primary_urls:
+ - https://www.biorxiv.org/content/10.64898/2026.08.11.743107v1.full.pdf
+ - https://api.biorxiv.org/details/biorxiv/10.64898/2026.08.11.743107
+ primary_file: /private/tmp/communitymech-batch16/isodca-primary.pdf
+ primary_sha256: 76e3b559b7711c63aef0ea1948384b6b2c4e5d27666f17b515652aa77cbdc97e
+ primary_pages: 39
+ primary_license: All rights reserved; preprint not peer reviewed. PDF and extracted text stay outside the repository.
+ reading: Whole record and complete selected-snippet cache read. Primary PDF pages 1-8 and Methods pages 15-21
+ read; Figure 1 caption on page 28 read and Figure 1 on page 36 visually inspected.
+ unavailable_or_unread: Remaining body, references and figures not exhaustively read; supplement not inspected.
+ No host-mechanism expansion or supplementary-image claim.
+ access_notes: Regular HTML/TXT failed (403/429); API-advertised JATS link returned 404. Public PDF succeeded.
+ PDF says August 15, metadata date August 18; both are version 1.
+ findings:
+ - Figure 1F and Methods use sequential P. hiranonis culture followed by R. gnavus in sterile filtered spent
+ medium, not direct-contact demonstration.
+ - WT produces isoDCA whereas rumgna_00694-disrupted KO does not; Results report complementation, but supplement
+ image was not inspected.
+ - Existing single pairwise conversion node is supported; keep its one-node/zero-arrow graph byte unchanged.
+ - Do not convert in-vivo receptor or colitis observations into new graph structure merely to increase edge count.
+ - Existing P. hiranonis strain-identity discussion remains open.
diff --git a/reports/causal_graph_review/inventory.tsv b/reports/causal_graph_review/inventory.tsv
index 3baef5e2b..88ce215b5 100644
--- a/reports/causal_graph_review/inventory.tsv
+++ b/reports/causal_graph_review/inventory.tsv
@@ -99,8 +99,8 @@ kb/communities/Chlorella_Vulgaris_Whey_Coculture.yaml CommunityMech:000422 a73b9
kb/communities/Chlorochromatium_Aggregatum_Phototrophic_Consortium.yaml CommunityMech:000141 9869c805629d42d823727e6e21363628909725dadd532b3759d2238a7f5ef48d 3 2 95.0 reports/causal_graph_review/decisions/20261005-three-records-batch15.yaml reviewed
kb/communities/Choysum_SynLAV_DEHP_Rhizobacterial_SynCom.yaml CommunityMech:000403 23c898adcb069d4f4f36cc49783674e02fa33a814b11cdc8a3a7ed7f84f74239 2 1 75.0 reports/causal_graph_review/decisions/20261005-three-records-batch15.yaml reviewed
kb/communities/Chromium_Sulfur_Reduction_Enrichment.yaml CommunityMech:000017 5be48eb0c799123a45f64ec1a3dc2e07d3fcd614110fa95c383edbdcd4ed4a87 3 2 96.7 reports/causal_graph_review/decisions/20261005-three-records-batch15.yaml reviewed
-kb/communities/Cinnamate_Degradation_Consortium.yaml CommunityMech:000018 e0c1766f30e1d6225d8dede3b2944ca9193c45610ca6aaa194c07ecacec25edc 3 2 100.0 pending
-kb/communities/Clostridial_isoDCA_Mini_Consortium.yaml CommunityMech:000396 bb785ba51ceecbd2b3eccdee982413f11baf5df7f5f33f180dc9a9a49ef4363d 1 0 60.0 pending
+kb/communities/Cinnamate_Degradation_Consortium.yaml CommunityMech:000018 6b8b4403e3b23932e5a7f59de1f2580dab061a5327e45f1d62cadd4d32c107d9 3 2 96.7 reports/causal_graph_review/decisions/20261005-two-records-batch16.yaml reviewed
+kb/communities/Clostridial_isoDCA_Mini_Consortium.yaml CommunityMech:000396 bb785ba51ceecbd2b3eccdee982413f11baf5df7f5f33f180dc9a9a49ef4363d 1 0 60.0 reports/causal_graph_review/decisions/20261005-two-records-batch16.yaml reviewed
kb/communities/Clostridium_Acetobutylicum_Ljungdahlii_Fusion_Coculture.yaml CommunityMech:000336 db4ee8d4be5d8027c88a35ea503475b9552d25a4dc991319142be92e31be5891 9 3 96.7 pending
kb/communities/Clostridium_Autoethanogenum_Kluyveri_Syngas_Coculture.yaml CommunityMech:000172 5cb2019adbc5c0c390e928ea64b88219106a9c7892c6c107930c8f17d2a0521d 3 2 100.0 pending
kb/communities/Clostridium_Caldicellulosiruptor_Minimal_Medium_Coculture.yaml CommunityMech:000193 912a98e500fa28504035f915fd6044c6ed55cbf5ab356932b5d28b2a135f958a 3 1 90.0 pending
diff --git a/reports/causal_graph_review/summary.json b/reports/causal_graph_review/summary.json
index bbbd6d569..402658650 100644
--- a/reports/causal_graph_review/summary.json
+++ b/reports/causal_graph_review/summary.json
@@ -8,8 +8,8 @@
"records_without_edges": 138,
"review_status_counts": {
"needs_research": 3,
- "pending": 360,
- "reviewed": 97
+ "pending": 358,
+ "reviewed": 99
},
"structural_defects": [],
"network_audit": [
diff --git a/reports/causal_graph_review/validation-20261005-batch16.json b/reports/causal_graph_review/validation-20261005-batch16.json
new file mode 100644
index 000000000..c5c2832a4
--- /dev/null
+++ b/reports/causal_graph_review/validation-20261005-batch16.json
@@ -0,0 +1,406 @@
+{
+ "base_commit": "aa617f97b5d0ac79807d659856a8336880747559",
+ "scope": [
+ "kb/communities/Cinnamate_Degradation_Consortium.yaml",
+ "kb/communities/Clostridial_isoDCA_Mini_Consortium.yaml"
+ ],
+ "reference_validator_version": "0.1.7",
+ "results": [
+ {
+ "check": "Cinnamate_Degradation_Consortium-schema",
+ "exit_code": 0,
+ "expected_exit_codes": [
+ 0
+ ],
+ "command": [
+ "linkml-validate",
+ "-s",
+ "src/communitymech/schema/communitymech.yaml",
+ "kb/communities/Cinnamate_Degradation_Consortium.yaml"
+ ],
+ "output": "No issues found\n"
+ },
+ {
+ "check": "Cinnamate_Degradation_Consortium-strict",
+ "exit_code": 0,
+ "expected_exit_codes": [
+ 0
+ ],
+ "command": [
+ "python3",
+ "scripts/validate_strict.py",
+ "--workers",
+ "1",
+ "--out",
+ "/Cinnamate_Degradation_Consortium-strict.tsv",
+ "kb/communities/Cinnamate_Degradation_Consortium.yaml"
+ ],
+ "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: /Cinnamate_Degradation_Consortium-strict.tsv\n"
+ },
+ {
+ "check": "Cinnamate_Degradation_Consortium-terms",
+ "exit_code": 0,
+ "expected_exit_codes": [
+ 0
+ ],
+ "command": [
+ "linkml-term-validator",
+ "validate-data",
+ "kb/communities/Cinnamate_Degradation_Consortium.yaml",
+ "-s",
+ "src/communitymech/schema/communitymech.yaml",
+ "--labels"
+ ],
+ "output": "\u2705 Validation passed\n"
+ },
+ {
+ "check": "Cinnamate_Degradation_Consortium-references-explained",
+ "exit_code": 0,
+ "expected_exit_codes": [
+ 0
+ ],
+ "command": [
+ "linkml-reference-validator",
+ "validate",
+ "data",
+ "kb/communities/Cinnamate_Degradation_Consortium.yaml",
+ "-s",
+ "src/communitymech/schema/communitymech.yaml",
+ "--config",
+ "conf/reference_validator.yaml"
+ ],
+ "output": "Validating kb/communities/Cinnamate_Degradation_Consortium.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": "Cinnamate_Degradation_Consortium-snippets",
+ "exit_code": 0,
+ "expected_exit_codes": [
+ 0
+ ],
+ "command": [
+ "python3",
+ "scripts/evidence_snippet_audit.py",
+ "kb/communities/Cinnamate_Degradation_Consortium.yaml",
+ "--list-mismatch",
+ "--list-nocontent",
+ "--list-rendering",
+ "--list-assembled"
+ ],
+ "output": "# 14 evidence snippets scanned across 1 files\n MATCH 14\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": "Cinnamate_Degradation_Consortium-rank",
+ "exit_code": 0,
+ "expected_exit_codes": [
+ 0
+ ],
+ "command": [
+ "python3",
+ "scripts/rank_causal_graph_readiness.py",
+ "kb/communities/Cinnamate_Degradation_Consortium.yaml",
+ "--format",
+ "json"
+ ],
+ "output": "[\n {\n \"rank\": 1,\n \"id\": \"CommunityMech:000018\",\n \"name\": \"Cinnamate \\u03b2-Oxidation Consortium\",\n \"score\": 96.7,\n \"taxonomy\": 3,\n \"connected_taxa\": 3,\n \"disconnected_taxa\": 0,\n \"ecological_interactions\": 3,\n \"downstream_edges\": 2,\n \"interaction_evidence\": 3,\n \"dangling_downstream\": 0,\n \"self_downstream\": 0,\n \"missing\": [\n \"interaction_type\"\n ],\n \"path\": \"kb/communities/Cinnamate_Degradation_Consortium.yaml\"\n }\n]\n"
+ },
+ {
+ "check": "Cinnamate_Degradation_Consortium-history-0",
+ "exit_code": 0,
+ "expected_exit_codes": [
+ 0
+ ],
+ "command": [
+ "linkml-validate",
+ "-s",
+ "src/communitymech/schema/history.yaml",
+ "--target-class",
+ "HistoryRecord",
+ "history/records/Cinnamate_Degradation_Consortium/2026-10-05T222800Z-codex-cd0f4a.yaml"
+ ],
+ "output": "No issues found\n"
+ },
+ {
+ "check": "Clostridial_isoDCA_Mini_Consortium-schema",
+ "exit_code": 0,
+ "expected_exit_codes": [
+ 0
+ ],
+ "command": [
+ "linkml-validate",
+ "-s",
+ "src/communitymech/schema/communitymech.yaml",
+ "kb/communities/Clostridial_isoDCA_Mini_Consortium.yaml"
+ ],
+ "output": "No issues found\n"
+ },
+ {
+ "check": "Clostridial_isoDCA_Mini_Consortium-strict",
+ "exit_code": 0,
+ "expected_exit_codes": [
+ 0
+ ],
+ "command": [
+ "python3",
+ "scripts/validate_strict.py",
+ "--workers",
+ "1",
+ "--out",
+ "/Clostridial_isoDCA_Mini_Consortium-strict.tsv",
+ "kb/communities/Clostridial_isoDCA_Mini_Consortium.yaml"
+ ],
+ "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: /Clostridial_isoDCA_Mini_Consortium-strict.tsv\n"
+ },
+ {
+ "check": "Clostridial_isoDCA_Mini_Consortium-terms",
+ "exit_code": 0,
+ "expected_exit_codes": [
+ 0
+ ],
+ "command": [
+ "linkml-term-validator",
+ "validate-data",
+ "kb/communities/Clostridial_isoDCA_Mini_Consortium.yaml",
+ "-s",
+ "src/communitymech/schema/communitymech.yaml",
+ "--labels"
+ ],
+ "output": "\u2705 Validation passed\n"
+ },
+ {
+ "check": "Clostridial_isoDCA_Mini_Consortium-references-explained",
+ "exit_code": 0,
+ "expected_exit_codes": [
+ 0
+ ],
+ "command": [
+ "linkml-reference-validator",
+ "validate",
+ "data",
+ "kb/communities/Clostridial_isoDCA_Mini_Consortium.yaml",
+ "-s",
+ "src/communitymech/schema/communitymech.yaml",
+ "--config",
+ "conf/reference_validator.yaml"
+ ],
+ "output": "Validating kb/communities/Clostridial_isoDCA_Mini_Consortium.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": "Clostridial_isoDCA_Mini_Consortium-snippets",
+ "exit_code": 0,
+ "expected_exit_codes": [
+ 0
+ ],
+ "command": [
+ "python3",
+ "scripts/evidence_snippet_audit.py",
+ "kb/communities/Clostridial_isoDCA_Mini_Consortium.yaml",
+ "--list-mismatch",
+ "--list-nocontent",
+ "--list-rendering",
+ "--list-assembled"
+ ],
+ "output": "# 22 evidence snippets scanned across 1 files\n MATCH 22\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": "Clostridial_isoDCA_Mini_Consortium-rank",
+ "exit_code": 0,
+ "expected_exit_codes": [
+ 0
+ ],
+ "command": [
+ "python3",
+ "scripts/rank_causal_graph_readiness.py",
+ "kb/communities/Clostridial_isoDCA_Mini_Consortium.yaml",
+ "--format",
+ "json"
+ ],
+ "output": "[\n {\n \"rank\": 1,\n \"id\": \"CommunityMech:000396\",\n \"name\": \"Clostridial isoDCA Mini Consortium\",\n \"score\": 60.0,\n \"taxonomy\": 2,\n \"connected_taxa\": 2,\n \"disconnected_taxa\": 0,\n \"ecological_interactions\": 1,\n \"downstream_edges\": 0,\n \"interaction_evidence\": 2,\n \"dangling_downstream\": 0,\n \"self_downstream\": 0,\n \"missing\": [\n \"additional_interactions\",\n \"downstream\",\n \"metabolites_or_biological_processes\"\n ],\n \"path\": \"kb/communities/Clostridial_isoDCA_Mini_Consortium.yaml\"\n }\n]\n"
+ },
+ {
+ "check": "inventory",
+ "exit_code": 0,
+ "expected_exit_codes": [
+ 0
+ ],
+ "command": [
+ "python3",
+ "reports/causal_graph_review/build_inventory.py"
+ ],
+ "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\": 1475,\n \"edges\": 718,\n \"records_without_nodes\": 8,\n \"records_without_edges\": 138,\n \"review_status_counts\": {\n \"needs_research\": 3,\n \"pending\": 358,\n \"reviewed\": 99\n },\n \"structural_defects\": []\n}\n"
+ },
+ {
+ "check": "network",
+ "exit_code": 1,
+ "expected_exit_codes": [
+ 1
+ ],
+ "command": [
+ "python3",
+ "-m",
+ "communitymech.cli",
+ "audit-network",
+ "--json"
+ ],
+ "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",
+ "exit_code": 0,
+ "expected_exit_codes": [
+ 0
+ ],
+ "command": [
+ "python3",
+ "-m",
+ "communitymech.render"
+ ],
+ "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",
+ "exit_code": 0,
+ "expected_exit_codes": [
+ 0
+ ],
+ "command": [
+ "python3",
+ "-m",
+ "communitymech.render"
+ ],
+ "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",
+ "exit_code": 0,
+ "expected_exit_codes": [
+ 0
+ ],
+ "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_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"
+ ],
+ "output": "........................................................................ [ 30%]\n........................................................................ [ 61%]\n........................................................................ [ 92%]\n................. [100%]\n233 passed in 156.39s (0:02:36)\n"
+ },
+ {
+ "check": "workspace-rights",
+ "exit_code": 0,
+ "expected_exit_codes": [
+ 0
+ ],
+ "command": [
+ "python3",
+ "-m",
+ "pytest",
+ "-q",
+ "tests/test_no_paywalled_text_in_repo.py"
+ ],
+ "output": "... [100%]\n3 passed in 1.51s\n"
+ },
+ {
+ "check": "black",
+ "exit_code": 0,
+ "expected_exit_codes": [
+ 0
+ ],
+ "command": [
+ "black",
+ "--check",
+ "tests/test_causal_review_batch16.py"
+ ],
+ "output": "All done! \u2728 \ud83c\udf70 \u2728\n1 file would be left unchanged.\n"
+ },
+ {
+ "check": "ruff",
+ "exit_code": 0,
+ "expected_exit_codes": [
+ 0
+ ],
+ "command": [
+ "ruff",
+ "check",
+ "tests/test_causal_review_batch16.py"
+ ],
+ "output": "All checks passed!\n"
+ },
+ {
+ "check": "diff-check",
+ "exit_code": 0,
+ "expected_exit_codes": [
+ 0
+ ],
+ "command": [
+ "git",
+ "diff",
+ "--check"
+ ],
+ "output": ""
+ }
+ ],
+ "limitations": [
+ "Source-based self-adversarial review, not independent approval or corpus completion.",
+ "Baseline just audit-network-json lacked its console entry point; exact repository CLI implementation used. No dependency changes.",
+ "All 657 prior issue titles/bodies and ignored-inclusive local reports/history/research/tests searched; comments not exhaustive.",
+ "Cinnamate subscription main body unavailable; graph claims bounded to primary abstract. IsoDCA relevant primary experiments and Figure 1 inspected, not exhaustive host-result or supplement review.",
+ "Four existing nodes and two arrows retained; no new graph structure or Edison spend.",
+ "Non-graph metadata followup #1314 remains open; unrelated YAML blocks and the entire isoDCA record are byte-preserved.",
+ "Generated data pages verified by deterministic rendering and parsed description coverage, not browser screenshots."
+ ],
+ "unchanged_raw_blocks": 29,
+ "reference_caches_unchanged": true,
+ "new_network_warnings": [],
+ "render_determinism": "passed",
+ "published_description_coverage": {
+ "pages": 456,
+ "node_descriptions": 1461,
+ "edge_descriptions": 710
+ },
+ "rights_import_root_verified": true,
+ "snippet_counts": {
+ "MATCH": 36,
+ "RENDERING": 0,
+ "ASSEMBLED": 0,
+ "WEAK": 0,
+ "MISMATCH": 0,
+ "NOCONTENT": 0
+ },
+ "corpus": {
+ "scope": "Every YAML under kb/communities and data/isolates; filesystem discovery includes hidden/ignored files.",
+ "records": 460,
+ "nodes": 1475,
+ "edges": 718,
+ "records_without_nodes": 8,
+ "records_without_edges": 138,
+ "review_status_counts": {
+ "needs_research": 3,
+ "pending": 358,
+ "reviewed": 99
+ },
+ "structural_defects": []
+ },
+ "network_warning_count": 25,
+ "status": "passed"
+}
diff --git a/tests/test_causal_review_batch16.py b/tests/test_causal_review_batch16.py
new file mode 100644
index 000000000..bd68a7651
--- /dev/null
+++ b/tests/test_causal_review_batch16.py
@@ -0,0 +1,81 @@
+"""Keep cinnamate products bounded and preserve the supported isoDCA graph."""
+
+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-batch16.yaml"
+
+
+def cinnamate():
+ return yaml.safe_load(
+ (ROOT / "kb/communities/Cinnamate_Degradation_Consortium.yaml").read_text()
+ )
+
+
+def test_benzoate_connection_survives_without_unsupported_fatty_acid_typing():
+ first, benzoate, methane = cinnamate()["ecological_interactions"]
+ assert "interaction_type" not in first
+ assert "biological_processes" not in first
+ assert "BESA" in first["description"]
+ assert first["downstream"][0]["target"] == benzoate["name"]
+ assert "supplies substrate" in first["downstream"][0]["description"]
+ assert benzoate["interaction_type"] == "SYNTROPHY"
+ assert benzoate["downstream"][0]["target"] == methane["name"]
+
+
+def test_hydrogen_route_is_not_promoted_to_measured_transfer():
+ _, benzoate, methane = cinnamate()["ecological_interactions"]
+ assert "HYPOTHESIZED" in benzoate["description"]
+ assert benzoate["downstream"][0]["description"].startswith("HYPOTHESIZED")
+ assert "HYPOTHESIZED" in methane["description"]
+ assert methane["evidence"][0]["supports"] == "PARTIAL"
+ assert all(
+ m["term"]["id"] != "CHEBI:18276" for n in (benzoate, methane) for m in n["metabolites"]
+ )
+ assert "Acetate remains" in methane["description"]
+ assert (
+ "complete mineralization of all cinnamate carbon is not established"
+ in methane["description"]
+ )
+
+
+def test_carrier_gap_has_valid_anchors_and_methanogen_provenance():
+ doc = cinnamate()
+ names = {n["name"] for n in doc["ecological_interactions"]}
+ assert "replaced the original" in doc["ecological_interactions"][2]["description"]
+ gap = doc["discussions"][0]
+ assert gap["kind"] == "KNOWLEDGE_GAP"
+ assert gap["status"] == "OPEN"
+ assert {a.split("#", 1)[1] for a in gap["attaches_to"]} == names
+
+
+def test_batch16_ledger_covers_all_structure_and_unchanged_isodca():
+ ledger = yaml.safe_load(LEDGER.read_text())
+ assert ledger["independent_approval"] is False
+ assert ledger["issues"] == [1313]
+ assert ledger["open_nongraph_followups"] == [1314]
+ changed, unchanged = ledger["records"]
+ assert changed["curation_events_added"] == 1
+ assert len(changed["history_files"]) == 1
+ assert len(changed["edges_after"]) == 2
+ assert unchanged["outcome"] == "no_change"
+ assert unchanged["record_sha256"] == unchanged["original_sha256"]
+ assert unchanged["history_files"] == []
+ assert unchanged["allowed_changed_fields"] == []
+ assert unchanged["edges_after"] == []
+ for row in ledger["records"]:
+ raw = (ROOT / row["path"]).read_bytes()
+ assert hashlib.sha256(raw).hexdigest() == row["record_sha256"]
+ doc = yaml.safe_load(raw)
+ assert Counter(d["node"] for d in row["node_decisions"]) == Counter(
+ n["name"] for n in doc["ecological_interactions"]
+ )
+ before = {(e["source"], e["target"]) for e in row["edges_before"]}
+ after = {(e["source"], e["target"]) for e in row["edges_after"]}
+ assert before == after
+ for path, expected in ledger["reference_cache_original_hashes"].items():
+ assert hashlib.sha256((ROOT / path).read_bytes()).hexdigest() == expected