#!/usr/bin/env bash # Verify GRU reference-primacy doc exists, peg-bands.json carries the machine hook # (when cross-chain-pmm-lps is present), and canonical consumers still link the doc. # Usage: bash scripts/verify/check-gru-reference-primacy-integration.sh # Exit: 0 ok, 1 failure set -euo pipefail SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" PROJECT_ROOT="$(cd "$SCRIPT_DIR/../.." && pwd)" DOC_REL="docs/04-configuration/GRU_REFERENCE_PRIMACY_AND_MESH_EXECUTION_MODEL.md" DOC="$PROJECT_ROOT/$DOC_REL" MARKER="GRU_REFERENCE_PRIMACY_AND_MESH_EXECUTION_MODEL.md" err() { printf '[ERROR] %s\n' "$*" >&2; } ok() { printf '[OK] %s\n' "$*"; } ERRORS=0 if [[ ! -f "$DOC" ]]; then err "Missing $DOC_REL" exit 1 fi if ! grep -qi 'reference primacy' "$DOC"; then err "$DOC_REL: expected 'reference primacy' wording" ERRORS=$((ERRORS + 1)) fi ok "Found and scanned $DOC_REL" # Parent-repo files that must keep a pointer to the canonical doc (integration, not orphan). REQUIRED_LINK_FILES=( "$PROJECT_ROOT/docs/04-configuration/GRU_C_STAR_V2_STANDARDS_MATRIX_AND_IMPLEMENTATION_PLAN.md" "$PROJECT_ROOT/docs/MASTER_INDEX.md" "$PROJECT_ROOT/AGENTS.md" "$PROJECT_ROOT/docs/04-configuration/README.md" "$PROJECT_ROOT/docs/11-references/PMM_DEX_ROUTING_STATUS.md" "$PROJECT_ROOT/docs/11-references/LIQUIDITY_POOLS_MASTER_MAP.md" "$PROJECT_ROOT/docs/11-references/CHAIN138_GRID_6534_WALLET_FUNDING_PLAN.md" "$PROJECT_ROOT/docs/11-references/GRU_V2_PUBLIC_PROTOCOL_DEPLOYMENT_STATUS.md" "$PROJECT_ROOT/docs/03-deployment/PHASE_C_CW_AND_EDGE_POOLS_RUNBOOK.md" "$PROJECT_ROOT/.cursor/rules/project-doc-and-deployment-refs.mdc" ) for f in "${REQUIRED_LINK_FILES[@]}"; do rel="${f#"$PROJECT_ROOT"/}" if [[ ! -f "$f" ]]; then err "Missing expected file: $rel" ERRORS=$((ERRORS + 1)) continue fi if ! grep -qF "$MARKER" "$f"; then err "$rel: must reference $MARKER" ERRORS=$((ERRORS + 1)) else ok "Link present: $rel" fi done CC_README="$PROJECT_ROOT/cross-chain-pmm-lps/README.md" if [[ -f "$CC_README" ]]; then if ! grep -qF "$MARKER" "$CC_README"; then err "cross-chain-pmm-lps/README.md must reference $MARKER" ERRORS=$((ERRORS + 1)) else ok "Link present: cross-chain-pmm-lps/README.md" fi else ok "Submodule cross-chain-pmm-lps absent — skipped README check" fi PEGB="$PROJECT_ROOT/cross-chain-pmm-lps/config/peg-bands.json" if [[ -f "$PEGB" ]]; then if command -v jq &>/dev/null; then if jq -e \ '(.gruPolicyIntegration | type == "object") and (.gruPolicyIntegration.referencePrimacyDoc | type == "string") and (.gruPolicyIntegration.referencePrimacyDoc | test("GRU_REFERENCE_PRIMACY_AND_MESH_EXECUTION_MODEL")) and (.gruPolicyIntegration.meshExecutionRole | type == "string") and (.gruPolicyIntegration.meshExecutionRole | length > 0)' \ "$PEGB" &>/dev/null; then ok "peg-bands.json: gruPolicyIntegration hook present" else err "peg-bands.json: missing or invalid .gruPolicyIntegration (referencePrimacyDoc + meshExecutionRole)" ERRORS=$((ERRORS + 1)) fi else err "jq not installed — cannot validate peg-bands.json gruPolicyIntegration" ERRORS=$((ERRORS + 1)) fi else ok "peg-bands.json absent (submodule not checked out) — skipped peg-bands hook check" fi if [[ "$ERRORS" -gt 0 ]]; then err "GRU reference primacy integration: $ERRORS error(s)" exit 1 fi ok "GRU reference primacy integration checks passed." exit 0