#!/usr/bin/env bash # # The MongoDB Advanced capability gate (advanced plan Task 15). # # Advanced capabilities are opt-in modules. This script verifies the contracts that can be verified # without provider infrastructure, and then reports -- explicitly -- which promotion evidence it # could NOT produce. # # Required promotion categories (MongoAdvancedPromotionEvidence.REQUIRED): # # stable-platform, actual-topology, security, migration, failure, runbook # # `actual-topology` is the one that cannot be substituted. A container gives a functional pass for # sharding, search, vector and encryption while exercising none of the behaviour that makes them # Advanced rather than Stable: real shard distribution, a real analyzer, a real KMS. Atlas Local is # a pull-request convenience and is not release evidence -- see # MongoAtlasCapabilityContractSuite.Environment. # # Usage: # bash scripts/verify-mongodb-advanced.sh # MONGODB_DOCKER=1 bash scripts/verify-mongodb-advanced.sh # MONGODB_SHARDED_URI=... MONGODB_ATLAS_URI=... MONGODB_KMS=... bash scripts/verify-mongodb-advanced.sh # set -euo pipefail REPO_ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)" GRADLE_DIR="${REPO_ROOT}/src" MODULE=':adapter:outbound:persistence-mongo' GRADLE=(./gradlew --console=plain) FAILED=() MISSING_EVIDENCE=() echo "MongoDB Advanced capability gate" echo "repository: ${REPO_ROOT}" # --- stable-platform ------------------------------------------------------------------------- # An Advanced capability cannot be promoted over a Stable platform that does not itself pass. echo "" echo "=== [stable-platform] Stable gate" if bash "${REPO_ROOT}/scripts/verify-mongodb-platform.sh"; then echo "stable-platform: supplied" else status=$? if (( status == 2 )); then echo "stable-platform: INCOMPLETE (the Stable gate skipped lanes)" MISSING_EVIDENCE+=("stable-platform (Stable gate incomplete)") else FAILED+=("stable-platform") fi fi # --- failure + runbook (hermetic) ------------------------------------------------------------- # Every Advanced refusal contract: disabled capability refuses construction, CSFLE/QE cannot share a # collection, QE substring/prefix/suffix unsupported on 8.0, a non-READY search index cannot serve, # undeclared scatter-gather is rejected, a dimension mismatch is refused. echo "" echo "=== [failure] Advanced contract tests" if (cd "${GRADLE_DIR}" && "${GRADLE[@]}" "${MODULE}:test" --tests '*advanced*'); then echo "failure: supplied" else FAILED+=("failure") fi echo "" echo "=== [runbook] capability documentation" for doc in sharding time-series encryption search-vector multi-tenancy gridfs-migration; do path="${REPO_ROOT}/docs/mongodb/advanced/${doc}.md" if [[ -f "${path}" ]]; then echo " + ${doc}.md" else echo " - ${doc}.md MISSING" FAILED+=("runbook:${doc}") fi done if [[ ! -f "${REPO_ROOT}/docs/adr/ADR-MONGO-ADV-001-capability-promotion.md" ]]; then echo " - ADR-MONGO-ADV-001 MISSING" FAILED+=("runbook:ADR-MONGO-ADV-001") fi # --- actual-topology ------------------------------------------------------------------------- echo "" echo "=== [actual-topology] provider environments" if [[ -n "${MONGODB_SHARDED_URI:-}" ]]; then if (cd "${GRADLE_DIR}" && "${GRADLE[@]}" "${MODULE}:test" --tests '*Shard*' \ -Dmongodb.sharded.uri="${MONGODB_SHARDED_URI}"); then echo "actual-topology(sharded): supplied" else FAILED+=("actual-topology:sharded") fi else echo "actual-topology(sharded): no MONGODB_SHARDED_URI" MISSING_EVIDENCE+=("actual-topology: sharded cluster") fi if [[ -n "${MONGODB_ATLAS_URI:-}" ]]; then echo "actual-topology(search/vector): MONGODB_ATLAS_URI present" else echo "actual-topology(search/vector): no MONGODB_ATLAS_URI" MISSING_EVIDENCE+=("actual-topology: search/vector on the actual target deployment") fi if [[ -n "${MONGODB_KMS:-}" ]]; then echo "actual-topology(encryption): MONGODB_KMS present" else echo "actual-topology(encryption): no MONGODB_KMS" MISSING_EVIDENCE+=("actual-topology: real KMS and key vault") fi # --- security + migration --------------------------------------------------------------------- # These are review artefacts, not test runs: a role review and a documented migration path per # capability. The gate records that they are outstanding rather than pretending a green test covers # them. MISSING_EVIDENCE+=("security: per-capability privilege review sign-off") MISSING_EVIDENCE+=("migration: per-capability migration path sign-off") # --- Report ------------------------------------------------------------------------------------ echo "" echo "---------------------------------------------------------------" if (( ${#FAILED[@]} > 0 )); then echo "ADVANCED GATE: FAILED" for entry in "${FAILED[@]}"; do echo " - ${entry}"; done echo "---------------------------------------------------------------" exit 1 fi echo "verifiable contracts: PASSED" if (( ${#MISSING_EVIDENCE[@]} > 0 )); then echo "" echo "ADVANCED GATE: NOT PROMOTABLE -- missing evidence:" for entry in "${MISSING_EVIDENCE[@]}"; do echo " ~ ${entry}"; done echo "" echo "A capability stays opt-in until every category in" echo "MongoAdvancedPromotionEvidence.REQUIRED is supplied. See" echo "docs/adr/ADR-MONGO-ADV-001-capability-promotion.md." echo "---------------------------------------------------------------" exit 2 fi echo "ADVANCED GATE: PASSED" echo "---------------------------------------------------------------"