diff --git a/docs/communities/Rhodopseudomonas_Geobacter_Magnetite_Redox_Coculture.html b/docs/communities/Rhodopseudomonas_Geobacter_Magnetite_Redox_Coculture.html
index fa81c477..9b5d63d0 100644
--- a/docs/communities/Rhodopseudomonas_Geobacter_Magnetite_Redox_Coculture.html
+++ b/docs/communities/Rhodopseudomonas_Geobacter_Magnetite_Redox_Coculture.html
@@ -409,6 +409,7 @@
Rhodopseudomonas-Geobacter Magnetite Redox Coculture
+
@@ -643,6 +644,15 @@ Magnetite-Mediated Electron Sharing
+
+
Downstream Effects:
+
+
+ → Biogeochemical Battery Function
+
+
+
+
Evidence
@@ -718,6 +728,19 @@ Phototrophic Magnetite Fe(II) Oxidation
+
+
Downstream Effects:
+
+
+ → Anaerobic Magnetite Fe(III) Reduction
+
+
+
+ → Biogeochemical Battery Function
+
+
+
+
Evidence
@@ -784,6 +807,19 @@ Anaerobic Magnetite Fe(III) Reduction
+
+
Downstream Effects:
+
+
+ → Phototrophic Magnetite Fe(II) Oxidation
+
+
+
+ → Biogeochemical Battery Function
+
+
+
+
Evidence
diff --git a/justfile b/justfile
index f595079c..00e3f333 100644
--- a/justfile
+++ b/justfile
@@ -165,26 +165,13 @@ report-label-drift:
# CultureBotAI/CultureMech@. To propagate a change:
# PR into that hub → merge → bump .vendored_canon_ref here.
-# Durability guard for the shared LinkML module (Discussion + Dataset), vendored
-# byte-identical across the Mech repos — see culturebotai-claw#7.
-SHARED_SCHEMA_MODULE := "src/communitymech/schema/mech_shared.yaml"
-verify-schema-pin:
- #!/usr/bin/env bash
- set -euo pipefail
- if command -v sha256sum >/dev/null 2>&1; then
- sha256sum -c src/communitymech/schema/.mech_shared.sha256
- else
- shasum -a 256 -c src/communitymech/schema/.mech_shared.sha256
- fi
-
-# Intentional sync only: re-pin after a deliberate, all-repos byte-identical update.
-refresh-schema-pin:
- #!/usr/bin/env bash
- set -euo pipefail
- f={{SHARED_SCHEMA_MODULE}}
- if command -v sha256sum >/dev/null 2>&1; then h=$(sha256sum "$f" | cut -d' ' -f1); else h=$(shasum -a 256 "$f" | cut -d' ' -f1); fi
- printf '%s %s\n' "$h" "$f" > src/communitymech/schema/.mech_shared.sha256
- echo "re-pinned $f to $h"
+# NOTE: the shared LinkML module (mech_shared.yaml) is vendored byte-identical
+# across the Mech repos (package-namespaced path per repo). Its self-generated
+# sha256 pin (verify-/refresh-schema-pin) was retired — same self-referential
+# flaw as the id-label pin. It is now covered by the shared-reference drift check
+# (scripts/check_vendored_sync.sh diffs src/*/schema/mech_shared.yaml against the
+# hub's copy at CultureBotAI/CultureMech@) plus the
+# hub's nightly vendored-fleet-audit.yml.
# Validate schema-level ontology term meanings
validate-schema-terms:
diff --git a/kb/communities/Rhodopseudomonas_Geobacter_Magnetite_Redox_Coculture.yaml b/kb/communities/Rhodopseudomonas_Geobacter_Magnetite_Redox_Coculture.yaml
index 24cdbe9a..e372d2d0 100644
--- a/kb/communities/Rhodopseudomonas_Geobacter_Magnetite_Redox_Coculture.yaml
+++ b/kb/communities/Rhodopseudomonas_Geobacter_Magnetite_Redox_Coculture.yaml
@@ -143,6 +143,12 @@ ecological_interactions:
term:
id: GO:0006826
label: iron ion transport
+ downstream:
+ - target: Biogeochemical Battery Function
+ description: >
+ Magnetite-mediated electron sharing between the phototrophic Fe(II)
+ oxidizer and the anaerobic Fe(III) reducer manifests as the emergent,
+ reusable mineral electron-storage system (the "battery").
evidence:
- reference: PMID:25814583
supports: SUPPORT
@@ -178,6 +184,16 @@ ecological_interactions:
term:
id: GO:0015979
label: photosynthesis
+ downstream:
+ - target: Anaerobic Magnetite Fe(III) Reduction
+ description: >
+ Light-driven oxidation of magnetite Fe(II) to Fe(III) supplies the
+ oxidized Fe(III) that G. sulfurreducens subsequently uses as its anaerobic
+ electron acceptor.
+ - target: Biogeochemical Battery Function
+ description: >
+ TIE-1 phototrophic Fe(II) oxidation is one half of the reversible redox
+ cycling that charges magnetite toward its oxidized state.
evidence:
- reference: PMID:25814583
supports: SUPPORT
@@ -213,6 +229,17 @@ ecological_interactions:
term:
id: GO:0006826
label: iron ion transport
+ downstream:
+ - target: Phototrophic Magnetite Fe(II) Oxidation
+ description: >
+ G. sulfurreducens reduction of magnetite Fe(III) regenerates the reduced
+ Fe(II) electron donor for TIE-1, closing the reversible redox loop (the
+ process is reversible in co-cultures).
+ - target: Biogeochemical Battery Function
+ description: >
+ Fe(III) reduction is the complementary half-reaction that restores the
+ mineral's reduced electron-storage capacity, making the magnetite store
+ reusable.
evidence:
- reference: PMID:25814583
supports: SUPPORT
diff --git a/scripts/check_vendored_sync.sh b/scripts/check_vendored_sync.sh
index 27d56655..10bc4b5c 100755
--- a/scripts/check_vendored_sync.sh
+++ b/scripts/check_vendored_sync.sh
@@ -6,17 +6,19 @@
# copy from the canonical hub at a pinned commit and diffs. A repo that edits
# its vendored copy now fails CI, because the reference lives elsewhere.
#
-# Dependency-free: bash + curl + diff only (no uv/OAK), so it runs as a fast
-# blocking CI job before any heavy setup. The pinned canonical commit lives in
-# scripts/.vendored_canon_ref; the file list is embedded (this script is itself
-# vendored byte-identical across the spokes). Bump .vendored_canon_ref in the
-# same PR that syncs a changed file from the hub — that bump is the deliberate
-# propagation act.
+# The hub is the PUBLIC CultureBotAI/CultureMech (culturebotai-claw is private,
+# so public Mech CI cannot fetch raw content from it). Dependency-free: bash +
+# curl + diff only (no uv/OAK), so it runs as a fast blocking CI job before any
+# heavy setup. The pinned canonical commit lives in scripts/.vendored_canon_ref;
+# the file list is embedded (this script is itself vendored byte-identical across
+# the spokes). Bump .vendored_canon_ref in the same PR that syncs a changed file
+# from the hub — that bump is the deliberate propagation act.
set -euo pipefail
CANON_REPO="CultureBotAI/CultureMech"
REF_FILE="scripts/.vendored_canon_ref"
+# Same-path vendored files: identical relative path in the hub and here.
FILES=(
scripts/validate_id_label_correspondence.py
scripts/chem_formula.py
@@ -25,6 +27,12 @@ FILES=(
tests/test_id_label_plausibility.py
)
+# Package-namespaced shared files: same bytes, but the local path is namespaced
+# by this repo's package while the hub's is culturemech. Format "local_glob|hub".
+MAPPED=(
+ "src/*/schema/mech_shared.yaml|src/culturemech/schema/mech_shared.yaml"
+)
+
[ -f "$REF_FILE" ] || { echo "ERROR: $REF_FILE missing (pinned canonical commit)"; exit 2; }
REF="$(tr -d '[:space:]' < "$REF_FILE")"
[ -n "$REF" ] || { echo "ERROR: $REF_FILE is empty"; exit 2; }
@@ -32,6 +40,7 @@ REF="$(tr -d '[:space:]' < "$REF_FILE")"
tmp="$(mktemp)"
trap 'rm -f "$tmp"' EXIT
fail=0
+checked=0
for f in "${FILES[@]}"; do
[ -f "$f" ] || { echo "MISSING: $f not present locally"; fail=1; continue; }
url="https://raw.githubusercontent.com/${CANON_REPO}/${REF}/${f}"
@@ -42,10 +51,27 @@ for f in "${FILES[@]}"; do
if ! cmp -s "$tmp" "$f"; then
echo "DRIFT: $f differs from ${CANON_REPO}@${REF:0:8}"; fail=1
fi
+ checked=$((checked + 1))
+done
+
+# Path-mapped files: resolve the single local match via glob, diff the hub copy.
+for entry in "${MAPPED[@]}"; do
+ glob="${entry%%|*}"; hubf="${entry#*|}"
+ local=""
+ for cand in $glob; do [ -f "$cand" ] && local="$cand" && break; done
+ if [ -z "$local" ]; then echo "MISSING: no local file matching $glob"; fail=1; continue; fi
+ url="https://raw.githubusercontent.com/${CANON_REPO}/${REF}/${hubf}"
+ if ! curl -fsSL "$url" -o "$tmp"; then
+ echo "ERROR: could not fetch $hubf from ${CANON_REPO}@${REF:0:8} ($url)"; fail=1; continue
+ fi
+ if ! cmp -s "$tmp" "$local"; then
+ echo "DRIFT: $local differs from ${CANON_REPO}@${REF:0:8}:$hubf"; fail=1
+ fi
+ checked=$((checked + 1))
done
if [ "$fail" -eq 0 ]; then
- echo "OK: all ${#FILES[@]} vendored files match ${CANON_REPO}@${REF:0:8}"
+ echo "OK: all ${checked} vendored files match ${CANON_REPO}@${REF:0:8}"
else
echo ""
echo "To resolve: copy the canonical files from ${CANON_REPO}@${REF:0:8}, and if the"
diff --git a/src/communitymech/schema/.mech_shared.sha256 b/src/communitymech/schema/.mech_shared.sha256
deleted file mode 100644
index b9db56fd..00000000
--- a/src/communitymech/schema/.mech_shared.sha256
+++ /dev/null
@@ -1 +0,0 @@
-1a5e21eb2ee9f3584ff6af3a6906b1d442e18c41de405b1bf907c20f44eafa2a src/communitymech/schema/mech_shared.yaml