The metabolic profile of the artificial microbial consortia during the degradation of pleuromutilin were studied, and potential degradation products and metabolic pathways were proposed
-
Supports proposed products/pathways, not experimentally resolved interspecies exchange or obligate syntrophy.
+
Supports proposed products/pathways, not experimentally resolved interspecies exchange or product-removal feedback on upstream metabolism.
diff --git a/history/records/GLBRC_UFMP_Fermentation_Community/2026-10-07T134453Z-codex-9cf7ab.yaml b/history/records/GLBRC_UFMP_Fermentation_Community/2026-10-07T134453Z-codex-9cf7ab.yaml
new file mode 100644
index 000000000..af78678a2
--- /dev/null
+++ b/history/records/GLBRC_UFMP_Fermentation_Community/2026-10-07T134453Z-codex-9cf7ab.yaml
@@ -0,0 +1,28 @@
+history_version: 1
+target:
+ kind: record
+ path: kb/communities/GLBRC_UFMP_Fermentation_Community.yaml
+ slug: GLBRC_UFMP_Fermentation_Community
+session:
+ id: 2026-10-07T134453Z-codex-9cf7ab
+ timestamp: '2026-10-07T13:44:53Z'
+ actors:
+ - type: ai_agent
+ name: codex
+ model: unspecified
+ agent_tool: codex
+links:
+ issues:
+ - https://github.com/CultureBotAI/CommunityMech/issues/1744
+events:
+- type: EDIT
+ outcome: changed
+ sections:
+ - interactions
+ - discussions
+ summary: Preserve heterogeneous genome-inferred producer roles without new member assignments.;
+ Preserve substrate-distinct proposed chain elongation and terminal-product limits.; Type
+ the existing hypothesized lactate-transfer model CROSS_FEEDING with primary Discussion
+ evidence; distinguish product-removal feedback from obligacy.
+ details: Schema-semantics re-review; original ledgers and history artifacts remain unchanged.
+ No node, arrow, participant, cache, experimental protocol or provider-spend change.
diff --git a/history/records/Multi_stage_Anaerobic_Digestion_SynCom_YSJ_and_SynCom_J/2026-10-07T134453Z-codex-8dae13.yaml b/history/records/Multi_stage_Anaerobic_Digestion_SynCom_YSJ_and_SynCom_J/2026-10-07T134453Z-codex-8dae13.yaml
new file mode 100644
index 000000000..62847b55c
--- /dev/null
+++ b/history/records/Multi_stage_Anaerobic_Digestion_SynCom_YSJ_and_SynCom_J/2026-10-07T134453Z-codex-8dae13.yaml
@@ -0,0 +1,28 @@
+history_version: 1
+target:
+ kind: record
+ path: kb/communities/Multi_stage_Anaerobic_Digestion_SynCom_YSJ_and_SynCom_J.yaml
+ slug: Multi_stage_Anaerobic_Digestion_SynCom_YSJ_and_SynCom_J
+session:
+ id: 2026-10-07T134453Z-codex-8dae13
+ timestamp: '2026-10-07T13:44:53Z'
+ actors:
+ - type: ai_agent
+ name: codex
+ model: unspecified
+ agent_tool: codex
+links:
+ issues:
+ - https://github.com/CultureBotAI/CommunityMech/issues/1744
+events:
+- type: EDIT
+ outcome: changed
+ sections:
+ - interactions
+ - discussions
+ summary: Preserve measured methane/comparator outcomes and the qualified staged-transfer
+ model.; Keep the metagenomically inferred transfer node untyped for unresolved product-removal
+ feedback, not unproven obligacy.; Preserve environmental selection interpretation and
+ function/stability distinction.
+ details: Schema-semantics re-review; original ledgers and history artifacts remain unchanged.
+ No node, arrow, participant, cache, experimental protocol or provider-spend change.
diff --git a/history/records/Pleuromutilin_Degrading_Artificial_Consortium_5_Strain/2026-10-07T134453Z-codex-f66458.yaml b/history/records/Pleuromutilin_Degrading_Artificial_Consortium_5_Strain/2026-10-07T134453Z-codex-f66458.yaml
new file mode 100644
index 000000000..25af8722d
--- /dev/null
+++ b/history/records/Pleuromutilin_Degrading_Artificial_Consortium_5_Strain/2026-10-07T134453Z-codex-f66458.yaml
@@ -0,0 +1,27 @@
+history_version: 1
+target:
+ kind: record
+ path: kb/communities/Pleuromutilin_Degrading_Artificial_Consortium_5_Strain.yaml
+ slug: Pleuromutilin_Degrading_Artificial_Consortium_5_Strain
+session:
+ id: 2026-10-07T134453Z-codex-f66458
+ timestamp: '2026-10-07T13:44:53Z'
+ actors:
+ - type: ai_agent
+ name: codex
+ model: unspecified
+ agent_tool: codex
+links:
+ issues:
+ - https://github.com/CultureBotAI/CommunityMech/issues/1744
+events:
+- type: EDIT
+ outcome: changed
+ sections:
+ - interactions
+ - discussions
+ summary: 'Keep the positive degradation endpoint distinct from a product-removal mechanism;
+ obligacy is not required by SYNTROPHY.; Preserve proposed products/pathways without treating
+ metabolomic differences as partner feedback; unresolved topology remains #1715.'
+ details: Schema-semantics re-review; original ledgers and history artifacts remain unchanged.
+ No node, arrow, participant, cache, experimental protocol or provider-spend change.
diff --git a/kb/communities/GLBRC_UFMP_Fermentation_Community.yaml b/kb/communities/GLBRC_UFMP_Fermentation_Community.yaml
index 9b93ca832..18686ccd8 100644
--- a/kb/communities/GLBRC_UFMP_Fermentation_Community.yaml
+++ b/kb/communities/GLBRC_UFMP_Fermentation_Community.yaml
@@ -611,9 +611,11 @@ ecological_interactions:
can supply CLOS1 chain elongation. ATO3 and Bifidobacterium MAGs represent proposed donor candidates, not a
measured set of donor-recipient transfers. CLOS1 contains the inferred LacT, electron-confurcating LDH and associated
EtfAB machinery; the other two abundant Firmicutes have different proposed substrates. The study did not directly
- trace ATO3-to-CLOS1 carbon flow, establish obligatory syntrophy, determine lactate stereochemistry or show complete
- conversion of lactose into medium-chain fatty acids. The canonical labels retain their existing genus-level
- or ambiguous groundings rather than assert newly identified species.'
+ trace ATO3-to-CLOS1 carbon flow, establish product-removal feedback on upstream fermentation, determine lactate
+ stereochemistry or show complete conversion of lactose into medium-chain fatty acids. The canonical labels retain
+ their existing genus-level or ambiguous groundings rather than assert newly identified species. CROSS_FEEDING
+ denotes the hypothesized transfer model. SYNTROPHY does not require obligacy in the local schema, but adds product-removal
+ feedback that this study does not resolve.'
scope: COMMUNITY_LEVEL
downstream:
- target: Proposed Firmicutes Chain Elongation Roles
@@ -630,6 +632,13 @@ ecological_interactions:
'
explanation: Supports an author-proposed MAG role from gene content and reactor associations, not member-specific
flux or demonstrated partner dependence. Bulk reactor metabolites were measured separately by HPLC/GC-MS.
+ - reference: PMID:37324413
+ supports: PARTIAL
+ evidence_source: COMPUTATIONAL
+ snippet: The inferred connection between some Actinobacteriota fermenting lactose to lactic acid and some Firmicutes
+ utilizing lactic acid for chain elongation
+ explanation: The primary Discussion explicitly identifies the inferred producer-consumer connection. This supports
+ a hypothesized cross-feeding classification, not directly traced flux or product-removal feedback.
participating_taxa:
- preferred_term: Olsenella_B sp. (MAG ATO3)
term:
@@ -651,6 +660,7 @@ ecological_interactions:
term:
id: NCBITaxon:1485
label: Clostridium
+ interaction_type: CROSS_FEEDING
related_ingredients:
- preferred_term: lactose
chebi_term:
@@ -873,7 +883,9 @@ discussions:
role outside these existing Actinobacteriota/lactate and Firmicute nodes; no new node is invented to hide its
disconnected warning. Unsupported stereospecific CHEBI:422 entries are removed from graph nodes without guessing
a replacement. Non-graph ingredient/taxonomy role text and all #486/#624 grounding history remain unchanged
- and are not certified by this graph-only review.'
+ and are not certified by this graph-only review. The local SYNTROPHY definition does not assert obligacy. The
+ existing lactate-transfer model is typed CROSS_FEEDING with PARTIAL evidence because the study proposes a producer-consumer
+ connection without resolving product-removal feedback on upstream metabolism.'
posed_by: codex
posed_date: '2026-10-06'
curation_history:
@@ -885,3 +897,11 @@ curation_history:
member allocation.; Retain the proposed lactate-transfer model with candidate donors and CLOS1, not obligatory
syntrophy or complete conversion. Issue #1474; reports/causal_graph_review/decisions/20261006-three-records-batch44.yaml'
llm_assisted: true
+- timestamp: '2026-10-07T13:44:52Z'
+ curator: codex
+ action: REVIEW_INTERACTION_SEMANTICS
+ changes: 'Preserve heterogeneous genome-inferred producer roles without new member assignments.; Preserve substrate-distinct
+ proposed chain elongation and terminal-product limits.; Type the existing hypothesized lactate-transfer model
+ CROSS_FEEDING with primary Discussion evidence; distinguish product-removal feedback from obligacy. Issue #1744;
+ reports/causal_graph_review/decisions/20261007-five-records-batch91.yaml'
+ llm_assisted: true
diff --git a/kb/communities/Multi_stage_Anaerobic_Digestion_SynCom_YSJ_and_SynCom_J.yaml b/kb/communities/Multi_stage_Anaerobic_Digestion_SynCom_YSJ_and_SynCom_J.yaml
index 571e68418..75d6871be 100644
--- a/kb/communities/Multi_stage_Anaerobic_Digestion_SynCom_YSJ_and_SynCom_J.yaml
+++ b/kb/communities/Multi_stage_Anaerobic_Digestion_SynCom_YSJ_and_SynCom_J.yaml
@@ -164,8 +164,9 @@ ecological_interactions:
description: PARTIAL - Metagenomic analysis associates YSJ bioaugmentation with hydrolysis, acidogenesis, interspecies
electron transfer, energy metabolism and methanogenesis functions. The abstract calls this gene upregulation;
this metagenomic statement alone does not establish transcription, protein activity, measured electron flux,
- direct electrical transfer or obligate syntrophy. Methane gains are retained independently of the unresolved
- transfer mechanism.
+ direct electrical transfer or product-removal feedback making upstream metabolism favourable. Methane gains
+ are retained independently of the unresolved transfer mechanism. SYNTROPHY does not require obligacy in the
+ local schema; the unresolved feedback mechanism, not unproven obligacy, is the reason this node remains untyped.
scope: COMMUNITY_LEVEL
metabolites:
- preferred_term: methane
@@ -266,7 +267,9 @@ discussions:
staged hand-off/electron-transfer/environment-selection chain. Obtain authorized full Methods to distinguish
metagenomic abundance from expression, native from inoculated contributions, and direct from carrier-mediated
electron exchange. Preserve the observed function/stability trade-off and the existing membership follow-up
- #183. Abstract-only access does not show that controls were absent.'
+ #183. Abstract-only access does not show that controls were absent. The local SYNTROPHY definition concerns
+ product-removal feedback and does not assert obligacy. Metagenomic functional association alone does not resolve
+ that feedback; retain the putative transfer interpretation without a categorical SYNTROPHY label.'
attaches_to:
- ecological_interactions#Staged metabolic hand-off across hydrolytic, acidogenic and methanogenic members
- ecological_interactions#Putative interspecies electron transfer supporting methanogenesis
@@ -280,3 +283,10 @@ curation_history:
Retain environmental selection interpretation and function/stability trade-off; remove unsupported competition
label. Issue #1626; reports/causal_graph_review/decisions/20261007-four-records-batch75.yaml'
llm_assisted: true
+- timestamp: '2026-10-07T13:44:53Z'
+ curator: codex
+ action: REVIEW_INTERACTION_SEMANTICS
+ changes: 'Preserve measured methane/comparator outcomes and the qualified staged-transfer model.; Keep the metagenomically
+ inferred transfer node untyped for unresolved product-removal feedback, not unproven obligacy.; Preserve environmental
+ selection interpretation and function/stability distinction. Issue #1744; reports/causal_graph_review/decisions/20261007-five-records-batch91.yaml'
+ llm_assisted: true
diff --git a/kb/communities/Pleuromutilin_Degrading_Artificial_Consortium_5_Strain.yaml b/kb/communities/Pleuromutilin_Degrading_Artificial_Consortium_5_Strain.yaml
index e0e5f4afb..478666b37 100644
--- a/kb/communities/Pleuromutilin_Degrading_Artificial_Consortium_5_Strain.yaml
+++ b/kb/communities/Pleuromutilin_Degrading_Artificial_Consortium_5_Strain.yaml
@@ -156,8 +156,9 @@ taxonomy:
ecological_interactions:
- name: Ninety-Two-Percent Pleuromutilin Degradation
description: The defined five-strain artificial consortium achieved reported pleuromutilin degradation of 91.97%.
- Preserve this positive community-level endpoint without asserting obligatory syntrophy, partner-specific flux,
- complete mineralization or a superiority comparison not stated in the accessible abstract.
+ Preserve this positive community-level endpoint without asserting product-removal cooperation, partner-specific
+ flux, complete mineralization or a superiority comparison not stated in the accessible abstract. SYNTROPHY does
+ not require obligacy, but a measured community degradation endpoint is not itself the product-removal mechanism.
scope: COMMUNITY_LEVEL
metabolites:
- preferred_term: pleuromutilin
@@ -212,8 +213,8 @@ ecological_interactions:
were studied, and potential degradation products and metabolic pathways were proposed
'
- explanation: Supports proposed products/pathways, not experimentally resolved interspecies exchange or obligate
- syntrophy.
+ explanation: Supports proposed products/pathways, not experimentally resolved interspecies exchange or product-removal
+ feedback on upstream metabolism.
participating_taxa:
- preferred_term: Stenotrophomonas pavanii
term:
@@ -249,6 +250,13 @@ curation_history:
changes: 'Retain positive 91.97% degradation without obligatory syntrophy.; Retain proposed metabolic products/pathways
with attribution and metabolomics limits. Issue #1711; reports/causal_graph_review/decisions/20261007-four-records-batch86.yaml'
llm_assisted: true
+- timestamp: '2026-10-07T13:44:53Z'
+ curator: codex
+ action: REVIEW_INTERACTION_SEMANTICS
+ changes: 'Keep the positive degradation endpoint distinct from a product-removal mechanism; obligacy is not required
+ by SYNTROPHY.; Preserve proposed products/pathways without treating metabolomic differences as partner feedback;
+ unresolved topology remains #1715. Issue #1744; reports/causal_graph_review/decisions/20261007-five-records-batch91.yaml'
+ llm_assisted: true
discussions:
- discussion_id: pleuromutilin-parent-versus-defined-community
prompt: Which compatibility and degradation mechanisms belong to the defined five-strain community?
@@ -257,12 +265,14 @@ discussions:
posed_by: codex
rationale: 'Natural En4 enrichment showed reduced diversity and enriched pollutant-associated genera; preserve
those positives as parent-community context, not interactions among the five selected strains. Assembly/isolation
- workflow remains in engineering_design. Public Table S1 lists bacterial and fungal isolates and identifies W12,
- rather than same-species W10, as the selected Pseudomonas songnenensis in Table S2. Table S2 reports no inhibition
- zones, not cross-feeding or long-term stability. Table S3 supports differential metabolomics, not compound provenance
- or partner flux. Main text remains inaccessible; source DOCX tables were read by OOXML, not rendered pages.
- Missing compatibility/pathway topology remains #1715 pending a reviewed, explicitly authorized Edison report;
- no new structure is added. Non-graph isolate and strain identity remains #1716.'
+ workflow remains in the record description. Public Table S1 lists bacterial and fungal isolates and identifies
+ W12, rather than same-species W10, as the selected Pseudomonas songnenensis in Table S2. Table S2 reports no
+ inhibition zones, not cross-feeding or long-term stability. Table S3 supports differential metabolomics, not
+ compound provenance or partner flux. Main text remains inaccessible; source DOCX tables were read by OOXML,
+ not rendered pages. Missing compatibility/pathway topology remains #1715 pending a reviewed, explicitly authorized
+ Edison report; no new structure is added. Non-graph isolate and strain identity remains #1716. The local SYNTROPHY
+ definition does not assert obligacy. The retained outcome and proposed-products nodes remain untyped because
+ they do not themselves establish product-removal feedback, not because obligatory dependence is unproven.'
attaches_to:
- ecological_interactions#Ninety-Two-Percent Pleuromutilin Degradation
- ecological_interactions#Proposed Artificial-Consortium Degradation Products and Pathways
@@ -285,5 +295,5 @@ discussions:
were studied, and potential degradation products and metabolic pathways were proposed
'
- explanation: Supports proposed products/pathways, not experimentally resolved interspecies exchange or obligate
- syntrophy.
+ explanation: Supports proposed products/pathways, not experimentally resolved interspecies exchange or product-removal
+ feedback on upstream metabolism.
diff --git a/reports/causal_graph_review/README.md b/reports/causal_graph_review/README.md
index eafa1554a..c761bacef 100644
--- a/reports/causal_graph_review/README.md
+++ b/reports/causal_graph_review/README.md
@@ -5,6 +5,26 @@ source-based self-adversarial review. These records are not independent approval
or proof that every graph is complete. The current inventory and summary distinguish
`reviewed`, `pending` and `needs_research`.
+## Batch91: Interaction Semantics Re-Review
+
+[Decisions](decisions/20261007-five-records-batch91.yaml),
+[validation](validation-20261007-batch91.json) and
+[self-adversarial review](adversarial-review-20261007-batch91.yaml) recheck five
+earlier records after the batch90 schema correction. Three records are edited;
+the MFC and Crystal Geyser records remain unchanged. All 14 nodes, seven arrows
+and participant assignments are retained. UFMP's existing transfer hypothesis
+is typed CROSS_FEEDING with PARTIAL evidence. Digestion and pleuromutilin remain
+untyped for unresolved product-removal feedback or outcome scope, not because
+obligacy is unproven.
+
+Earlier ledgers and history artifacts are preserved. Explicit hash-linked
+supersession selects the current review without accepting unlinked duplicates,
+forks or cycles. Coverage remains 280 reviewed, 132 pending and 48 needing
+research; re-review does not increase the completed count. Two complete main
+bodies and four primary abstracts were read. An unrelated reference lookup is
+excluded explicitly. Repair #1744 awaits protected-main merge; research #1715
+and non-graph follow-ups remain open. No new topology, protocol or Edison job.
+
## Batch90: Degradation, Competition And Diatom Signaling
[Decisions](decisions/20261007-four-records-batch90.yaml),
diff --git a/reports/causal_graph_review/adversarial-review-20261007-batch91.yaml b/reports/causal_graph_review/adversarial-review-20261007-batch91.yaml
new file mode 100644
index 000000000..da748bb92
--- /dev/null
+++ b/reports/causal_graph_review/adversarial-review-20261007-batch91.yaml
@@ -0,0 +1,503 @@
+reviewer: codex
+review_mode: source_based_self_adversarial_review
+independent_approval: false
+base_commit: c12b1dc71b78f968854875181b0e3b1f8d9ef3df
+scope:
+- kb/communities/Clostridium_Cellulolyticum_Geobacter_Cellulose_MFC_Coculture.yaml
+- kb/communities/Crystal_Geyser_CO2_Aquifer_CPR_Lipid_Community.yaml
+- kb/communities/GLBRC_UFMP_Fermentation_Community.yaml
+- kb/communities/Multi_stage_Anaerobic_Digestion_SynCom_YSJ_and_SynCom_J.yaml
+- kb/communities/Pleuromutilin_Degrading_Artificial_Consortium_5_Strain.yaml
+decision_ledger: reports/causal_graph_review/decisions/20261007-five-records-batch91.yaml
+validation_report: reports/causal_graph_review/validation-20261007-batch91.json
+findings:
+- issue: 1744
+ severity: P2
+ status: addressed_in_this_change
+ finding: Use current SYNTROPHY semantics in UFMP, digestion and pleuromutilin review rationales
+ disposition: Close only after protected-main merge; includes append-only review supersession support.
+- issue: 1715
+ severity: P2
+ status: unresolved_research
+ disposition: Keep OPEN after graph-rationale repair.
+- issue: 183
+ severity: P2
+ status: unresolved_non_graph
+ disposition: Keep OPEN after graph-rationale repair.
+- issue: 1327
+ severity: P2
+ status: unresolved_non_graph
+ disposition: Keep OPEN after graph-rationale repair.
+- issue: 1366
+ severity: P2
+ status: unresolved_non_graph
+ disposition: Keep OPEN after graph-rationale repair.
+- issue: 1716
+ severity: P2
+ status: unresolved_non_graph
+ disposition: Keep OPEN after graph-rationale repair.
+adversarial_checks:
+- Fresh both-root baseline preceded papers. Five previous reviews rechecked, three records changed and two unchanged.
+ All14nodes7arrows retained with identical arrow wording/endpoints and participant assignments. No new direction,
+ topology or inflated completed-review count.
+- Current schema explicitly does not assert obligacy for SYNTROPHY. Its additional criterion is product-removal
+ feedback making the first partner metabolism favourable. Cross-feeding and cooperative outcomes do not automatically
+ demonstrate that feedback.
+- UFMP primary main text supports an inferred producer-consumer connection. The existing transfer node receives
+ CROSS_FEEDING with PARTIAL COMPUTATIONAL evidence; heterogeneous donor/substrate roles and both hypothesized arrows
+ remain. No direct flux, stereochemistry, complete conversion or additional species assignment is claimed.
+- Digestion retains reported methane increases, propionate reduction and function/stability trade-off. Metagenomic
+ association is not transcript abundance or measured electron transfer. Its untyped mechanism node is justified
+ by unresolved feedback, not unproven obligacy; primary access is abstract-only.
+- Pleuromutilin retains its positive community endpoint and proposed-products evidence. These nodes do not resolve
+ product-removal feedback and remain untyped; existing needs_research status and issue1715 remain. A discussion
+ reference to nonexistent engineering_design is corrected to the record description. No new antibiotic-selection,
+ growth optimization, genetic design, pathway or protocol details.
+- MFC and Crystal Geyser already distinguished substrate provision from product-removal feedback, so their record
+ bytes remain unchanged. MFC current/CMC outcomes and spatial observations stay separate; Crystal Geyser lipid/genome/isotope
+ associations do not isolate a donor-recipient route. Missing fresh MFC full text is not absence of controls.
+- Two complete main bodies, embedded table text and captions read, plus four other primary abstracts. No original
+ figure pixels, raw data or complete supplement audit. Earlier pleuromutilin supplement notes/boundary rows reread,
+ not newly downloaded or visually rendered; inconsistent S3 scale/subset/table labels are recorded in existing
+ research1715, not reconciled.
+- An initial PMID33125214 lookup was unrelated and explicitly excluded. Correct exact-system PMID42133144 was retrieved
+ and read before edits. Target proofs reference only six correct primary sources; unrelated lookup artifacts remain
+ for transparency, not evidence.
+- Inventory previously rejected any repeated record review. Explicit parent ledger, record hash, original hash and
+ ID links now select one linear tip independent of ordering. Tests reject duplicate, missing, self, mismatched,
+ unlinked, forked, cyclic and disconnected histories. Current record hash and node/edge coverage checks remain
+ mandatory; needs_research is not promoted.
+- All previous tracked history and decision artifacts are byte-identical to the parent commit. Three append-only
+ histories, eight record regressions and sixteen new inventory cases. All921caches457unchangedrecords/raw non-graph
+ blocks preserved. Coverage280reviewed132pending48research;1420nodes584arrows, all56oldwarnings, zero structural
+ defects and unchanged legacy census.
+- No Edison dry run, provider submission or spend. Executed gates and deterministic HTML parser checks are not browser
+ screenshots or generated-model loader certification; loader1703 remains open. Repair1744 awaits protected-main
+ merge; research1715 and metadata183/1327/1366/1716 stay open. Source-based self-review is not independent approval
+ or corpus completion.
+verification:
+ combined_regressions: 841 passed in 329.80s (0:05:29)
+ new_regression_tests: 24
+ record_regressions: 8
+ new_inventory_regressions: 16
+ primary_graph_snippet_proof:
+ graph_quotations: 23
+ discussion_quotations: 2
+ fresh_primary_matches: 25
+ cached_only_matches: 0
+ retained_nodes: 14
+ removed_nodes: 0
+ retained_arrows: 7
+ removed_arrows: 0
+ arrow_wording_and_endpoints_unchanged: true
+ new_biological_causal_claims: 0
+ primary_main_texts_read: 2
+ other_primary_abstracts_read: 4
+ cache_changes: 0
+ references: Five full-record reference-validator runs passed. CLI Total checks counts issues, not executed checks.
+ Twenty-three graph and two discussion quotations match fresh target-specific primary text and cache text. Literal
+ matching is not entailment; two main bodies and four other abstracts were read, not six full papers.
+ snippet_counts_by_record:
+ kb/communities/Clostridium_Cellulolyticum_Geobacter_Cellulose_MFC_Coculture.yaml:
+ MATCH: 28
+ RENDERING: 0
+ ASSEMBLED: 0
+ WEAK: 0
+ MISMATCH: 0
+ NOCONTENT: 0
+ kb/communities/Crystal_Geyser_CO2_Aquifer_CPR_Lipid_Community.yaml:
+ MATCH: 13
+ RENDERING: 0
+ ASSEMBLED: 0
+ WEAK: 0
+ MISMATCH: 0
+ NOCONTENT: 0
+ kb/communities/GLBRC_UFMP_Fermentation_Community.yaml:
+ MATCH: 28
+ RENDERING: 0
+ ASSEMBLED: 0
+ WEAK: 0
+ MISMATCH: 0
+ NOCONTENT: 0
+ kb/communities/Multi_stage_Anaerobic_Digestion_SynCom_YSJ_and_SynCom_J.yaml:
+ MATCH: 10
+ RENDERING: 0
+ ASSEMBLED: 0
+ WEAK: 0
+ MISMATCH: 0
+ NOCONTENT: 0
+ kb/communities/Pleuromutilin_Degrading_Artificial_Consortium_5_Strain.yaml:
+ MATCH: 9
+ RENDERING: 0
+ ASSEMBLED: 0
+ WEAK: 0
+ MISMATCH: 0
+ NOCONTENT: 0
+ full_corpus_snippet_audit:
+ caveat: Both-root recipe executed. Informational exit0 does not certify a clean corpus; five focused snippet
+ gates pass independently.
+ output: "# 8930 evidence snippets scanned across 460 files\n MATCH 8795\n RENDERING 20\n ASSEMBLED\
+ \ 1\n WEAK 0\n MISMATCH 38\n NOCONTENT 76\n\n# Files with MISMATCH/WEAK (content present but\
+ \ snippet absent) \u2014 fabrication suspects\n 19 (19 hard) kb/communities/DCPP_DBS4_DCP4_DCP11d_Degradation_SynCom.yaml\n\
+ \ 15 (15 hard) kb/communities/Fucoidan_Seven_Degrader_Combinatorial_SynCom.yaml\n 3 (3 hard) kb/communities/Coscinodiscus_Synthetic_Community.yaml\n\
+ \ 1 (1 hard) kb/communities/Altered_Schaedler_Flora_Gnotobiotic_Mouse_Community.yaml\nuv run python scripts/evidence_snippet_audit.py\
+ \ \n"
+ network:
+ existing_findings_preserved: 56
+ added_findings: {}
+ removed_findings: {}
+ interpretation: All 56 existing warnings preserved, zero structural defects. All 14 nodes and seven arrows retained,
+ including wording and endpoints. No taxonomy or auditor-rule changes.
+ tested_file_sha256:
+ reports/causal_graph_review/decisions/20261007-five-records-batch91.yaml: 55c2dafc3c10346c37f864ef5acc1fdadefd37967c51f21696eef562a0296bbe
+ reports/causal_graph_review/build_inventory.py: 5cb9aeb35b34b67077dddf434715d1ee9314f71130f9e165f5c41967180a9483
+ tests/test_causal_review_inventory.py: 43a297fcbff5a2882d6a2c3d70f00a29c92ee48a9626bb94e8ed9fefa68b321d
+ tests/test_causal_review_batch44.py: fecdd8792d0526861c355b3655123a6bb4be56ec912832c13c0bedf0f2d353f7
+ tests/test_causal_review_batch75.py: f05d4ac2dd6310a9d3e21ab3bb3227beecab71271f7ac1ada2eadaa71e54fcce
+ tests/test_causal_review_batch86.py: a34b4b722057aec1f8742fea08320d6c1d7230f2dbb111158e83c8a6432b9975
+ tests/test_causal_review_batch91.py: ebe9c06685e16b5fd896f511b0cd8a3d12a4affdb0d0d67e5b28087d7916459f
+ kb/communities/Clostridium_Cellulolyticum_Geobacter_Cellulose_MFC_Coculture.yaml: bafb8c0e58150b2e586e92c84725b0e3ad88001a64c2d1acb1d2889ede2810b3
+ kb/communities/Crystal_Geyser_CO2_Aquifer_CPR_Lipid_Community.yaml: b219156340ab8170a318ed82b9bf47e7a5a5b67e490870d42fabb2c9a8e25051
+ kb/communities/GLBRC_UFMP_Fermentation_Community.yaml: e3f1905f6c8547e172311d18108c5860d14f919150c44f238ddc484a497b763f
+ kb/communities/Multi_stage_Anaerobic_Digestion_SynCom_YSJ_and_SynCom_J.yaml: 93c0f771f13065d1e571c9eb5a548e09714581bbe588cf0b522bdbc29af456da
+ kb/communities/Pleuromutilin_Degrading_Artificial_Consortium_5_Strain.yaml: 08cd2f0be57b813b8e230e235c317770d414a6c4948003dd645063562c9a55c2
+ reports/causal_graph_review/README.md: e81e7887555c8c936c63e974da15e8d67ea6c4c7caa0be65f7b9a3ef34501526
+ unchanged_records: 457
+ unchanged_caches: 921
+ immutable_prior_history_and_decision_files: 740
+ cache_changes: []
+ edison:
+ required_for_this_repair: false
+ required_for_unresolved_extensions: true
+ provider_submissions: 0
+ credits_spent: 0
+ dry_runs: []
+ prior_unanswered_scope: 'Issue #1715 / batch86 remains pending; no new authorization or job.'
+ post_commit_docs_current: Separate publication gate, not preasserted.
+ validation_refresh:
+ reason: 841 tests passed; Ruff found ten dictionary-constructor style violations and two existing long strings
+ in the newly scoped inventory script. Style-only fixes, no biological input changes. Inventory, full regressions
+ and style gates refreshed; original output retained.
+ original_report: /private/tmp/communitymech-batch91/before-lint-fix/validation.json
+ original_report_sha256: 07e4a1fbde1d84fbcbbfff21b0724d5ea41e664b720410b44fa37177cd2b6c76
+ archived_inputs:
+ /private/tmp/communitymech-batch91/before-lint-fix/reports/causal_graph_review/build_inventory.py: 5759cacb876773d23b2b2d34ba3974de2853d0d2c47b6e6ada19eabe711d0926
+ /private/tmp/communitymech-batch91/before-lint-fix/tests/test_causal_review_inventory.py: 0c5d7faad1b9b5cab588b4306e8852dd55d95b613eda798d9b8f9bcdf62fb8bb
+ /private/tmp/communitymech-batch91/before-lint-fix/tests/test_causal_review_batch44.py: 4b0a2566405cd6572a7ac80587c5abe958d9cec6a172d2a869d353c50a521502
+ /private/tmp/communitymech-batch91/before-lint-fix/tests/test_causal_review_batch75.py: 9eadbbab11fe53ffe76de3fbe2e1929b99e3fdb05d556a177658864a5e671d61
+ /private/tmp/communitymech-batch91/before-lint-fix/tests/test_causal_review_batch86.py: de694ae73aec8cc6f32b21653378e5f63267f49cc8ae6eb52d7607606611260a
+ /private/tmp/communitymech-batch91/before-lint-fix/tests/test_causal_review_batch91.py: ebe9c06685e16b5fd896f511b0cd8a3d12a4affdb0d0d67e5b28087d7916459f
+ ? /private/tmp/communitymech-batch91/before-lint-fix/reports/causal_graph_review/decisions/20261007-five-records-batch91.yaml
+ : 55c2dafc3c10346c37f864ef5acc1fdadefd37967c51f21696eef562a0296bbe
+ /private/tmp/communitymech-batch91/before-lint-fix/reports/causal_graph_review/inventory.tsv: ca34fa8001a6bfe9ce3f606e0594e11a1e3df579f5fff6fde4106f2f5dffc944
+ /private/tmp/communitymech-batch91/before-lint-fix/reports/causal_graph_review/summary.json: b5bc36167531e52dd8d5ce46c40c35fba2840667bf72211a26c34c4b1626b5f0
+ new_log_prefix: v2-
+ superseded_checks:
+ - check: inventory
+ command:
+ - /Users/marcin/.cache/uv/archive-v0/l58VlyFvdmnkl0CcAx5Gk/bin/python3
+ - reports/causal_graph_review/build_inventory.py
+ exit_code: 0
+ expected_exit_codes:
+ - 0
+ log: /private/tmp/communitymech-batch91/inventory.log
+ log_sha256: beb676def27914d03e3c57f8cd243729b37ac50f1c39d0da197815fea5122264
+ output_tail: "{\n \"scope\": \"Every YAML under kb/communities and data/isolates; filesystem discovery includes\
+ \ hidden/ignored files.\",\n \"semantic_review_rule\": \"Structural checks and readiness scores do not establish\
+ \ causal support. Completed reviews must match the current record SHA-256, cover every node once with a rationale,\
+ \ and reproduce the current edge list.\",\n \"records\": 460,\n \"nodes\": 1420,\n \"edges\": 584,\n \"\
+ records_without_nodes\": 8,\n \"records_without_edges\": 173,\n \"review_status_counts\": {\n \"needs_research\"\
+ : 48,\n \"pending\": 132,\n \"reviewed\": 280\n },\n \"structural_defects\": []\n}\n"
+ - check: regressions
+ command:
+ - /Users/marcin/.cache/uv/archive-v0/l58VlyFvdmnkl0CcAx5Gk/bin/python3
+ - -m
+ - pytest
+ - -q
+ - tests/test_causal_review_batch10.py
+ - tests/test_causal_review_batch11.py
+ - tests/test_causal_review_batch12.py
+ - tests/test_causal_review_batch13.py
+ - tests/test_causal_review_batch14.py
+ - tests/test_causal_review_batch15.py
+ - tests/test_causal_review_batch16.py
+ - tests/test_causal_review_batch17.py
+ - tests/test_causal_review_batch18.py
+ - tests/test_causal_review_batch19.py
+ - tests/test_causal_review_batch20.py
+ - tests/test_causal_review_batch21.py
+ - tests/test_causal_review_batch22.py
+ - tests/test_causal_review_batch23.py
+ - tests/test_causal_review_batch24.py
+ - tests/test_causal_review_batch25.py
+ - tests/test_causal_review_batch27.py
+ - tests/test_causal_review_batch28.py
+ - tests/test_causal_review_batch29.py
+ - tests/test_causal_review_batch30.py
+ - tests/test_causal_review_batch31.py
+ - tests/test_causal_review_batch32.py
+ - tests/test_causal_review_batch33.py
+ - tests/test_causal_review_batch34.py
+ - tests/test_causal_review_batch35.py
+ - tests/test_causal_review_batch36.py
+ - tests/test_causal_review_batch37.py
+ - tests/test_causal_review_batch38.py
+ - tests/test_causal_review_batch39.py
+ - tests/test_causal_review_batch40.py
+ - tests/test_causal_review_batch41.py
+ - tests/test_causal_review_batch42.py
+ - tests/test_causal_review_batch43.py
+ - tests/test_causal_review_batch44.py
+ - tests/test_causal_review_batch45.py
+ - tests/test_causal_review_batch46.py
+ - tests/test_causal_review_batch47.py
+ - tests/test_causal_review_batch48.py
+ - tests/test_causal_review_batch49.py
+ - tests/test_causal_review_batch5.py
+ - tests/test_causal_review_batch50.py
+ - tests/test_causal_review_batch51.py
+ - tests/test_causal_review_batch52.py
+ - tests/test_causal_review_batch53.py
+ - tests/test_causal_review_batch54.py
+ - tests/test_causal_review_batch55.py
+ - tests/test_causal_review_batch56.py
+ - tests/test_causal_review_batch57.py
+ - tests/test_causal_review_batch58.py
+ - tests/test_causal_review_batch59.py
+ - tests/test_causal_review_batch6.py
+ - tests/test_causal_review_batch60.py
+ - tests/test_causal_review_batch61.py
+ - tests/test_causal_review_batch62.py
+ - tests/test_causal_review_batch63.py
+ - tests/test_causal_review_batch64.py
+ - tests/test_causal_review_batch65.py
+ - tests/test_causal_review_batch66.py
+ - tests/test_causal_review_batch67.py
+ - tests/test_causal_review_batch68.py
+ - tests/test_causal_review_batch69.py
+ - tests/test_causal_review_batch7.py
+ - tests/test_causal_review_batch70.py
+ - tests/test_causal_review_batch71.py
+ - tests/test_causal_review_batch72.py
+ - tests/test_causal_review_batch73.py
+ - tests/test_causal_review_batch74.py
+ - tests/test_causal_review_batch75.py
+ - tests/test_causal_review_batch76.py
+ - tests/test_causal_review_batch77.py
+ - tests/test_causal_review_batch78.py
+ - tests/test_causal_review_batch79.py
+ - tests/test_causal_review_batch8.py
+ - tests/test_causal_review_batch80.py
+ - tests/test_causal_review_batch81.py
+ - tests/test_causal_review_batch82.py
+ - tests/test_causal_review_batch83.py
+ - tests/test_causal_review_batch84.py
+ - tests/test_causal_review_batch85.py
+ - tests/test_causal_review_batch86.py
+ - tests/test_causal_review_batch87.py
+ - tests/test_causal_review_batch88.py
+ - tests/test_causal_review_batch89.py
+ - tests/test_causal_review_batch9.py
+ - tests/test_causal_review_batch90.py
+ - tests/test_causal_review_batch91.py
+ - tests/test_site_audit_fixes.py
+ - tests/test_causal_review_inventory.py
+ - tests/test_rank_causal_graph_readiness.py
+ - tests/test_network_auditor.py
+ - tests/test_participating_taxa.py
+ - tests/test_causal_descriptions_are_published.py
+ - tests/test_published_pages_name_real_records.py
+ - tests/test_reference_validator_actually_validates.py
+ - tests/test_snippet_audit_artefact_classes.py
+ - tests/test_reference_error_annotation.py
+ - tests/test_community_level_connectivity_credit.py
+ - tests/test_no_paywalled_text_in_repo.py
+ exit_code: 0
+ expected_exit_codes:
+ - 0
+ log: /private/tmp/communitymech-batch91/regressions.log
+ log_sha256: feae6c7f69aed8bd43970af498ff2f350c68c688ebf5da329955ab7088aa92d5
+ output_tail: '........................................................................ [ 8%]
+
+ ........................................................................ [ 17%]
+
+ ........................................................................ [ 25%]
+
+ ........................................................................ [ 34%]
+
+ ........................................................................ [ 42%]
+
+ ........................................................................ [ 51%]
+
+ ........................................................................ [ 59%]
+
+ ........................................................................ [ 68%]
+
+ ........................................................................ [ 77%]
+
+ ........................................................................ [ 85%]
+
+ ........................................................................ [ 94%]
+
+ ................................................. [100%]
+
+ 841 passed in 290.21s (0:04:50)
+
+ '
+ - check: black
+ command:
+ - /Users/marcin/.cache/uv/archive-v0/3Q_kifQtLB624D5bBWGIf/bin/black
+ - --check
+ - reports/causal_graph_review/build_inventory.py
+ - tests/test_causal_review_inventory.py
+ - tests/test_causal_review_batch44.py
+ - tests/test_causal_review_batch75.py
+ - tests/test_causal_review_batch86.py
+ - tests/test_causal_review_batch91.py
+ exit_code: 0
+ expected_exit_codes:
+ - 0
+ log: /private/tmp/communitymech-batch91/black.log
+ log_sha256: 7657c5ec367da2c8d4deead1b5f1f8eca9c1b89120ad13df7f855ca4005696b6
+ output_tail: "All done! \u2728 \U0001F370 \u2728\n6 files would be left unchanged.\n"
+ - check: ruff
+ command:
+ - /Users/marcin/.cache/uv/archive-v0/wCcxEYRM4HeHgwYPZemHX/bin/ruff
+ - check
+ - reports/causal_graph_review/build_inventory.py
+ - tests/test_causal_review_inventory.py
+ - tests/test_causal_review_batch44.py
+ - tests/test_causal_review_batch75.py
+ - tests/test_causal_review_batch86.py
+ - tests/test_causal_review_batch91.py
+ exit_code: 1
+ expected_exit_codes:
+ - 0
+ log: /private/tmp/communitymech-batch91/ruff.log
+ log_sha256: dd0f860e98fea4a76d9bf065ae8e7d6f8c8fcd1be90d8eb61aa58e7d53653596
+ output_tail: "E501 Line too long (122 > 100)\n --> reports/causal_graph_review/build_inventory.py:175:101\n\
+ \ |\n173 | ]\n174 | summary = {\n175 | \"scope\": \"Every YAML under kb/communities and\
+ \ data/isolates; filesystem discovery includes hidden/ignored files.\",\n | \
+ \ ^^^^^^^^^^^^^^^^^^^^^^\n176 | \
+ \ \"semantic_review_rule\": \"Structural checks and readiness scores do not establish causal support.\
+ \ Completed reviews must match\u2026\n177 | \"records\": len(rows),\n |\n\nE501 Line too long (240\
+ \ > 100)\n --> reports/causal_graph_review/build_inventory.py:176:101\n |\n174 | \u2026\n175 | \u2026\
+ des hidden/ignored files.\",\n176 | \u2026 support. Completed reviews must match the current record SHA-256,\
+ \ cover every node once with a rationale, and reproduce the current edge list.\",\n | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n\
+ 177 | \u2026\n178 | \u2026\n |\n\nC408 Unnecessary `dict()` call (rewrite as a literal)\n --> tests/test_causal_review_batch44.py:100:52\n\
+ \ |\n 98 | current = next(r for r in followup[\"records\"] if r[\"path\"] == row[\"path\"\
+ ])\n 99 | assert current[\"original_sha256\"] == expected\n100 | assert current[\"\
+ supersedes_review\"] == dict(\n | ____________________________________________________^\n101 | | \
+ \ review_file=str(LEDGER.relative_to(ROOT)), record_sha256=expected\n102 | | )\n \
+ \ | |_____________^\n103 | expected = current[\"record_sha256\"]\n104 | assert expected\
+ \ == hashlib.sha256((ROOT / row[\"path\"]).read_bytes()).hexdigest()\n |\nhelp: Rewrite as a literal\n\n\
+ C408 Unnecessary `dict()` call (rewrite as a literal)\n --> tests/test_causal_review_batch75.py:129:52\n\
+ \ |\n127 | current = next(r for r in followup[\"records\"] if r[\"path\"] == row[\"path\"\
+ ])\n128 | assert current[\"original_sha256\"] == expected\n129 | assert current[\"\
+ supersedes_review\"] == dict(\n | ____________________________________________________^\n130 | | \
+ \ review_file=str(LEDGER.relative_to(ROOT)), record_sha256=expected\n131 | | )\n \
+ \ | |_____________^\n132 | expected = current[\"record_sha256\"]\n133 | assert hashlib.sha256((ROOT\
+ \ / row[\"path\"]).read_bytes()).hexdigest() == expected\n |\nhelp: Rewrite as a literal\n\nC408 Unnecessary\
+ \ `dict()` call (rewrite as a literal)\n --> tests/test_causal_review_batch86.py:156:52\n |\n154 | \
+ \ current = next(r for r in followup[\"records\"] if r[\"path\"] == row[\"path\"])\n155 | \
+ \ assert current[\"original_sha256\"] == expected\n156 | assert current[\"supersedes_review\"\
+ ] == dict(\n | ____________________________________________________^\n157 | | review_file=str(LEDGER.relative_to(ROOT)),\
+ \ record_sha256=expected\n158 | | )\n | |_____________^\n159 | expected = current[\"\
+ record_sha256\"]\n160 | assert hashlib.sha256((ROOT / row[\"path\"]).read_bytes()).hexdigest() ==\
+ \ expected\n |\nhelp: Rewrite as a literal\n\nC408 Unnecessary `dict()` call (rewrite as a literal)\n \
+ \ --> tests/test_causal_review_inventory.py:121:13\n |\n120 | def review_chain():\n121 | first\
+ \ = dict(\n | _____________^\n122 | | path=\"record.yaml\", id=\"CommunityMech:1\", review_file=\"\
+ first.yaml\", record_sha256=\"one\"\n123 | | )\n | |_____^\n124 | second = dict(\n125 | \
+ \ path=first[\"path\"],\n |\nhelp: Rewrite as a literal\n\nC408 Unnecessary `dict()` call (rewrite\
+ \ as a literal)\n --> tests/test_causal_review_inventory.py:124:14\n |\n122 | path=\"record.yaml\"\
+ , id=\"CommunityMech:1\", review_file=\"first.yaml\", record_sha256=\"one\"\n123 | )\n124 | second\
+ \ = dict(\n | ______________^\n125 | | path=first[\"path\"],\n126 | | id=first[\"id\"\
+ ],\n127 | | review_file=\"second.yaml\",\n128 | | record_sha256=\"two\",\n129 | | \
+ \ original_sha256=\"one\",\n130 | | supersedes_review=dict(review_file=\"first.yaml\", record_sha256=\"\
+ one\"),\n131 | | )\n | |_____^\n132 | third = dict(\n133 | path=first[\"path\"],\n\
+ \ |\nhelp: Rewrite as a literal\n\nC408 Unnecessary `dict()` call (rewrite as a literal)\n --> tests/test_causal_review_inventory.py:130:27\n\
+ \ |\n128 | record_sha256=\"two\",\n129 | original_sha256=\"one\",\n130 | supersedes_review=dict(review_file=\"\
+ first.yaml\", record_sha256=\"one\"),\n | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n\
+ 131 | )\n132 | third = dict(\n |\nhelp: Rewrite as a literal\n\nC408 Unnecessary `dict()` call\
+ \ (rewrite as a literal)\n --> tests/test_causal_review_inventory.py:132:13\n |\n130 | supersedes_review=dict(review_file=\"\
+ first.yaml\", record_sha256=\"one\"),\n131 | )\n132 | third = dict(\n | _____________^\n133\
+ \ | | path=first[\"path\"],\n134 | | id=first[\"id\"],\n135 | | review_file=\"third.yaml\"\
+ ,\n136 | | record_sha256=\"three\",\n137 | | original_sha256=\"two\",\n138 | | supersedes_review=dict(review_file=\"\
+ second.yaml\", record_sha256=\"two\"),\n139 | | )\n | |_____^\n140 | return first, second, third\n\
+ \ |\nhelp: Rewrite as a literal\n\nC408 Unnecessary `dict()` call (rewrite as a literal)\n --> tests/test_causal_review_inventory.py:138:27\n\
+ \ |\n136 | record_sha256=\"three\",\n137 | original_sha256=\"two\",\n138 | supersedes_review=dict(review_file=\"\
+ second.yaml\", record_sha256=\"two\"),\n | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n\
+ 139 | )\n140 | return first, second, third\n |\nhelp: Rewrite as a literal\n\nC408 Unnecessary\
+ \ `dict()` call (rewrite as a literal)\n --> tests/test_causal_review_inventory.py:197:38\n |\n195 |\
+ \ rows = [first, second, third]\n196 | else:\n197 | first[\"supersedes_review\"] = dict(review_file=\"\
+ second.yaml\", record_sha256=\"two\")\n | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n\
+ 198 | first[\"original_sha256\"] = \"two\"\n199 | rows = [first, second]\n |\nhelp: Rewrite\
+ \ as a literal\n\nC408 Unnecessary `dict()` call (rewrite as a literal)\n --> tests/test_causal_review_inventory.py:214:27\n\
+ \ |\n212 | review_file=\"second.yaml\",\n213 | original_sha256=old[\"record_sha256\"],\n\
+ 214 | supersedes_review=dict(review_file=old[\"review_file\"], record_sha256=old[\"record_sha256\"\
+ ]),\n | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n\
+ 215 | )\n216 | new[\"node_decisions\"].pop()\n |\nhelp: Rewrite as a literal\n\nFound 12 errors.\n\
+ No fixes available (10 hidden fixes can be enabled with the `--unsafe-fixes` option).\n"
+research_issue_note:
+ issue: 1715
+ id: 6039456491
+ url: https://github.com/CultureBotAI/CommunityMech/issues/1715#issuecomment-6039456491
+ body_sha256: 3f51f7a20174796bee70fe612b3a1063854e9d8371c6900fd2b17d9f36067fb2
+participant_census:
+ measurements:
+ baseline:
+ records: 460
+ with_community_level: 396
+ mixed: 126
+ community_level_only: 270
+ taxa: 1523
+ credited_solely_by_the_rule: 1249
+ current:
+ records: 460
+ with_community_level: 396
+ mixed: 126
+ community_level_only: 270
+ taxa: 1523
+ credited_solely_by_the_rule: 1249
+ delta:
+ records: 0
+ with_community_level: 0
+ mixed: 0
+ community_level_only: 0
+ taxa: 0
+ credited_solely_by_the_rule: 0
+ interpretation: Canonical participant assignments and measured legacy community-level census unchanged. No taxonomy
+ or auditor-rule change.
+corpus:
+ records: 460
+ nodes: 1420
+ edges: 584
+ review_status_counts:
+ needs_research: 48
+ pending: 132
+ reviewed: 280
+limitations:
+- Fresh both-root baseline before papers:460records921caches1420nodes584arrows56warnings0structural. Re-review of14existingnodes7arrows,
+ all retained without endpoint or wording changes. Three records edited; two unchanged. Review-status counts remain280reviewed132pending48needs_research;
+ re-review does not inflate coverage.
+- 'Six target primary sources: two full main bodies with embedded tables/captions (UFMP and Crystal Geyser), four
+ abstracts (two MFC papers, digestion, exact pleuromutilin). No original figure pixels, raw data or separate full
+ supplements independently audited. Pleuromutilin historical DOCX text reread only for TablesS1/S2, S3 scope/method
+ notes and boundary rows; not all metabolite rows or a fresh main text.'
+- Accidental PMID33125214 lookup is an unrelated vanadium paper, explicitly excluded from target evidence. Primary/cache
+ snippet matches are not scientific entailment. Main-text access limits are not evidence that controls were absent.
+- MFC and Crystal Geyser already use the product-removal criterion and are unchanged. UFMP retains the hypothesized
+ producer-consumer model as CROSS_FEEDING, not demonstrated flux. Digestion and pleuromutilin remain untyped for
+ unresolved feedback or outcome scope, not lack of obligacy. No categorical SYNTROPHY restoration based only on
+ author vocabulary.
+- Pleuromutilin discussion now points to its actual description rather than a nonexistent engineering_design field.
+ The historical S3 note has internally conflicting fold-change/list-scope wording; no numerical reconciliation
+ or new pathway is asserted. Research1715 and metadata183/1327/1366/1716 remain open.
+- No taxonomy, canonical participants, network rules, cache content, node additions/removals or arrow changes. No
+ new antibiotic-selection details, strain optimization, genetic designs or experimental procedures. No Edison dry
+ run or paid submission.
+- Earlier decisions and external history artifacts remain append-only. Explicit supersedes_review links bind each
+ prior reviewed record hash to the next original hash; inventory must reject unlinked duplicates, forks and cycles
+ and still validate current graph coverage.
+- Source-based self-adversarial review is not independent approval, generated-model loader certification or corpus
+ completion. Loader1703 remains unresolved. New repair issue1744 closes only after protected-main merge.
diff --git a/reports/causal_graph_review/build_inventory.py b/reports/causal_graph_review/build_inventory.py
index 2f98df87f..8889ef1d1 100644
--- a/reports/causal_graph_review/build_inventory.py
+++ b/reports/causal_graph_review/build_inventory.py
@@ -7,7 +7,7 @@
import importlib.util
import json
import sys
-from collections import Counter
+from collections import Counter, defaultdict
from pathlib import Path
import yaml
@@ -54,6 +54,53 @@ def review_status(doc, digest, review):
return status
+def index_reviews(decisions):
+ """Select the tip of each explicit, hash-linked review history."""
+ grouped = defaultdict(list)
+ for row in decisions:
+ grouped[row["path"]].append(row)
+ result = {}
+ for path, rows in grouped.items():
+ by_file = {row["review_file"]: row for row in rows}
+ if len(by_file) != len(rows):
+ raise ValueError(f"Duplicate record reviews within one ledger: {path}")
+ parents, superseded = {}, set()
+ for row in rows:
+ if "supersedes_review" not in row:
+ continue
+ link = row["supersedes_review"]
+ if not isinstance(link, dict) or set(link) != {"review_file", "record_sha256"}:
+ raise ValueError(f"Invalid supersedes_review link: {path}")
+ parent_file = link["review_file"]
+ if parent_file not in by_file or parent_file == row["review_file"]:
+ raise ValueError(f"Missing or self-referencing review parent: {path}")
+ parent = by_file[parent_file]
+ if (
+ row["id"] != parent["id"]
+ or link["record_sha256"] != parent["record_sha256"]
+ or row.get("original_sha256") != parent["record_sha256"]
+ ):
+ raise ValueError(f"Review supersession identity/hash mismatch: {path}")
+ if parent_file in superseded:
+ raise ValueError(f"Forked review history: {path}")
+ superseded.add(parent_file)
+ parents[row["review_file"]] = parent_file
+ roots, tips = set(by_file) - set(parents), set(by_file) - superseded
+ if len(roots) != 1 or len(tips) != 1:
+ raise ValueError(f"Unlinked or cyclic review history: {path}")
+ tip = next(iter(tips))
+ seen, cursor = set(), tip
+ while cursor is not None:
+ if cursor in seen:
+ raise ValueError(f"Cyclic review history: {path}")
+ seen.add(cursor)
+ cursor = parents.get(cursor)
+ if seen != set(by_file):
+ raise ValueError(f"Disconnected review history: {path}")
+ result[path] = by_file[tip]
+ return result
+
+
def main():
paths = sorted(record_files())
discovered = sorted(p for root in default_record_roots() for p in root.rglob("*.yaml"))
@@ -69,8 +116,7 @@ def main():
if row.get("review_file") != str(path.relative_to(ROOT)):
raise ValueError(f"Incorrect review-file pointer in {path}")
decisions.extend(records)
- by_path = {row["path"]: row for row in decisions}
- assert len(by_path) == len(decisions), "Duplicate record reviews"
+ by_path = index_reviews(decisions)
assert set(by_path) <= {str(p.relative_to(ROOT)) for p in paths}, "Review target is missing"
rows, defects = [], []
for path in paths:
@@ -126,8 +172,15 @@ def main():
for issue in issues
]
summary = {
- "scope": "Every YAML under kb/communities and data/isolates; filesystem discovery includes hidden/ignored files.",
- "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.",
+ "scope": (
+ "Every YAML under kb/communities and data/isolates; "
+ "filesystem discovery includes hidden/ignored files."
+ ),
+ "semantic_review_rule": (
+ "Structural checks and readiness scores do not establish causal support. "
+ "Completed reviews must match the current record SHA-256, cover every node once "
+ "with a rationale, and reproduce the current edge list."
+ ),
"records": len(rows),
"nodes": sum(row["nodes"] for row in rows),
"edges": sum(row["edges"] for row in rows),
diff --git a/reports/causal_graph_review/decisions/20261007-five-records-batch91.yaml b/reports/causal_graph_review/decisions/20261007-five-records-batch91.yaml
new file mode 100644
index 000000000..b4b75764e
--- /dev/null
+++ b/reports/causal_graph_review/decisions/20261007-five-records-batch91.yaml
@@ -0,0 +1,717 @@
+reviewer: codex
+review_mode: source_based_self_adversarial_review
+independent_approval: false
+base_commit: c12b1dc71b78f968854875181b0e3b1f8d9ef3df
+baseline_commit: c12b1dc71b78f968854875181b0e3b1f8d9ef3df
+base_tree: 83d7e5364b4698afcc8d350c0ee6dbef29f59092
+pre_source_baseline_sha256: e7737cf6659ab12c422c7cff17d554077255cbfa31f3193c2bd11d092439656e
+schema_definition: 'Metabolic cooperation in which one partner''s product is another''s substrate, and removing
+ that product is what makes the first partner''s metabolism favourable.
+
+ **Obligacy is not asserted.** This value used to read "Obligate metabolic cooperation", which the corpus''s 135
+ uses do not honour and which a single record can rarely establish: showing that neither partner grows alone needs
+ a monoculture arm, and where sources have one they often disprove obligacy. CommunityMech:000336 is the worked
+ case - every paper calls that pairing a syntrophy and its seed paper grows both species as monocultures in the
+ same experiment (#752).
+
+ Where the distinction matters, state it in the interaction''s `description` with the evidence for it. METPO:1007200
+ obligate syntrophy interaction and METPO:1007201 facultative syntrophy interaction are proposed in `proposals/metpo_communitymech_interaction_semantics_v1/`
+ so it can eventually be typed rather than narrated.'
+issues:
+- 1744
+unresolved_research_issues:
+- 1715
+unresolved_non_graph_issues:
+- 183
+- 1327
+- 1366
+- 1716
+source_access:
+- reference: PMID:17695929
+ url: https://www.ebi.ac.uk/europepmc/webservices/rest/search?query=EXT_ID%3A17695929+AND+SRC%3AMED&format=json&resultType=core
+ accessed_scope: Primary abstract only; complete main text was not retrieved through Europe PMC.
+ fulltext_error: null
+- reference: PMID:18725730
+ url: https://www.ebi.ac.uk/europepmc/webservices/rest/search?query=EXT_ID%3A18725730+AND+SRC%3AMED&format=json&resultType=core
+ accessed_scope: Primary abstract only; complete main text was not retrieved through Europe PMC.
+ fulltext_error: null
+- reference: PMID:32203118
+ url: https://www.ebi.ac.uk/europepmc/webservices/rest/PMC7242380/fullTextXML
+ accessed_scope: Primary abstract and complete main body, embedded tables and captions; not separate supplements,
+ raw data or original figure pixels.
+ fulltext_error: null
+- reference: PMID:37324413
+ url: https://www.ebi.ac.uk/europepmc/webservices/rest/PMC10263058/fullTextXML
+ accessed_scope: Primary abstract and complete main body, embedded tables and captions; not separate supplements,
+ raw data or original figure pixels.
+ fulltext_error: null
+- reference: PMID:41825563
+ url: https://www.ebi.ac.uk/europepmc/webservices/rest/search?query=EXT_ID%3A41825563+AND+SRC%3AMED&format=json&resultType=core
+ accessed_scope: Primary abstract only; complete main text was not retrieved through Europe PMC.
+ fulltext_error: null
+- reference: PMID:42133144
+ url: https://www.ebi.ac.uk/europepmc/webservices/rest/search?query=EXT_ID%3A42133144+AND+SRC%3AMED&format=json&resultType=core
+ accessed_scope: Primary abstract only; complete main text was not retrieved through Europe PMC.
+ fulltext_error: null
+excluded_source_lookup:
+ reference: PMID:33125214
+ pmid: '33125214'
+ pmcid: null
+ doi: 10.1021/acs.est.0c05328
+ url: https://www.ebi.ac.uk/europepmc/webservices/rest/search?query=EXT_ID%3A33125214+AND+SRC%3AMED&format=json&resultType=core
+ source: /private/tmp/communitymech-batch91/pleuromutilin-metadata.json
+ source_sha256: e69b7fd6038a048c3cf73dd3a4ddd31a607bbe501591e812a166ecef76f7b8f2
+ metadata: /private/tmp/communitymech-batch91/pleuromutilin-metadata.json
+ extracted_body: /private/tmp/communitymech-batch91/pleuromutilin-primary.txt
+ body_sha256: 7933557343c25d7e5b42283d1406d678e3b9e2b5d1fc310ecc2ecf2fb4d79fe0
+ body_lines: 13
+ scope: Primary abstract only; complete main text was not retrieved through Europe PMC.
+ license: See publisher
+ fulltext_error: null
+ excluded_from_target_evidence: Unrelated Polaromonas vanadium paper; mistaken lookup, not evidence for the pleuromutilin
+ record.
+primary_artifacts:
+ src/communitymech/schema/communitymech.yaml: 99079e7712d0c6b5eef0f278822a6b04fdb9a3a55b446e1f73f0752e4e626d04
+ /private/tmp/communitymech-batch91/baseline.json: e7737cf6659ab12c422c7cff17d554077255cbfa31f3193c2bd11d092439656e
+ /private/tmp/communitymech-batch91/created-issue.json: af5d9e50879d2d81b6121e6bb467f3dfb43cbf19e58f00c549bbfc5aecb7f388
+ /private/tmp/communitymech-batch91/crystal-metadata.json: be68721c63bbb8d73cf0d5064862bce198cd2f40db0007794b5410de41fcd105
+ /private/tmp/communitymech-batch91/crystal-primary.txt: 0187f4633ad24ee9c44d51abf0ec885b48ef2e7491e47e2d05dda0c0ed27fe35
+ /private/tmp/communitymech-batch91/crystal-primary.xml: 1a1adc25720a700480fd7ed2db7998e557e3f6e098915fe38b15eb2eaff05eaa
+ /private/tmp/communitymech-batch91/crystal-tables.txt: a6190234e56963ed1e1e4b62832d31e71e6125311dfe5c946168696aa97f57dc
+ /private/tmp/communitymech-batch91/digestion-metadata.json: 6d8955e2079dc5c8058ddd70750adf4c2400cd9bf60793a5342fe09c666b8ce2
+ /private/tmp/communitymech-batch91/digestion-primary.txt: 6f60f5e4a765efa2d6fa1866d38e736c02f441d184174a4b862463f8573de054
+ /private/tmp/communitymech-batch91/issue-matches.json: 0ef821aa739d0b998ab0103eb0e0916ca24f2e0db71a5910fb8862d9a5d70b04
+ /private/tmp/communitymech-batch91/issues-precreate.json: c62d4eb11be049b02d1738d1b7ead2bbdd7b6996ae1e02ca472be5b32b41add9
+ /private/tmp/communitymech-batch91/issues.json: c62d4eb11be049b02d1738d1b7ead2bbdd7b6996ae1e02ca472be5b32b41add9
+ /private/tmp/communitymech-batch91/local-matches.txt: 15dcb7691d97dca1c9b053cdee009b017cd49792f5149fc571251ad99e3daec9
+ /private/tmp/communitymech-batch91/mfc-metadata.json: d2bedb08b42f9227981a1f2f74f8bf63b5f149885e1e28ce7a8a27660bfe8ecb
+ /private/tmp/communitymech-batch91/mfc-primary.txt: 7702e4869e299758977455ff113d143458b1ec6afc39286d96eccaf2cf56b6cd
+ /private/tmp/communitymech-batch91/mfc-spatial-metadata.json: 8e08edf4e5ede7f942757ee17a6904b78dfb6e4ce986dc42303c89c66e06614a
+ /private/tmp/communitymech-batch91/mfc-spatial-primary.txt: 74c4a71ba485b7acfda6d0499d78638907ee63fdb86d13b922d274f9da3975b2
+ /private/tmp/communitymech-batch91/pleuromutilin-exact-metadata.json: 31186032c1fa4c474ab634e27b9a92414bad6df0a09f6dd1df9d6e3a8c666a10
+ /private/tmp/communitymech-batch91/pleuromutilin-exact-primary.txt: 9e03c24ff8f6bf5a898e2aa4ef0f3b56ab74e11eaa2bf2a68ede5a6816fc4d3c
+ /private/tmp/communitymech-batch91/pleuromutilin-metadata.json: e69b7fd6038a048c3cf73dd3a4ddd31a607bbe501591e812a166ecef76f7b8f2
+ /private/tmp/communitymech-batch91/pleuromutilin-primary.txt: 7933557343c25d7e5b42283d1406d678e3b9e2b5d1fc310ecc2ecf2fb4d79fe0
+ /private/tmp/communitymech-batch91/primary-manifest-initial.json: c2e56056bfbfdb6d8a6daf54a43eb9ae530d4e64fe58449be8a3d1ee524e11c7
+ /private/tmp/communitymech-batch91/primary-manifest.json: b9a5153ab17ed0254f3ae39a4806c70237c6eb55105a2dd816c776e6e120629d
+ /private/tmp/communitymech-batch91/ufmp-metadata.json: 2f56f74f811b56ca091b2bf0fb13f13f20c429b53391caea32f0a4f56e4f669a
+ /private/tmp/communitymech-batch91/ufmp-primary.txt: f595c8d181f546020b38d195b57b49e9f1f2a043ea594c570503023f8782ffd1
+ /private/tmp/communitymech-batch91/ufmp-primary.xml: 4380ba1a9bc478cee229e62d1a8865b06fd5a6d4bd9281d788dbc8d708ab7343
+ /private/tmp/communitymech-batch91/ufmp-tables.txt: ef469ea4378211bba007cbf16af28ce34d675666326c64031141af5e1e8cd3f4
+ /private/tmp/communitymech-batch86/pleuromutilin-supplement-text.txt: b0adcb59b59a61fea74de471dc5119ac9a44b54541165a8ad990503f64d356c7
+ reports/causal_graph_review/decisions/20261005-three-records-batch19.yaml: 2f4684d88aa8b70f6ed84c0726aadad8dfb5f1b31c8a2e93b5f682264da69490
+ references_cache/PMID_17695929.md: 0a6d3e9ad135d3fe881f76e15e22b3e279efa320996df6bb82d2b598a2f07c87
+ references_cache/PMID_18725730.md: 474fa53897b2d368427ee153d7dca517de6deb0a4282fda7c8c68d52e4b7b5d3
+ reports/causal_graph_review/decisions/20261006-three-records-batch27.yaml: 90e6a0ad3e095a1301744958f706782510d03bdf40852999837d12401019ded0
+ references_cache/PMID_32203118.txt: 5d873129a219c729435a36dfe6c9c59a29be4befe7dde10294a8db6025d452f3
+ references_cache/PMID_32203118.md: ed47b1021b5307304a7ac65b99353942f4db7873cf2bf8cec3ccd52e573872b6
+ reports/causal_graph_review/decisions/20261006-three-records-batch44.yaml: 066c435d002774ad3950ddaeb4cc0d22f9cdff48c82e5cf8fbb431ccf1be9bcb
+ references_cache/PMID_37324413.md: 8acf781bd773c3159ec59504a0f719661bb71693482c0dd9e244e1abb6c3bc46
+ reports/causal_graph_review/decisions/20261007-four-records-batch75.yaml: ab80d08a11b594625a0e0458b089ccab663f00def93cee6bd12c59e2b9f9d598
+ references_cache/PMID_41825563.md: 5fa9d1a4077dc6a15f4c93274e63f35e2b6831592c11f78c040012e146bb918b
+ reports/causal_graph_review/decisions/20261007-four-records-batch86.yaml: 52c9010cc9daba2e08129e016e0c9122925fcf1f038d1545e756dbc855683669
+ references_cache/PMID_42133144.md: a047aa3e0cf6f2463456d24aaeaf960adcae583be5507f180a5de64c73b91cb8
+primary_graph_snippet_count: 23
+snippet_checks:
+- kind: graph
+ record: Clostridium_Cellulolyticum_Geobacter_Cellulose_MFC_Coculture
+ node: Cellulose Fermentation Feeding Electrode Respiration
+ evidence_index: 0
+ reference: PMID:17695929
+ independent_primary_match: true
+ cache_matched: true
+ matched_artifact: /private/tmp/communitymech-batch91/mfc-primary.txt
+ method: Normalized contiguous match; literal matching is not entailment.
+- kind: graph
+ record: Clostridium_Cellulolyticum_Geobacter_Cellulose_MFC_Coculture
+ node: Cellulose Fermentation Feeding Electrode Respiration
+ evidence_index: 1
+ reference: PMID:17695929
+ independent_primary_match: true
+ cache_matched: true
+ matched_artifact: /private/tmp/communitymech-batch91/mfc-primary.txt
+ method: Normalized contiguous match; literal matching is not entailment.
+- kind: graph
+ record: Clostridium_Cellulolyticum_Geobacter_Cellulose_MFC_Coculture
+ node: Defined Binary Electricity Production
+ evidence_index: 0
+ reference: PMID:17695929
+ independent_primary_match: true
+ cache_matched: true
+ matched_artifact: /private/tmp/communitymech-batch91/mfc-primary.txt
+ method: Normalized contiguous match; literal matching is not entailment.
+- kind: graph
+ record: Clostridium_Cellulolyticum_Geobacter_Cellulose_MFC_Coculture
+ node: Defined Binary Electricity Production
+ evidence_index: 1
+ reference: PMID:17695929
+ independent_primary_match: true
+ cache_matched: true
+ matched_artifact: /private/tmp/communitymech-batch91/mfc-primary.txt
+ method: Normalized contiguous match; literal matching is not entailment.
+- kind: graph
+ record: Clostridium_Cellulolyticum_Geobacter_Cellulose_MFC_Coculture
+ node: Observed Substrate-Dependent Spatial Distribution
+ evidence_index: 0
+ reference: PMID:18725730
+ independent_primary_match: true
+ cache_matched: true
+ matched_artifact: /private/tmp/communitymech-batch91/mfc-spatial-primary.txt
+ method: Normalized contiguous match; literal matching is not entailment.
+- kind: graph
+ record: Clostridium_Cellulolyticum_Geobacter_Cellulose_MFC_Coculture
+ node: Observed Substrate-Dependent Spatial Distribution
+ evidence_index: 1
+ reference: PMID:18725730
+ independent_primary_match: true
+ cache_matched: true
+ matched_artifact: /private/tmp/communitymech-batch91/mfc-spatial-primary.txt
+ method: Normalized contiguous match; literal matching is not entailment.
+- kind: graph
+ record: Clostridium_Cellulolyticum_Geobacter_Cellulose_MFC_Coculture
+ node: Observed Substrate-Dependent Spatial Distribution
+ evidence_index: 2
+ reference: PMID:18725730
+ independent_primary_match: true
+ cache_matched: true
+ matched_artifact: /private/tmp/communitymech-batch91/mfc-spatial-primary.txt
+ method: Normalized contiguous match; literal matching is not entailment.
+- kind: graph
+ record: Clostridium_Cellulolyticum_Geobacter_Cellulose_MFC_Coculture
+ node: Observed Substrate-Dependent Spatial Distribution
+ evidence_index: 3
+ reference: PMID:18725730
+ independent_primary_match: true
+ cache_matched: true
+ matched_artifact: /private/tmp/communitymech-batch91/mfc-spatial-primary.txt
+ method: Normalized contiguous match; literal matching is not entailment.
+- kind: graph
+ record: Crystal_Geyser_CO2_Aquifer_CPR_Lipid_Community
+ node: Predominantly Autotrophic Carbon Supply
+ evidence_index: 0
+ reference: PMID:32203118
+ independent_primary_match: true
+ cache_matched: true
+ matched_artifact: /private/tmp/communitymech-batch91/crystal-primary.txt
+ method: Normalized contiguous match; literal matching is not entailment.
+- kind: graph
+ record: Crystal_Geyser_CO2_Aquifer_CPR_Lipid_Community
+ node: Putative CPR Lipid Acquisition
+ evidence_index: 0
+ reference: PMID:32203118
+ independent_primary_match: true
+ cache_matched: true
+ matched_artifact: /private/tmp/communitymech-batch91/crystal-primary.txt
+ method: Normalized contiguous match; literal matching is not entailment.
+- kind: graph
+ record: Crystal_Geyser_CO2_Aquifer_CPR_Lipid_Community
+ node: Putative CPR Lipid Acquisition
+ evidence_index: 1
+ reference: PMID:32203118
+ independent_primary_match: true
+ cache_matched: true
+ matched_artifact: /private/tmp/communitymech-batch91/crystal-primary.txt
+ method: Normalized contiguous match; literal matching is not entailment.
+- kind: graph
+ record: Crystal_Geyser_CO2_Aquifer_CPR_Lipid_Community
+ node: Putative CPR Lipid Acquisition
+ evidence_index: 2
+ reference: PMID:32203118
+ independent_primary_match: true
+ cache_matched: true
+ matched_artifact: /private/tmp/communitymech-batch91/crystal-primary.txt
+ method: Normalized contiguous match; literal matching is not entailment.
+- kind: graph
+ record: Crystal_Geyser_CO2_Aquifer_CPR_Lipid_Community
+ node: CPR-Associated Lysolipids and Proposed Curvature Adaptation
+ evidence_index: 0
+ reference: PMID:32203118
+ independent_primary_match: true
+ cache_matched: true
+ matched_artifact: /private/tmp/communitymech-batch91/crystal-primary.txt
+ method: Normalized contiguous match; literal matching is not entailment.
+- kind: graph
+ record: GLBRC_UFMP_Fermentation_Community
+ node: Proposed Actinobacteriota Lactose Fermentation Roles
+ evidence_index: 0
+ reference: PMID:37324413
+ independent_primary_match: true
+ cache_matched: true
+ matched_artifact: /private/tmp/communitymech-batch91/ufmp-primary.txt
+ method: Normalized contiguous match; literal matching is not entailment.
+- kind: graph
+ record: GLBRC_UFMP_Fermentation_Community
+ node: Proposed Firmicutes Chain Elongation Roles
+ evidence_index: 0
+ reference: PMID:37324413
+ independent_primary_match: true
+ cache_matched: true
+ matched_artifact: /private/tmp/communitymech-batch91/ufmp-primary.txt
+ method: Normalized contiguous match; literal matching is not entailment.
+- kind: graph
+ record: GLBRC_UFMP_Fermentation_Community
+ node: Proposed Actinobacteriota-to-CLOS1 Lactate Cross-Feeding
+ evidence_index: 0
+ reference: PMID:37324413
+ independent_primary_match: true
+ cache_matched: true
+ matched_artifact: /private/tmp/communitymech-batch91/ufmp-primary.txt
+ method: Normalized contiguous match; literal matching is not entailment.
+- kind: graph
+ record: GLBRC_UFMP_Fermentation_Community
+ node: Proposed Actinobacteriota-to-CLOS1 Lactate Cross-Feeding
+ evidence_index: 1
+ reference: PMID:37324413
+ independent_primary_match: true
+ cache_matched: true
+ matched_artifact: /private/tmp/communitymech-batch91/ufmp-primary.txt
+ method: Normalized contiguous match; literal matching is not entailment.
+- kind: graph
+ record: Multi_stage_Anaerobic_Digestion_SynCom_YSJ_and_SynCom_J
+ node: Staged metabolic hand-off across hydrolytic, acidogenic and methanogenic members
+ evidence_index: 0
+ reference: PMID:41825563
+ independent_primary_match: true
+ cache_matched: true
+ matched_artifact: /private/tmp/communitymech-batch91/digestion-primary.txt
+ method: Normalized contiguous match; literal matching is not entailment.
+- kind: graph
+ record: Multi_stage_Anaerobic_Digestion_SynCom_YSJ_and_SynCom_J
+ node: Staged metabolic hand-off across hydrolytic, acidogenic and methanogenic members
+ evidence_index: 1
+ reference: PMID:41825563
+ independent_primary_match: true
+ cache_matched: true
+ matched_artifact: /private/tmp/communitymech-batch91/digestion-primary.txt
+ method: Normalized contiguous match; literal matching is not entailment.
+- kind: graph
+ record: Multi_stage_Anaerobic_Digestion_SynCom_YSJ_and_SynCom_J
+ node: Putative interspecies electron transfer supporting methanogenesis
+ evidence_index: 0
+ reference: PMID:41825563
+ independent_primary_match: true
+ cache_matched: true
+ matched_artifact: /private/tmp/communitymech-batch91/digestion-primary.txt
+ method: Normalized contiguous match; literal matching is not entailment.
+- kind: graph
+ record: Multi_stage_Anaerobic_Digestion_SynCom_YSJ_and_SynCom_J
+ node: Deterministic selection of the resident community by SynCom colonization
+ evidence_index: 0
+ reference: PMID:41825563
+ independent_primary_match: true
+ cache_matched: true
+ matched_artifact: /private/tmp/communitymech-batch91/digestion-primary.txt
+ method: Normalized contiguous match; literal matching is not entailment.
+- kind: graph
+ record: Pleuromutilin_Degrading_Artificial_Consortium_5_Strain
+ node: Ninety-Two-Percent Pleuromutilin Degradation
+ evidence_index: 0
+ reference: PMID:42133144
+ independent_primary_match: true
+ cache_matched: true
+ matched_artifact: /private/tmp/communitymech-batch91/pleuromutilin-exact-primary.txt
+ method: Normalized contiguous match; literal matching is not entailment.
+- kind: graph
+ record: Pleuromutilin_Degrading_Artificial_Consortium_5_Strain
+ node: Proposed Artificial-Consortium Degradation Products and Pathways
+ evidence_index: 0
+ reference: PMID:42133144
+ independent_primary_match: true
+ cache_matched: true
+ matched_artifact: /private/tmp/communitymech-batch91/pleuromutilin-exact-primary.txt
+ method: Normalized contiguous match; literal matching is not entailment.
+discussion_snippet_checks:
+- kind: discussion
+ record: Pleuromutilin_Degrading_Artificial_Consortium_5_Strain
+ node: pleuromutilin-parent-versus-defined-community
+ evidence_index: 0
+ reference: PMID:42133144
+ independent_primary_match: true
+ cache_matched: true
+ matched_artifact: /private/tmp/communitymech-batch91/pleuromutilin-exact-primary.txt
+ method: Normalized contiguous match; literal matching is not entailment.
+- kind: discussion
+ record: Pleuromutilin_Degrading_Artificial_Consortium_5_Strain
+ node: pleuromutilin-parent-versus-defined-community
+ evidence_index: 1
+ reference: PMID:42133144
+ independent_primary_match: true
+ cache_matched: true
+ matched_artifact: /private/tmp/communitymech-batch91/pleuromutilin-exact-primary.txt
+ method: Normalized contiguous match; literal matching is not entailment.
+cache_changes: []
+issue_deduplication:
+ all_state_issue_titles_and_bodies: 1011
+ ignored_hidden_local_search: true
+ matching_files: 440
+ exact_matching_issues_read:
+ - 1716
+ - 1715
+ - 1711
+ - 1626
+ - 1474
+ - 1366
+ - 1365
+ - 1327
+ - 1324
+ - 752
+ - 310
+ - 183
+ - 134
+ additional_issues_read:
+ - 1235
+ excluded_local_roots:
+ - .git
+ - docs
+ - site
+ - references_cache
+ comment_pr_history_exhaustive: false
+edison:
+ required_for_this_repair: false
+ required_for_unresolved_extensions: true
+ provider_submissions: 0
+ credits_spent: 0
+ dry_runs: []
+ prior_unanswered_scope: 'Issue #1715 / batch86 remains pending; no new authorization or job.'
+limitations:
+- Fresh both-root baseline before papers:460records921caches1420nodes584arrows56warnings0structural. Re-review of14existingnodes7arrows,
+ all retained without endpoint or wording changes. Three records edited; two unchanged. Review-status counts remain280reviewed132pending48needs_research;
+ re-review does not inflate coverage.
+- 'Six target primary sources: two full main bodies with embedded tables/captions (UFMP and Crystal Geyser), four
+ abstracts (two MFC papers, digestion, exact pleuromutilin). No original figure pixels, raw data or separate full
+ supplements independently audited. Pleuromutilin historical DOCX text reread only for TablesS1/S2, S3 scope/method
+ notes and boundary rows; not all metabolite rows or a fresh main text.'
+- Accidental PMID33125214 lookup is an unrelated vanadium paper, explicitly excluded from target evidence. Primary/cache
+ snippet matches are not scientific entailment. Main-text access limits are not evidence that controls were absent.
+- MFC and Crystal Geyser already use the product-removal criterion and are unchanged. UFMP retains the hypothesized
+ producer-consumer model as CROSS_FEEDING, not demonstrated flux. Digestion and pleuromutilin remain untyped for
+ unresolved feedback or outcome scope, not lack of obligacy. No categorical SYNTROPHY restoration based only on
+ author vocabulary.
+- Pleuromutilin discussion now points to its actual description rather than a nonexistent engineering_design field.
+ The historical S3 note has internally conflicting fold-change/list-scope wording; no numerical reconciliation
+ or new pathway is asserted. Research1715 and metadata183/1327/1366/1716 remain open.
+- No taxonomy, canonical participants, network rules, cache content, node additions/removals or arrow changes. No new antibiotic-selection
+ details, strain optimization, genetic designs or experimental procedures. No Edison dry run or paid submission.
+- Earlier decisions and external history artifacts remain append-only. Explicit supersedes_review links bind each
+ prior reviewed record hash to the next original hash; inventory must reject unlinked duplicates, forks and cycles
+ and still validate current graph coverage.
+- Source-based self-adversarial review is not independent approval, generated-model loader certification or corpus
+ completion. Loader1703 remains unresolved. New repair issue1744 closes only after protected-main merge.
+records:
+- path: kb/communities/Clostridium_Cellulolyticum_Geobacter_Cellulose_MFC_Coculture.yaml
+ id: CommunityMech:000175
+ original_sha256: bafb8c0e58150b2e586e92c84725b0e3ad88001a64c2d1acb1d2889ede2810b3
+ record_sha256: bafb8c0e58150b2e586e92c84725b0e3ad88001a64c2d1acb1d2889ede2810b3
+ status: reviewed
+ outcome: unchanged
+ review_file: reports/causal_graph_review/decisions/20261007-five-records-batch91.yaml
+ scope: Whole record and all existing graph nodes/arrows rechecked for current interaction semantics; not non-graph
+ certification or exhaustive new-structure discovery.
+ summary: 'Retain CROSS_FEEDING: the existing explanation already distinguishes source syntrophy wording from product-removal
+ benefit.; Preserve binary electricity and substrate-conversion comparisons without a unique feedback or reciprocal-fitness
+ claim.; Preserve substrate-dependent spatial observations without restoring a causal localization arrow.'
+ supersedes_review:
+ review_file: reports/causal_graph_review/decisions/20261005-three-records-batch19.yaml
+ record_sha256: bafb8c0e58150b2e586e92c84725b0e3ad88001a64c2d1acb1d2889ede2810b3
+ node_decisions:
+ - node: Cellulose Fermentation Feeding Electrode Respiration
+ rationale: 'Retain CROSS_FEEDING: the existing explanation already distinguishes source syntrophy wording from
+ product-removal benefit.'
+ - node: Defined Binary Electricity Production
+ rationale: Preserve binary electricity and substrate-conversion comparisons without a unique feedback or reciprocal-fitness
+ claim.
+ - node: Observed Substrate-Dependent Spatial Distribution
+ rationale: Preserve substrate-dependent spatial observations without restoring a causal localization arrow.
+ removed_node_decisions: []
+ renamed_nodes: {}
+ edges_before:
+ - source: Cellulose Fermentation Feeding Electrode Respiration
+ target: Defined Binary Electricity Production
+ description: Fermentative conversion of cellulose supplies electron-donor products for G. sulfurreducens anode
+ respiration, enabling current from substrates on which neither pure culture produced electricity. The conversion
+ is supported by the binary-versus-pure-culture comparison; the accessible abstract does not resolve each metabolite
+ contribution or transfer rate.
+ edges_after:
+ - source: Cellulose Fermentation Feeding Electrode Respiration
+ target: Defined Binary Electricity Production
+ description: Fermentative conversion of cellulose supplies electron-donor products for G. sulfurreducens anode
+ respiration, enabling current from substrates on which neither pure culture produced electricity. The conversion
+ is supported by the binary-versus-pure-culture comparison; the accessible abstract does not resolve each metabolite
+ contribution or transfer rate.
+ retained_edge_decisions:
+ - source: Cellulose Fermentation Feeding Electrode Respiration
+ target: Defined Binary Electricity Production
+ description: Fermentative conversion of cellulose supplies electron-donor products for G. sulfurreducens anode
+ respiration, enabling current from substrates on which neither pure culture produced electricity. The conversion
+ is supported by the binary-versus-pure-culture comparison; the accessible abstract does not resolve each metabolite
+ contribution or transfer rate.
+ rationale: Retain the existing evidence-bounded direction and wording without a new mechanism or endpoint.
+ removed_edge_decisions: []
+ mechanical_edge_source_corrections: []
+ references:
+ - PMID:17695929
+ - PMID:18725730
+ issues:
+ - 1744
+ allowed_changed_fields: []
+ curation_events_added: 0
+ history_files: []
+- path: kb/communities/Crystal_Geyser_CO2_Aquifer_CPR_Lipid_Community.yaml
+ id: CommunityMech:000252
+ original_sha256: b219156340ab8170a318ed82b9bf47e7a5a5b67e490870d42fabb2c9a8e25051
+ record_sha256: b219156340ab8170a318ed82b9bf47e7a5a5b67e490870d42fabb2c9a8e25051
+ status: reviewed
+ outcome: unchanged
+ review_file: reports/causal_graph_review/decisions/20261007-five-records-batch91.yaml
+ scope: Whole record and all existing graph nodes/arrows rechecked for current interaction semantics; not non-graph
+ certification or exhaustive new-structure discovery.
+ summary: 'Preserve predominantly autotrophic carbon evidence and qualified community supply.; Retain the hypothesized
+ CROSS_FEEDING model: direct host acquisition, scavenging and unknown biosynthesis remain alternatives; product-removal
+ feedback is not established.; Preserve mixed-fraction lysolipid findings and qualified curvature interpretation.'
+ supersedes_review:
+ review_file: reports/causal_graph_review/decisions/20261006-three-records-batch27.yaml
+ record_sha256: b219156340ab8170a318ed82b9bf47e7a5a5b67e490870d42fabb2c9a8e25051
+ node_decisions:
+ - node: Predominantly Autotrophic Carbon Supply
+ rationale: Preserve predominantly autotrophic carbon evidence and qualified community supply.
+ - node: Putative CPR Lipid Acquisition
+ rationale: 'Retain the hypothesized CROSS_FEEDING model: direct host acquisition, scavenging and unknown biosynthesis
+ remain alternatives; product-removal feedback is not established.'
+ - node: CPR-Associated Lysolipids and Proposed Curvature Adaptation
+ rationale: Preserve mixed-fraction lysolipid findings and qualified curvature interpretation.
+ removed_node_decisions: []
+ renamed_nodes: {}
+ edges_before:
+ - source: Predominantly Autotrophic Carbon Supply
+ target: Putative CPR Lipid Acquisition
+ description: HYPOTHESIZED - autotrophically fixed carbon can supply bacterial lipid production and the community
+ material available for CPR acquisition. The isotope, lipid and genomic observations support this proposed
+ carbon route but do not trace transfer from a particular producer to CPR cells.
+ - source: Putative CPR Lipid Acquisition
+ target: CPR-Associated Lysolipids and Proposed Curvature Adaptation
+ description: HYPOTHESIZED - acquired community lipids or precursors could provide material for CPR-associated
+ lysolipid membranes and their proposed curvature adaptation. Lipid correlations and mixed-fraction spectroscopy
+ do not demonstrate that acquisition causes lysolipid enrichment or that enrichment improves curvature tolerance.
+ edges_after:
+ - source: Predominantly Autotrophic Carbon Supply
+ target: Putative CPR Lipid Acquisition
+ description: HYPOTHESIZED - autotrophically fixed carbon can supply bacterial lipid production and the community
+ material available for CPR acquisition. The isotope, lipid and genomic observations support this proposed
+ carbon route but do not trace transfer from a particular producer to CPR cells.
+ - source: Putative CPR Lipid Acquisition
+ target: CPR-Associated Lysolipids and Proposed Curvature Adaptation
+ description: HYPOTHESIZED - acquired community lipids or precursors could provide material for CPR-associated
+ lysolipid membranes and their proposed curvature adaptation. Lipid correlations and mixed-fraction spectroscopy
+ do not demonstrate that acquisition causes lysolipid enrichment or that enrichment improves curvature tolerance.
+ retained_edge_decisions:
+ - source: Predominantly Autotrophic Carbon Supply
+ target: Putative CPR Lipid Acquisition
+ description: HYPOTHESIZED - autotrophically fixed carbon can supply bacterial lipid production and the community
+ material available for CPR acquisition. The isotope, lipid and genomic observations support this proposed
+ carbon route but do not trace transfer from a particular producer to CPR cells.
+ rationale: Retain the existing evidence-bounded direction and wording without a new mechanism or endpoint.
+ - source: Putative CPR Lipid Acquisition
+ target: CPR-Associated Lysolipids and Proposed Curvature Adaptation
+ description: HYPOTHESIZED - acquired community lipids or precursors could provide material for CPR-associated
+ lysolipid membranes and their proposed curvature adaptation. Lipid correlations and mixed-fraction spectroscopy
+ do not demonstrate that acquisition causes lysolipid enrichment or that enrichment improves curvature tolerance.
+ rationale: Retain the existing evidence-bounded direction and wording without a new mechanism or endpoint.
+ removed_edge_decisions: []
+ mechanical_edge_source_corrections: []
+ references:
+ - PMID:32203118
+ issues:
+ - 1744
+ allowed_changed_fields: []
+ curation_events_added: 0
+ history_files: []
+- path: kb/communities/GLBRC_UFMP_Fermentation_Community.yaml
+ id: CommunityMech:000029
+ original_sha256: 0cd65716c7bf522b2c8326bdc476339c3196f551d9a2ee92c405d15dc9ea9c92
+ record_sha256: e3f1905f6c8547e172311d18108c5860d14f919150c44f238ddc484a497b763f
+ status: reviewed
+ outcome: changed
+ review_file: reports/causal_graph_review/decisions/20261007-five-records-batch91.yaml
+ scope: Whole record and all existing graph nodes/arrows rechecked for current interaction semantics; not non-graph
+ certification or exhaustive new-structure discovery.
+ summary: Preserve heterogeneous genome-inferred producer roles without new member assignments.; Preserve substrate-distinct
+ proposed chain elongation and terminal-product limits.; Type the existing hypothesized lactate-transfer model
+ CROSS_FEEDING with primary Discussion evidence; distinguish product-removal feedback from obligacy.
+ supersedes_review:
+ review_file: reports/causal_graph_review/decisions/20261006-three-records-batch44.yaml
+ record_sha256: 0cd65716c7bf522b2c8326bdc476339c3196f551d9a2ee92c405d15dc9ea9c92
+ node_decisions:
+ - node: Proposed Actinobacteriota Lactose Fermentation Roles
+ rationale: Preserve heterogeneous genome-inferred producer roles without new member assignments.
+ - node: Proposed Firmicutes Chain Elongation Roles
+ rationale: Preserve substrate-distinct proposed chain elongation and terminal-product limits.
+ - node: Proposed Actinobacteriota-to-CLOS1 Lactate Cross-Feeding
+ rationale: Type the existing hypothesized lactate-transfer model CROSS_FEEDING with primary Discussion evidence;
+ distinguish product-removal feedback from obligacy.
+ removed_node_decisions: []
+ renamed_nodes: {}
+ edges_before:
+ - source: Proposed Actinobacteriota Lactose Fermentation Roles
+ target: Proposed Actinobacteriota-to-CLOS1 Lactate Cross-Feeding
+ description: 'HYPOTHESIZED: Lactate production by a subset of lactose-fermenting Actinobacteriota could supply
+ the proposed CLOS1 donor pool. Genomic potential and extracellular profiles support the model, not traced
+ member-specific secretion or transfer; ACT2 succinate production is not evidence of lactate donation.'
+ - source: Proposed Actinobacteriota-to-CLOS1 Lactate Cross-Feeding
+ target: Proposed Firmicutes Chain Elongation Roles
+ description: 'HYPOTHESIZED: Access to donor-derived lactate could support the proposed CLOS1 branch of reverse
+ beta-oxidation, associated mainly with butyrate. This arrow does not route all C6/C8 synthesis through CLOS1
+ or make LCO1 direct-lactose and ACID1 possible-ethanol metabolism dependent on lactate transfer.'
+ edges_after:
+ - source: Proposed Actinobacteriota Lactose Fermentation Roles
+ target: Proposed Actinobacteriota-to-CLOS1 Lactate Cross-Feeding
+ description: 'HYPOTHESIZED: Lactate production by a subset of lactose-fermenting Actinobacteriota could supply
+ the proposed CLOS1 donor pool. Genomic potential and extracellular profiles support the model, not traced
+ member-specific secretion or transfer; ACT2 succinate production is not evidence of lactate donation.'
+ - source: Proposed Actinobacteriota-to-CLOS1 Lactate Cross-Feeding
+ target: Proposed Firmicutes Chain Elongation Roles
+ description: 'HYPOTHESIZED: Access to donor-derived lactate could support the proposed CLOS1 branch of reverse
+ beta-oxidation, associated mainly with butyrate. This arrow does not route all C6/C8 synthesis through CLOS1
+ or make LCO1 direct-lactose and ACID1 possible-ethanol metabolism dependent on lactate transfer.'
+ retained_edge_decisions:
+ - source: Proposed Actinobacteriota Lactose Fermentation Roles
+ target: Proposed Actinobacteriota-to-CLOS1 Lactate Cross-Feeding
+ description: 'HYPOTHESIZED: Lactate production by a subset of lactose-fermenting Actinobacteriota could supply
+ the proposed CLOS1 donor pool. Genomic potential and extracellular profiles support the model, not traced
+ member-specific secretion or transfer; ACT2 succinate production is not evidence of lactate donation.'
+ rationale: Retain the existing evidence-bounded direction and wording without a new mechanism or endpoint.
+ - source: Proposed Actinobacteriota-to-CLOS1 Lactate Cross-Feeding
+ target: Proposed Firmicutes Chain Elongation Roles
+ description: 'HYPOTHESIZED: Access to donor-derived lactate could support the proposed CLOS1 branch of reverse
+ beta-oxidation, associated mainly with butyrate. This arrow does not route all C6/C8 synthesis through CLOS1
+ or make LCO1 direct-lactose and ACID1 possible-ethanol metabolism dependent on lactate transfer.'
+ rationale: Retain the existing evidence-bounded direction and wording without a new mechanism or endpoint.
+ removed_edge_decisions: []
+ mechanical_edge_source_corrections: []
+ references:
+ - PMID:37324413
+ issues:
+ - 1744
+ allowed_changed_fields:
+ - curation_history
+ - discussions
+ - ecological_interactions
+ curation_events_added: 1
+ history_files:
+ - history/records/GLBRC_UFMP_Fermentation_Community/2026-10-07T134453Z-codex-9cf7ab.yaml
+- path: kb/communities/Multi_stage_Anaerobic_Digestion_SynCom_YSJ_and_SynCom_J.yaml
+ id: CommunityMech:000274
+ original_sha256: 5fa9fb489ff93f261f6e0d8d737057f511bfbba46fe3e08958e4cbb1eca42ed6
+ record_sha256: 93c0f771f13065d1e571c9eb5a548e09714581bbe588cf0b522bdbc29af456da
+ status: reviewed
+ outcome: changed
+ review_file: reports/causal_graph_review/decisions/20261007-five-records-batch91.yaml
+ scope: Whole record and all existing graph nodes/arrows rechecked for current interaction semantics; not non-graph
+ certification or exhaustive new-structure discovery.
+ summary: Preserve measured methane/comparator outcomes and the qualified staged-transfer model.; Keep the metagenomically
+ inferred transfer node untyped for unresolved product-removal feedback, not unproven obligacy.; Preserve environmental
+ selection interpretation and function/stability distinction.
+ supersedes_review:
+ review_file: reports/causal_graph_review/decisions/20261007-four-records-batch75.yaml
+ record_sha256: 5fa9fb489ff93f261f6e0d8d737057f511bfbba46fe3e08958e4cbb1eca42ed6
+ node_decisions:
+ - node: Staged metabolic hand-off across hydrolytic, acidogenic and methanogenic members
+ rationale: Preserve measured methane/comparator outcomes and the qualified staged-transfer model.
+ - node: Putative interspecies electron transfer supporting methanogenesis
+ rationale: Keep the metagenomically inferred transfer node untyped for unresolved product-removal feedback,
+ not unproven obligacy.
+ - node: Deterministic selection of the resident community by SynCom colonization
+ rationale: Preserve environmental selection interpretation and function/stability distinction.
+ removed_node_decisions: []
+ renamed_nodes: {}
+ edges_before:
+ - source: Staged metabolic hand-off across hydrolytic, acidogenic and methanogenic members
+ target: Putative interspecies electron transfer supporting methanogenesis
+ description: HYPOTHESIZED - Hydrolytic and acidogenic processing can supply methanogenic substrates and thereby
+ support electron-transfer-associated methanogenesis. The available abstract reports coordinated functional
+ changes after bioaugmentation but does not resolve this mediation or separate introduced-member hand-off from
+ native-community activity.
+ - source: Putative interspecies electron transfer supporting methanogenesis
+ target: Deterministic selection of the resident community by SynCom colonization
+ description: HYPOTHESIZED - Electron-transfer-associated methanogenesis could alter acetate and propionate turnover,
+ changing the chemical environment that selects resident taxa. Bioaugmentation changes both function and community
+ structure; the abstract does not isolate electron transfer as the cause of pool shifts or deterministic selection.
+ edges_after:
+ - source: Staged metabolic hand-off across hydrolytic, acidogenic and methanogenic members
+ target: Putative interspecies electron transfer supporting methanogenesis
+ description: HYPOTHESIZED - Hydrolytic and acidogenic processing can supply methanogenic substrates and thereby
+ support electron-transfer-associated methanogenesis. The available abstract reports coordinated functional
+ changes after bioaugmentation but does not resolve this mediation or separate introduced-member hand-off from
+ native-community activity.
+ - source: Putative interspecies electron transfer supporting methanogenesis
+ target: Deterministic selection of the resident community by SynCom colonization
+ description: HYPOTHESIZED - Electron-transfer-associated methanogenesis could alter acetate and propionate turnover,
+ changing the chemical environment that selects resident taxa. Bioaugmentation changes both function and community
+ structure; the abstract does not isolate electron transfer as the cause of pool shifts or deterministic selection.
+ retained_edge_decisions:
+ - source: Staged metabolic hand-off across hydrolytic, acidogenic and methanogenic members
+ target: Putative interspecies electron transfer supporting methanogenesis
+ description: HYPOTHESIZED - Hydrolytic and acidogenic processing can supply methanogenic substrates and thereby
+ support electron-transfer-associated methanogenesis. The available abstract reports coordinated functional
+ changes after bioaugmentation but does not resolve this mediation or separate introduced-member hand-off from
+ native-community activity.
+ rationale: Retain the existing evidence-bounded direction and wording without a new mechanism or endpoint.
+ - source: Putative interspecies electron transfer supporting methanogenesis
+ target: Deterministic selection of the resident community by SynCom colonization
+ description: HYPOTHESIZED - Electron-transfer-associated methanogenesis could alter acetate and propionate turnover,
+ changing the chemical environment that selects resident taxa. Bioaugmentation changes both function and community
+ structure; the abstract does not isolate electron transfer as the cause of pool shifts or deterministic selection.
+ rationale: Retain the existing evidence-bounded direction and wording without a new mechanism or endpoint.
+ removed_edge_decisions: []
+ mechanical_edge_source_corrections: []
+ references:
+ - PMID:41825563
+ issues:
+ - 1744
+ allowed_changed_fields:
+ - curation_history
+ - discussions
+ - ecological_interactions
+ curation_events_added: 1
+ history_files:
+ - history/records/Multi_stage_Anaerobic_Digestion_SynCom_YSJ_and_SynCom_J/2026-10-07T134453Z-codex-8dae13.yaml
+- path: kb/communities/Pleuromutilin_Degrading_Artificial_Consortium_5_Strain.yaml
+ id: CommunityMech:000300
+ original_sha256: 4ad5e08b3c65011a09783c45c8504e32f33817ec3edbef10ea88a70597530b38
+ record_sha256: 08cd2f0be57b813b8e230e235c317770d414a6c4948003dd645063562c9a55c2
+ status: needs_research
+ outcome: changed
+ review_file: reports/causal_graph_review/decisions/20261007-five-records-batch91.yaml
+ scope: Whole record and all existing graph nodes/arrows rechecked for current interaction semantics; not non-graph
+ certification or exhaustive new-structure discovery.
+ summary: 'Keep the positive degradation endpoint distinct from a product-removal mechanism; obligacy is not required
+ by SYNTROPHY.; Preserve proposed products/pathways without treating metabolomic differences as partner feedback;
+ unresolved topology remains #1715.'
+ supersedes_review:
+ review_file: reports/causal_graph_review/decisions/20261007-four-records-batch86.yaml
+ record_sha256: 4ad5e08b3c65011a09783c45c8504e32f33817ec3edbef10ea88a70597530b38
+ node_decisions:
+ - node: Ninety-Two-Percent Pleuromutilin Degradation
+ rationale: Keep the positive degradation endpoint distinct from a product-removal mechanism; obligacy is not
+ required by SYNTROPHY.
+ - node: Proposed Artificial-Consortium Degradation Products and Pathways
+ rationale: 'Preserve proposed products/pathways without treating metabolomic differences as partner feedback;
+ unresolved topology remains #1715.'
+ removed_node_decisions: []
+ renamed_nodes: {}
+ edges_before: []
+ edges_after: []
+ retained_edge_decisions: []
+ removed_edge_decisions: []
+ mechanical_edge_source_corrections: []
+ references:
+ - PMID:42133144
+ issues:
+ - 1744
+ - 1715
+ allowed_changed_fields:
+ - curation_history
+ - discussions
+ - ecological_interactions
+ curation_events_added: 1
+ history_files:
+ - history/records/Pleuromutilin_Degrading_Artificial_Consortium_5_Strain/2026-10-07T134453Z-codex-f66458.yaml
diff --git a/reports/causal_graph_review/inventory.tsv b/reports/causal_graph_review/inventory.tsv
index 266afdf4f..2c73302d6 100644
--- a/reports/causal_graph_review/inventory.tsv
+++ b/reports/causal_graph_review/inventory.tsv
@@ -105,7 +105,7 @@ kb/communities/Clostridium_Acetobutylicum_Ljungdahlii_Fusion_Coculture.yaml Comm
kb/communities/Clostridium_Autoethanogenum_Kluyveri_Syngas_Coculture.yaml CommunityMech:000172 21ed35857776bcd6e203c18ade2249e16cc8abb31fea0c5bc169df9b394c8861 3 2 96.7 reports/causal_graph_review/decisions/20261005-three-records-batch18.yaml reviewed
kb/communities/Clostridium_Caldicellulosiruptor_Minimal_Medium_Coculture.yaml CommunityMech:000193 d4d2ba27f20dc52220bd8e443288c91b3b7e7a0606f8c2cc4855d63e48423e20 3 0 65.0 reports/causal_graph_review/decisions/20261005-three-records-batch18.yaml reviewed
kb/communities/Clostridium_Carboxidivorans_Kluyveri_CO_Chain_Elongation_Coculture.yaml CommunityMech:000266 dfc0feb9084b682e6d5f9dfc9529d9ae7f146e31371d63c63960ffe6a3fd391a 3 2 96.7 reports/causal_graph_review/decisions/20261005-three-records-batch18.yaml reviewed
-kb/communities/Clostridium_Cellulolyticum_Geobacter_Cellulose_MFC_Coculture.yaml CommunityMech:000175 bafb8c0e58150b2e586e92c84725b0e3ad88001a64c2d1acb1d2889ede2810b3 3 1 83.3 reports/causal_graph_review/decisions/20261005-three-records-batch19.yaml reviewed
+kb/communities/Clostridium_Cellulolyticum_Geobacter_Cellulose_MFC_Coculture.yaml CommunityMech:000175 bafb8c0e58150b2e586e92c84725b0e3ad88001a64c2d1acb1d2889ede2810b3 3 1 83.3 reports/causal_graph_review/decisions/20261007-five-records-batch91.yaml reviewed
kb/communities/Clostridium_Cellulovorans_Beijerinckii_AECC_ABE_Coculture.yaml CommunityMech:000323 caf85d65ddbfd4b6c591335118414b5a2ceda81b17fbd201a4b1c8fb8641ce2c 3 0 71.7 reports/causal_graph_review/decisions/20261005-three-records-batch19.yaml reviewed
kb/communities/Clostridium_Cellulovorans_Methanosarcina_Cellulose_Methane_Coculture.yaml CommunityMech:000174 c6b526dc6a76ffb307bdd56cc43df3b3365fc2def4fe027d53924869f5746d78 3 2 96.7 reports/causal_graph_review/decisions/20261005-three-records-batch19.yaml reviewed
kb/communities/Clostridium_Cellulovorans_Rhodopseudomonas_Cellulose_Biohydrogen_Coculture.yaml CommunityMech:000264 609d1b7276a71d3a613fe7ffc299e75b6e4862e12c8057e6edf87822ff2816cb 3 1 83.3 reports/causal_graph_review/decisions/20261005-three-records-batch20.yaml reviewed
@@ -125,7 +125,7 @@ kb/communities/Cordyceps_Malbranchea_Antimicrobial_Coculture.yaml CommunityMech:
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 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 b219156340ab8170a318ed82b9bf47e7a5a5b67e490870d42fabb2c9a8e25051 3 2 93.3 reports/causal_graph_review/decisions/20261006-three-records-batch27.yaml reviewed
+kb/communities/Crystal_Geyser_CO2_Aquifer_CPR_Lipid_Community.yaml CommunityMech:000252 b219156340ab8170a318ed82b9bf47e7a5a5b67e490870d42fabb2c9a8e25051 3 2 93.3 reports/causal_graph_review/decisions/20261007-five-records-batch91.yaml reviewed
kb/communities/Cultivated_Meat_Contaminant_SynCom.yaml CommunityMech:000366 432da24bbdadb8fb88ea3c7aec46d75743748ef94449b645a1a199bd651d047e 2 0 70.0 reports/causal_graph_review/decisions/20261006-four-records-batch28.yaml reviewed
kb/communities/Cyantraniliprole_Fahmy_Consortium_T4.yaml CommunityMech:000369 0ecd37ff8b4675764844c6d704c634832fecd8635b80e6f9c5759c217345595c 2 0 60.0 reports/causal_graph_review/decisions/20261006-four-records-batch28.yaml reviewed
kb/communities/Cyprus_Copper_Sulphide_Bioleaching_Consortium.yaml CommunityMech:000217 c914e6ebd91d24dbb0b18b48b2aff7979e6528900cc282824d40b8da8afb29c8 3 0 63.3 reports/causal_graph_review/decisions/20261006-four-records-batch28.yaml reviewed
@@ -177,7 +177,7 @@ kb/communities/Fucoidan_Seven_Degrader_Combinatorial_SynCom.yaml CommunityMech:0
kb/communities/GENIA_NineMember_MultiPollutant_Bioremediation_SynCom.yaml CommunityMech:000352 72fcc1720a4bb6b3a0a464f98524ab2bbf999b2b73eaf71efa0fa98be433b9c3 3 1 78.3 reports/causal_graph_review/decisions/20261006-three-records-batch42.yaml reviewed
kb/communities/GLBRC_Exometabolite_Transwell_SynCom.yaml CommunityMech:000091 8d1ef9c4d9c8b8b0f2c203a984747b02cfa32e10fe648d3fd5bf0a9548c8208f 2 0 70.0 reports/causal_graph_review/decisions/20261006-three-records-batch42.yaml needs_research
kb/communities/GLBRC_Populus_Variovorax_SynCom28.yaml CommunityMech:000028 c251f6d716591cd391dbb09ad961f6ccb7b123988b9c677d925356b8463d2c28 3 0 61.7 reports/causal_graph_review/decisions/20261006-variovorax-batch43.yaml reviewed
-kb/communities/GLBRC_UFMP_Fermentation_Community.yaml CommunityMech:000029 0cd65716c7bf522b2c8326bdc476339c3196f551d9a2ee92c405d15dc9ea9c92 3 2 87.8 reports/causal_graph_review/decisions/20261006-three-records-batch44.yaml reviewed
+kb/communities/GLBRC_UFMP_Fermentation_Community.yaml CommunityMech:000029 e3f1905f6c8547e172311d18108c5860d14f919150c44f238ddc484a497b763f 3 2 91.2 reports/causal_graph_review/decisions/20261007-five-records-batch91.yaml reviewed
kb/communities/GOM_Oil_Degrading_Consortium.yaml CommunityMech:000030 90d4d45224abfc9829feb8fd1cabde320c410a7a843ea3410c89dda4852cc299 3 0 65.0 reports/causal_graph_review/decisions/20261006-three-records-batch44.yaml reviewed
kb/communities/Garlic_Pseudomonas_SynCom6.yaml CommunityMech:000095 0052209591a0d6d3e106ad27feaca9dde69645f9725f01ba63e41ebeb5c5c59c 1 0 65.0 reports/causal_graph_review/decisions/20261006-three-records-batch44.yaml reviewed
kb/communities/Geobacter_Clostridium_Interspecies_Electron_Transfer_Coculture.yaml CommunityMech:000031 2bfa8ffd6b7d147f3c471eb88aa26482f93b0cc8d7b23dc39838402715463329 2 1 75.0 reports/causal_graph_review/decisions/20261006-clostridium-batch45.yaml reviewed
@@ -264,7 +264,7 @@ kb/communities/Model_Lignocellulose_Formaldehyde_Crossfeeding_Community.yaml Com
kb/communities/Moss_Microbe_Complex_Regolith_Biofertilizer.yaml CommunityMech:000310 40f12b8a0f6ef7d64390819dd8c67282e465da6d24d5098d19080088dd04199d 3 1 83.3 reports/causal_graph_review/decisions/20261007-four-records-batch74.yaml reviewed
kb/communities/Mucin_Glycan_MDSC_Synthetic_Gut_Community.yaml CommunityMech:000392 4ef5925538ded3549c72fd84eaa0786922b4f9565de33946289104cef18a5d49 3 1 80.0 reports/causal_graph_review/decisions/20261007-four-records-batch74.yaml reviewed
kb/communities/Mulberry_Distillers_Grains_Feed_Consortium.yaml CommunityMech:000435 db5dd094bbd49fba2952851b1d8394c3b30d04cb08440f850ae04cc77614137d 2 0 60.0 reports/causal_graph_review/decisions/20261007-four-records-batch75.yaml reviewed
-kb/communities/Multi_stage_Anaerobic_Digestion_SynCom_YSJ_and_SynCom_J.yaml CommunityMech:000274 5fa9fb489ff93f261f6e0d8d737057f511bfbba46fe3e08958e4cbb1eca42ed6 3 2 93.3 reports/causal_graph_review/decisions/20261007-four-records-batch75.yaml reviewed
+kb/communities/Multi_stage_Anaerobic_Digestion_SynCom_YSJ_and_SynCom_J.yaml CommunityMech:000274 93c0f771f13065d1e571c9eb5a548e09714581bbe588cf0b522bdbc29af456da 3 2 93.3 reports/causal_graph_review/decisions/20261007-five-records-batch91.yaml reviewed
kb/communities/Multiomics_Corn_Straw_Degradation_SynCom.yaml CommunityMech:000119 b6274bb4ad8beb9df16a81340ddbc536cdf94233e9e8961697a8423ec5a14a60 4 3 100.0 reports/causal_graph_review/decisions/20261007-four-records-batch75.yaml reviewed
kb/communities/Multispecies_Probiotic_MV_Luteolin_Consortium.yaml CommunityMech:000425 65986397aa530933ed3b2d65d9cf8110e96b30898c3458c1d024e98fa42a81b4 1 0 65.0 reports/causal_graph_review/decisions/20261007-four-records-batch75.yaml needs_research
kb/communities/Mushroom_Spring_Hot_Spring_Phototrophic_Mat_Community.yaml CommunityMech:000260 8d131584e1660e832aa9da1946b7d4181fca2c0bccd3fe88dc20ff4dcc4c8fed 4 1 80.0 reports/causal_graph_review/decisions/20261007-four-records-batch76.yaml reviewed
@@ -308,7 +308,7 @@ kb/communities/Phylogenetically_Diverse_Denitrifying_SynCom.yaml CommunityMech:0
kb/communities/Pichia_Lactiplantibacillus_CCMA_Plant_Beverage_Coculture.yaml CommunityMech:000345 1dff5927ac9481854b9b13e67efb7fa7be2353674710553de2490207e9996dd9 0 0 0.0 reports/causal_graph_review/decisions/20261007-four-records-batch85.yaml needs_research
kb/communities/Picocystis_Activated_Sludge_Refinery_SWW_Consortium.yaml CommunityMech:000439 a2ac824aec0e51a196e0fccaca9f7346f74b0fc331704c53e69b6b04ff731c12 0 0 0.0 reports/causal_graph_review/decisions/20261007-four-records-batch85.yaml needs_research
kb/communities/Pinus_armandii_Endophytic_Biocontrol_SynCom.yaml CommunityMech:000280 609a40bb20f1ec5b5bb35f3a8805707bd7478c87b345d517c3c32b3d8af41625 4 0 61.2 reports/causal_graph_review/decisions/20261007-four-records-batch85.yaml reviewed
-kb/communities/Pleuromutilin_Degrading_Artificial_Consortium_5_Strain.yaml CommunityMech:000300 4ad5e08b3c65011a09783c45c8504e32f33817ec3edbef10ea88a70597530b38 2 0 60.0 reports/causal_graph_review/decisions/20261007-four-records-batch86.yaml needs_research
+kb/communities/Pleuromutilin_Degrading_Artificial_Consortium_5_Strain.yaml CommunityMech:000300 08cd2f0be57b813b8e230e235c317770d414a6c4948003dd645063562c9a55c2 2 0 60.0 reports/causal_graph_review/decisions/20261007-five-records-batch91.yaml needs_research
kb/communities/Polaromonas_Vanadium_Reduction_Community.yaml CommunityMech:000055 bdb14ed3d33c4a9adc05479849201bf3530bd23d9867a2bc5ddb635b9507a3a5 2 1 66.2 reports/causal_graph_review/decisions/20261007-four-records-batch86.yaml reviewed
kb/communities/Populus_Salt_Tolerant_SynComs.yaml CommunityMech:000090 c96458a84a7951d477b792d0a23164f263c4dee76dae2593656d4b39699b10bd 3 2 98.3 reports/causal_graph_review/decisions/20261007-four-records-batch86.yaml reviewed
kb/communities/Poultry_Wastewater_ThreeStrain_Electroactive_Consortium.yaml CommunityMech:000330 932b57ad58aa3a1f58b9ad9be0163d2210a7cfa593964b37abc6d3a83d7f3ebb 3 2 85.0 reports/causal_graph_review/decisions/20261007-four-records-batch86.yaml reviewed
diff --git a/reports/causal_graph_review/validation-20261007-batch91.json b/reports/causal_graph_review/validation-20261007-batch91.json
new file mode 100644
index 000000000..7481d5332
--- /dev/null
+++ b/reports/causal_graph_review/validation-20261007-batch91.json
@@ -0,0 +1,1381 @@
+{
+ "base_commit": "c12b1dc71b78f968854875181b0e3b1f8d9ef3df",
+ "scope": [
+ "kb/communities/Clostridium_Cellulolyticum_Geobacter_Cellulose_MFC_Coculture.yaml",
+ "kb/communities/Crystal_Geyser_CO2_Aquifer_CPR_Lipid_Community.yaml",
+ "kb/communities/GLBRC_UFMP_Fermentation_Community.yaml",
+ "kb/communities/Multi_stage_Anaerobic_Digestion_SynCom_YSJ_and_SynCom_J.yaml",
+ "kb/communities/Pleuromutilin_Degrading_Artificial_Consortium_5_Strain.yaml"
+ ],
+ "reference_validator_version": "0.1.7",
+ "results": [
+ {
+ "check": "Clostridium_Cellulolyticum_Geobacter_Cellulose_MFC_Coculture-schema",
+ "command": [
+ "/Users/marcin/.cache/uv/archive-v0/l58VlyFvdmnkl0CcAx5Gk/bin/linkml-validate",
+ "-s",
+ "src/communitymech/schema/communitymech.yaml",
+ "kb/communities/Clostridium_Cellulolyticum_Geobacter_Cellulose_MFC_Coculture.yaml"
+ ],
+ "exit_code": 0,
+ "expected_exit_codes": [
+ 0
+ ],
+ "log": "/private/tmp/communitymech-batch91/Clostridium_Cellulolyticum_Geobacter_Cellulose_MFC_Coculture-schema.log",
+ "log_sha256": "de6087f4be8c0adc015333597cd864406ad889bbde42d9ee20db0df5932bb2de",
+ "output_tail": "No issues found\n"
+ },
+ {
+ "check": "Clostridium_Cellulolyticum_Geobacter_Cellulose_MFC_Coculture-strict",
+ "command": [
+ "/Users/marcin/.cache/uv/archive-v0/neDBQyZXv0RYv8B1GH0dI/bin/python3",
+ "scripts/validate_strict.py",
+ "--workers",
+ "1",
+ "--out",
+ "/private/tmp/communitymech-batch91/Clostridium_Cellulolyticum_Geobacter_Cellulose_MFC_Coculture-strict.tsv",
+ "kb/communities/Clostridium_Cellulolyticum_Geobacter_Cellulose_MFC_Coculture.yaml"
+ ],
+ "exit_code": 0,
+ "expected_exit_codes": [
+ 0
+ ],
+ "log": "/private/tmp/communitymech-batch91/Clostridium_Cellulolyticum_Geobacter_Cellulose_MFC_Coculture-strict.log",
+ "log_sha256": "f7ae1cabe4faee681ff4f260267c7a6c0f17df28a7556570e51db99f3c640658",
+ "output_tail": "Validating 1 files with 1 workers; schema=/private/tmp/communitymech-causal-batch91/src/communitymech/schema/communitymech.yaml\n\n=== validate-strict summary ===\n files scanned: 1\n files with ERROR: 0\n total ERROR rows: 0\n TSV: /private/tmp/communitymech-batch91/Clostridium_Cellulolyticum_Geobacter_Cellulose_MFC_Coculture-strict.tsv\n"
+ },
+ {
+ "check": "Clostridium_Cellulolyticum_Geobacter_Cellulose_MFC_Coculture-terms",
+ "command": [
+ "/Users/marcin/.cache/uv/archive-v0/neDBQyZXv0RYv8B1GH0dI/bin/linkml-term-validator",
+ "validate-data",
+ "kb/communities/Clostridium_Cellulolyticum_Geobacter_Cellulose_MFC_Coculture.yaml",
+ "-s",
+ "src/communitymech/schema/communitymech.yaml",
+ "--labels"
+ ],
+ "exit_code": 0,
+ "expected_exit_codes": [
+ 0
+ ],
+ "log": "/private/tmp/communitymech-batch91/Clostridium_Cellulolyticum_Geobacter_Cellulose_MFC_Coculture-terms.log",
+ "log_sha256": "23acda1c1d3194d12bc947d897d07de83f4a076a9d93c135148885108530e018",
+ "output_tail": "\u2705 Validation passed\n"
+ },
+ {
+ "check": "Clostridium_Cellulolyticum_Geobacter_Cellulose_MFC_Coculture-references",
+ "command": [
+ "/Users/marcin/.cache/uv/archive-v0/l58VlyFvdmnkl0CcAx5Gk/bin/linkml-reference-validator",
+ "validate",
+ "data",
+ "kb/communities/Clostridium_Cellulolyticum_Geobacter_Cellulose_MFC_Coculture.yaml",
+ "-s",
+ "src/communitymech/schema/communitymech.yaml",
+ "--config",
+ "conf/reference_validator.yaml"
+ ],
+ "exit_code": 0,
+ "expected_exit_codes": [
+ 0
+ ],
+ "log": "/private/tmp/communitymech-batch91/Clostridium_Cellulolyticum_Geobacter_Cellulose_MFC_Coculture-references.log",
+ "log_sha256": "e467874c87851bb4634d9d51ecb8904b6213e3cc09e3889d5c5e0f21bb6a9521",
+ "output_tail": "Validating kb/communities/Clostridium_Cellulolyticum_Geobacter_Cellulose_MFC_Coculture.yaml against schema src/communitymech/schema/communitymech.yaml\nCache directory: references_cache\n\nValidation Summary:\n Total checks: 0\n All validations passed!\n",
+ "explained_output_tail": "Validating kb/communities/Clostridium_Cellulolyticum_Geobacter_Cellulose_MFC_Coculture.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": "Clostridium_Cellulolyticum_Geobacter_Cellulose_MFC_Coculture-snippets",
+ "command": [
+ "/Users/marcin/.cache/uv/archive-v0/l58VlyFvdmnkl0CcAx5Gk/bin/python3",
+ "scripts/evidence_snippet_audit.py",
+ "kb/communities/Clostridium_Cellulolyticum_Geobacter_Cellulose_MFC_Coculture.yaml",
+ "--list-mismatch",
+ "--list-nocontent",
+ "--list-rendering",
+ "--list-assembled"
+ ],
+ "exit_code": 0,
+ "expected_exit_codes": [
+ 0
+ ],
+ "log": "/private/tmp/communitymech-batch91/Clostridium_Cellulolyticum_Geobacter_Cellulose_MFC_Coculture-snippets.log",
+ "log_sha256": "d353a2e438e49543043d94dbd2d275ccc825dad7bb23be8ad43bf853927d2fe3",
+ "output_tail": "# 28 evidence snippets scanned across 1 files\n MATCH 28\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": "Clostridium_Cellulolyticum_Geobacter_Cellulose_MFC_Coculture-rank",
+ "command": [
+ "/Users/marcin/.cache/uv/archive-v0/l58VlyFvdmnkl0CcAx5Gk/bin/python3",
+ "scripts/rank_causal_graph_readiness.py",
+ "kb/communities/Clostridium_Cellulolyticum_Geobacter_Cellulose_MFC_Coculture.yaml",
+ "--format",
+ "json"
+ ],
+ "exit_code": 0,
+ "expected_exit_codes": [
+ 0
+ ],
+ "log": "/private/tmp/communitymech-batch91/Clostridium_Cellulolyticum_Geobacter_Cellulose_MFC_Coculture-rank.log",
+ "log_sha256": "ced24537621f47322258ece873f55edbed13375ffe0d74cba3eb2a96cbc7e47e",
+ "output_tail": "[\n {\n \"rank\": 1,\n \"id\": \"CommunityMech:000175\",\n \"name\": \"Clostridium cellulolyticum-Geobacter sulfurreducens Cellulose MFC Coculture\",\n \"score\": 83.3,\n \"taxonomy\": 2,\n \"connected_taxa\": 2,\n \"disconnected_taxa\": 0,\n \"ecological_interactions\": 3,\n \"downstream_edges\": 1,\n \"interaction_evidence\": 8,\n \"dangling_downstream\": 0,\n \"self_downstream\": 0,\n \"missing\": [\n \"additional_downstream\",\n \"interaction_type\"\n ],\n \"path\": \"kb/communities/Clostridium_Cellulolyticum_Geobacter_Cellulose_MFC_Coculture.yaml\"\n }\n]\n"
+ },
+ {
+ "check": "Crystal_Geyser_CO2_Aquifer_CPR_Lipid_Community-schema",
+ "command": [
+ "/Users/marcin/.cache/uv/archive-v0/l58VlyFvdmnkl0CcAx5Gk/bin/linkml-validate",
+ "-s",
+ "src/communitymech/schema/communitymech.yaml",
+ "kb/communities/Crystal_Geyser_CO2_Aquifer_CPR_Lipid_Community.yaml"
+ ],
+ "exit_code": 0,
+ "expected_exit_codes": [
+ 0
+ ],
+ "log": "/private/tmp/communitymech-batch91/Crystal_Geyser_CO2_Aquifer_CPR_Lipid_Community-schema.log",
+ "log_sha256": "de6087f4be8c0adc015333597cd864406ad889bbde42d9ee20db0df5932bb2de",
+ "output_tail": "No issues found\n"
+ },
+ {
+ "check": "Crystal_Geyser_CO2_Aquifer_CPR_Lipid_Community-strict",
+ "command": [
+ "/Users/marcin/.cache/uv/archive-v0/neDBQyZXv0RYv8B1GH0dI/bin/python3",
+ "scripts/validate_strict.py",
+ "--workers",
+ "1",
+ "--out",
+ "/private/tmp/communitymech-batch91/Crystal_Geyser_CO2_Aquifer_CPR_Lipid_Community-strict.tsv",
+ "kb/communities/Crystal_Geyser_CO2_Aquifer_CPR_Lipid_Community.yaml"
+ ],
+ "exit_code": 0,
+ "expected_exit_codes": [
+ 0
+ ],
+ "log": "/private/tmp/communitymech-batch91/Crystal_Geyser_CO2_Aquifer_CPR_Lipid_Community-strict.log",
+ "log_sha256": "1eb3a6f95b2626f28bc1b8fe5ea54f309a8579a018ab89e3d09a4494952f09f5",
+ "output_tail": "Validating 1 files with 1 workers; schema=/private/tmp/communitymech-causal-batch91/src/communitymech/schema/communitymech.yaml\n\n=== validate-strict summary ===\n files scanned: 1\n files with ERROR: 0\n total ERROR rows: 0\n TSV: /private/tmp/communitymech-batch91/Crystal_Geyser_CO2_Aquifer_CPR_Lipid_Community-strict.tsv\n"
+ },
+ {
+ "check": "Crystal_Geyser_CO2_Aquifer_CPR_Lipid_Community-terms",
+ "command": [
+ "/Users/marcin/.cache/uv/archive-v0/neDBQyZXv0RYv8B1GH0dI/bin/linkml-term-validator",
+ "validate-data",
+ "kb/communities/Crystal_Geyser_CO2_Aquifer_CPR_Lipid_Community.yaml",
+ "-s",
+ "src/communitymech/schema/communitymech.yaml",
+ "--labels"
+ ],
+ "exit_code": 0,
+ "expected_exit_codes": [
+ 0
+ ],
+ "log": "/private/tmp/communitymech-batch91/Crystal_Geyser_CO2_Aquifer_CPR_Lipid_Community-terms.log",
+ "log_sha256": "23acda1c1d3194d12bc947d897d07de83f4a076a9d93c135148885108530e018",
+ "output_tail": "\u2705 Validation passed\n"
+ },
+ {
+ "check": "Crystal_Geyser_CO2_Aquifer_CPR_Lipid_Community-references",
+ "command": [
+ "/Users/marcin/.cache/uv/archive-v0/l58VlyFvdmnkl0CcAx5Gk/bin/linkml-reference-validator",
+ "validate",
+ "data",
+ "kb/communities/Crystal_Geyser_CO2_Aquifer_CPR_Lipid_Community.yaml",
+ "-s",
+ "src/communitymech/schema/communitymech.yaml",
+ "--config",
+ "conf/reference_validator.yaml"
+ ],
+ "exit_code": 0,
+ "expected_exit_codes": [
+ 0
+ ],
+ "log": "/private/tmp/communitymech-batch91/Crystal_Geyser_CO2_Aquifer_CPR_Lipid_Community-references.log",
+ "log_sha256": "d1766927bc91a5268317db1a432e6f66019331830e1ea2821dd2f0498310257b",
+ "output_tail": "Validating kb/communities/Crystal_Geyser_CO2_Aquifer_CPR_Lipid_Community.yaml against schema src/communitymech/schema/communitymech.yaml\nCache directory: references_cache\n\nValidation Summary:\n Total checks: 0\n All validations passed!\n",
+ "explained_output_tail": "Validating kb/communities/Crystal_Geyser_CO2_Aquifer_CPR_Lipid_Community.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": "Crystal_Geyser_CO2_Aquifer_CPR_Lipid_Community-snippets",
+ "command": [
+ "/Users/marcin/.cache/uv/archive-v0/l58VlyFvdmnkl0CcAx5Gk/bin/python3",
+ "scripts/evidence_snippet_audit.py",
+ "kb/communities/Crystal_Geyser_CO2_Aquifer_CPR_Lipid_Community.yaml",
+ "--list-mismatch",
+ "--list-nocontent",
+ "--list-rendering",
+ "--list-assembled"
+ ],
+ "exit_code": 0,
+ "expected_exit_codes": [
+ 0
+ ],
+ "log": "/private/tmp/communitymech-batch91/Crystal_Geyser_CO2_Aquifer_CPR_Lipid_Community-snippets.log",
+ "log_sha256": "6fd22c7b42f139e3b66a27210ad3d8968c80af940879c7074184305812838cca",
+ "output_tail": "# 13 evidence snippets scanned across 1 files\n MATCH 13\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": "Crystal_Geyser_CO2_Aquifer_CPR_Lipid_Community-rank",
+ "command": [
+ "/Users/marcin/.cache/uv/archive-v0/l58VlyFvdmnkl0CcAx5Gk/bin/python3",
+ "scripts/rank_causal_graph_readiness.py",
+ "kb/communities/Crystal_Geyser_CO2_Aquifer_CPR_Lipid_Community.yaml",
+ "--format",
+ "json"
+ ],
+ "exit_code": 0,
+ "expected_exit_codes": [
+ 0
+ ],
+ "log": "/private/tmp/communitymech-batch91/Crystal_Geyser_CO2_Aquifer_CPR_Lipid_Community-rank.log",
+ "log_sha256": "86e0c720c8d71e810eea966a152b3232f7aad43563e825ed376690c0bedbb1b2",
+ "output_tail": "[\n {\n \"rank\": 1,\n \"id\": \"CommunityMech:000252\",\n \"name\": \"Crystal Geyser CO2-Rich Aquifer Autotrophic CPR Lysolipid Community\",\n \"score\": 93.3,\n \"taxonomy\": 2,\n \"connected_taxa\": 2,\n \"disconnected_taxa\": 0,\n \"ecological_interactions\": 3,\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/Crystal_Geyser_CO2_Aquifer_CPR_Lipid_Community.yaml\"\n }\n]\n"
+ },
+ {
+ "check": "GLBRC_UFMP_Fermentation_Community-schema",
+ "command": [
+ "/Users/marcin/.cache/uv/archive-v0/l58VlyFvdmnkl0CcAx5Gk/bin/linkml-validate",
+ "-s",
+ "src/communitymech/schema/communitymech.yaml",
+ "kb/communities/GLBRC_UFMP_Fermentation_Community.yaml"
+ ],
+ "exit_code": 0,
+ "expected_exit_codes": [
+ 0
+ ],
+ "log": "/private/tmp/communitymech-batch91/GLBRC_UFMP_Fermentation_Community-schema.log",
+ "log_sha256": "de6087f4be8c0adc015333597cd864406ad889bbde42d9ee20db0df5932bb2de",
+ "output_tail": "No issues found\n"
+ },
+ {
+ "check": "GLBRC_UFMP_Fermentation_Community-strict",
+ "command": [
+ "/Users/marcin/.cache/uv/archive-v0/neDBQyZXv0RYv8B1GH0dI/bin/python3",
+ "scripts/validate_strict.py",
+ "--workers",
+ "1",
+ "--out",
+ "/private/tmp/communitymech-batch91/GLBRC_UFMP_Fermentation_Community-strict.tsv",
+ "kb/communities/GLBRC_UFMP_Fermentation_Community.yaml"
+ ],
+ "exit_code": 0,
+ "expected_exit_codes": [
+ 0
+ ],
+ "log": "/private/tmp/communitymech-batch91/GLBRC_UFMP_Fermentation_Community-strict.log",
+ "log_sha256": "1cc470a11dbe2393f8069cf1d6d428fad87e2d8006d3e110a2f80fbbcaa5c271",
+ "output_tail": "Validating 1 files with 1 workers; schema=/private/tmp/communitymech-causal-batch91/src/communitymech/schema/communitymech.yaml\n\n=== validate-strict summary ===\n files scanned: 1\n files with ERROR: 0\n total ERROR rows: 0\n TSV: /private/tmp/communitymech-batch91/GLBRC_UFMP_Fermentation_Community-strict.tsv\n"
+ },
+ {
+ "check": "GLBRC_UFMP_Fermentation_Community-terms",
+ "command": [
+ "/Users/marcin/.cache/uv/archive-v0/neDBQyZXv0RYv8B1GH0dI/bin/linkml-term-validator",
+ "validate-data",
+ "kb/communities/GLBRC_UFMP_Fermentation_Community.yaml",
+ "-s",
+ "src/communitymech/schema/communitymech.yaml",
+ "--labels"
+ ],
+ "exit_code": 0,
+ "expected_exit_codes": [
+ 0
+ ],
+ "log": "/private/tmp/communitymech-batch91/GLBRC_UFMP_Fermentation_Community-terms.log",
+ "log_sha256": "23acda1c1d3194d12bc947d897d07de83f4a076a9d93c135148885108530e018",
+ "output_tail": "\u2705 Validation passed\n"
+ },
+ {
+ "check": "GLBRC_UFMP_Fermentation_Community-references",
+ "command": [
+ "/Users/marcin/.cache/uv/archive-v0/l58VlyFvdmnkl0CcAx5Gk/bin/linkml-reference-validator",
+ "validate",
+ "data",
+ "kb/communities/GLBRC_UFMP_Fermentation_Community.yaml",
+ "-s",
+ "src/communitymech/schema/communitymech.yaml",
+ "--config",
+ "conf/reference_validator.yaml"
+ ],
+ "exit_code": 0,
+ "expected_exit_codes": [
+ 0
+ ],
+ "log": "/private/tmp/communitymech-batch91/GLBRC_UFMP_Fermentation_Community-references.log",
+ "log_sha256": "3187c8f05f5c843d732e66fd32595975359559593ae46bea6c1a25da58f1de1d",
+ "output_tail": "Validating kb/communities/GLBRC_UFMP_Fermentation_Community.yaml against schema src/communitymech/schema/communitymech.yaml\nCache directory: references_cache\n\nValidation Summary:\n Total checks: 0\n All validations passed!\n",
+ "explained_output_tail": "Validating kb/communities/GLBRC_UFMP_Fermentation_Community.yaml against schema src/communitymech/schema/communitymech.yaml\nCache directory: references_cache\n\nValidation Summary:\n Total checks: 0\n All validations passed!\n"
+ },
+ {
+ "check": "GLBRC_UFMP_Fermentation_Community-snippets",
+ "command": [
+ "/Users/marcin/.cache/uv/archive-v0/l58VlyFvdmnkl0CcAx5Gk/bin/python3",
+ "scripts/evidence_snippet_audit.py",
+ "kb/communities/GLBRC_UFMP_Fermentation_Community.yaml",
+ "--list-mismatch",
+ "--list-nocontent",
+ "--list-rendering",
+ "--list-assembled"
+ ],
+ "exit_code": 0,
+ "expected_exit_codes": [
+ 0
+ ],
+ "log": "/private/tmp/communitymech-batch91/GLBRC_UFMP_Fermentation_Community-snippets.log",
+ "log_sha256": "d353a2e438e49543043d94dbd2d275ccc825dad7bb23be8ad43bf853927d2fe3",
+ "output_tail": "# 28 evidence snippets scanned across 1 files\n MATCH 28\n RENDERING 0\n ASSEMBLED 0\n WEAK 0\n MISMATCH 0\n NOCONTENT 0\n\n# Files with MISMATCH/WEAK (content present but snippet absent) \u2014 fabrication suspects\n\n# MISMATCH/WEAK detail\n\n# Files by RENDERING (faithful quote; differs from cache only by\n# punctuation/whitespace/Greek \u2014 this is what validate-references flags)\n\n# Top files by NOCONTENT (unverifiable; cache stub/missing)\n\n# ASSEMBLED (every part is in the source; the join is not \u2014\n# a table flattened into prose, or a quote welded from two places)\n"
+ },
+ {
+ "check": "GLBRC_UFMP_Fermentation_Community-rank",
+ "command": [
+ "/Users/marcin/.cache/uv/archive-v0/l58VlyFvdmnkl0CcAx5Gk/bin/python3",
+ "scripts/rank_causal_graph_readiness.py",
+ "kb/communities/GLBRC_UFMP_Fermentation_Community.yaml",
+ "--format",
+ "json"
+ ],
+ "exit_code": 0,
+ "expected_exit_codes": [
+ 0
+ ],
+ "log": "/private/tmp/communitymech-batch91/GLBRC_UFMP_Fermentation_Community-rank.log",
+ "log_sha256": "3bb1f3225890d5f9ddb705b4379c9063a7f957edcce27271a4d2b310f847ef04",
+ "output_tail": "[\n {\n \"rank\": 1,\n \"id\": \"CommunityMech:000029\",\n \"name\": \"GLBRC Ultra-Filtered Milk Permeate Fermentation Community\",\n \"score\": 91.2,\n \"taxonomy\": 10,\n \"connected_taxa\": 9,\n \"disconnected_taxa\": 1,\n \"ecological_interactions\": 3,\n \"downstream_edges\": 2,\n \"interaction_evidence\": 4,\n \"dangling_downstream\": 0,\n \"self_downstream\": 0,\n \"missing\": [\n \"metabolites_or_biological_processes\",\n \"interaction_type\",\n \"disconnected_taxa\"\n ],\n \"path\": \"kb/communities/GLBRC_UFMP_Fermentation_Community.yaml\"\n }\n]\n"
+ },
+ {
+ "check": "GLBRC_UFMP_Fermentation_Community-history-0",
+ "command": [
+ "/Users/marcin/.cache/uv/archive-v0/l58VlyFvdmnkl0CcAx5Gk/bin/linkml-validate",
+ "-s",
+ "src/communitymech/schema/history.yaml",
+ "--target-class",
+ "HistoryRecord",
+ "history/records/GLBRC_UFMP_Fermentation_Community/2026-10-07T134453Z-codex-9cf7ab.yaml"
+ ],
+ "exit_code": 0,
+ "expected_exit_codes": [
+ 0
+ ],
+ "log": "/private/tmp/communitymech-batch91/GLBRC_UFMP_Fermentation_Community-history-0.log",
+ "log_sha256": "de6087f4be8c0adc015333597cd864406ad889bbde42d9ee20db0df5932bb2de",
+ "output_tail": "No issues found\n"
+ },
+ {
+ "check": "Multi_stage_Anaerobic_Digestion_SynCom_YSJ_and_SynCom_J-schema",
+ "command": [
+ "/Users/marcin/.cache/uv/archive-v0/l58VlyFvdmnkl0CcAx5Gk/bin/linkml-validate",
+ "-s",
+ "src/communitymech/schema/communitymech.yaml",
+ "kb/communities/Multi_stage_Anaerobic_Digestion_SynCom_YSJ_and_SynCom_J.yaml"
+ ],
+ "exit_code": 0,
+ "expected_exit_codes": [
+ 0
+ ],
+ "log": "/private/tmp/communitymech-batch91/Multi_stage_Anaerobic_Digestion_SynCom_YSJ_and_SynCom_J-schema.log",
+ "log_sha256": "de6087f4be8c0adc015333597cd864406ad889bbde42d9ee20db0df5932bb2de",
+ "output_tail": "No issues found\n"
+ },
+ {
+ "check": "Multi_stage_Anaerobic_Digestion_SynCom_YSJ_and_SynCom_J-strict",
+ "command": [
+ "/Users/marcin/.cache/uv/archive-v0/neDBQyZXv0RYv8B1GH0dI/bin/python3",
+ "scripts/validate_strict.py",
+ "--workers",
+ "1",
+ "--out",
+ "/private/tmp/communitymech-batch91/Multi_stage_Anaerobic_Digestion_SynCom_YSJ_and_SynCom_J-strict.tsv",
+ "kb/communities/Multi_stage_Anaerobic_Digestion_SynCom_YSJ_and_SynCom_J.yaml"
+ ],
+ "exit_code": 0,
+ "expected_exit_codes": [
+ 0
+ ],
+ "log": "/private/tmp/communitymech-batch91/Multi_stage_Anaerobic_Digestion_SynCom_YSJ_and_SynCom_J-strict.log",
+ "log_sha256": "71b0b6d84752b17f57822b3c9de07c4336bd4417ba0711e7593602ede4cd82f0",
+ "output_tail": "Validating 1 files with 1 workers; schema=/private/tmp/communitymech-causal-batch91/src/communitymech/schema/communitymech.yaml\n\n=== validate-strict summary ===\n files scanned: 1\n files with ERROR: 0\n total ERROR rows: 0\n TSV: /private/tmp/communitymech-batch91/Multi_stage_Anaerobic_Digestion_SynCom_YSJ_and_SynCom_J-strict.tsv\n"
+ },
+ {
+ "check": "Multi_stage_Anaerobic_Digestion_SynCom_YSJ_and_SynCom_J-terms",
+ "command": [
+ "/Users/marcin/.cache/uv/archive-v0/neDBQyZXv0RYv8B1GH0dI/bin/linkml-term-validator",
+ "validate-data",
+ "kb/communities/Multi_stage_Anaerobic_Digestion_SynCom_YSJ_and_SynCom_J.yaml",
+ "-s",
+ "src/communitymech/schema/communitymech.yaml",
+ "--labels"
+ ],
+ "exit_code": 0,
+ "expected_exit_codes": [
+ 0
+ ],
+ "log": "/private/tmp/communitymech-batch91/Multi_stage_Anaerobic_Digestion_SynCom_YSJ_and_SynCom_J-terms.log",
+ "log_sha256": "23acda1c1d3194d12bc947d897d07de83f4a076a9d93c135148885108530e018",
+ "output_tail": "\u2705 Validation passed\n"
+ },
+ {
+ "check": "Multi_stage_Anaerobic_Digestion_SynCom_YSJ_and_SynCom_J-references",
+ "command": [
+ "/Users/marcin/.cache/uv/archive-v0/l58VlyFvdmnkl0CcAx5Gk/bin/linkml-reference-validator",
+ "validate",
+ "data",
+ "kb/communities/Multi_stage_Anaerobic_Digestion_SynCom_YSJ_and_SynCom_J.yaml",
+ "-s",
+ "src/communitymech/schema/communitymech.yaml",
+ "--config",
+ "conf/reference_validator.yaml"
+ ],
+ "exit_code": 0,
+ "expected_exit_codes": [
+ 0
+ ],
+ "log": "/private/tmp/communitymech-batch91/Multi_stage_Anaerobic_Digestion_SynCom_YSJ_and_SynCom_J-references.log",
+ "log_sha256": "9671dfcd2e777fb142b8ffc80c1634f62c4686b22fdfd4fe914ca7d1e40bb709",
+ "output_tail": "Validating kb/communities/Multi_stage_Anaerobic_Digestion_SynCom_YSJ_and_SynCom_J.yaml against schema src/communitymech/schema/communitymech.yaml\nCache directory: references_cache\n\nValidation Summary:\n Total checks: 0\n All validations passed!\n",
+ "explained_output_tail": "Validating kb/communities/Multi_stage_Anaerobic_Digestion_SynCom_YSJ_and_SynCom_J.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": "Multi_stage_Anaerobic_Digestion_SynCom_YSJ_and_SynCom_J-snippets",
+ "command": [
+ "/Users/marcin/.cache/uv/archive-v0/l58VlyFvdmnkl0CcAx5Gk/bin/python3",
+ "scripts/evidence_snippet_audit.py",
+ "kb/communities/Multi_stage_Anaerobic_Digestion_SynCom_YSJ_and_SynCom_J.yaml",
+ "--list-mismatch",
+ "--list-nocontent",
+ "--list-rendering",
+ "--list-assembled"
+ ],
+ "exit_code": 0,
+ "expected_exit_codes": [
+ 0
+ ],
+ "log": "/private/tmp/communitymech-batch91/Multi_stage_Anaerobic_Digestion_SynCom_YSJ_and_SynCom_J-snippets.log",
+ "log_sha256": "1835af07ebf0373785ca2d25de18c6984a3cbcfdec0d2610f1d8437504408710",
+ "output_tail": "# 10 evidence snippets scanned across 1 files\n MATCH 10\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": "Multi_stage_Anaerobic_Digestion_SynCom_YSJ_and_SynCom_J-rank",
+ "command": [
+ "/Users/marcin/.cache/uv/archive-v0/l58VlyFvdmnkl0CcAx5Gk/bin/python3",
+ "scripts/rank_causal_graph_readiness.py",
+ "kb/communities/Multi_stage_Anaerobic_Digestion_SynCom_YSJ_and_SynCom_J.yaml",
+ "--format",
+ "json"
+ ],
+ "exit_code": 0,
+ "expected_exit_codes": [
+ 0
+ ],
+ "log": "/private/tmp/communitymech-batch91/Multi_stage_Anaerobic_Digestion_SynCom_YSJ_and_SynCom_J-rank.log",
+ "log_sha256": "582bc24ba7a022d46b0b23953ee08021753b90ce986694560c1880cdec0b3122",
+ "output_tail": "[\n {\n \"rank\": 1,\n \"id\": \"CommunityMech:000274\",\n \"name\": \"Multi-stage Anaerobic-Digestion SynCom-YSJ and SynCom-J\",\n \"score\": 93.3,\n \"taxonomy\": 3,\n \"connected_taxa\": 3,\n \"disconnected_taxa\": 0,\n \"ecological_interactions\": 3,\n \"downstream_edges\": 2,\n \"interaction_evidence\": 4,\n \"dangling_downstream\": 0,\n \"self_downstream\": 0,\n \"missing\": [\n \"interaction_type\"\n ],\n \"path\": \"kb/communities/Multi_stage_Anaerobic_Digestion_SynCom_YSJ_and_SynCom_J.yaml\"\n }\n]\n"
+ },
+ {
+ "check": "Multi_stage_Anaerobic_Digestion_SynCom_YSJ_and_SynCom_J-history-0",
+ "command": [
+ "/Users/marcin/.cache/uv/archive-v0/l58VlyFvdmnkl0CcAx5Gk/bin/linkml-validate",
+ "-s",
+ "src/communitymech/schema/history.yaml",
+ "--target-class",
+ "HistoryRecord",
+ "history/records/Multi_stage_Anaerobic_Digestion_SynCom_YSJ_and_SynCom_J/2026-10-07T134453Z-codex-8dae13.yaml"
+ ],
+ "exit_code": 0,
+ "expected_exit_codes": [
+ 0
+ ],
+ "log": "/private/tmp/communitymech-batch91/Multi_stage_Anaerobic_Digestion_SynCom_YSJ_and_SynCom_J-history-0.log",
+ "log_sha256": "de6087f4be8c0adc015333597cd864406ad889bbde42d9ee20db0df5932bb2de",
+ "output_tail": "No issues found\n"
+ },
+ {
+ "check": "Pleuromutilin_Degrading_Artificial_Consortium_5_Strain-schema",
+ "command": [
+ "/Users/marcin/.cache/uv/archive-v0/l58VlyFvdmnkl0CcAx5Gk/bin/linkml-validate",
+ "-s",
+ "src/communitymech/schema/communitymech.yaml",
+ "kb/communities/Pleuromutilin_Degrading_Artificial_Consortium_5_Strain.yaml"
+ ],
+ "exit_code": 0,
+ "expected_exit_codes": [
+ 0
+ ],
+ "log": "/private/tmp/communitymech-batch91/Pleuromutilin_Degrading_Artificial_Consortium_5_Strain-schema.log",
+ "log_sha256": "de6087f4be8c0adc015333597cd864406ad889bbde42d9ee20db0df5932bb2de",
+ "output_tail": "No issues found\n"
+ },
+ {
+ "check": "Pleuromutilin_Degrading_Artificial_Consortium_5_Strain-strict",
+ "command": [
+ "/Users/marcin/.cache/uv/archive-v0/neDBQyZXv0RYv8B1GH0dI/bin/python3",
+ "scripts/validate_strict.py",
+ "--workers",
+ "1",
+ "--out",
+ "/private/tmp/communitymech-batch91/Pleuromutilin_Degrading_Artificial_Consortium_5_Strain-strict.tsv",
+ "kb/communities/Pleuromutilin_Degrading_Artificial_Consortium_5_Strain.yaml"
+ ],
+ "exit_code": 0,
+ "expected_exit_codes": [
+ 0
+ ],
+ "log": "/private/tmp/communitymech-batch91/Pleuromutilin_Degrading_Artificial_Consortium_5_Strain-strict.log",
+ "log_sha256": "b8d1f6870a55874f3216af3d400ccfa99172d98018f9945ccf4e4a799e12f93b",
+ "output_tail": "Validating 1 files with 1 workers; schema=/private/tmp/communitymech-causal-batch91/src/communitymech/schema/communitymech.yaml\n\n=== validate-strict summary ===\n files scanned: 1\n files with ERROR: 0\n total ERROR rows: 0\n TSV: /private/tmp/communitymech-batch91/Pleuromutilin_Degrading_Artificial_Consortium_5_Strain-strict.tsv\n"
+ },
+ {
+ "check": "Pleuromutilin_Degrading_Artificial_Consortium_5_Strain-terms",
+ "command": [
+ "/Users/marcin/.cache/uv/archive-v0/neDBQyZXv0RYv8B1GH0dI/bin/linkml-term-validator",
+ "validate-data",
+ "kb/communities/Pleuromutilin_Degrading_Artificial_Consortium_5_Strain.yaml",
+ "-s",
+ "src/communitymech/schema/communitymech.yaml",
+ "--labels"
+ ],
+ "exit_code": 0,
+ "expected_exit_codes": [
+ 0
+ ],
+ "log": "/private/tmp/communitymech-batch91/Pleuromutilin_Degrading_Artificial_Consortium_5_Strain-terms.log",
+ "log_sha256": "23acda1c1d3194d12bc947d897d07de83f4a076a9d93c135148885108530e018",
+ "output_tail": "\u2705 Validation passed\n"
+ },
+ {
+ "check": "Pleuromutilin_Degrading_Artificial_Consortium_5_Strain-references",
+ "command": [
+ "/Users/marcin/.cache/uv/archive-v0/l58VlyFvdmnkl0CcAx5Gk/bin/linkml-reference-validator",
+ "validate",
+ "data",
+ "kb/communities/Pleuromutilin_Degrading_Artificial_Consortium_5_Strain.yaml",
+ "-s",
+ "src/communitymech/schema/communitymech.yaml",
+ "--config",
+ "conf/reference_validator.yaml"
+ ],
+ "exit_code": 0,
+ "expected_exit_codes": [
+ 0
+ ],
+ "log": "/private/tmp/communitymech-batch91/Pleuromutilin_Degrading_Artificial_Consortium_5_Strain-references.log",
+ "log_sha256": "d2b9a1da5d9a163d26a3fb1fb59328bc949ef6c630d556ca8e8ddb722e3a8483",
+ "output_tail": "Validating kb/communities/Pleuromutilin_Degrading_Artificial_Consortium_5_Strain.yaml against schema src/communitymech/schema/communitymech.yaml\nCache directory: references_cache\n\nValidation Summary:\n Total checks: 0\n All validations passed!\n",
+ "explained_output_tail": "Validating kb/communities/Pleuromutilin_Degrading_Artificial_Consortium_5_Strain.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": "Pleuromutilin_Degrading_Artificial_Consortium_5_Strain-snippets",
+ "command": [
+ "/Users/marcin/.cache/uv/archive-v0/l58VlyFvdmnkl0CcAx5Gk/bin/python3",
+ "scripts/evidence_snippet_audit.py",
+ "kb/communities/Pleuromutilin_Degrading_Artificial_Consortium_5_Strain.yaml",
+ "--list-mismatch",
+ "--list-nocontent",
+ "--list-rendering",
+ "--list-assembled"
+ ],
+ "exit_code": 0,
+ "expected_exit_codes": [
+ 0
+ ],
+ "log": "/private/tmp/communitymech-batch91/Pleuromutilin_Degrading_Artificial_Consortium_5_Strain-snippets.log",
+ "log_sha256": "32e79f5bf36e5c97f219c301b9924d6a9da1ff1bf07e2b076f93f0d0ee74a358",
+ "output_tail": "# 9 evidence snippets scanned across 1 files\n MATCH 9\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": "Pleuromutilin_Degrading_Artificial_Consortium_5_Strain-rank",
+ "command": [
+ "/Users/marcin/.cache/uv/archive-v0/l58VlyFvdmnkl0CcAx5Gk/bin/python3",
+ "scripts/rank_causal_graph_readiness.py",
+ "kb/communities/Pleuromutilin_Degrading_Artificial_Consortium_5_Strain.yaml",
+ "--format",
+ "json"
+ ],
+ "exit_code": 0,
+ "expected_exit_codes": [
+ 0
+ ],
+ "log": "/private/tmp/communitymech-batch91/Pleuromutilin_Degrading_Artificial_Consortium_5_Strain-rank.log",
+ "log_sha256": "e73f9edbf04dd17be40b34dd3aac7c8e24507d3620e00044eae314797650ecd2",
+ "output_tail": "[\n {\n \"rank\": 1,\n \"id\": \"CommunityMech:000300\",\n \"name\": \"Pleuromutilin-degrading Artificial Consortium (5-strain)\",\n \"score\": 60.0,\n \"taxonomy\": 5,\n \"connected_taxa\": 5,\n \"disconnected_taxa\": 0,\n \"ecological_interactions\": 2,\n \"downstream_edges\": 0,\n \"interaction_evidence\": 2,\n \"dangling_downstream\": 0,\n \"self_downstream\": 0,\n \"missing\": [\n \"additional_interactions\",\n \"downstream\",\n \"interaction_type\"\n ],\n \"path\": \"kb/communities/Pleuromutilin_Degrading_Artificial_Consortium_5_Strain.yaml\"\n }\n]\n"
+ },
+ {
+ "check": "Pleuromutilin_Degrading_Artificial_Consortium_5_Strain-history-0",
+ "command": [
+ "/Users/marcin/.cache/uv/archive-v0/l58VlyFvdmnkl0CcAx5Gk/bin/linkml-validate",
+ "-s",
+ "src/communitymech/schema/history.yaml",
+ "--target-class",
+ "HistoryRecord",
+ "history/records/Pleuromutilin_Degrading_Artificial_Consortium_5_Strain/2026-10-07T134453Z-codex-f66458.yaml"
+ ],
+ "exit_code": 0,
+ "expected_exit_codes": [
+ 0
+ ],
+ "log": "/private/tmp/communitymech-batch91/Pleuromutilin_Degrading_Artificial_Consortium_5_Strain-history-0.log",
+ "log_sha256": "de6087f4be8c0adc015333597cd864406ad889bbde42d9ee20db0df5932bb2de",
+ "output_tail": "No issues found\n"
+ },
+ {
+ "check": "network",
+ "command": [
+ "/Users/marcin/.cache/uv/archive-v0/l58VlyFvdmnkl0CcAx5Gk/bin/python3",
+ "-m",
+ "communitymech.cli",
+ "audit-network",
+ "--json"
+ ],
+ "exit_code": 1,
+ "expected_exit_codes": [
+ 1
+ ],
+ "log": "/private/tmp/communitymech-batch91/network.log",
+ "log_sha256": "8febc2a966f5c2b51cd59095a8877c8773cd1e9383e5214bcdc3832c5858c097",
+ "output_tail": " \"total_genomes\": 17191,\n \"is_reclassified\": false,\n \"mapping_source\": \"kg-microbe NCBI2GTDB.tsv.gz; GTDB release latest (built 2026-07-25)\"\n },\n \"notes\": \"The eLife panel denotes this P. aeruginosa mutant as strain 5; represented at species level for ontology stability.\"\n },\n \"strain_designation\": {\n \"strain_name\": \"mexZ\"\n },\n \"abundance_value\": \"Full-factorial SynCom panel member 5\",\n \"evidence\": [\n {\n \"reference\": \"PMID:42153623\",\n \"supports\": \"SUPPORT\",\n \"evidence_source\": \"IN_VITRO\",\n \"snippet\": \"Strains 1\\u20138 (as labeled in the main text) correspond, in order, to mutants pAOV, PA14, NfxB, ParR- CAZ, mexZ, OrfN, NfxB- CAZ, and MDR6- CAZ\",\n \"explanation\": \"Maps the source's strain numbers to the eight P. aeruginosa mutant labels.\"\n }\n ]\n },\n \"message\": \"Taxon 'Pseudomonas aeruginosa mexZ' 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": "just-network-json",
+ "command": [
+ "just",
+ "audit-network-json"
+ ],
+ "exit_code": 2,
+ "expected_exit_codes": [
+ 2
+ ],
+ "log": "/private/tmp/communitymech-batch91/just-network-json.log",
+ "log_sha256": "8595db43420d3f0a01c57acd6ad733a531a72e962486d20b4e1c2840dda55bff",
+ "output_tail": "uv run communitymech audit-network --json\nerror: Failed to spawn: `communitymech`\n Caused by: No such file or directory (os error 2)\nerror: recipe `audit-network-json` failed on line 574 with exit code 2\n"
+ },
+ {
+ "check": "rank-all",
+ "command": [
+ "just",
+ "rank-causal-graphs"
+ ],
+ "exit_code": 0,
+ "expected_exit_codes": [
+ 0
+ ],
+ "log": "/private/tmp/communitymech-batch91/rank-all.log",
+ "log_sha256": "fcbba865b298c67eaee888d8b170ee794b4288f718a537d66bf1b160f199fad8",
+ "output_tail": "ities/Soybean_N_Fixation_sfSynCom.yaml\tCommunityMech:000064\tSoybean N-Fixation Simplified SynCom\t4\t4\t0\t3\t2\t3\t\t0\t0\n402\t100.0\tkb/communities/Sphingobium_Rhodococcus_Lignin_Dimer_Valorization_Coculture.yaml\tCommunityMech:000267\tSphingobium-Rhodococcus Lignin-Dimer Valorization Coculture\t2\t2\t0\t3\t2\t7\t\t0\t0\n403\t100.0\tkb/communities/Staphylococcus_Candida_Context_Dependent_Biofilm_Coculture.yaml\tCommunityMech:000326\tStaphylococcus-Candida Context-Dependent Biofilm Coculture\t2\t2\t0\t6\t2\t13\t\t0\t0\n404\t100.0\tkb/communities/Stordalen_Mire_Methylotrophic_Methanogenesis_Community.yaml\tCommunityMech:000254\tStordalen Mire Methylotrophic Methanogenesis Community\t3\t3\t0\t4\t4\t9\t\t0\t0\n405\t100.0\tkb/communities/Streptomyces_A2_A5_A11_M7_Pesticide_Consortium.yaml\tCommunityMech:000335\tStreptomyces A2-A5-A11-M7 Pesticide-Bioremediation Consortium\t4\t4\t0\t4\t2\t5\t\t0\t0\n406\t100.0\tkb/communities/Subsurface_Carboxydocella_CO_Aquifer_Community.yaml\tCommunityMech:000251\tSubsurface Carboxydocella CO-Oxidation Aquifer Community\t1\t1\t0\t5\t2\t5\t\t0\t0\n407\t100.0\tkb/communities/Suillus_Bacillus_Thiamine_Ectomycorrhizal_SynCom.yaml\tCommunityMech:000312\tSuillus clintonianus-Bacillus altitudinis Thiamine Cross-Feeding SynCom\t3\t3\t0\t4\t3\t4\t\t0\t0\n408\t100.0\tkb/communities/Sulfide_Spring_Autotrophic_CPR_Biofilm.yaml\tCommunityMech:000222\tSulfide Spring Autotrophic CPR-Hosting Biofilm\t3\t3\t0\t3\t2\t4\t\t0\t0\n409\t100.0\tkb/communities/SynComBac10_Chicken_Intestinal_SynCom.yaml\tCommunityMech:000127\tSynComBac10 Chicken Intestinal SynCom\t3\t3\t0\t3\t2\t3\t\t0\t0\n410\t100.0\tkb/communities/SynCom_ARC_Peanut_Aflatoxin_Nodulation.yaml\tCommunityMech:000314\tSynCom ARC Peanut Aflatoxin-Control and Nodulation-Coupling Community\t5\t5\t0\t3\t2\t3\t\t0\t0\n411\t100.0\tkb/communities/SynCom_BsBv_Cigar_Tobacco_Leaf_Fermentation.yaml\tCommunityMech:000278\tSynCom BsBv Cigar Tobacco Leaf Fermentation\t2\t2\t0\t3\t2\t3\t\t0\t0\n412\t100.0\tkb/communities/SynCom_Chlorella_sorokiniana_Biogas_Slurry_Coupling_System.yaml\tCommunityMech:000285\tSynCom + Chlorella sorokiniana Biogas-slurry Coupling System\t2\t2\t0\t5\t3\t5\t\t0\t0\n413\t100.0\tkb/communities/SynCom_MetG2_Rhizobacteria_Sugarcane_Stress_Resilience.yaml\tCommunityMech:000302\tSynCom MetG2 Rhizobacteria Sugarcane Stress Resilience\t2\t2\t0\t3\t2\t4\t\t0\t0\n414\t100.0\tkb/communities/SynCom_Sesame_Flavor_Baijiu_Fuqu_13Genus.yaml\tCommunityMech:000283\tSesame-flavor Baijiu Fuqu SynCom (13-genus)\t13\t13\t0\t3\t2\t3\t\t0\t0\n415\t100.0\tkb/communities/SynCom_Y_Agrobacterium_Bacillus_Biofilm_Biocontrol_Coculture.yaml\tCommunityMech:000272\tSynCom Y Agrobacterium-Bacillus Biofilm Biocontrol Co-culture\t2\t2\t0\t4\t2\t6\t\t0\t0\n416\t100.0\tkb/communities/Synechococcus_Azotobacter_Photoproduction_Mutualism.yaml\tCommunityMech:000207\tSynechococcus-Azotobacter Photoproduction Mutualism\t2\t2\t0\t3\t2\t6\t\t0\t0\n417\t100.0\tkb/communities/Synechococcus_Bacillus_SPC.yaml\tCommunityMech:000065\tSynechococcus-Bacillus Synthetic Photosynthetic Consortium\t2\t2\t0\t3\t2\t4\t\t0\t0\n418\t100.0\tkb/communities/Synechococcus_Ecoli_SPC.yaml\tCommunityMech:000066\tSynechococcus-E.coli Synthetic Photosynthetic Consortium\t2\t2\t0\t3\t2\t4\t\t0\t0\n419\t100.0\tkb/communities/Synechococcus_Halomonas_Light_Driven_PHB_Coculture.yaml\tCommunityMech:000198\tSynechococcus-Halomonas Light-Driven PHB Coculture\t2\t2\t0\t3\t2\t6\t\t0\t0\n420\t100.0\tkb/communities/Synechococcus_Pseudomonas_PhotoPHA_DNT_Coculture.yaml\tCommunityMech:000167\tSynechococcus-Pseudomonas Phototrophic PHA and DNT Coculture\t2\t2\t0\t4\t2\t8\t\t0\t0\n421\t100.0\tkb/communities/Synechococcus_Saccharomyces_SPC.yaml\tCommunityMech:000067\tSynechococcus-Saccharomyces Synthetic Photosynthetic Consortium\t2\t2\t0\t3\t2\t4\t\t0\t0\n422\t100.0\tkb/communities/Synechococcus_Shewanella_Dlactate_Biophotovoltaic_Consortium.yaml\tCommunityMech:000211\tSynechococcus-Shewanella D-Lactate Biophotovoltaic Consortium\t2\t2\t0\t3\t2\t6\t\t0\t0\n423\t100.0\tkb/communities/Synthetic_Lichen_Synechococcus_Rhodotorula_Coculture.yaml\tCommunityMech:000149\tSynthetic Lichen Synechococcus-Rhodotorula Coculture\t2\t2\t0\t3\t2\t4\t\t0\t0\n424\t100.0\tkb/communities/Syntrophobacter_Methanobacterium_Syntrophy.yaml\tCommunityMech:000068\tSyntrophobacter-Methanobacterium Syntrophic Consortium\t2\t2\t0\t3\t3\t8\t\t0\t0\n425\t100.0\tkb/communities/Syntrophobacter_Methanospirillum_Syntrophy.yaml\tCommunityMech:000069\tSyntrophobacter-Methanospirillum Syntrophic Consortium\t2\t2\t0\t3\t3\t5\t\t0\t0\n426\t100.0\tkb/communities/Syntrophomonas_Methanococcus_Butyrate_Growth_Coordination_Coculture.yaml\tCommunityMech:000189\tSyntrophomonas-Methanococcus Butyrate Growth Coordination Coculture\t2\t2\t0\t3\t2\t6\t\t0\t0\n427\t100.0\tkb/communities/Syntrophomonas_Methanospirillum_Syntrophy.yaml\tCommunityMech:000070\tSyntrophomonas-Methanospirillum Syntrophic Consortium\t2\t2\t0\t3\t3\t7\t\t0\t0\n428\t100.0\tkb/communities/Syntrophus_Benzoate_Degrader.yaml\tCommunityMech:000071\tSyntrophus Benzoate Degrader\t2\t2\t0\t3\t2\t6\t\t0\t0\n429\t100.0\tkb/communities/Syntrophus_Methanospirillum_Gentianae_Benzoate_Coculture.yaml\tCommunityMech:000187\tSyntrophus-Methanospirillum Gentianae Benzoate Coculture\t2\t2\t0\t3\t2\t7\t\t0\t0\n430\t100.0\tkb/communities/THOR_Rhizosphere_Model_Community.yaml\tCommunityMech:000079\tTHOR Rhizosphere Model Community\t3\t3\t0\t4\t2\t5\t\t0\t0\n431\t100.0\tkb/communities/TYQ1_Nematode_Biocontrol_SynCom.yaml\tCommunityMech:000072\tTYQ1 Nematode Biocontrol SynCom\t8\t8\t0\t4\t4\t4\t\t0\t0\n432\t100.0\tkb/communities/Teosinte_Maize_Biofertilizer_SynCom7.yaml\tCommunityMech:000100\tTeosinte-Derived Maize Biofertilizer SynCom7\t4\t4\t0\t6\t2\t12\t\t0\t0\n433\t100.0\tkb/communities/Thalassiosira_Marinobacter_Marine_Snow_Coculture.yaml\tCommunityMech:000259\tThalassiosira-Marinobacter Marine Snow Coculture\t2\t2\t0\t4\t2\t10\t\t0\t0\n434\t100.0\tkb/communities/Thalassiosira_Ruegeria_Phycosphere_Coculture.yaml\tCommunityMech:000162\tThalassiosira-Ruegeria Phycosphere Coculture\t2\t2\t0\t3\t2\t4\t\t0\t0\n435\t100.0\tkb/communities/Thermacetogenium_Methanothermobacter_Acetate_Oxidation_Coculture.yaml\tCommunityMech:000182\tThermacetogenium-Methanothermobacter Acetate Oxidation Coculture\t2\t2\t0\t3\t2\t8\t\t0\t0\n436\t100.0\tkb/communities/Thermophilic_Lignocellulose_Composting_SynCom_Biosanitization.yaml\tCommunityMech:000282\tThermophilic Lignocellulose-degrading Composting SynCom\t5\t5\t0\t3\t2\t3\t\t0\t0\n437\t100.0\tkb/communities/Thermophilic_Pyrite_QS_Consortium.yaml\tCommunityMech:000073\tThermophilic Pyrite Quorum Sensing Consortium\t3\t3\t0\t6\t2\t14\t\t0\t0\n438\t100.0\tkb/communities/Thermotoga_Methanocaldococcus_Hyperthermophilic_Syntrophy.yaml\tCommunityMech:000186\tThermotoga-Methanocaldococcus Hyperthermophilic Syntrophy\t2\t2\t0\t3\t2\t8\t\t0\t0\n439\t100.0\tkb/communities/Thiocyanate_Afipia_Thiobacillus_Bioreactor_Community.yaml\tCommunityMech:000239\tThiocyanate-Degrading Afipia and Thiobacillus Bioreactor Community\t3\t3\t0\t3\t2\t3\t\t0\t0\n440\t100.0\tkb/communities/Tinto_River_Iron_Cycling_Community.yaml\tCommunityMech:000074\tTinto River Iron Cycling Community\t6\t6\t0\t5\t3\t6\t\t0\t0\n441\t100.0\tkb/communities/Tobacco_Chemotactic_Biocontrol_SynCom.yaml\tCommunityMech:000106\tTobacco Chemotactic Biocontrol SynCom\t2\t2\t0\t3\t2\t4\t\t0\t0\n442\t100.0\tkb/communities/Tomato_Oxylipin_SynCom3.yaml\tCommunityMech:000107\tTomato Oxylipin-Protective SynCom3\t3\t3\t0\t3\t2\t4\t\t0\t0\n443\t100.0\tkb/communities/Tribromophenol_Anaerobic_Bioremediation_SynCom.yaml\tCommunityMech:000112\tTribromophenol Anaerobic Bioremediation SynCom\t3\t3\t0\t4\t3\t5\t\t0\t0\n444\t100.0\tkb/communities/Trichococcus_Syntrophomonas_Methanospirillum_Butyrate_Coculture.yaml\tCommunityMech:000188\tTrichococcus-Syntrophomonas-Methanospirillum Butyrate Coculture\t3\t3\t0\t3\t2\t6\t\t0\t0\n445\t100.0\tkb/communities/Trichoderma_Ecoli_Cellulosic_Isobutanol_Coculture.yaml\tCommunityMech:000205\tTrichoderma-E. coli Cellulosic Isobutanol Coculture\t2\t2\t0\t3\t2\t5\t\t0\t0\n446\t100.0\tkb/communities/Trichoderma_Lactate_Platform.yaml\tCommunityMech:000075\tTrichoderma Lactate Platform for SCFA Production\t3\t3\t0\t3\t2\t3\t\t0\t0\n447\t100.0\tkb/communities/Trichoderma_Streptomyces_Filamentous_Cellulose_Coculture.yaml\tCommunityMech:000270\tTrichoderma-Streptomyces Filamentous Cellulose Coculture\t2\t2\t0\t3\t2\t7\t\t0\t0\n448\t100.0\tkb/communities/Trichodesmium_Alteromonas_Marine_Consortium.yaml\tCommunityMech:000147\tTrichodesmium-Alteromonas Marine Consortium\t3\t3\t0\t3\t2\t5\t\t0\t0\n449\t100.0\tkb/communities/Tropidoatractus_Magnetotacticus_Tripartite_Syntrophy.yaml\tCommunityMech:000337\tTropidoatractus magnetotacticus Magnetotactic Ciliate Tripartite Syntrophy\t3\t3\t0\t4\t2\t9\t\t0\t0\n450\t100.0\tkb/communities/Urine_Nitrification_SynCom.yaml\tCommunityMech:000117\tUrine Nitrification Synthetic Microbial Community\t5\t5\t0\t3\t2\t5\t\t0\t0\n451\t100.0\tkb/communities/Variovorax_Cryptococcus_Vitamin_Mutualism_Microcosm.yaml\tCommunityMech:000213\tVariovorax-Cryptococcus Vitamin Cross-Feeding Microcosm\t2\t2\t0\t3\t2\t4\t\t0\t0\n452\t100.0\tkb/communities/Waste_Sludge_Electrofermentation_Biofilm_Suspension_Community.yaml\tCommunityMech:000328\tWaste-Sludge Electro-Fermentation Biofilm-Suspension Community\t5\t5\t0\t4\t2\t6\t\t0\t0\n453\t100.0\tkb/communities/Watermelon_Rhizosphere_Fusarium_SynCom8.yaml\tCommunityMech:000098\tWatermelon Rhizosphere Fusarium-Protective SynCom8\t2\t2\t0\t3\t2\t7\t\t0\t0\n454\t100.0\tkb/communities/Wetland_Oxygen_Sulfate_GHG_Microcosm_Community.yaml\tCommunityMech:000255\tWetland Oxygen-Sulfate Greenhouse Gas Microcosm Community\t3\t3\t0\t3\t2\t6\t\t0\t0\n455\t100.0\tkb/communities/Wheat_Straw_Biogas_Pretreatment_SynCom.yaml\tCommunityMech:000118\tWheat Straw Biogas Pretreatment SynCom\t4\t4\t0\t3\t2\t4\t\t0\t0\n456\t100.0\tkb/communities/Yarrowia_lipolytica_Division_of_Labor_Lipid_Consortium.yaml\tCommunityMech:000354\tYarrowia lipolytica Division-of-Labor Lipid Consortium\t2\t2\t0\t3\t2\t3\t\t0\t0\n457\t100.0\tkb/communities/Yogurt_TwoSpecies_Starter_Culture.yaml\tCommunityMech:000164\tYogurt Two-Species Starter Culture\t2\t2\t0\t4\t2\t9\t\t0\t0\n458\t100.0\tkb/communities/Zymomonas_Ecoli_Exometabolomics_Obligate_Mutualism.yaml\tCommunityMech:000210\tZymomonas-E. coli Exometabolomics-Designed Obligate Mutualism\t2\t2\t0\t3\t2\t6\t\t0\t0\n459\t100.0\tkb/communities/hCom2_Complex_Gut_Microbiome.yaml\tCommunityMech:000123\thCom2 Complex Gut Microbiome\t1\t1\t0\t3\t2\t3\t\t0\t0\n460\t100.0\tkb/communities/mCAFEs_Brachypodium_RCC.yaml\tCommunityMech:000078\tm-CAFEs Brachypodium Reduced Complexity Consortia\t10\t10\t0\t6\t2\t11\t\t0\t0\nPYTHONPATH=src uv run python scripts/rank_causal_graph_readiness.py \n"
+ },
+ {
+ "check": "render",
+ "command": [
+ "/Users/marcin/.cache/uv/archive-v0/l58VlyFvdmnkl0CcAx5Gk/bin/python3",
+ "-m",
+ "communitymech.render"
+ ],
+ "exit_code": 0,
+ "expected_exit_codes": [
+ 0
+ ],
+ "log": "/private/tmp/communitymech-batch91/render.log",
+ "log_sha256": "516200bb26651e14d002bfcd7ee1b36e36d1fe5740fe8a0a9798fada18d9e91b",
+ "output_tail": "sm.html\n \u2713 Synechococcus_Bacillus_SPC.yaml \u2192 /private/tmp/communitymech-causal-batch91/docs/communities/Synechococcus_Bacillus_SPC.html\n \u2713 Synechococcus_Ecoli_SPC.yaml \u2192 /private/tmp/communitymech-causal-batch91/docs/communities/Synechococcus_Ecoli_SPC.html\n \u2713 Synechococcus_Halomonas_Light_Driven_PHB_Coculture.yaml \u2192 /private/tmp/communitymech-causal-batch91/docs/communities/Synechococcus_Halomonas_Light_Driven_PHB_Coculture.html\n \u2713 Synechococcus_Pseudomonas_PhotoPHA_DNT_Coculture.yaml \u2192 /private/tmp/communitymech-causal-batch91/docs/communities/Synechococcus_Pseudomonas_PhotoPHA_DNT_Coculture.html\n \u2713 Synechococcus_Saccharomyces_SPC.yaml \u2192 /private/tmp/communitymech-causal-batch91/docs/communities/Synechococcus_Saccharomyces_SPC.html\n \u2713 Synechococcus_Shewanella_Dlactate_Biophotovoltaic_Consortium.yaml \u2192 /private/tmp/communitymech-causal-batch91/docs/communities/Synechococcus_Shewanella_Dlactate_Biophotovoltaic_Consortium.html\n \u2713 Synechocystis_Pseudomonas_Acetate_Butanol_Coculture.yaml \u2192 /private/tmp/communitymech-causal-batch91/docs/communities/Synechocystis_Pseudomonas_Acetate_Butanol_Coculture.html\n \u2713 Synthetic_Lichen_Synechococcus_Rhodotorula_Coculture.yaml \u2192 /private/tmp/communitymech-causal-batch91/docs/communities/Synthetic_Lichen_Synechococcus_Rhodotorula_Coculture.html\n \u2713 Synthetic_Periphyton_Freshwater_Biofilm.yaml \u2192 /private/tmp/communitymech-causal-batch91/docs/communities/Synthetic_Periphyton_Freshwater_Biofilm.html\n \u2713 Syntrophobacter_Methanobacterium_Syntrophy.yaml \u2192 /private/tmp/communitymech-causal-batch91/docs/communities/Syntrophobacter_Methanobacterium_Syntrophy.html\n \u2713 Syntrophobacter_Methanospirillum_Syntrophy.yaml \u2192 /private/tmp/communitymech-causal-batch91/docs/communities/Syntrophobacter_Methanospirillum_Syntrophy.html\n \u2713 Syntrophomonas_Methanococcus_Butyrate_Growth_Coordination_Coculture.yaml \u2192 /private/tmp/communitymech-causal-batch91/docs/communities/Syntrophomonas_Methanococcus_Butyrate_Growth_Coordination_Coculture.html\n \u2713 Syntrophomonas_Methanospirillum_Syntrophy.yaml \u2192 /private/tmp/communitymech-causal-batch91/docs/communities/Syntrophomonas_Methanospirillum_Syntrophy.html\n \u2713 Syntrophus_Benzoate_Degrader.yaml \u2192 /private/tmp/communitymech-causal-batch91/docs/communities/Syntrophus_Benzoate_Degrader.html\n \u2713 Syntrophus_Methanospirillum_Gentianae_Benzoate_Coculture.yaml \u2192 /private/tmp/communitymech-causal-batch91/docs/communities/Syntrophus_Methanospirillum_Gentianae_Benzoate_Coculture.html\n \u2713 TCP_NonDehalogenimonas_Groundwater_Consortium.yaml \u2192 /private/tmp/communitymech-causal-batch91/docs/communities/TCP_NonDehalogenimonas_Groundwater_Consortium.html\n \u2713 THOR_Rhizosphere_Model_Community.yaml \u2192 /private/tmp/communitymech-causal-batch91/docs/communities/THOR_Rhizosphere_Model_Community.html\n \u2713 TYQ1_Nematode_Biocontrol_SynCom.yaml \u2192 /private/tmp/communitymech-causal-batch91/docs/communities/TYQ1_Nematode_Biocontrol_SynCom.html\n \u2713 Teosinte_Maize_Biofertilizer_SynCom7.yaml \u2192 /private/tmp/communitymech-causal-batch91/docs/communities/Teosinte_Maize_Biofertilizer_SynCom7.html\n \u2713 Thalassiosira_Marinobacter_Marine_Snow_Coculture.yaml \u2192 /private/tmp/communitymech-causal-batch91/docs/communities/Thalassiosira_Marinobacter_Marine_Snow_Coculture.html\n \u2713 Thalassiosira_Ruegeria_Phycosphere_Coculture.yaml \u2192 /private/tmp/communitymech-causal-batch91/docs/communities/Thalassiosira_Ruegeria_Phycosphere_Coculture.html\n \u2713 Thermacetogenium_Methanothermobacter_Acetate_Oxidation_Coculture.yaml \u2192 /private/tmp/communitymech-causal-batch91/docs/communities/Thermacetogenium_Methanothermobacter_Acetate_Oxidation_Coculture.html\n \u2713 Thermoleptolyngbya_Chelatococcus_Arsenic_Detoxification_Coculture.yaml \u2192 /private/tmp/communitymech-causal-batch91/docs/communities/Thermoleptolyngbya_Chelatococcus_Arsenic_Detoxification_Coculture.html\n \u2713 Thermophilic_ExSitu_Biomethanation_Mixed_Culture.yaml \u2192 /private/tmp/communitymech-causal-batch91/docs/communities/Thermophilic_ExSitu_Biomethanation_Mixed_Culture.html\n \u2713 Thermophilic_Lignocellulose_Composting_SynCom_Biosanitization.yaml \u2192 /private/tmp/communitymech-causal-batch91/docs/communities/Thermophilic_Lignocellulose_Composting_SynCom_Biosanitization.html\n \u2713 Thermophilic_Pyrite_QS_Consortium.yaml \u2192 /private/tmp/communitymech-causal-batch91/docs/communities/Thermophilic_Pyrite_QS_Consortium.html\n \u2713 Thermotoga_Methanocaldococcus_Hyperthermophilic_Syntrophy.yaml \u2192 /private/tmp/communitymech-causal-batch91/docs/communities/Thermotoga_Methanocaldococcus_Hyperthermophilic_Syntrophy.html\n \u2713 Thiocyanate_Afipia_Thiobacillus_Bioreactor_Community.yaml \u2192 /private/tmp/communitymech-causal-batch91/docs/communities/Thiocyanate_Afipia_Thiobacillus_Bioreactor_Community.html\n \u2713 Tinto_River_Iron_Cycling_Community.yaml \u2192 /private/tmp/communitymech-causal-batch91/docs/communities/Tinto_River_Iron_Cycling_Community.html\n \u2713 Tobacco_Chemotactic_Biocontrol_SynCom.yaml \u2192 /private/tmp/communitymech-causal-batch91/docs/communities/Tobacco_Chemotactic_Biocontrol_SynCom.html\n \u2713 Tomato_Oxylipin_SynCom3.yaml \u2192 /private/tmp/communitymech-causal-batch91/docs/communities/Tomato_Oxylipin_SynCom3.html\n \u2713 Tribromophenol_Anaerobic_Bioremediation_SynCom.yaml \u2192 /private/tmp/communitymech-causal-batch91/docs/communities/Tribromophenol_Anaerobic_Bioremediation_SynCom.html\n \u2713 Trichococcus_Syntrophomonas_Methanospirillum_Butyrate_Coculture.yaml \u2192 /private/tmp/communitymech-causal-batch91/docs/communities/Trichococcus_Syntrophomonas_Methanospirillum_Butyrate_Coculture.html\n \u2713 Trichoderma_Ecoli_Cellulosic_Isobutanol_Coculture.yaml \u2192 /private/tmp/communitymech-causal-batch91/docs/communities/Trichoderma_Ecoli_Cellulosic_Isobutanol_Coculture.html\n \u2713 Trichoderma_Lactate_Platform.yaml \u2192 /private/tmp/communitymech-causal-batch91/docs/communities/Trichoderma_Lactate_Platform.html\n \u2713 Trichoderma_Streptomyces_Filamentous_Cellulose_Coculture.yaml \u2192 /private/tmp/communitymech-causal-batch91/docs/communities/Trichoderma_Streptomyces_Filamentous_Cellulose_Coculture.html\n \u2713 Trichodesmium_Alteromonas_Marine_Consortium.yaml \u2192 /private/tmp/communitymech-causal-batch91/docs/communities/Trichodesmium_Alteromonas_Marine_Consortium.html\n \u2713 Tropidoatractus_Magnetotacticus_Tripartite_Syntrophy.yaml \u2192 /private/tmp/communitymech-causal-batch91/docs/communities/Tropidoatractus_Magnetotacticus_Tripartite_Syntrophy.html\n \u2713 Urine_Nitrification_SynCom.yaml \u2192 /private/tmp/communitymech-causal-batch91/docs/communities/Urine_Nitrification_SynCom.html\n \u2713 Variovorax_Cryptococcus_Vitamin_Mutualism_Microcosm.yaml \u2192 /private/tmp/communitymech-causal-batch91/docs/communities/Variovorax_Cryptococcus_Vitamin_Mutualism_Microcosm.html\n \u2713 Viili_Fungus_Bacterium_EPS_SynCom.yaml \u2192 /private/tmp/communitymech-causal-batch91/docs/communities/Viili_Fungus_Bacterium_EPS_SynCom.html\n \u2713 Waste_Sludge_Electrofermentation_Biofilm_Suspension_Community.yaml \u2192 /private/tmp/communitymech-causal-batch91/docs/communities/Waste_Sludge_Electrofermentation_Biofilm_Suspension_Community.html\n \u2713 Watermelon_Rhizosphere_Fusarium_SynCom8.yaml \u2192 /private/tmp/communitymech-causal-batch91/docs/communities/Watermelon_Rhizosphere_Fusarium_SynCom8.html\n \u2713 Wetland_Oxygen_Sulfate_GHG_Microcosm_Community.yaml \u2192 /private/tmp/communitymech-causal-batch91/docs/communities/Wetland_Oxygen_Sulfate_GHG_Microcosm_Community.html\n \u2713 Wheat_Consortium_C1.yaml \u2192 /private/tmp/communitymech-causal-batch91/docs/communities/Wheat_Consortium_C1.html\n \u2713 Wheat_Consortium_C6.yaml \u2192 /private/tmp/communitymech-causal-batch91/docs/communities/Wheat_Consortium_C6.html\n \u2713 Wheat_CrownRot_SixStrain_CrossKingdom_SMC.yaml \u2192 /private/tmp/communitymech-causal-batch91/docs/communities/Wheat_CrownRot_SixStrain_CrossKingdom_SMC.html\n \u2713 Wheat_CrownRot_TB_CrossKingdom_SynCom.yaml \u2192 /private/tmp/communitymech-causal-batch91/docs/communities/Wheat_CrownRot_TB_CrossKingdom_SynCom.html\n \u2713 Wheat_DT_Rhizosphere_SynCom.yaml \u2192 /private/tmp/communitymech-causal-batch91/docs/communities/Wheat_DT_Rhizosphere_SynCom.html\n \u2713 Wheat_Straw_Biogas_Pretreatment_SynCom.yaml \u2192 /private/tmp/communitymech-causal-batch91/docs/communities/Wheat_Straw_Biogas_Pretreatment_SynCom.html\n \u2713 Wheat_SynCom_SASW01_Drought_Inoculant.yaml \u2192 /private/tmp/communitymech-causal-batch91/docs/communities/Wheat_SynCom_SASW01_Drought_Inoculant.html\n \u2713 Wine_Yeast_FiveSpecies_Strain_Substitution_Consortium.yaml \u2192 /private/tmp/communitymech-causal-batch91/docs/communities/Wine_Yeast_FiveSpecies_Strain_Substitution_Consortium.html\n \u2713 Wine_Yeast_ThreeSpecies_Contact_Consortium.yaml \u2192 /private/tmp/communitymech-causal-batch91/docs/communities/Wine_Yeast_ThreeSpecies_Contact_Consortium.html\n \u2713 Wolffia_Mankai_Endosphere_Cobamide_Guild.yaml \u2192 /private/tmp/communitymech-causal-batch91/docs/communities/Wolffia_Mankai_Endosphere_Cobamide_Guild.html\n \u2713 Wollastonite_Ramichloridium_Talaromyces_Fungal_Consortium.yaml \u2192 /private/tmp/communitymech-causal-batch91/docs/communities/Wollastonite_Ramichloridium_Talaromyces_Fungal_Consortium.html\n \u2713 Yarrowia_lipolytica_Division_of_Labor_Lipid_Consortium.yaml \u2192 /private/tmp/communitymech-causal-batch91/docs/communities/Yarrowia_lipolytica_Division_of_Labor_Lipid_Consortium.html\n \u2713 Yogurt_TwoSpecies_Starter_Culture.yaml \u2192 /private/tmp/communitymech-causal-batch91/docs/communities/Yogurt_TwoSpecies_Starter_Culture.html\n \u2713 Zymomonas_Ecoli_Exometabolomics_Obligate_Mutualism.yaml \u2192 /private/tmp/communitymech-causal-batch91/docs/communities/Zymomonas_Ecoli_Exometabolomics_Obligate_Mutualism.html\n \u2713 hCom2_Complex_Gut_Microbiome.yaml \u2192 /private/tmp/communitymech-causal-batch91/docs/communities/hCom2_Complex_Gut_Microbiome.html\n \u2713 mCAFEs_Brachypodium_RCC.yaml \u2192 /private/tmp/communitymech-causal-batch91/docs/communities/mCAFEs_Brachypodium_RCC.html\n\n\u2705 Rendered 456 communities to /private/tmp/communitymech-causal-batch91/docs/communities\n \u2713 Generated browser at /private/tmp/communitymech-causal-batch91/docs/browser.html\n \u2713 Generated landing at /private/tmp/communitymech-causal-batch91/docs/index.html\n"
+ },
+ {
+ "check": "render-repeat",
+ "command": [
+ "/Users/marcin/.cache/uv/archive-v0/l58VlyFvdmnkl0CcAx5Gk/bin/python3",
+ "-m",
+ "communitymech.render"
+ ],
+ "exit_code": 0,
+ "expected_exit_codes": [
+ 0
+ ],
+ "log": "/private/tmp/communitymech-batch91/render-repeat.log",
+ "log_sha256": "516200bb26651e14d002bfcd7ee1b36e36d1fe5740fe8a0a9798fada18d9e91b",
+ "output_tail": "sm.html\n \u2713 Synechococcus_Bacillus_SPC.yaml \u2192 /private/tmp/communitymech-causal-batch91/docs/communities/Synechococcus_Bacillus_SPC.html\n \u2713 Synechococcus_Ecoli_SPC.yaml \u2192 /private/tmp/communitymech-causal-batch91/docs/communities/Synechococcus_Ecoli_SPC.html\n \u2713 Synechococcus_Halomonas_Light_Driven_PHB_Coculture.yaml \u2192 /private/tmp/communitymech-causal-batch91/docs/communities/Synechococcus_Halomonas_Light_Driven_PHB_Coculture.html\n \u2713 Synechococcus_Pseudomonas_PhotoPHA_DNT_Coculture.yaml \u2192 /private/tmp/communitymech-causal-batch91/docs/communities/Synechococcus_Pseudomonas_PhotoPHA_DNT_Coculture.html\n \u2713 Synechococcus_Saccharomyces_SPC.yaml \u2192 /private/tmp/communitymech-causal-batch91/docs/communities/Synechococcus_Saccharomyces_SPC.html\n \u2713 Synechococcus_Shewanella_Dlactate_Biophotovoltaic_Consortium.yaml \u2192 /private/tmp/communitymech-causal-batch91/docs/communities/Synechococcus_Shewanella_Dlactate_Biophotovoltaic_Consortium.html\n \u2713 Synechocystis_Pseudomonas_Acetate_Butanol_Coculture.yaml \u2192 /private/tmp/communitymech-causal-batch91/docs/communities/Synechocystis_Pseudomonas_Acetate_Butanol_Coculture.html\n \u2713 Synthetic_Lichen_Synechococcus_Rhodotorula_Coculture.yaml \u2192 /private/tmp/communitymech-causal-batch91/docs/communities/Synthetic_Lichen_Synechococcus_Rhodotorula_Coculture.html\n \u2713 Synthetic_Periphyton_Freshwater_Biofilm.yaml \u2192 /private/tmp/communitymech-causal-batch91/docs/communities/Synthetic_Periphyton_Freshwater_Biofilm.html\n \u2713 Syntrophobacter_Methanobacterium_Syntrophy.yaml \u2192 /private/tmp/communitymech-causal-batch91/docs/communities/Syntrophobacter_Methanobacterium_Syntrophy.html\n \u2713 Syntrophobacter_Methanospirillum_Syntrophy.yaml \u2192 /private/tmp/communitymech-causal-batch91/docs/communities/Syntrophobacter_Methanospirillum_Syntrophy.html\n \u2713 Syntrophomonas_Methanococcus_Butyrate_Growth_Coordination_Coculture.yaml \u2192 /private/tmp/communitymech-causal-batch91/docs/communities/Syntrophomonas_Methanococcus_Butyrate_Growth_Coordination_Coculture.html\n \u2713 Syntrophomonas_Methanospirillum_Syntrophy.yaml \u2192 /private/tmp/communitymech-causal-batch91/docs/communities/Syntrophomonas_Methanospirillum_Syntrophy.html\n \u2713 Syntrophus_Benzoate_Degrader.yaml \u2192 /private/tmp/communitymech-causal-batch91/docs/communities/Syntrophus_Benzoate_Degrader.html\n \u2713 Syntrophus_Methanospirillum_Gentianae_Benzoate_Coculture.yaml \u2192 /private/tmp/communitymech-causal-batch91/docs/communities/Syntrophus_Methanospirillum_Gentianae_Benzoate_Coculture.html\n \u2713 TCP_NonDehalogenimonas_Groundwater_Consortium.yaml \u2192 /private/tmp/communitymech-causal-batch91/docs/communities/TCP_NonDehalogenimonas_Groundwater_Consortium.html\n \u2713 THOR_Rhizosphere_Model_Community.yaml \u2192 /private/tmp/communitymech-causal-batch91/docs/communities/THOR_Rhizosphere_Model_Community.html\n \u2713 TYQ1_Nematode_Biocontrol_SynCom.yaml \u2192 /private/tmp/communitymech-causal-batch91/docs/communities/TYQ1_Nematode_Biocontrol_SynCom.html\n \u2713 Teosinte_Maize_Biofertilizer_SynCom7.yaml \u2192 /private/tmp/communitymech-causal-batch91/docs/communities/Teosinte_Maize_Biofertilizer_SynCom7.html\n \u2713 Thalassiosira_Marinobacter_Marine_Snow_Coculture.yaml \u2192 /private/tmp/communitymech-causal-batch91/docs/communities/Thalassiosira_Marinobacter_Marine_Snow_Coculture.html\n \u2713 Thalassiosira_Ruegeria_Phycosphere_Coculture.yaml \u2192 /private/tmp/communitymech-causal-batch91/docs/communities/Thalassiosira_Ruegeria_Phycosphere_Coculture.html\n \u2713 Thermacetogenium_Methanothermobacter_Acetate_Oxidation_Coculture.yaml \u2192 /private/tmp/communitymech-causal-batch91/docs/communities/Thermacetogenium_Methanothermobacter_Acetate_Oxidation_Coculture.html\n \u2713 Thermoleptolyngbya_Chelatococcus_Arsenic_Detoxification_Coculture.yaml \u2192 /private/tmp/communitymech-causal-batch91/docs/communities/Thermoleptolyngbya_Chelatococcus_Arsenic_Detoxification_Coculture.html\n \u2713 Thermophilic_ExSitu_Biomethanation_Mixed_Culture.yaml \u2192 /private/tmp/communitymech-causal-batch91/docs/communities/Thermophilic_ExSitu_Biomethanation_Mixed_Culture.html\n \u2713 Thermophilic_Lignocellulose_Composting_SynCom_Biosanitization.yaml \u2192 /private/tmp/communitymech-causal-batch91/docs/communities/Thermophilic_Lignocellulose_Composting_SynCom_Biosanitization.html\n \u2713 Thermophilic_Pyrite_QS_Consortium.yaml \u2192 /private/tmp/communitymech-causal-batch91/docs/communities/Thermophilic_Pyrite_QS_Consortium.html\n \u2713 Thermotoga_Methanocaldococcus_Hyperthermophilic_Syntrophy.yaml \u2192 /private/tmp/communitymech-causal-batch91/docs/communities/Thermotoga_Methanocaldococcus_Hyperthermophilic_Syntrophy.html\n \u2713 Thiocyanate_Afipia_Thiobacillus_Bioreactor_Community.yaml \u2192 /private/tmp/communitymech-causal-batch91/docs/communities/Thiocyanate_Afipia_Thiobacillus_Bioreactor_Community.html\n \u2713 Tinto_River_Iron_Cycling_Community.yaml \u2192 /private/tmp/communitymech-causal-batch91/docs/communities/Tinto_River_Iron_Cycling_Community.html\n \u2713 Tobacco_Chemotactic_Biocontrol_SynCom.yaml \u2192 /private/tmp/communitymech-causal-batch91/docs/communities/Tobacco_Chemotactic_Biocontrol_SynCom.html\n \u2713 Tomato_Oxylipin_SynCom3.yaml \u2192 /private/tmp/communitymech-causal-batch91/docs/communities/Tomato_Oxylipin_SynCom3.html\n \u2713 Tribromophenol_Anaerobic_Bioremediation_SynCom.yaml \u2192 /private/tmp/communitymech-causal-batch91/docs/communities/Tribromophenol_Anaerobic_Bioremediation_SynCom.html\n \u2713 Trichococcus_Syntrophomonas_Methanospirillum_Butyrate_Coculture.yaml \u2192 /private/tmp/communitymech-causal-batch91/docs/communities/Trichococcus_Syntrophomonas_Methanospirillum_Butyrate_Coculture.html\n \u2713 Trichoderma_Ecoli_Cellulosic_Isobutanol_Coculture.yaml \u2192 /private/tmp/communitymech-causal-batch91/docs/communities/Trichoderma_Ecoli_Cellulosic_Isobutanol_Coculture.html\n \u2713 Trichoderma_Lactate_Platform.yaml \u2192 /private/tmp/communitymech-causal-batch91/docs/communities/Trichoderma_Lactate_Platform.html\n \u2713 Trichoderma_Streptomyces_Filamentous_Cellulose_Coculture.yaml \u2192 /private/tmp/communitymech-causal-batch91/docs/communities/Trichoderma_Streptomyces_Filamentous_Cellulose_Coculture.html\n \u2713 Trichodesmium_Alteromonas_Marine_Consortium.yaml \u2192 /private/tmp/communitymech-causal-batch91/docs/communities/Trichodesmium_Alteromonas_Marine_Consortium.html\n \u2713 Tropidoatractus_Magnetotacticus_Tripartite_Syntrophy.yaml \u2192 /private/tmp/communitymech-causal-batch91/docs/communities/Tropidoatractus_Magnetotacticus_Tripartite_Syntrophy.html\n \u2713 Urine_Nitrification_SynCom.yaml \u2192 /private/tmp/communitymech-causal-batch91/docs/communities/Urine_Nitrification_SynCom.html\n \u2713 Variovorax_Cryptococcus_Vitamin_Mutualism_Microcosm.yaml \u2192 /private/tmp/communitymech-causal-batch91/docs/communities/Variovorax_Cryptococcus_Vitamin_Mutualism_Microcosm.html\n \u2713 Viili_Fungus_Bacterium_EPS_SynCom.yaml \u2192 /private/tmp/communitymech-causal-batch91/docs/communities/Viili_Fungus_Bacterium_EPS_SynCom.html\n \u2713 Waste_Sludge_Electrofermentation_Biofilm_Suspension_Community.yaml \u2192 /private/tmp/communitymech-causal-batch91/docs/communities/Waste_Sludge_Electrofermentation_Biofilm_Suspension_Community.html\n \u2713 Watermelon_Rhizosphere_Fusarium_SynCom8.yaml \u2192 /private/tmp/communitymech-causal-batch91/docs/communities/Watermelon_Rhizosphere_Fusarium_SynCom8.html\n \u2713 Wetland_Oxygen_Sulfate_GHG_Microcosm_Community.yaml \u2192 /private/tmp/communitymech-causal-batch91/docs/communities/Wetland_Oxygen_Sulfate_GHG_Microcosm_Community.html\n \u2713 Wheat_Consortium_C1.yaml \u2192 /private/tmp/communitymech-causal-batch91/docs/communities/Wheat_Consortium_C1.html\n \u2713 Wheat_Consortium_C6.yaml \u2192 /private/tmp/communitymech-causal-batch91/docs/communities/Wheat_Consortium_C6.html\n \u2713 Wheat_CrownRot_SixStrain_CrossKingdom_SMC.yaml \u2192 /private/tmp/communitymech-causal-batch91/docs/communities/Wheat_CrownRot_SixStrain_CrossKingdom_SMC.html\n \u2713 Wheat_CrownRot_TB_CrossKingdom_SynCom.yaml \u2192 /private/tmp/communitymech-causal-batch91/docs/communities/Wheat_CrownRot_TB_CrossKingdom_SynCom.html\n \u2713 Wheat_DT_Rhizosphere_SynCom.yaml \u2192 /private/tmp/communitymech-causal-batch91/docs/communities/Wheat_DT_Rhizosphere_SynCom.html\n \u2713 Wheat_Straw_Biogas_Pretreatment_SynCom.yaml \u2192 /private/tmp/communitymech-causal-batch91/docs/communities/Wheat_Straw_Biogas_Pretreatment_SynCom.html\n \u2713 Wheat_SynCom_SASW01_Drought_Inoculant.yaml \u2192 /private/tmp/communitymech-causal-batch91/docs/communities/Wheat_SynCom_SASW01_Drought_Inoculant.html\n \u2713 Wine_Yeast_FiveSpecies_Strain_Substitution_Consortium.yaml \u2192 /private/tmp/communitymech-causal-batch91/docs/communities/Wine_Yeast_FiveSpecies_Strain_Substitution_Consortium.html\n \u2713 Wine_Yeast_ThreeSpecies_Contact_Consortium.yaml \u2192 /private/tmp/communitymech-causal-batch91/docs/communities/Wine_Yeast_ThreeSpecies_Contact_Consortium.html\n \u2713 Wolffia_Mankai_Endosphere_Cobamide_Guild.yaml \u2192 /private/tmp/communitymech-causal-batch91/docs/communities/Wolffia_Mankai_Endosphere_Cobamide_Guild.html\n \u2713 Wollastonite_Ramichloridium_Talaromyces_Fungal_Consortium.yaml \u2192 /private/tmp/communitymech-causal-batch91/docs/communities/Wollastonite_Ramichloridium_Talaromyces_Fungal_Consortium.html\n \u2713 Yarrowia_lipolytica_Division_of_Labor_Lipid_Consortium.yaml \u2192 /private/tmp/communitymech-causal-batch91/docs/communities/Yarrowia_lipolytica_Division_of_Labor_Lipid_Consortium.html\n \u2713 Yogurt_TwoSpecies_Starter_Culture.yaml \u2192 /private/tmp/communitymech-causal-batch91/docs/communities/Yogurt_TwoSpecies_Starter_Culture.html\n \u2713 Zymomonas_Ecoli_Exometabolomics_Obligate_Mutualism.yaml \u2192 /private/tmp/communitymech-causal-batch91/docs/communities/Zymomonas_Ecoli_Exometabolomics_Obligate_Mutualism.html\n \u2713 hCom2_Complex_Gut_Microbiome.yaml \u2192 /private/tmp/communitymech-causal-batch91/docs/communities/hCom2_Complex_Gut_Microbiome.html\n \u2713 mCAFEs_Brachypodium_RCC.yaml \u2192 /private/tmp/communitymech-causal-batch91/docs/communities/mCAFEs_Brachypodium_RCC.html\n\n\u2705 Rendered 456 communities to /private/tmp/communitymech-causal-batch91/docs/communities\n \u2713 Generated browser at /private/tmp/communitymech-causal-batch91/docs/browser.html\n \u2713 Generated landing at /private/tmp/communitymech-causal-batch91/docs/index.html\n"
+ },
+ {
+ "check": "connectivity-survey",
+ "command": [
+ "/Users/marcin/.cache/uv/archive-v0/l58VlyFvdmnkl0CcAx5Gk/bin/python3",
+ "-c",
+ "import json,pathlib,runpy\nfn=runpy.run_path('tests/test_community_level_connectivity_credit.py')['_survey']\nresult={}\nfor name,root in [('baseline',pathlib.Path('/private/tmp/communitymech-causal-batch90')),('current',pathlib.Path.cwd())]:\n paths=sorted(p for r in ['kb/communities','data/isolates'] for p in (root/r).rglob('*.yaml'))\n assert len(paths)==460\n fn.__globals__['record_files']=lambda:paths\n result[name]=fn()\nprint(json.dumps(result))\n"
+ ],
+ "exit_code": 0,
+ "expected_exit_codes": [
+ 0
+ ],
+ "log": "/private/tmp/communitymech-batch91/connectivity-survey.log",
+ "log_sha256": "0a3e2264d8517443edbaf49c24795268ac88303e6a1ac2a60b435487f48e5c07",
+ "output_tail": "{\"baseline\": {\"records\": 460, \"with_community_level\": 396, \"mixed\": 126, \"community_level_only\": 270, \"taxa\": 1523, \"credited_solely_by_the_rule\": 1249}, \"current\": {\"records\": 460, \"with_community_level\": 396, \"mixed\": 126, \"community_level_only\": 270, \"taxa\": 1523, \"credited_solely_by_the_rule\": 1249}}\n"
+ },
+ {
+ "check": "inventory",
+ "command": [
+ "/Users/marcin/.cache/uv/archive-v0/l58VlyFvdmnkl0CcAx5Gk/bin/python3",
+ "reports/causal_graph_review/build_inventory.py"
+ ],
+ "exit_code": 0,
+ "expected_exit_codes": [
+ 0
+ ],
+ "log": "/private/tmp/communitymech-batch91/v2-inventory.log",
+ "log_sha256": "beb676def27914d03e3c57f8cd243729b37ac50f1c39d0da197815fea5122264",
+ "output_tail": "{\n \"scope\": \"Every YAML under kb/communities and data/isolates; filesystem discovery includes hidden/ignored files.\",\n \"semantic_review_rule\": \"Structural checks and readiness scores do not establish causal support. Completed reviews must match the current record SHA-256, cover every node once with a rationale, and reproduce the current edge list.\",\n \"records\": 460,\n \"nodes\": 1420,\n \"edges\": 584,\n \"records_without_nodes\": 8,\n \"records_without_edges\": 173,\n \"review_status_counts\": {\n \"needs_research\": 48,\n \"pending\": 132,\n \"reviewed\": 280\n },\n \"structural_defects\": []\n}\n"
+ },
+ {
+ "check": "regressions",
+ "command": [
+ "/Users/marcin/.cache/uv/archive-v0/l58VlyFvdmnkl0CcAx5Gk/bin/python3",
+ "-m",
+ "pytest",
+ "-q",
+ "tests/test_causal_review_batch10.py",
+ "tests/test_causal_review_batch11.py",
+ "tests/test_causal_review_batch12.py",
+ "tests/test_causal_review_batch13.py",
+ "tests/test_causal_review_batch14.py",
+ "tests/test_causal_review_batch15.py",
+ "tests/test_causal_review_batch16.py",
+ "tests/test_causal_review_batch17.py",
+ "tests/test_causal_review_batch18.py",
+ "tests/test_causal_review_batch19.py",
+ "tests/test_causal_review_batch20.py",
+ "tests/test_causal_review_batch21.py",
+ "tests/test_causal_review_batch22.py",
+ "tests/test_causal_review_batch23.py",
+ "tests/test_causal_review_batch24.py",
+ "tests/test_causal_review_batch25.py",
+ "tests/test_causal_review_batch27.py",
+ "tests/test_causal_review_batch28.py",
+ "tests/test_causal_review_batch29.py",
+ "tests/test_causal_review_batch30.py",
+ "tests/test_causal_review_batch31.py",
+ "tests/test_causal_review_batch32.py",
+ "tests/test_causal_review_batch33.py",
+ "tests/test_causal_review_batch34.py",
+ "tests/test_causal_review_batch35.py",
+ "tests/test_causal_review_batch36.py",
+ "tests/test_causal_review_batch37.py",
+ "tests/test_causal_review_batch38.py",
+ "tests/test_causal_review_batch39.py",
+ "tests/test_causal_review_batch40.py",
+ "tests/test_causal_review_batch41.py",
+ "tests/test_causal_review_batch42.py",
+ "tests/test_causal_review_batch43.py",
+ "tests/test_causal_review_batch44.py",
+ "tests/test_causal_review_batch45.py",
+ "tests/test_causal_review_batch46.py",
+ "tests/test_causal_review_batch47.py",
+ "tests/test_causal_review_batch48.py",
+ "tests/test_causal_review_batch49.py",
+ "tests/test_causal_review_batch5.py",
+ "tests/test_causal_review_batch50.py",
+ "tests/test_causal_review_batch51.py",
+ "tests/test_causal_review_batch52.py",
+ "tests/test_causal_review_batch53.py",
+ "tests/test_causal_review_batch54.py",
+ "tests/test_causal_review_batch55.py",
+ "tests/test_causal_review_batch56.py",
+ "tests/test_causal_review_batch57.py",
+ "tests/test_causal_review_batch58.py",
+ "tests/test_causal_review_batch59.py",
+ "tests/test_causal_review_batch6.py",
+ "tests/test_causal_review_batch60.py",
+ "tests/test_causal_review_batch61.py",
+ "tests/test_causal_review_batch62.py",
+ "tests/test_causal_review_batch63.py",
+ "tests/test_causal_review_batch64.py",
+ "tests/test_causal_review_batch65.py",
+ "tests/test_causal_review_batch66.py",
+ "tests/test_causal_review_batch67.py",
+ "tests/test_causal_review_batch68.py",
+ "tests/test_causal_review_batch69.py",
+ "tests/test_causal_review_batch7.py",
+ "tests/test_causal_review_batch70.py",
+ "tests/test_causal_review_batch71.py",
+ "tests/test_causal_review_batch72.py",
+ "tests/test_causal_review_batch73.py",
+ "tests/test_causal_review_batch74.py",
+ "tests/test_causal_review_batch75.py",
+ "tests/test_causal_review_batch76.py",
+ "tests/test_causal_review_batch77.py",
+ "tests/test_causal_review_batch78.py",
+ "tests/test_causal_review_batch79.py",
+ "tests/test_causal_review_batch8.py",
+ "tests/test_causal_review_batch80.py",
+ "tests/test_causal_review_batch81.py",
+ "tests/test_causal_review_batch82.py",
+ "tests/test_causal_review_batch83.py",
+ "tests/test_causal_review_batch84.py",
+ "tests/test_causal_review_batch85.py",
+ "tests/test_causal_review_batch86.py",
+ "tests/test_causal_review_batch87.py",
+ "tests/test_causal_review_batch88.py",
+ "tests/test_causal_review_batch89.py",
+ "tests/test_causal_review_batch9.py",
+ "tests/test_causal_review_batch90.py",
+ "tests/test_causal_review_batch91.py",
+ "tests/test_site_audit_fixes.py",
+ "tests/test_causal_review_inventory.py",
+ "tests/test_rank_causal_graph_readiness.py",
+ "tests/test_network_auditor.py",
+ "tests/test_participating_taxa.py",
+ "tests/test_causal_descriptions_are_published.py",
+ "tests/test_published_pages_name_real_records.py",
+ "tests/test_reference_validator_actually_validates.py",
+ "tests/test_snippet_audit_artefact_classes.py",
+ "tests/test_reference_error_annotation.py",
+ "tests/test_community_level_connectivity_credit.py",
+ "tests/test_no_paywalled_text_in_repo.py"
+ ],
+ "exit_code": 0,
+ "expected_exit_codes": [
+ 0
+ ],
+ "log": "/private/tmp/communitymech-batch91/v2-regressions.log",
+ "log_sha256": "105ebc2fcd9e58e0d04957fa1f106904f454c3a1d1cbe59382b39981516f3ebc",
+ "output_tail": "........................................................................ [ 8%]\n........................................................................ [ 17%]\n........................................................................ [ 25%]\n........................................................................ [ 34%]\n........................................................................ [ 42%]\n........................................................................ [ 51%]\n........................................................................ [ 59%]\n........................................................................ [ 68%]\n........................................................................ [ 77%]\n........................................................................ [ 85%]\n........................................................................ [ 94%]\n................................................. [100%]\n841 passed in 329.80s (0:05:29)\n"
+ },
+ {
+ "check": "black",
+ "command": [
+ "/Users/marcin/.cache/uv/archive-v0/3Q_kifQtLB624D5bBWGIf/bin/black",
+ "--check",
+ "reports/causal_graph_review/build_inventory.py",
+ "tests/test_causal_review_inventory.py",
+ "tests/test_causal_review_batch44.py",
+ "tests/test_causal_review_batch75.py",
+ "tests/test_causal_review_batch86.py",
+ "tests/test_causal_review_batch91.py"
+ ],
+ "exit_code": 0,
+ "expected_exit_codes": [
+ 0
+ ],
+ "log": "/private/tmp/communitymech-batch91/v2-black.log",
+ "log_sha256": "7657c5ec367da2c8d4deead1b5f1f8eca9c1b89120ad13df7f855ca4005696b6",
+ "output_tail": "All done! \u2728 \ud83c\udf70 \u2728\n6 files would be left unchanged.\n"
+ },
+ {
+ "check": "ruff",
+ "command": [
+ "/Users/marcin/.cache/uv/archive-v0/wCcxEYRM4HeHgwYPZemHX/bin/ruff",
+ "check",
+ "reports/causal_graph_review/build_inventory.py",
+ "tests/test_causal_review_inventory.py",
+ "tests/test_causal_review_batch44.py",
+ "tests/test_causal_review_batch75.py",
+ "tests/test_causal_review_batch86.py",
+ "tests/test_causal_review_batch91.py"
+ ],
+ "exit_code": 0,
+ "expected_exit_codes": [
+ 0
+ ],
+ "log": "/private/tmp/communitymech-batch91/v2-ruff.log",
+ "log_sha256": "82b3e6a6c090a57601d22943bd23fca9218d1031dbe5a7b754092f9a156b4f18",
+ "output_tail": "All checks passed!\n"
+ },
+ {
+ "check": "diff-check",
+ "command": [
+ "git",
+ "diff",
+ "--check"
+ ],
+ "exit_code": 0,
+ "expected_exit_codes": [
+ 0
+ ],
+ "log": "/private/tmp/communitymech-batch91/v2-diff-check.log",
+ "log_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
+ "output_tail": ""
+ },
+ {
+ "check": "primary-graph-proof",
+ "command": [
+ "in-process normalized per-evidence source checks in finalize.py"
+ ],
+ "exit_code": 0,
+ "expected_exit_codes": [
+ 0
+ ],
+ "log": "/private/tmp/communitymech-batch91/primary-graph-proof.log",
+ "log_sha256": "840d81960d51c5ecec80694f4aa8f6678f91e520d3ea83e32b5b7acd8997d8a1",
+ "output_tail": "{\n \"graph_quotations\": 23,\n \"discussion_quotations\": 2,\n \"fresh_primary_matches\": 25,\n \"cached_only_matches\": 0,\n \"retained_nodes\": 14,\n \"removed_nodes\": 0,\n \"retained_arrows\": 7,\n \"removed_arrows\": 0,\n \"arrow_wording_and_endpoints_unchanged\": true,\n \"new_biological_causal_claims\": 0,\n \"primary_main_texts_read\": 2,\n \"other_primary_abstracts_read\": 4,\n \"cache_changes\": 0\n}\n"
+ },
+ {
+ "check": "focused-final",
+ "command": [
+ "/Users/marcin/.cache/uv/archive-v0/l58VlyFvdmnkl0CcAx5Gk/bin/python3",
+ "-m",
+ "pytest",
+ "-q",
+ "tests/test_causal_review_batch91.py"
+ ],
+ "exit_code": 0,
+ "expected_exit_codes": [
+ 0
+ ],
+ "log": "/private/tmp/communitymech-batch91/focused-final.log",
+ "log_sha256": "a61cbc6f35a106d592e5dc043c33574947bb035dde3d467f88a923b6920dd855",
+ "output_tail": "........ [100%]\n8 passed in 2.71s\n"
+ },
+ {
+ "check": "audit-snippets-all",
+ "command": [
+ "just",
+ "audit-snippets"
+ ],
+ "exit_code": 0,
+ "expected_exit_codes": [
+ 0
+ ],
+ "log": "/private/tmp/communitymech-batch91/audit-snippets-all.log",
+ "log_sha256": "f1c84cfc158516b82e720ac1c3100170b0f675e4c52d4733484862350801c4bf",
+ "output_tail": "# 8930 evidence snippets scanned across 460 files\n MATCH 8795\n RENDERING 20\n ASSEMBLED 1\n WEAK 0\n MISMATCH 38\n NOCONTENT 76\n\n# Files with MISMATCH/WEAK (content present but snippet absent) \u2014 fabrication suspects\n 19 (19 hard) kb/communities/DCPP_DBS4_DCP4_DCP11d_Degradation_SynCom.yaml\n 15 (15 hard) kb/communities/Fucoidan_Seven_Degrader_Combinatorial_SynCom.yaml\n 3 (3 hard) kb/communities/Coscinodiscus_Synthetic_Community.yaml\n 1 (1 hard) kb/communities/Altered_Schaedler_Flora_Gnotobiotic_Mouse_Community.yaml\nuv run python scripts/evidence_snippet_audit.py \n"
+ }
+ ],
+ "limitations": [
+ "Fresh both-root baseline before papers:460records921caches1420nodes584arrows56warnings0structural. Re-review of14existingnodes7arrows, all retained without endpoint or wording changes. Three records edited; two unchanged. Review-status counts remain280reviewed132pending48needs_research; re-review does not inflate coverage.",
+ "Six target primary sources: two full main bodies with embedded tables/captions (UFMP and Crystal Geyser), four abstracts (two MFC papers, digestion, exact pleuromutilin). No original figure pixels, raw data or separate full supplements independently audited. Pleuromutilin historical DOCX text reread only for TablesS1/S2, S3 scope/method notes and boundary rows; not all metabolite rows or a fresh main text.",
+ "Accidental PMID33125214 lookup is an unrelated vanadium paper, explicitly excluded from target evidence. Primary/cache snippet matches are not scientific entailment. Main-text access limits are not evidence that controls were absent.",
+ "MFC and Crystal Geyser already use the product-removal criterion and are unchanged. UFMP retains the hypothesized producer-consumer model as CROSS_FEEDING, not demonstrated flux. Digestion and pleuromutilin remain untyped for unresolved feedback or outcome scope, not lack of obligacy. No categorical SYNTROPHY restoration based only on author vocabulary.",
+ "Pleuromutilin discussion now points to its actual description rather than a nonexistent engineering_design field. The historical S3 note has internally conflicting fold-change/list-scope wording; no numerical reconciliation or new pathway is asserted. Research1715 and metadata183/1327/1366/1716 remain open.",
+ "No taxonomy, canonical participants, network rules, cache content, node additions/removals or arrow changes. No new antibiotic-selection details, strain optimization, genetic designs or experimental procedures. No Edison dry run or paid submission.",
+ "Earlier decisions and external history artifacts remain append-only. Explicit supersedes_review links bind each prior reviewed record hash to the next original hash; inventory must reject unlinked duplicates, forks and cycles and still validate current graph coverage.",
+ "Source-based self-adversarial review is not independent approval, generated-model loader certification or corpus completion. Loader1703 remains unresolved. New repair issue1744 closes only after protected-main merge.",
+ "Exact HTML-description parser and repeat-render checks, not browser screenshots. Post-commit docs-current is separate."
+ ],
+ "superseded_checks": [
+ {
+ "check": "inventory",
+ "command": [
+ "/Users/marcin/.cache/uv/archive-v0/l58VlyFvdmnkl0CcAx5Gk/bin/python3",
+ "reports/causal_graph_review/build_inventory.py"
+ ],
+ "exit_code": 0,
+ "expected_exit_codes": [
+ 0
+ ],
+ "log": "/private/tmp/communitymech-batch91/inventory.log",
+ "log_sha256": "beb676def27914d03e3c57f8cd243729b37ac50f1c39d0da197815fea5122264",
+ "output_tail": "{\n \"scope\": \"Every YAML under kb/communities and data/isolates; filesystem discovery includes hidden/ignored files.\",\n \"semantic_review_rule\": \"Structural checks and readiness scores do not establish causal support. Completed reviews must match the current record SHA-256, cover every node once with a rationale, and reproduce the current edge list.\",\n \"records\": 460,\n \"nodes\": 1420,\n \"edges\": 584,\n \"records_without_nodes\": 8,\n \"records_without_edges\": 173,\n \"review_status_counts\": {\n \"needs_research\": 48,\n \"pending\": 132,\n \"reviewed\": 280\n },\n \"structural_defects\": []\n}\n"
+ },
+ {
+ "check": "regressions",
+ "command": [
+ "/Users/marcin/.cache/uv/archive-v0/l58VlyFvdmnkl0CcAx5Gk/bin/python3",
+ "-m",
+ "pytest",
+ "-q",
+ "tests/test_causal_review_batch10.py",
+ "tests/test_causal_review_batch11.py",
+ "tests/test_causal_review_batch12.py",
+ "tests/test_causal_review_batch13.py",
+ "tests/test_causal_review_batch14.py",
+ "tests/test_causal_review_batch15.py",
+ "tests/test_causal_review_batch16.py",
+ "tests/test_causal_review_batch17.py",
+ "tests/test_causal_review_batch18.py",
+ "tests/test_causal_review_batch19.py",
+ "tests/test_causal_review_batch20.py",
+ "tests/test_causal_review_batch21.py",
+ "tests/test_causal_review_batch22.py",
+ "tests/test_causal_review_batch23.py",
+ "tests/test_causal_review_batch24.py",
+ "tests/test_causal_review_batch25.py",
+ "tests/test_causal_review_batch27.py",
+ "tests/test_causal_review_batch28.py",
+ "tests/test_causal_review_batch29.py",
+ "tests/test_causal_review_batch30.py",
+ "tests/test_causal_review_batch31.py",
+ "tests/test_causal_review_batch32.py",
+ "tests/test_causal_review_batch33.py",
+ "tests/test_causal_review_batch34.py",
+ "tests/test_causal_review_batch35.py",
+ "tests/test_causal_review_batch36.py",
+ "tests/test_causal_review_batch37.py",
+ "tests/test_causal_review_batch38.py",
+ "tests/test_causal_review_batch39.py",
+ "tests/test_causal_review_batch40.py",
+ "tests/test_causal_review_batch41.py",
+ "tests/test_causal_review_batch42.py",
+ "tests/test_causal_review_batch43.py",
+ "tests/test_causal_review_batch44.py",
+ "tests/test_causal_review_batch45.py",
+ "tests/test_causal_review_batch46.py",
+ "tests/test_causal_review_batch47.py",
+ "tests/test_causal_review_batch48.py",
+ "tests/test_causal_review_batch49.py",
+ "tests/test_causal_review_batch5.py",
+ "tests/test_causal_review_batch50.py",
+ "tests/test_causal_review_batch51.py",
+ "tests/test_causal_review_batch52.py",
+ "tests/test_causal_review_batch53.py",
+ "tests/test_causal_review_batch54.py",
+ "tests/test_causal_review_batch55.py",
+ "tests/test_causal_review_batch56.py",
+ "tests/test_causal_review_batch57.py",
+ "tests/test_causal_review_batch58.py",
+ "tests/test_causal_review_batch59.py",
+ "tests/test_causal_review_batch6.py",
+ "tests/test_causal_review_batch60.py",
+ "tests/test_causal_review_batch61.py",
+ "tests/test_causal_review_batch62.py",
+ "tests/test_causal_review_batch63.py",
+ "tests/test_causal_review_batch64.py",
+ "tests/test_causal_review_batch65.py",
+ "tests/test_causal_review_batch66.py",
+ "tests/test_causal_review_batch67.py",
+ "tests/test_causal_review_batch68.py",
+ "tests/test_causal_review_batch69.py",
+ "tests/test_causal_review_batch7.py",
+ "tests/test_causal_review_batch70.py",
+ "tests/test_causal_review_batch71.py",
+ "tests/test_causal_review_batch72.py",
+ "tests/test_causal_review_batch73.py",
+ "tests/test_causal_review_batch74.py",
+ "tests/test_causal_review_batch75.py",
+ "tests/test_causal_review_batch76.py",
+ "tests/test_causal_review_batch77.py",
+ "tests/test_causal_review_batch78.py",
+ "tests/test_causal_review_batch79.py",
+ "tests/test_causal_review_batch8.py",
+ "tests/test_causal_review_batch80.py",
+ "tests/test_causal_review_batch81.py",
+ "tests/test_causal_review_batch82.py",
+ "tests/test_causal_review_batch83.py",
+ "tests/test_causal_review_batch84.py",
+ "tests/test_causal_review_batch85.py",
+ "tests/test_causal_review_batch86.py",
+ "tests/test_causal_review_batch87.py",
+ "tests/test_causal_review_batch88.py",
+ "tests/test_causal_review_batch89.py",
+ "tests/test_causal_review_batch9.py",
+ "tests/test_causal_review_batch90.py",
+ "tests/test_causal_review_batch91.py",
+ "tests/test_site_audit_fixes.py",
+ "tests/test_causal_review_inventory.py",
+ "tests/test_rank_causal_graph_readiness.py",
+ "tests/test_network_auditor.py",
+ "tests/test_participating_taxa.py",
+ "tests/test_causal_descriptions_are_published.py",
+ "tests/test_published_pages_name_real_records.py",
+ "tests/test_reference_validator_actually_validates.py",
+ "tests/test_snippet_audit_artefact_classes.py",
+ "tests/test_reference_error_annotation.py",
+ "tests/test_community_level_connectivity_credit.py",
+ "tests/test_no_paywalled_text_in_repo.py"
+ ],
+ "exit_code": 0,
+ "expected_exit_codes": [
+ 0
+ ],
+ "log": "/private/tmp/communitymech-batch91/regressions.log",
+ "log_sha256": "feae6c7f69aed8bd43970af498ff2f350c68c688ebf5da329955ab7088aa92d5",
+ "output_tail": "........................................................................ [ 8%]\n........................................................................ [ 17%]\n........................................................................ [ 25%]\n........................................................................ [ 34%]\n........................................................................ [ 42%]\n........................................................................ [ 51%]\n........................................................................ [ 59%]\n........................................................................ [ 68%]\n........................................................................ [ 77%]\n........................................................................ [ 85%]\n........................................................................ [ 94%]\n................................................. [100%]\n841 passed in 290.21s (0:04:50)\n"
+ },
+ {
+ "check": "black",
+ "command": [
+ "/Users/marcin/.cache/uv/archive-v0/3Q_kifQtLB624D5bBWGIf/bin/black",
+ "--check",
+ "reports/causal_graph_review/build_inventory.py",
+ "tests/test_causal_review_inventory.py",
+ "tests/test_causal_review_batch44.py",
+ "tests/test_causal_review_batch75.py",
+ "tests/test_causal_review_batch86.py",
+ "tests/test_causal_review_batch91.py"
+ ],
+ "exit_code": 0,
+ "expected_exit_codes": [
+ 0
+ ],
+ "log": "/private/tmp/communitymech-batch91/black.log",
+ "log_sha256": "7657c5ec367da2c8d4deead1b5f1f8eca9c1b89120ad13df7f855ca4005696b6",
+ "output_tail": "All done! \u2728 \ud83c\udf70 \u2728\n6 files would be left unchanged.\n"
+ },
+ {
+ "check": "ruff",
+ "command": [
+ "/Users/marcin/.cache/uv/archive-v0/wCcxEYRM4HeHgwYPZemHX/bin/ruff",
+ "check",
+ "reports/causal_graph_review/build_inventory.py",
+ "tests/test_causal_review_inventory.py",
+ "tests/test_causal_review_batch44.py",
+ "tests/test_causal_review_batch75.py",
+ "tests/test_causal_review_batch86.py",
+ "tests/test_causal_review_batch91.py"
+ ],
+ "exit_code": 1,
+ "expected_exit_codes": [
+ 0
+ ],
+ "log": "/private/tmp/communitymech-batch91/ruff.log",
+ "log_sha256": "dd0f860e98fea4a76d9bf065ae8e7d6f8c8fcd1be90d8eb61aa58e7d53653596",
+ "output_tail": "E501 Line too long (122 > 100)\n --> reports/causal_graph_review/build_inventory.py:175:101\n |\n173 | ]\n174 | summary = {\n175 | \"scope\": \"Every YAML under kb/communities and data/isolates; filesystem discovery includes hidden/ignored files.\",\n | ^^^^^^^^^^^^^^^^^^^^^^\n176 | \"semantic_review_rule\": \"Structural checks and readiness scores do not establish causal support. Completed reviews must match\u2026\n177 | \"records\": len(rows),\n |\n\nE501 Line too long (240 > 100)\n --> reports/causal_graph_review/build_inventory.py:176:101\n |\n174 | \u2026\n175 | \u2026des hidden/ignored files.\",\n176 | \u2026 support. Completed reviews must match the current record SHA-256, cover every node once with a rationale, and reproduce the current edge list.\",\n | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n177 | \u2026\n178 | \u2026\n |\n\nC408 Unnecessary `dict()` call (rewrite as a literal)\n --> tests/test_causal_review_batch44.py:100:52\n |\n 98 | current = next(r for r in followup[\"records\"] if r[\"path\"] == row[\"path\"])\n 99 | assert current[\"original_sha256\"] == expected\n100 | assert current[\"supersedes_review\"] == dict(\n | ____________________________________________________^\n101 | | review_file=str(LEDGER.relative_to(ROOT)), record_sha256=expected\n102 | | )\n | |_____________^\n103 | expected = current[\"record_sha256\"]\n104 | assert expected == hashlib.sha256((ROOT / row[\"path\"]).read_bytes()).hexdigest()\n |\nhelp: Rewrite as a literal\n\nC408 Unnecessary `dict()` call (rewrite as a literal)\n --> tests/test_causal_review_batch75.py:129:52\n |\n127 | current = next(r for r in followup[\"records\"] if r[\"path\"] == row[\"path\"])\n128 | assert current[\"original_sha256\"] == expected\n129 | assert current[\"supersedes_review\"] == dict(\n | ____________________________________________________^\n130 | | review_file=str(LEDGER.relative_to(ROOT)), record_sha256=expected\n131 | | )\n | |_____________^\n132 | expected = current[\"record_sha256\"]\n133 | assert hashlib.sha256((ROOT / row[\"path\"]).read_bytes()).hexdigest() == expected\n |\nhelp: Rewrite as a literal\n\nC408 Unnecessary `dict()` call (rewrite as a literal)\n --> tests/test_causal_review_batch86.py:156:52\n |\n154 | current = next(r for r in followup[\"records\"] if r[\"path\"] == row[\"path\"])\n155 | assert current[\"original_sha256\"] == expected\n156 | assert current[\"supersedes_review\"] == dict(\n | ____________________________________________________^\n157 | | review_file=str(LEDGER.relative_to(ROOT)), record_sha256=expected\n158 | | )\n | |_____________^\n159 | expected = current[\"record_sha256\"]\n160 | assert hashlib.sha256((ROOT / row[\"path\"]).read_bytes()).hexdigest() == expected\n |\nhelp: Rewrite as a literal\n\nC408 Unnecessary `dict()` call (rewrite as a literal)\n --> tests/test_causal_review_inventory.py:121:13\n |\n120 | def review_chain():\n121 | first = dict(\n | _____________^\n122 | | path=\"record.yaml\", id=\"CommunityMech:1\", review_file=\"first.yaml\", record_sha256=\"one\"\n123 | | )\n | |_____^\n124 | second = dict(\n125 | path=first[\"path\"],\n |\nhelp: Rewrite as a literal\n\nC408 Unnecessary `dict()` call (rewrite as a literal)\n --> tests/test_causal_review_inventory.py:124:14\n |\n122 | path=\"record.yaml\", id=\"CommunityMech:1\", review_file=\"first.yaml\", record_sha256=\"one\"\n123 | )\n124 | second = dict(\n | ______________^\n125 | | path=first[\"path\"],\n126 | | id=first[\"id\"],\n127 | | review_file=\"second.yaml\",\n128 | | record_sha256=\"two\",\n129 | | original_sha256=\"one\",\n130 | | supersedes_review=dict(review_file=\"first.yaml\", record_sha256=\"one\"),\n131 | | )\n | |_____^\n132 | third = dict(\n133 | path=first[\"path\"],\n |\nhelp: Rewrite as a literal\n\nC408 Unnecessary `dict()` call (rewrite as a literal)\n --> tests/test_causal_review_inventory.py:130:27\n |\n128 | record_sha256=\"two\",\n129 | original_sha256=\"one\",\n130 | supersedes_review=dict(review_file=\"first.yaml\", record_sha256=\"one\"),\n | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n131 | )\n132 | third = dict(\n |\nhelp: Rewrite as a literal\n\nC408 Unnecessary `dict()` call (rewrite as a literal)\n --> tests/test_causal_review_inventory.py:132:13\n |\n130 | supersedes_review=dict(review_file=\"first.yaml\", record_sha256=\"one\"),\n131 | )\n132 | third = dict(\n | _____________^\n133 | | path=first[\"path\"],\n134 | | id=first[\"id\"],\n135 | | review_file=\"third.yaml\",\n136 | | record_sha256=\"three\",\n137 | | original_sha256=\"two\",\n138 | | supersedes_review=dict(review_file=\"second.yaml\", record_sha256=\"two\"),\n139 | | )\n | |_____^\n140 | return first, second, third\n |\nhelp: Rewrite as a literal\n\nC408 Unnecessary `dict()` call (rewrite as a literal)\n --> tests/test_causal_review_inventory.py:138:27\n |\n136 | record_sha256=\"three\",\n137 | original_sha256=\"two\",\n138 | supersedes_review=dict(review_file=\"second.yaml\", record_sha256=\"two\"),\n | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n139 | )\n140 | return first, second, third\n |\nhelp: Rewrite as a literal\n\nC408 Unnecessary `dict()` call (rewrite as a literal)\n --> tests/test_causal_review_inventory.py:197:38\n |\n195 | rows = [first, second, third]\n196 | else:\n197 | first[\"supersedes_review\"] = dict(review_file=\"second.yaml\", record_sha256=\"two\")\n | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n198 | first[\"original_sha256\"] = \"two\"\n199 | rows = [first, second]\n |\nhelp: Rewrite as a literal\n\nC408 Unnecessary `dict()` call (rewrite as a literal)\n --> tests/test_causal_review_inventory.py:214:27\n |\n212 | review_file=\"second.yaml\",\n213 | original_sha256=old[\"record_sha256\"],\n214 | supersedes_review=dict(review_file=old[\"review_file\"], record_sha256=old[\"record_sha256\"]),\n | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n215 | )\n216 | new[\"node_decisions\"].pop()\n |\nhelp: Rewrite as a literal\n\nFound 12 errors.\nNo fixes available (10 hidden fixes can be enabled with the `--unsafe-fixes` option).\n"
+ }
+ ],
+ "validation_refresh": {
+ "reason": "841 tests passed; Ruff found ten dictionary-constructor style violations and two existing long strings in the newly scoped inventory script. Style-only fixes, no biological input changes. Inventory, full regressions and style gates refreshed; original output retained.",
+ "original_report": "/private/tmp/communitymech-batch91/before-lint-fix/validation.json",
+ "original_report_sha256": "07e4a1fbde1d84fbcbbfff21b0724d5ea41e664b720410b44fa37177cd2b6c76",
+ "archived_inputs": {
+ "/private/tmp/communitymech-batch91/before-lint-fix/reports/causal_graph_review/build_inventory.py": "5759cacb876773d23b2b2d34ba3974de2853d0d2c47b6e6ada19eabe711d0926",
+ "/private/tmp/communitymech-batch91/before-lint-fix/tests/test_causal_review_inventory.py": "0c5d7faad1b9b5cab588b4306e8852dd55d95b613eda798d9b8f9bcdf62fb8bb",
+ "/private/tmp/communitymech-batch91/before-lint-fix/tests/test_causal_review_batch44.py": "4b0a2566405cd6572a7ac80587c5abe958d9cec6a172d2a869d353c50a521502",
+ "/private/tmp/communitymech-batch91/before-lint-fix/tests/test_causal_review_batch75.py": "9eadbbab11fe53ffe76de3fbe2e1929b99e3fdb05d556a177658864a5e671d61",
+ "/private/tmp/communitymech-batch91/before-lint-fix/tests/test_causal_review_batch86.py": "de694ae73aec8cc6f32b21653378e5f63267f49cc8ae6eb52d7607606611260a",
+ "/private/tmp/communitymech-batch91/before-lint-fix/tests/test_causal_review_batch91.py": "ebe9c06685e16b5fd896f511b0cd8a3d12a4affdb0d0d67e5b28087d7916459f",
+ "/private/tmp/communitymech-batch91/before-lint-fix/reports/causal_graph_review/decisions/20261007-five-records-batch91.yaml": "55c2dafc3c10346c37f864ef5acc1fdadefd37967c51f21696eef562a0296bbe",
+ "/private/tmp/communitymech-batch91/before-lint-fix/reports/causal_graph_review/inventory.tsv": "ca34fa8001a6bfe9ce3f606e0594e11a1e3df579f5fff6fde4106f2f5dffc944",
+ "/private/tmp/communitymech-batch91/before-lint-fix/reports/causal_graph_review/summary.json": "b5bc36167531e52dd8d5ce46c40c35fba2840667bf72211a26c34c4b1626b5f0"
+ },
+ "new_log_prefix": "v2-"
+ },
+ "snippet_counts_by_record": {
+ "kb/communities/Clostridium_Cellulolyticum_Geobacter_Cellulose_MFC_Coculture.yaml": {
+ "MATCH": 28,
+ "RENDERING": 0,
+ "ASSEMBLED": 0,
+ "WEAK": 0,
+ "MISMATCH": 0,
+ "NOCONTENT": 0
+ },
+ "kb/communities/Crystal_Geyser_CO2_Aquifer_CPR_Lipid_Community.yaml": {
+ "MATCH": 13,
+ "RENDERING": 0,
+ "ASSEMBLED": 0,
+ "WEAK": 0,
+ "MISMATCH": 0,
+ "NOCONTENT": 0
+ },
+ "kb/communities/GLBRC_UFMP_Fermentation_Community.yaml": {
+ "MATCH": 28,
+ "RENDERING": 0,
+ "ASSEMBLED": 0,
+ "WEAK": 0,
+ "MISMATCH": 0,
+ "NOCONTENT": 0
+ },
+ "kb/communities/Multi_stage_Anaerobic_Digestion_SynCom_YSJ_and_SynCom_J.yaml": {
+ "MATCH": 10,
+ "RENDERING": 0,
+ "ASSEMBLED": 0,
+ "WEAK": 0,
+ "MISMATCH": 0,
+ "NOCONTENT": 0
+ },
+ "kb/communities/Pleuromutilin_Degrading_Artificial_Consortium_5_Strain.yaml": {
+ "MATCH": 9,
+ "RENDERING": 0,
+ "ASSEMBLED": 0,
+ "WEAK": 0,
+ "MISMATCH": 0,
+ "NOCONTENT": 0
+ }
+ },
+ "unchanged_raw_blocks": 78,
+ "unchanged_record_files": 457,
+ "unchanged_cache_files": 921,
+ "cache_changes": [],
+ "edison": {
+ "required_for_this_repair": false,
+ "required_for_unresolved_extensions": true,
+ "provider_submissions": 0,
+ "credits_spent": 0,
+ "dry_runs": [],
+ "prior_unanswered_scope": "Issue #1715 / batch86 remains pending; no new authorization or job."
+ },
+ "primary_artifacts": {
+ "src/communitymech/schema/communitymech.yaml": "99079e7712d0c6b5eef0f278822a6b04fdb9a3a55b446e1f73f0752e4e626d04",
+ "/private/tmp/communitymech-batch91/baseline.json": "e7737cf6659ab12c422c7cff17d554077255cbfa31f3193c2bd11d092439656e",
+ "/private/tmp/communitymech-batch91/created-issue.json": "af5d9e50879d2d81b6121e6bb467f3dfb43cbf19e58f00c549bbfc5aecb7f388",
+ "/private/tmp/communitymech-batch91/crystal-metadata.json": "be68721c63bbb8d73cf0d5064862bce198cd2f40db0007794b5410de41fcd105",
+ "/private/tmp/communitymech-batch91/crystal-primary.txt": "0187f4633ad24ee9c44d51abf0ec885b48ef2e7491e47e2d05dda0c0ed27fe35",
+ "/private/tmp/communitymech-batch91/crystal-primary.xml": "1a1adc25720a700480fd7ed2db7998e557e3f6e098915fe38b15eb2eaff05eaa",
+ "/private/tmp/communitymech-batch91/crystal-tables.txt": "a6190234e56963ed1e1e4b62832d31e71e6125311dfe5c946168696aa97f57dc",
+ "/private/tmp/communitymech-batch91/digestion-metadata.json": "6d8955e2079dc5c8058ddd70750adf4c2400cd9bf60793a5342fe09c666b8ce2",
+ "/private/tmp/communitymech-batch91/digestion-primary.txt": "6f60f5e4a765efa2d6fa1866d38e736c02f441d184174a4b862463f8573de054",
+ "/private/tmp/communitymech-batch91/issue-matches.json": "0ef821aa739d0b998ab0103eb0e0916ca24f2e0db71a5910fb8862d9a5d70b04",
+ "/private/tmp/communitymech-batch91/issues-precreate.json": "c62d4eb11be049b02d1738d1b7ead2bbdd7b6996ae1e02ca472be5b32b41add9",
+ "/private/tmp/communitymech-batch91/issues.json": "c62d4eb11be049b02d1738d1b7ead2bbdd7b6996ae1e02ca472be5b32b41add9",
+ "/private/tmp/communitymech-batch91/local-matches.txt": "15dcb7691d97dca1c9b053cdee009b017cd49792f5149fc571251ad99e3daec9",
+ "/private/tmp/communitymech-batch91/mfc-metadata.json": "d2bedb08b42f9227981a1f2f74f8bf63b5f149885e1e28ce7a8a27660bfe8ecb",
+ "/private/tmp/communitymech-batch91/mfc-primary.txt": "7702e4869e299758977455ff113d143458b1ec6afc39286d96eccaf2cf56b6cd",
+ "/private/tmp/communitymech-batch91/mfc-spatial-metadata.json": "8e08edf4e5ede7f942757ee17a6904b78dfb6e4ce986dc42303c89c66e06614a",
+ "/private/tmp/communitymech-batch91/mfc-spatial-primary.txt": "74c4a71ba485b7acfda6d0499d78638907ee63fdb86d13b922d274f9da3975b2",
+ "/private/tmp/communitymech-batch91/pleuromutilin-exact-metadata.json": "31186032c1fa4c474ab634e27b9a92414bad6df0a09f6dd1df9d6e3a8c666a10",
+ "/private/tmp/communitymech-batch91/pleuromutilin-exact-primary.txt": "9e03c24ff8f6bf5a898e2aa4ef0f3b56ab74e11eaa2bf2a68ede5a6816fc4d3c",
+ "/private/tmp/communitymech-batch91/pleuromutilin-metadata.json": "e69b7fd6038a048c3cf73dd3a4ddd31a607bbe501591e812a166ecef76f7b8f2",
+ "/private/tmp/communitymech-batch91/pleuromutilin-primary.txt": "7933557343c25d7e5b42283d1406d678e3b9e2b5d1fc310ecc2ecf2fb4d79fe0",
+ "/private/tmp/communitymech-batch91/primary-manifest-initial.json": "c2e56056bfbfdb6d8a6daf54a43eb9ae530d4e64fe58449be8a3d1ee524e11c7",
+ "/private/tmp/communitymech-batch91/primary-manifest.json": "b9a5153ab17ed0254f3ae39a4806c70237c6eb55105a2dd816c776e6e120629d",
+ "/private/tmp/communitymech-batch91/ufmp-metadata.json": "2f56f74f811b56ca091b2bf0fb13f13f20c429b53391caea32f0a4f56e4f669a",
+ "/private/tmp/communitymech-batch91/ufmp-primary.txt": "f595c8d181f546020b38d195b57b49e9f1f2a043ea594c570503023f8782ffd1",
+ "/private/tmp/communitymech-batch91/ufmp-primary.xml": "4380ba1a9bc478cee229e62d1a8865b06fd5a6d4bd9281d788dbc8d708ab7343",
+ "/private/tmp/communitymech-batch91/ufmp-tables.txt": "ef469ea4378211bba007cbf16af28ce34d675666326c64031141af5e1e8cd3f4",
+ "/private/tmp/communitymech-batch86/pleuromutilin-supplement-text.txt": "b0adcb59b59a61fea74de471dc5119ac9a44b54541165a8ad990503f64d356c7",
+ "reports/causal_graph_review/decisions/20261005-three-records-batch19.yaml": "2f4684d88aa8b70f6ed84c0726aadad8dfb5f1b31c8a2e93b5f682264da69490",
+ "references_cache/PMID_17695929.md": "0a6d3e9ad135d3fe881f76e15e22b3e279efa320996df6bb82d2b598a2f07c87",
+ "references_cache/PMID_18725730.md": "474fa53897b2d368427ee153d7dca517de6deb0a4282fda7c8c68d52e4b7b5d3",
+ "reports/causal_graph_review/decisions/20261006-three-records-batch27.yaml": "90e6a0ad3e095a1301744958f706782510d03bdf40852999837d12401019ded0",
+ "references_cache/PMID_32203118.txt": "5d873129a219c729435a36dfe6c9c59a29be4befe7dde10294a8db6025d452f3",
+ "references_cache/PMID_32203118.md": "ed47b1021b5307304a7ac65b99353942f4db7873cf2bf8cec3ccd52e573872b6",
+ "reports/causal_graph_review/decisions/20261006-three-records-batch44.yaml": "066c435d002774ad3950ddaeb4cc0d22f9cdff48c82e5cf8fbb431ccf1be9bcb",
+ "references_cache/PMID_37324413.md": "8acf781bd773c3159ec59504a0f719661bb71693482c0dd9e244e1abb6c3bc46",
+ "reports/causal_graph_review/decisions/20261007-four-records-batch75.yaml": "ab80d08a11b594625a0e0458b089ccab663f00def93cee6bd12c59e2b9f9d598",
+ "references_cache/PMID_41825563.md": "5fa9d1a4077dc6a15f4c93274e63f35e2b6831592c11f78c040012e146bb918b",
+ "reports/causal_graph_review/decisions/20261007-four-records-batch86.yaml": "52c9010cc9daba2e08129e016e0c9122925fcf1f038d1545e756dbc855683669",
+ "references_cache/PMID_42133144.md": "a047aa3e0cf6f2463456d24aaeaf960adcae583be5507f180a5de64c73b91cb8"
+ },
+ "immutable_prior_history_and_decision_files": 740,
+ "network_delta": {
+ "existing_findings_preserved": 56,
+ "added_findings": {},
+ "removed_findings": {},
+ "interpretation": "All 56 existing warnings preserved, zero structural defects. All 14 nodes and seven arrows retained, including wording and endpoints. No taxonomy or auditor-rule changes."
+ },
+ "render_determinism": true,
+ "published_description_coverage": {
+ "pages": 456,
+ "nodes": 1406,
+ "arrows": 576
+ },
+ "participant_census": {
+ "measurements": {
+ "baseline": {
+ "records": 460,
+ "with_community_level": 396,
+ "mixed": 126,
+ "community_level_only": 270,
+ "taxa": 1523,
+ "credited_solely_by_the_rule": 1249
+ },
+ "current": {
+ "records": 460,
+ "with_community_level": 396,
+ "mixed": 126,
+ "community_level_only": 270,
+ "taxa": 1523,
+ "credited_solely_by_the_rule": 1249
+ }
+ },
+ "delta": {
+ "records": 0,
+ "with_community_level": 0,
+ "mixed": 0,
+ "community_level_only": 0,
+ "taxa": 0,
+ "credited_solely_by_the_rule": 0
+ },
+ "interpretation": "Canonical participant assignments and measured legacy community-level census unchanged. No taxonomy or auditor-rule change."
+ },
+ "network_warning_count": 56,
+ "corpus": {
+ "scope": "Every YAML under kb/communities and data/isolates; filesystem discovery includes hidden/ignored files.",
+ "records": 460,
+ "nodes": 1420,
+ "edges": 584,
+ "records_without_nodes": 8,
+ "records_without_edges": 173,
+ "review_status_counts": {
+ "needs_research": 48,
+ "pending": 132,
+ "reviewed": 280
+ },
+ "structural_defects": []
+ },
+ "tested_file_sha256": {
+ "reports/causal_graph_review/decisions/20261007-five-records-batch91.yaml": "55c2dafc3c10346c37f864ef5acc1fdadefd37967c51f21696eef562a0296bbe",
+ "reports/causal_graph_review/build_inventory.py": "5cb9aeb35b34b67077dddf434715d1ee9314f71130f9e165f5c41967180a9483",
+ "tests/test_causal_review_inventory.py": "43a297fcbff5a2882d6a2c3d70f00a29c92ee48a9626bb94e8ed9fefa68b321d",
+ "tests/test_causal_review_batch44.py": "fecdd8792d0526861c355b3655123a6bb4be56ec912832c13c0bedf0f2d353f7",
+ "tests/test_causal_review_batch75.py": "f05d4ac2dd6310a9d3e21ab3bb3227beecab71271f7ac1ada2eadaa71e54fcce",
+ "tests/test_causal_review_batch86.py": "a34b4b722057aec1f8742fea08320d6c1d7230f2dbb111158e83c8a6432b9975",
+ "tests/test_causal_review_batch91.py": "ebe9c06685e16b5fd896f511b0cd8a3d12a4affdb0d0d67e5b28087d7916459f",
+ "kb/communities/Clostridium_Cellulolyticum_Geobacter_Cellulose_MFC_Coculture.yaml": "bafb8c0e58150b2e586e92c84725b0e3ad88001a64c2d1acb1d2889ede2810b3",
+ "kb/communities/Crystal_Geyser_CO2_Aquifer_CPR_Lipid_Community.yaml": "b219156340ab8170a318ed82b9bf47e7a5a5b67e490870d42fabb2c9a8e25051",
+ "kb/communities/GLBRC_UFMP_Fermentation_Community.yaml": "e3f1905f6c8547e172311d18108c5860d14f919150c44f238ddc484a497b763f",
+ "kb/communities/Multi_stage_Anaerobic_Digestion_SynCom_YSJ_and_SynCom_J.yaml": "93c0f771f13065d1e571c9eb5a548e09714581bbe588cf0b522bdbc29af456da",
+ "kb/communities/Pleuromutilin_Degrading_Artificial_Consortium_5_Strain.yaml": "08cd2f0be57b813b8e230e235c317770d414a6c4948003dd645063562c9a55c2",
+ "reports/causal_graph_review/README.md": "e81e7887555c8c936c63e974da15e8d67ea6c4c7caa0be65f7b9a3ef34501526"
+ },
+ "status": "verified_interaction_semantics_rereview",
+ "full_corpus_snippet_counts": {
+ "records": 460,
+ "total": 8930,
+ "categories": {
+ "MATCH": 8795,
+ "RENDERING": 20,
+ "ASSEMBLED": 1,
+ "WEAK": 0,
+ "MISMATCH": 38,
+ "NOCONTENT": 76
+ }
+ },
+ "full_corpus_snippet_audit_caveat": "Both-root recipe executed. Informational exit0 does not certify a clean corpus; five focused snippet gates pass independently.",
+ "pre_research_baseline": {
+ "base_commit": "c12b1dc71b78f968854875181b0e3b1f8d9ef3df",
+ "base_tree": "83d7e5364b4698afcc8d350c0ee6dbef29f59092",
+ "research_worktree": "/private/tmp/communitymech-causal-batch90",
+ "checks": [
+ {
+ "name": "rank",
+ "command": [
+ "just",
+ "rank-causal-graphs"
+ ],
+ "exit_code": 0,
+ "expected_exit_code": 0,
+ "log": "/private/tmp/communitymech-batch91/baseline-rank.log",
+ "sha256": "132ee89400717a2ccf119304af6536d19f8108d7b98bd7bcb313da0f92805faa",
+ "output_tail": "/Tropidoatractus_Magnetotacticus_Tripartite_Syntrophy.yaml\tCommunityMech:000337\tTropidoatractus magnetotacticus Magnetotactic Ciliate Tripartite Syntrophy\t3\t3\t0\t4\t2\t9\t\t0\t0\n450\t100.0\tkb/communities/Urine_Nitrification_SynCom.yaml\tCommunityMech:000117\tUrine Nitrification Synthetic Microbial Community\t5\t5\t0\t3\t2\t5\t\t0\t0\n451\t100.0\tkb/communities/Variovorax_Cryptococcus_Vitamin_Mutualism_Microcosm.yaml\tCommunityMech:000213\tVariovorax-Cryptococcus Vitamin Cross-Feeding Microcosm\t2\t2\t0\t3\t2\t4\t\t0\t0\n452\t100.0\tkb/communities/Waste_Sludge_Electrofermentation_Biofilm_Suspension_Community.yaml\tCommunityMech:000328\tWaste-Sludge Electro-Fermentation Biofilm-Suspension Community\t5\t5\t0\t4\t2\t6\t\t0\t0\n453\t100.0\tkb/communities/Watermelon_Rhizosphere_Fusarium_SynCom8.yaml\tCommunityMech:000098\tWatermelon Rhizosphere Fusarium-Protective SynCom8\t2\t2\t0\t3\t2\t7\t\t0\t0\n454\t100.0\tkb/communities/Wetland_Oxygen_Sulfate_GHG_Microcosm_Community.yaml\tCommunityMech:000255\tWetland Oxygen-Sulfate Greenhouse Gas Microcosm Community\t3\t3\t0\t3\t2\t6\t\t0\t0\n455\t100.0\tkb/communities/Wheat_Straw_Biogas_Pretreatment_SynCom.yaml\tCommunityMech:000118\tWheat Straw Biogas Pretreatment SynCom\t4\t4\t0\t3\t2\t4\t\t0\t0\n456\t100.0\tkb/communities/Yarrowia_lipolytica_Division_of_Labor_Lipid_Consortium.yaml\tCommunityMech:000354\tYarrowia lipolytica Division-of-Labor Lipid Consortium\t2\t2\t0\t3\t2\t3\t\t0\t0\n457\t100.0\tkb/communities/Yogurt_TwoSpecies_Starter_Culture.yaml\tCommunityMech:000164\tYogurt Two-Species Starter Culture\t2\t2\t0\t4\t2\t9\t\t0\t0\n458\t100.0\tkb/communities/Zymomonas_Ecoli_Exometabolomics_Obligate_Mutualism.yaml\tCommunityMech:000210\tZymomonas-E. coli Exometabolomics-Designed Obligate Mutualism\t2\t2\t0\t3\t2\t6\t\t0\t0\n459\t100.0\tkb/communities/hCom2_Complex_Gut_Microbiome.yaml\tCommunityMech:000123\thCom2 Complex Gut Microbiome\t1\t1\t0\t3\t2\t3\t\t0\t0\n460\t100.0\tkb/communities/mCAFEs_Brachypodium_RCC.yaml\tCommunityMech:000078\tm-CAFEs Brachypodium Reduced Complexity Consortia\t10\t10\t0\t6\t2\t11\t\t0\t0\nPYTHONPATH=src uv run python scripts/rank_causal_graph_readiness.py \n"
+ },
+ {
+ "name": "just-network",
+ "command": [
+ "just",
+ "audit-network-json"
+ ],
+ "exit_code": 2,
+ "expected_exit_code": 2,
+ "log": "/private/tmp/communitymech-batch91/baseline-just-network.log",
+ "sha256": "8595db43420d3f0a01c57acd6ad733a531a72e962486d20b4e1c2840dda55bff",
+ "output_tail": "uv run communitymech audit-network --json\nerror: Failed to spawn: `communitymech`\n Caused by: No such file or directory (os error 2)\nerror: recipe `audit-network-json` failed on line 574 with exit code 2\n"
+ },
+ {
+ "name": "network",
+ "command": [
+ "/Users/marcin/.cache/uv/archive-v0/l58VlyFvdmnkl0CcAx5Gk/bin/python3",
+ "-m",
+ "communitymech.cli",
+ "audit-network",
+ "--json"
+ ],
+ "exit_code": 1,
+ "expected_exit_code": 1,
+ "log": "/private/tmp/communitymech-batch91/baseline-network.log",
+ "sha256": "8febc2a966f5c2b51cd59095a8877c8773cd1e9383e5214bcdc3832c5858c097",
+ "output_tail": " \"reference\": \"PMID:42577390\",\n \"supports\": \"SUPPORT\",\n \"evidence_source\": \"IN_VITRO\",\n \"snippet\": \"Staphylococcus capitis | K1-2-2-23 | ISS, V2A Steel | DSM 111179 | Sobisch et al., 2019 | GCA_025272695 | TSYB/TSYA | 37 \\u00b0C | 16\\u201324 h\",\n \"explanation\": \"Identifies S. capitis K1-2-2-23 as a consortium member and gives its source, DSM number, genome accession and cultivation conditions.\"\n }\n ]\n },\n \"message\": \"Taxon 'Staphylococcus capitis K1-2-2-23' has no interactions\"\n },\n {\n \"type\": \"DISCONNECTED\",\n \"taxon\": \"Streptococcus halotolerans HTS9T\",\n \"taxon_id\": \"NCBITaxon:1814128\",\n \"taxon_data\": {\n \"taxon_term\": {\n \"preferred_term\": \"Streptococcus halotolerans HTS9T\",\n \"term\": {\n \"id\": \"NCBITaxon:1814128\",\n \"label\": \"Streptococcus halotolerans\"\n },\n \"gtdb_grounding_status\": \"UNRESOLVED\",\n \"notes\": \"The source used the S. halotolerans type strain as a biosafety-level-1 representative.\"\n },\n \"strain_designation\": {\n \"strain_name\": \"HTS9T\",\n \"genome_accession\": \"GCA_001598035\",\n \"culture_collections\": [\n {\n \"collection\": \"DSM\",\n \"accession\": \"101996\"\n }\n ]\n },\n \"evidence\": [\n {\n \"reference\": \"PMID:42577390\",\n \"supports\": \"SUPPORT\",\n \"evidence_source\": \"IN_VITRO\",\n \"snippet\": \"Streptococcus halotolerans | HTS9 T | Respiratory Tract of Marmota himalayana | DSM 101996 T | Niu et al., 2016 | GCA_001598035 | 2xLB, TSYB/TSYA | 37 \\u00b0C | 24 h\",\n \"explanation\": \"Identifies S. halotolerans HTS9T as a consortium member and gives its source, DSM number, genome accession and cultivation conditions.\"\n }\n ]\n },\n \"message\": \"Taxon 'Streptococcus halotolerans HTS9T' has no interactions\"\n }\n ]\n}\n"
+ },
+ {
+ "name": "downstream",
+ "command": [
+ "rg",
+ "--no-ignore",
+ "--hidden",
+ "-n",
+ "downstream:",
+ "kb/communities",
+ "data/isolates",
+ "--glob",
+ "*.yaml"
+ ],
+ "exit_code": 0,
+ "expected_exit_code": 0,
+ "log": "/private/tmp/communitymech-batch91/baseline-downstream.log",
+ "sha256": "492045d99cc79c91510383de608b77f8cc5c1a1d00241380c1f4ed8e93795bbf",
+ "output_tail": "ilic_Coculture.yaml:317: downstream:\nkb/communities/Lake_Washington_Methane_Oxygen_Methylotroph_Community.yaml:342: downstream:\nkb/communities/Maize_Benzoxazinoid_Metabolizing_SynComs.yaml:69: downstream:\nkb/communities/Trichoderma_Streptomyces_Filamentous_Cellulose_Coculture.yaml:135: downstream:\nkb/communities/Trichoderma_Streptomyces_Filamentous_Cellulose_Coculture.yaml:177: downstream:\nkb/communities/Pepper_Phytophthora_SynCom5.yaml:123: downstream:\nkb/communities/Pepper_Phytophthora_SynCom5.yaml:150: downstream:\nkb/communities/Clostridium_Carboxidivorans_Kluyveri_CO_Chain_Elongation_Coculture.yaml:247: downstream:\nkb/communities/Clostridium_Carboxidivorans_Kluyveri_CO_Chain_Elongation_Coculture.yaml:344: downstream:\nkb/communities/Emiliania_Phaeobacter_Dynamic_Interaction.yaml:143: downstream:\nkb/communities/Yarrowia_lipolytica_Division_of_Labor_Lipid_Consortium.yaml:223: downstream:\nkb/communities/Synechococcus_Bacillus_SPC.yaml:120: downstream:\nkb/communities/Synechococcus_Bacillus_SPC.yaml:152: downstream:\nkb/communities/Polaromonas_Vanadium_Reduction_Community.yaml:235: downstream:\nkb/communities/Yogurt_TwoSpecies_Starter_Culture.yaml:199: downstream:\nkb/communities/Yogurt_TwoSpecies_Starter_Culture.yaml:267: downstream:\nkb/communities/SO3_BS3_Lithium_Battery_Bioleaching_Consortium.yaml:141: downstream:\nkb/communities/Ferroplasma_Leptospirillum_Syntrophy.yaml:125: downstream:\nkb/communities/Methylotuvimicrobium_Synechococcus_Gas_Feedstock_Coculture.yaml:157: downstream:\nkb/communities/Methylotuvimicrobium_Synechococcus_Gas_Feedstock_Coculture.yaml:205: downstream:\nkb/communities/Salar_Atacama_Lithium_Brine_Community.yaml:295: downstream:\nkb/communities/Salar_Atacama_Lithium_Brine_Community.yaml:339: downstream:\nkb/communities/Desulfovibrio_Methanococcus_Syntrophy.yaml:138: downstream:\nkb/communities/Desulfovibrio_Methanococcus_Syntrophy.yaml:182: downstream:\nkb/communities/Desulfovibrio_Methanococcus_Syntrophy.yaml:232: downstream:\n"
+ }
+ ],
+ "baseline_sha256": "e7737cf6659ab12c422c7cff17d554077255cbfa31f3193c2bd11d092439656e"
+ },
+ "reference_validator_caveat": "Five full-record reference-validator runs passed. CLI Total checks counts issues, not executed checks. Twenty-three graph and two discussion quotations match fresh target-specific primary text and cache text. Literal matching is not entailment; two main bodies and four other abstracts were read, not six full papers."
+}
diff --git a/tests/test_causal_review_batch44.py b/tests/test_causal_review_batch44.py
index 341c4ec2b..65feb506d 100644
--- a/tests/test_causal_review_batch44.py
+++ b/tests/test_causal_review_batch44.py
@@ -21,7 +21,7 @@ def test_ufmp_roles_and_both_arrows_remain_hypotheses():
for node in (first, chain, transfer):
assert node["description"].startswith("HYPOTHESIZED:")
assert "source_taxon" not in node and "target_taxon" not in node
- assert "interaction_type" not in node
+ assert node.get("interaction_type") == ("CROSS_FEEDING" if node is transfer else None)
assert all(e["supports"] == "PARTIAL" for e in node["evidence"])
assert all(e["evidence_source"] == "COMPUTATIONAL" for e in node["evidence"])
assert all(m["term"]["id"] != "CHEBI:422" for m in node.get("metabolites", []))
@@ -87,7 +87,22 @@ def test_every_original_node_and_arrow_has_a_decision():
assert sum(len(r["removed_edge_decisions"]) for r in ledger["records"]) == 2
for row, doc in zip(ledger["records"], docs, strict=True):
assert row["status"] == "reviewed"
- assert row["record_sha256"] == hashlib.sha256((ROOT / row["path"]).read_bytes()).hexdigest()
+ expected = row["record_sha256"]
+ if row["id"] == "CommunityMech:000029":
+ followup = yaml.safe_load(
+ (
+ ROOT
+ / "reports/causal_graph_review/decisions/20261007-five-records-batch91.yaml"
+ ).read_text()
+ )
+ current = next(r for r in followup["records"] if r["path"] == row["path"])
+ assert current["original_sha256"] == expected
+ assert current["supersedes_review"] == {
+ "review_file": str(LEDGER.relative_to(ROOT)),
+ "record_sha256": expected,
+ }
+ expected = current["record_sha256"]
+ assert expected == hashlib.sha256((ROOT / row["path"]).read_bytes()).hexdigest()
assert len(row["history_files"]) == 1 and (ROOT / row["history_files"][0]).is_file()
assert doc["curation_history"][-1]["llm_assisted"] is True
assert doc["discussions"][-1]["status"] == "OPEN"
diff --git a/tests/test_causal_review_batch75.py b/tests/test_causal_review_batch75.py
index ad43778b3..ee7cd987b 100644
--- a/tests/test_causal_review_batch75.py
+++ b/tests/test_causal_review_batch75.py
@@ -116,7 +116,22 @@ def test_record_hashes_and_only_changed_record_histories_match():
assert ledger["independent_approval"] is False
assert sum(row["curation_events_added"] for row in rows) == 3
for row, doc in zip(rows, docs, strict=True):
- assert hashlib.sha256((ROOT / row["path"]).read_bytes()).hexdigest() == row["record_sha256"]
+ expected = row["record_sha256"]
+ if row["id"] == "CommunityMech:000274":
+ followup = yaml.safe_load(
+ (
+ ROOT
+ / "reports/causal_graph_review/decisions/20261007-five-records-batch91.yaml"
+ ).read_text()
+ )
+ current = next(r for r in followup["records"] if r["path"] == row["path"])
+ assert current["original_sha256"] == expected
+ assert current["supersedes_review"] == {
+ "review_file": str(LEDGER.relative_to(ROOT)),
+ "record_sha256": expected,
+ }
+ expected = current["record_sha256"]
+ assert hashlib.sha256((ROOT / row["path"]).read_bytes()).hexdigest() == expected
changed = row["outcome"] == "changed"
assert row["curation_events_added"] == len(row["history_files"]) == int(changed)
if changed:
diff --git a/tests/test_causal_review_batch86.py b/tests/test_causal_review_batch86.py
index 09f7a0c1d..2631b2bbd 100644
--- a/tests/test_causal_review_batch86.py
+++ b/tests/test_causal_review_batch86.py
@@ -143,4 +143,19 @@ def test_history_and_unfinished_lifecycle_are_explicit():
for row, doc in zip(rows, docs, strict=True):
assert row["curation_events_added"] == len(row["history_files"]) == 1
assert doc["curation_history"][-1]["llm_assisted"]
- assert hashlib.sha256((ROOT / row["path"]).read_bytes()).hexdigest() == row["record_sha256"]
+ expected = row["record_sha256"]
+ if row["id"] == "CommunityMech:000300":
+ followup = yaml.safe_load(
+ (
+ ROOT
+ / "reports/causal_graph_review/decisions/20261007-five-records-batch91.yaml"
+ ).read_text()
+ )
+ current = next(r for r in followup["records"] if r["path"] == row["path"])
+ assert current["original_sha256"] == expected
+ assert current["supersedes_review"] == {
+ "review_file": str(LEDGER.relative_to(ROOT)),
+ "record_sha256": expected,
+ }
+ expected = current["record_sha256"]
+ assert hashlib.sha256((ROOT / row["path"]).read_bytes()).hexdigest() == expected
diff --git a/tests/test_causal_review_batch91.py b/tests/test_causal_review_batch91.py
new file mode 100644
index 000000000..bbc654e62
--- /dev/null
+++ b/tests/test_causal_review_batch91.py
@@ -0,0 +1,123 @@
+"""Guard current interaction semantics without erasing prior review evidence."""
+
+import hashlib
+from pathlib import Path
+
+import yaml
+
+ROOT = Path(__file__).resolve().parents[1]
+LEDGER = ROOT / "reports/causal_graph_review/decisions/20261007-five-records-batch91.yaml"
+
+
+def records():
+ ledger = yaml.safe_load(LEDGER.read_text())
+ rows = ledger["records"]
+ return ledger, rows, [yaml.safe_load((ROOT / r["path"]).read_text()) for r in rows]
+
+
+def test_ufmp_preserves_hypothesized_cross_feeding_without_obligacy_requirement():
+ ledger, _, docs = records()
+ definition = yaml.safe_load((ROOT / "src/communitymech/schema/communitymech.yaml").read_text())[
+ "enums"
+ ]["InteractionTypeEnum"]["permissible_values"]["SYNTROPHY"]["description"]
+ assert ledger["schema_definition"] == definition
+ assert "Obligacy is not asserted." in definition
+ transfer = docs[2]["ecological_interactions"][2]
+ assert transfer["interaction_type"] == "CROSS_FEEDING"
+ assert transfer["description"].startswith("HYPOTHESIZED:")
+ assert "does not require obligacy" in transfer["description"]
+ assert "product-removal feedback" in transfer["description"]
+ assert len(transfer["evidence"]) == 2
+ assert all(
+ e["supports"] == "PARTIAL" and e["evidence_source"] == "COMPUTATIONAL"
+ for e in transfer["evidence"]
+ )
+
+
+def test_digestion_keeps_positive_results_but_does_not_restore_unresolved_syntrophy():
+ _, _, docs = records()
+ staged, transfer, selection = docs[3]["ecological_interactions"]
+ assert "22%" in staged["description"] and "8%" in staged["description"]
+ assert "interaction_type" not in transfer and "interaction_type" not in selection
+ assert "unresolved feedback mechanism, not unproven obligacy" in transfer["description"]
+ assert "does not establish transcription" in transfer["description"]
+
+
+def test_pleuromutilin_endpoint_is_not_a_feedback_mechanism():
+ _, _, docs = records()
+ doc = docs[4]
+ endpoint, products = doc["ecological_interactions"]
+ assert "91.97%" in endpoint["description"]
+ assert "SYNTROPHY does not require obligacy" in endpoint["description"]
+ assert all("interaction_type" not in n and "downstream" not in n for n in [endpoint, products])
+ assert "engineering_design" not in doc
+ assert "workflow remains in the record description" in doc["discussions"][-1]["rationale"]
+ assert "no new structure is added" in doc["discussions"][-1]["rationale"]
+
+
+def test_mfc_and_crystal_geyser_reviews_do_not_force_unnecessary_record_changes():
+ _, rows, docs = records()
+ for row, doc in zip(rows[:2], docs[:2], strict=True):
+ assert row["outcome"] == "unchanged" and row["allowed_changed_fields"] == []
+ assert row["original_sha256"] == row["record_sha256"]
+ assert row["curation_events_added"] == 0 and row["history_files"] == []
+ assert any(
+ n.get("interaction_type") == "CROSS_FEEDING" for n in doc["ecological_interactions"]
+ )
+
+
+def test_existing_nodes_arrows_and_participant_assignments_remain_covered():
+ _, rows, docs = records()
+ assert sum(len(r["node_decisions"]) for r in rows) == 14
+ assert sum(len(r["edges_after"]) for r in rows) == 7
+ for row, doc in zip(rows, docs, strict=True):
+ assert row["edges_before"] == row["edges_after"]
+ assert not row["removed_node_decisions"] and not row["removed_edge_decisions"]
+ assert {r["node"] for r in row["node_decisions"]} == {
+ n["name"] for n in doc["ecological_interactions"]
+ }
+ assert [len(n["participating_taxa"]) for n in docs[2]["ecological_interactions"]] == [6, 3, 5]
+
+
+def test_current_hashes_extend_the_immutable_prior_review_chain():
+ _, rows, _ = records()
+ for row in rows:
+ link = row["supersedes_review"]
+ prior = yaml.safe_load((ROOT / link["review_file"]).read_text())
+ old = next(r for r in prior["records"] if r["path"] == row["path"])
+ assert old["id"] == row["id"]
+ assert old["record_sha256"] == link["record_sha256"] == row["original_sha256"]
+ assert hashlib.sha256((ROOT / row["path"]).read_bytes()).hexdigest() == row["record_sha256"]
+
+
+def test_unchanged_coverage_history_and_unfinished_research_are_explicit():
+ ledger, rows, docs = records()
+ assert not ledger["independent_approval"] and ledger["issues"] == [1744]
+ assert ledger["unresolved_research_issues"] == [1715]
+ assert rows[4]["status"] == "needs_research"
+ assert [r["curation_events_added"] for r in rows] == [0, 0, 1, 1, 1]
+ assert sum(len(r["history_files"]) for r in rows) == 3
+ assert ledger["edison"]["provider_submissions"] == ledger["edison"]["credits_spent"] == 0
+ assert ledger["edison"]["dry_runs"] == []
+ for row, doc in zip(rows[2:], docs[2:], strict=True):
+ assert doc["curation_history"][-1]["llm_assisted"]
+ assert doc["curation_history"][-1]["action"] == "REVIEW_INTERACTION_SEMANTICS"
+ assert (ROOT / row["history_files"][0]).is_file()
+
+
+def test_unrelated_lookup_is_excluded_and_all_target_quotes_have_primary_matches():
+ ledger, _, _ = records()
+ assert ledger["excluded_source_lookup"]["pmid"] == "33125214"
+ assert ledger["excluded_source_lookup"]["excluded_from_target_evidence"]
+ assert len(ledger["source_access"]) == 6
+ assert all(r["reference"] != "PMID:33125214" for r in ledger["source_access"])
+ assert ledger["primary_graph_snippet_count"] == len(ledger["snippet_checks"]) == 23
+ assert len(ledger["discussion_snippet_checks"]) == 2
+ assert all(
+ p["independent_primary_match"] and p["cache_matched"]
+ for p in ledger["snippet_checks"] + ledger["discussion_snippet_checks"]
+ )
+ assert ledger["cache_changes"] == []
+ for path, digest in ledger["primary_artifacts"].items():
+ if not path.startswith("/"):
+ assert hashlib.sha256((ROOT / path).read_bytes()).hexdigest() == digest
diff --git a/tests/test_causal_review_inventory.py b/tests/test_causal_review_inventory.py
index 72074b532..a7c8e2560 100644
--- a/tests/test_causal_review_inventory.py
+++ b/tests/test_causal_review_inventory.py
@@ -115,3 +115,111 @@ def test_review_pointer_must_name_loaded_artifact(tmp_path, monkeypatch):
monkeypatch.setattr(inventory, "load_module", lambda *args: None)
with pytest.raises(ValueError, match="review-file pointer"):
inventory.main()
+
+
+def review_chain():
+ first = {
+ "path": "record.yaml",
+ "id": "CommunityMech:1",
+ "review_file": "first.yaml",
+ "record_sha256": "one",
+ }
+ second = {
+ "path": first["path"],
+ "id": first["id"],
+ "review_file": "second.yaml",
+ "record_sha256": "two",
+ "original_sha256": "one",
+ "supersedes_review": {"review_file": "first.yaml", "record_sha256": "one"},
+ }
+ third = {
+ "path": first["path"],
+ "id": first["id"],
+ "review_file": "third.yaml",
+ "record_sha256": "three",
+ "original_sha256": "two",
+ "supersedes_review": {"review_file": "second.yaml", "record_sha256": "two"},
+ }
+ return first, second, third
+
+
+def test_single_reviews_and_empty_inventory_keep_existing_behavior():
+ first, _, _ = review_chain()
+ assert inventory.index_reviews([]) == {}
+ assert inventory.index_reviews([first]) == {first["path"]: first}
+
+
+def test_explicit_review_chain_is_independent_of_filename_or_input_order():
+ first, second, third = review_chain()
+ assert inventory.index_reviews([third, first, second]) == {first["path"]: third}
+
+
+def test_unchanged_record_can_receive_a_new_hash_linked_review():
+ first, second, _ = review_chain()
+ second["record_sha256"] = first["record_sha256"]
+ assert inventory.index_reviews([second, first])[first["path"]] == second
+
+
+@pytest.mark.parametrize(
+ "change",
+ ["missing_parent", "self", "id", "parent_hash", "original_hash", "extra_key", "null_link"],
+)
+def test_invalid_review_supersession_is_rejected(change):
+ first, second, _ = review_chain()
+ if change == "missing_parent":
+ second["supersedes_review"]["review_file"] = "absent.yaml"
+ elif change == "self":
+ second["supersedes_review"]["review_file"] = second["review_file"]
+ elif change == "id":
+ second["id"] = "CommunityMech:2"
+ elif change == "parent_hash":
+ second["supersedes_review"]["record_sha256"] = "wrong"
+ elif change == "original_hash":
+ second["original_sha256"] = "wrong"
+ elif change == "extra_key":
+ second["supersedes_review"]["optional_bypass"] = True
+ else:
+ second["supersedes_review"] = None
+ with pytest.raises(ValueError):
+ inventory.index_reviews([first, second])
+
+
+@pytest.mark.parametrize("change", ["duplicate", "unlinked", "fork", "cycle", "disconnected_cycle"])
+def test_ambiguous_or_cyclic_review_histories_are_rejected(change):
+ first, second, third = review_chain()
+ if change == "duplicate":
+ rows = [first, deepcopy(first)]
+ elif change == "unlinked":
+ del second["supersedes_review"]
+ rows = [first, second]
+ elif change == "fork":
+ third["supersedes_review"] = deepcopy(second["supersedes_review"])
+ third["original_sha256"] = "one"
+ rows = [first, second, third]
+ else:
+ first["supersedes_review"] = {"review_file": "second.yaml", "record_sha256": "two"}
+ first["original_sha256"] = "two"
+ rows = [first, second]
+ if change == "disconnected_cycle":
+ del third["supersedes_review"]
+ rows.append(third)
+ with pytest.raises(ValueError):
+ inventory.index_reviews(rows)
+
+
+def test_supersession_cannot_bypass_current_record_coverage(case):
+ doc, old = case
+ old.update(path="record.yaml", review_file="first.yaml")
+ new = deepcopy(old)
+ new.update(
+ review_file="second.yaml",
+ original_sha256=old["record_sha256"],
+ supersedes_review={
+ "review_file": old["review_file"],
+ "record_sha256": old["record_sha256"],
+ },
+ )
+ new["node_decisions"].pop()
+ selected = inventory.index_reviews([new, old])[old["path"]]
+ with pytest.raises(ValueError, match="Node"):
+ inventory.review_status(doc, "current-digest", selected)