Sub-scope 11 (mongo) testkit + architecture/rs/release/compat tests + performance lane
revision=a24ece9cf797f7ea647e33bf846b115208ed1ba5
generatedAt=2026-08-30T00:33:51+00:00

=== OWNED FILES ===
969d169073092559909a40533c5a9cfd1cdb0333 mongoPerformanceTest/java/dev/caskeleton/adapter/outbound/mongo/performance/MongoResourceBudgetLaneTest.java 194
4356aa23d0cc30c838199d55140f678c2241dd5f testkit/java/dev/caskeleton/adapter/outbound/mongo/architecture/MongoCollectionProfile.java 23
58acdd2ff79fffadac374fa0d595de29cf6cd73a testkit/java/dev/caskeleton/adapter/outbound/mongo/architecture/MongoOperation.java 23
952aacfc01dcabf149f062be47a76b24fa1bb77c testkit/java/dev/caskeleton/adapter/outbound/mongo/architecture/MongoRepositoryArchitectureRules.java 70
d15787c0a7a6f2a33f01ffd1018fb790a5a9ee07 testkit/java/dev/caskeleton/adapter/outbound/mongo/testkit/arch/MongoAccessRules.java 83
6a712168e2429962d09662dc817536c1d462a652 testkit/java/dev/caskeleton/adapter/outbound/mongo/testkit/arch/MongoAdvancedRules.java 140
9334ecc25ef041df422aab97e0d697c582a7bf0b testkit/java/dev/caskeleton/adapter/outbound/mongo/testkit/atlas/MongoAtlasCapabilityContractSuite.java 85
3c600c7512402c62fd07bad355f88b384934f108 testkit/java/dev/caskeleton/adapter/outbound/mongo/testkit/atlas/MongoAtlasLocalContainer.java 55
d462535cb7955e676cab62809325aaa64b0d3d53 testkit/java/dev/caskeleton/adapter/outbound/mongo/testkit/compat/MongoStableContractSuite.java 88
1a00293b475591efec09f51fa70f1472f4d812f6 testkit/java/dev/caskeleton/adapter/outbound/mongo/testkit/compat/MongoVersionCapabilityReport.java 94
e323742f3777b214a9f4bc7aba5b01cbf3602c69 testkit/java/dev/caskeleton/adapter/outbound/mongo/testkit/compat/MongoVersionMatrix.java 41
6d49ff04c6d40f2cda26e8c69ed7db0cdadc4181 testkit/java/dev/caskeleton/adapter/outbound/mongo/testkit/failover/MongoFailoverScenario.java 68
0537852c605074f7b6bf8ff0942ee6fa3f45eeae testkit/java/dev/caskeleton/adapter/outbound/mongo/testkit/failover/MongoNetworkFaultController.java 33
80a0de8b1b3b3f1d4009cecc371580c9166e7f1f testkit/java/dev/caskeleton/adapter/outbound/mongo/testkit/failover/MongoPrimaryController.java 23
b6d323c64f80f0248f5bb2cbd2c0a76fe4a8da24 testkit/java/dev/caskeleton/adapter/outbound/mongo/testkit/failover/MongoProxiedReplicaSetNode.java 142
77b587ce9995c3bd12e5d36a800578db8a40082c testkit/java/dev/caskeleton/adapter/outbound/mongo/testkit/failover/MongoThreeNodeReplicaSet.java 281
5fa768acfe364d1e15fe3021ca0cbc0f30988bda testkit/java/dev/caskeleton/adapter/outbound/mongo/testkit/failover/ToxiproxyMongoNetworkFaultController.java 170
c964bd9addd5bea5a4aee9375822eeffae8e1554 testkit/java/dev/caskeleton/adapter/outbound/mongo/testkit/mapping/MongoBsonSnapshot.java 118
c258c5d68aa99f1bf0c971da85e4ebc5cbda5a16 testkit/java/dev/caskeleton/adapter/outbound/mongo/testkit/mapping/MongoBsonSnapshotAssert.java 82
a363dbcdbeb575c9e3e493cc28254497bfd1be7e testkit/java/dev/caskeleton/adapter/outbound/mongo/testkit/mapping/MongoRoundTripContract.java 75
31f7d619870f171ac035703f65087865e1af02e5 testkit/java/dev/caskeleton/adapter/outbound/mongo/testkit/migration/MongoBackfillRestartFixture.java 73
f45e22860de899345218ea8802523d14837475e9 testkit/java/dev/caskeleton/adapter/outbound/mongo/testkit/migration/MongoMigrationContractSuite.java 75
d23251965eb60a9f7c7d6af4d729e3943375325e testkit/java/dev/caskeleton/adapter/outbound/mongo/testkit/migration/MongoMigrationSnapshotFixture.java 54
86c786872ea7711f5f76d225038e56fa3c8c4871 testkit/java/dev/caskeleton/adapter/outbound/mongo/testkit/performance/MongoChaosGate.java 94
bf51484f712cdc4ab1ceb922c686ac2cb23de6b1 testkit/java/dev/caskeleton/adapter/outbound/mongo/testkit/performance/MongoPerformanceGate.java 69
954ee45c4335cdf26b6cde35d00c327e379d5a16 testkit/java/dev/caskeleton/adapter/outbound/mongo/testkit/performance/MongoResourceBudgetReport.java 46
272260d8c4a1d6802bb29d7ec1ffefbb2a212c09 testkit/java/dev/caskeleton/adapter/outbound/mongo/testkit/release/MongoReleaseContract.java 41
c68191b601d9fa8a4b2f353d7294532ed5efe174 testkit/java/dev/caskeleton/adapter/outbound/mongo/testkit/release/MongoReleaseEvidence.java 54
a8bb6a2e07d4f1857d7a9dcef9b2003726e9fa8a testkit/java/dev/caskeleton/adapter/outbound/mongo/testkit/release/MongoReleaseEvidenceVerifier.java 96
ea2e9f9bd21d68c68e196cd880de318ae19ac731 testkit/java/dev/caskeleton/adapter/outbound/mongo/testkit/rs/MongoAuthenticatedReplicaSetContainer.java 201
64dbc66f3ac1b24f813fc9372dd980906fb916bc testkit/java/dev/caskeleton/adapter/outbound/mongo/testkit/rs/MongoReplicaSetContract.java 59
12e0a6c6fe1f4363f1f71ced94f0b47c8271772c testkit/java/dev/caskeleton/adapter/outbound/mongo/testkit/rs/MongoReplicaSetFixture.java 60
6d3e32302676f8e8da2cd476cc065a3dbca5fda9 testkit/java/dev/caskeleton/adapter/outbound/mongo/testkit/rs/MongoSingleReplicaSetContainer.java 91
3402a220b53bfd3489e47148d0c09ec1991e17b9 testkit/java/dev/caskeleton/adapter/outbound/mongo/testkit/rs/MongoTlsReplicaSetContainer.java 206
8f88be92b489389f509b4971e283200f891e0382 testkit/java/dev/caskeleton/adapter/outbound/mongo/testkit/sharded/MongoChunkMigrationController.java 23
4f129fc2920e5ee6c3c9bde5286ef0873d7547b8 testkit/java/dev/caskeleton/adapter/outbound/mongo/testkit/sharded/MongoShardingContractSuite.java 100
4d0c4aa5219949785bf93b1c29c52f742e4a3402 test/java/dev/caskeleton/adapter/outbound/mongo/MongoNamespaceContractTest.java 111
d5d295ca11cab21f4e760cbe76713531172e1471 test/java/dev/caskeleton/adapter/outbound/mongo/MongoPersistenceConfigTest.java 83
a6fa3c4fe07ba96c2da7391ace1d5b07904d3d2b test/java/dev/caskeleton/adapter/outbound/mongo/architecture/MongoAccessRulesTest.java 85
84a6b3efe5d29ee96e7ae9db53af99dbac80f94e test/java/dev/caskeleton/adapter/outbound/mongo/architecture/MongoAdvancedRulesTest.java 101
7eef04f1a6c79eaa0738eb4cfc2f56980addc12a test/java/dev/caskeleton/adapter/outbound/mongo/architecture/MongoModuleBoundaryTest.java 371
4dff114b6288d2887fc9bab7757bf84828168312 test/java/dev/caskeleton/adapter/outbound/mongo/architecture/MongoRepositoryArchitectureRulesTest.java 43
32e6fa486f95f7a87001603312e73058b2901693 test/java/dev/caskeleton/adapter/outbound/mongo/compat/MongoVersionCompatibilityLaneTest.java 155
a39ee76fa5239708f6805fc33bee33bb55076c8b test/java/dev/caskeleton/adapter/outbound/mongo/release/MongoReleaseEvidenceVerifierTest.java 136
7672b70b7cbd73e139fcbe3173537bd222f38772 test/java/dev/caskeleton/adapter/outbound/mongo/rs/MongoSingleReplicaSetContainerTest.java 111
c0dfd07b5eb219f07ccbc3d6199250b9f6b4dd12 test/java/dev/caskeleton/adapter/outbound/mongo/rs/MongoThreeNodeReplicaSetTest.java 37
8d84d6c9f950e7b64aab30c0caa1c228c600aba3 test/java/dev/caskeleton/adapter/outbound/mongo/testkit/compat/MongoVersionMatrixTest.java 74
cab451aa87ceedf9cf3c65a5f9da523d8089875e test/java/dev/caskeleton/adapter/outbound/mongo/testkit/performance/MongoReleaseEvidenceTest.java 95
f640940e08141c256e148e525efeee4de7a2f5e5 test/java/dev/caskeleton/adapter/outbound/mongo/testkit/sharded/MongoShardingContractSuiteTest.java 64

testkit: 35
performance: 1
test: 13
testkit LOC:   3036 total

=== 8.1 reachability: which testkit types have no consumer at all ===
MongoAtlasCapabilityContractSuite             consumers: test=1 testkit=1
MongoAtlasLocalContainer                      consumers: test=0 testkit=0
MongoChunkMigrationController                 consumers: test=0 testkit=0
MongoPrimaryController                        consumers: test=0 testkit=1
MongoNetworkFaultController                   consumers: test=0 testkit=2
MongoProxiedReplicaSetNode                    consumers: test=1 testkit=0
ToxiproxyMongoNetworkFaultController          consumers: test=0 testkit=1
MongoThreeNodeReplicaSet                      consumers: test=1 testkit=0
MongoRoundTripContract                        consumers: test=0 testkit=0
MongoBsonSnapshotAssert                       consumers: test=1 testkit=0
MongoBsonSnapshot                             consumers: test=1 testkit=2
MongoBackfillRestartFixture                   consumers: test=1 testkit=0
MongoMigrationContractSuite                   consumers: test=1 testkit=0
MongoMigrationSnapshotFixture                 consumers: test=2 testkit=1
MongoReplicaSetFixture                        consumers: test=1 testkit=0
MongoAuthenticatedReplicaSetContainer         consumers: test=1 testkit=0
MongoTlsReplicaSetContainer                   consumers: test=1 testkit=0
MongoShardingContractSuite                    consumers: test=1 testkit=0
MongoStableContractSuite                      consumers: test=1 testkit=0
MongoVersionCapabilityReport                  consumers: test=2 testkit=0
MongoVersionMatrix                            consumers: test=2 testkit=1
MongoChaosGate                                consumers: test=2 testkit=0
MongoPerformanceGate                          consumers: test=2 testkit=0
MongoResourceBudgetReport                     consumers: test=2 testkit=1
MongoReleaseContract                          consumers: test=1 testkit=2
MongoReleaseEvidence                          consumers: test=2 testkit=1
MongoReleaseEvidenceVerifier                  consumers: test=1 testkit=0
MongoAccessRules                              consumers: test=1 testkit=0
MongoAdvancedRules                            consumers: test=1 testkit=0
MongoRepositoryArchitectureRules              consumers: test=2 testkit=1
MongoSingleReplicaSetContainer                consumers: test=4 testkit=3
MongoReplicaSetContract                       consumers: test=1 testkit=1
MongoFailoverScenario                         consumers: test=2 testkit=1

=== 8.2 two coverage gates in one testkit: one counts, one cannot ===
$ grep -n 'public MongoStableContractReport run' -A 24 adapter/outbound/persistence-mongo/src/testkit/java/dev/caskeleton/adapter/outbound/mongo/testkit/compat/MongoStableContractSuite.java
37:  public MongoStableContractReport run(
38-      String version, Predicate<MongoReplicaSetContract> contractRunner) {
39-    Objects.requireNonNull(version, "version");
40-    Objects.requireNonNull(contractRunner, "contractRunner");
41-    if (!matrix.certifies(version)) {
42-      throw new IllegalArgumentException(
43-          "version " + version + " is not one of the certified lanes " + matrix.stableVersions());
44-    }
45-
46-    List<String> failures = new ArrayList<>();
47-    Set<MongoReplicaSetContract> executed = new LinkedHashSet<>();
48-    for (MongoReplicaSetContract contract : MongoReplicaSetContract.all()) {
49-      executed.add(contract);
50-      if (!contractRunner.test(contract)) {
51-        failures.add(version + '/' + contract.name());
52-      }
53-    }
54-    Set<MongoReplicaSetContract> missing = new LinkedHashSet<>(MongoReplicaSetContract.all());
55-    missing.removeAll(executed);
56-    missing.forEach(contract -> failures.add(version + '/' + contract.name() + " (not executed)"));
57-    return new MongoStableContractReport(version, List.copyOf(failures), Set.copyOf(executed));
58-  }
59-
60-  /**
61-   * What one lane's run produced.
exit=0

$ grep -n 'public MongoChaosReport report' -A 18 adapter/outbound/persistence-mongo/src/testkit/java/dev/caskeleton/adapter/outbound/mongo/testkit/performance/MongoChaosGate.java
51:  public MongoChaosReport report() {
52-    List<String> failures =
53-        executed.entrySet().stream()
54-            .filter(entry -> !Boolean.TRUE.equals(entry.getValue()))
55-            .map(entry -> entry.getKey().name())
56-            .toList();
57-    List<String> missing =
58-        MongoFailoverScenario.all().stream()
59-            .filter(scenario -> !executed.containsKey(scenario))
60-            .map(scenario -> scenario.name() + " (not executed)")
61-            .toList();
62-    return new MongoChaosReport(
63-        java.util.stream.Stream.concat(failures.stream(), missing.stream()).toList(),
64-        businessBodyRetriesAfterUnknownCommit,
65-        lostChangeEvents,
66-        duplicateProjections);
67-  }
68-
69-  /**
exit=0

=== 8.2b what the two suites' certified()/passed() actually assert ===
$ grep -n 'public boolean certified' -A 4 adapter/outbound/persistence-mongo/src/testkit/java/dev/caskeleton/adapter/outbound/mongo/testkit/compat/MongoStableContractSuite.java
77:    public boolean certified() {
78-      return failures.isEmpty() && executed.containsAll(MongoReplicaSetContract.all());
79-    }
80-
81-    /** The evidence categories this run covered. */
exit=0

$ grep -n 'public boolean passed' -A 6 adapter/outbound/persistence-mongo/src/testkit/java/dev/caskeleton/adapter/outbound/mongo/testkit/performance/MongoChaosGate.java
88:    public boolean passed() {
89-      return failures.isEmpty()
90-          && businessBodyRetriesAfterUnknownCommit == 0
91-          && lostChangeEvents == 0;
92-    }
93-  }
94-}
exit=0

$ grep -n 'stableContractsRunOnEverySupportedLane' -A 12 adapter/outbound/persistence-mongo/src/test/java/dev/caskeleton/adapter/outbound/mongo/testkit/compat/MongoVersionMatrixTest.java
20:  void stableContractsRunOnEverySupportedLane(String version) {
21-    MongoStableContractSuite.MongoStableContractReport report =
22-        MongoStableContractSuite.standard().run(version, contract -> true);
23-
24-    assertThat(report.failures()).isEmpty();
25-    assertThat(report.certified()).isTrue();
26-    assertThat(report.executed()).containsAll(MongoReplicaSetContract.all());
27-  }
28-
29-  @Test
30-  void aFailedContractIsReportedWithItsLane() {
31-    MongoStableContractSuite.MongoStableContractReport report =
32-        MongoStableContractSuite.standard()
exit=0

$ grep -n 'aScenarioThatNeverRanIsAFailure' -A 10 adapter/outbound/persistence-mongo/src/test/java/dev/caskeleton/adapter/outbound/mongo/testkit/performance/MongoReleaseEvidenceTest.java
34:  void aScenarioThatNeverRanIsAFailureRatherThanASilence() {
35-    MongoChaosGate gate = new MongoChaosGate();
36-    gate.record(MongoFailoverScenario.PRIMARY_KILL, true);
37-
38-    assertThat(gate.report().failures())
39-        .anyMatch(failure -> failure.endsWith("(not executed)"))
40-        .anyMatch(failure -> failure.startsWith("OPLOG_HISTORY_LOSS"));
41-  }
42-
43-  @Test
44-  void duplicateProjectionsAreExpectedRatherThanFatal() {
exit=0

=== 8.3 the release contract list: where is it declared? ===
$ git grep -rn 'new MongoReleaseContract' -- . | head -20
adapter/outbound/persistence-mongo/src/test/java/dev/caskeleton/adapter/outbound/mongo/release/MongoReleaseEvidenceVerifierTest.java:33:      new MongoReleaseContract(
adapter/outbound/persistence-mongo/src/test/java/dev/caskeleton/adapter/outbound/mongo/release/MongoReleaseEvidenceVerifierTest.java:109:            () -> new MongoReleaseContract("X", "d", "task", "Class", "sharded", 0))
exit=0

$ ls ../scripts 2>/dev/null | head -30
run-compose-runtime-smoke.sh
verify-compose-profile-contracts.sh
verify-httpclient-docs.py
verify-mongodb-advanced.sh
verify-mongodb-platform.sh
exit=0

$ grep -rln 'MongoReleaseEvidenceVerifier\|MongoReleaseContract' ../scripts ../docs ../.github 2>/dev/null | head
../scripts/verify-mongodb-advanced.sh
../docs/superpowers/plans/evidence/2026-08-15-wave6-final/task1-check.log
exit=0

=== 8.4 lanes: definitions, tags, and the performance lane's place ===
$ sed -n '85,150p' adapter/outbound/persistence-mongo/build.gradle
//
// `mongodb-contract` is excluded here too. It was not, and `check` depends on both `test` and
// `mongoStableContractTest`, so every one of the 382 hermetic contract tests ran twice on a fresh
// build — once in each task. The two lanes are now disjoint by construction, and
// `MongoTestLaneDisjointnessTest` asserts it against the JUnit XML rather than trusting this
// comment.
tasks.named('test', Test) {
    useJUnitPlatform {
        excludeTags 'quarantine',
                'mongodb-contract',
                'mongodb-replicaset',
                'mongodb-failover',
                'mongodb-migration',
                'mongodb-compatibility',
                'mongodb-security-integration'
    }
}

// Six lanes, declared rather than assembled. `ca.strict-test-lane` owns testClassesDirs, classpath,
// tag selection, failOnNoDiscoveredTests and the up-to-date refusal — the five lines that used to be
// copied once per lane here and again in four other leaves.
strictTestLanes {
    lane('mongoReplicaSetTest') {
        tag = 'mongodb-replicaset'
        description = 'Single-node replica set contract lane: mapping, atomic write, transaction, ' +
                'change stream (design §29).'
        customize = { test -> applyMongoImageSelection(test) }
    }
    lane('mongoFailoverTest') {
        tag = 'mongodb-failover'
        description = 'Three-node replica set failover lane: primary kill, partition, unknown ' +
                'commit, resume (design §29).'
        customize = { test -> applyMongoImageSelection(test) }
    }
    lane('mongoMigrationTest') {
        tag = 'mongodb-migration'
        description = 'Migration lane: empty / N-1 / oldest-supported snapshots, lock, checkpoint ' +
                'restart (design §12).'
        customize = { test -> applyMongoImageSelection(test) }
    }
    lane('mongoCompatibilityTest') {
        tag = 'mongodb-compatibility'
        description = 'MongoDB 7.0 compatibility and 8.0 primary certification matrix (design §30).'
        customize = { test -> applyMongoImageSelection(test) }
    }
    lane('mongoSecurityIntegrationTest') {
        tag = 'mongodb-security-integration'
        description = 'RBAC, TLS, injection and redaction release gate against a real server ' +
                '(design §26).'
        customize = { test -> applyMongoImageSelection(test) }
    }

    // Driven by its own source set rather than a tag: for this shape the source set is the
    // selection, so the convention asks for no tag.
    lane('mongoPerformanceTest') {
        sourceSet = 'mongoPerformanceTest'
        description = 'Certifies contention, aggregation spill, pagination and pool resource ' +
                'bounds (design §29).'
        customize = { test ->
            applyMongoImageSelection(test)
            // Assertions on by default. They defaulted to false, so the lane measured numbers and
            // compared them to nothing — a performance gate whose bounds are never evaluated is a
            // report, and the release evidence called it a certification.
            test.systemProperty 'performance.assertions.enabled',
                    (project.findProperty('performance.assertions.enabled') ?: 'true').toString()
        }
exit=0

$ grep -rn 'mongoPerformanceTest\|mongoFailoverTest\|mongoSecurityIntegrationTest' ../.github 2>/dev/null | head -20
exit=0


=== 8.3b where the release contract list actually lives ===
$ grep -n 'MongoReleaseEvidenceVerifier\|MongoReleaseContract\|contract' ../scripts/verify-mongodb-advanced.sh | head -30
5:# Advanced capabilities are opt-in modules. This script verifies the contracts that can be verified
54:# Every Advanced refusal contract: disabled capability refuses construction, CSFLE/QE cannot share a
58:echo "=== [failure] Advanced contract tests"
88:# The selector names the contract's class. `--tests '*Shard*'` was satisfied by the hermetic
90:# connection. Which classes count is `src/config/mongodb/release-contracts.json`, and
91:# MongoReleaseEvidenceVerifier checks the JUnit XML rather than the exit code.
93:  # Not promoted. `mongoShardedTest` is declared in release-contracts.json under
94:  # experimental_contracts and is registered by no build file, so invoking it here could only ever
100:  echo "  See experimental_contracts in src/config/mongodb/release-contracts.json." >&2
108:# contract is satisfied by a lane that ran against the deployment it names, which is why this
150:echo "verifiable contracts: PASSED"
exit=0

$ wc -l ../scripts/verify-mongodb-platform.sh ../scripts/verify-mongodb-advanced.sh
  177 ../scripts/verify-mongodb-platform.sh
  164 ../scripts/verify-mongodb-advanced.sh
  341 total
exit=0

=== 8.4b CI wiring for the mongo lanes ===
$ ls -1 ../.github/workflows 2>/dev/null
ci-quality-gates.yml
dependency-vulnerability.yml
fileserver-nightly.yml
fileserver-pr.yml
fileserver-release.yml
httpclient-contract.yml
httpclient-nightly.yml
httpclient-release.yml
jpa-next-hibernate8.yml
jpa-next-jpa4.yml
jpa-next-postgresql19.yml
jpa-nightly.yml
jpa-pr.yml
jpa-r2-evidence.yml
jpa-release.yml
link-check.yml
messaging-certification.yml
notification-platform.yml
object-storage-qualification.yml
redis-sdk-topology.yml
web-advanced-nightly.yml
web-advanced-release.yml
web-nightly.yml
web-pr.yml
web-release.yml
websocket-advanced-nightly.yml
websocket-pr.yml
websocket-release.yml
exit=0

$ grep -rn 'mongo' ../.github/workflows 2>/dev/null | head -20
exit=0

=== 8.4c the build.gradle hermetic-count claim vs measured (cross-ref sub-scope 01) ===
$ grep -n '382 hermetic\|311 of 313' adapter/outbound/persistence-mongo/build.gradle
87:// `mongoStableContractTest`, so every one of the 382 hermetic contract tests ran twice on a fresh
exit=0

=== 8.2c the dead branch, stated plainly ===
MongoStableContractSuite.run: 'executed' is filled unconditionally inside the loop over
MongoReplicaSetContract.all() (line 49), so 'missing' (lines 54-56) is always empty and
report.certified()'s executed.containsAll(all()) (line 78) is always true. The class
javadoc says 'a missing contract is a failure here'; no input can produce that failure.
MongoChaosGate.report() in the same testkit does the same job correctly: 'executed' is a
map filled only by explicit record(scenario, passed) calls, so a scenario nobody recorded
shows up as '(not executed)'. Its test proves it by recording one of thirteen scenarios.
The contract suite's equivalent test passes 'contract -> true' for every contract and then
asserts executed contains all of them, which is true by construction.
$ git status --short | wc -l
0
exit=0


=== 8.3c the canonical release-contract list ===
$ ls -l config/mongodb/ 2>&1
total 4
-rw-rw-r-- 1 ubuntu ubuntu 3769 Aug 19 16:30 release-contracts.json
exit=0

$ python3 -c "
import json;d=json.load(open('config/mongodb/release-contracts.json'))
print('top-level keys:', list(d.keys()))
for k,v in d.items():
    if isinstance(v,list):
        print(k, 'count=', len(v))
        for c in v: print('   ', c.get('id'), c.get('task'), c.get('className'), 'topology=' + str(c.get('topology')), 'min=' + str(c.get('minimumExecuted')))
"
top-level keys: ['contracts', 'experimental_contracts', 'note']
contracts count= 3
    MONGO-REL-001 mongoStableContractTest dev.caskeleton.adapter.outbound.mongo.architecture.MongoModuleBoundaryTest topology=none min=1
    MONGO-REL-002 mongoStableContractTest dev.caskeleton.adapter.outbound.mongo.architecture.MongoAdvancedRulesTest topology=none min=5
    MONGO-REL-003 mongoStableContractTest dev.caskeleton.adapter.outbound.mongo.transaction.retry.MongoTransactionRetryCoordinatorTest topology=none min=3
experimental_contracts count= 3
    MONGO-REL-010 mongoShardedTest dev.caskeleton.adapter.outbound.mongo.advanced.sharding.MongoShardedTopologyContractTest topology=sharded min=1
    MONGO-REL-011 mongoAtlasTest dev.caskeleton.adapter.outbound.mongo.advanced.search.MongoAtlasContractTest topology=atlas min=1
    MONGO-REL-012 mongoKmsTest dev.caskeleton.adapter.outbound.mongo.advanced.encryption.MongoKmsContractTest topology=kms min=1
exit=0

$ grep -rn 'release-contracts.json' -- . | grep -v Binary | head
grep: ./.gradle/9.0.0/executionHistory/executionHistory.bin: binary file matches
grep: ./app-bootstrap/build/classes/java/test/dev/caskeleton/bootstrap/registry/ReleaseManifestTaskExistenceTest.class: binary file matches
grep: ./app-bootstrap/build/classes/java/sampleOffTest/dev/caskeleton/bootstrap/registry/ReleaseManifestTaskExistenceTest.class: binary file matches
./app-bootstrap/src/test/java/dev/caskeleton/bootstrap/registry/ReleaseManifestTaskExistenceTest.java:51:        blockingTaskNamesIn(root.resolve("src/config/mongodb/release-contracts.json"));
./adapter/outbound/persistence-mongo/build.gradle:210:    def manifest = rootProject.file('../src/config/mongodb/release-contracts.json')
./adapter/outbound/persistence-mongo/CLAUDE.md:92:`scripts/verify-mongodb-platform.sh` and `src/config/mongodb/release-contracts.json` drive. A second
exit=0

$ grep -n 'mongoShardedTest' ../scripts/verify-mongodb-advanced.sh
93:  # Not promoted. `mongoShardedTest` is declared in release-contracts.json under
99:  echo "  MONGODB_SHARDED_URI was set but mongoShardedTest does not exist." >&2
exit=0

$ grep -rn 'mongoShardedTest' adapter/outbound/persistence-mongo/build.gradle build.gradle settings.gradle 2>/dev/null
exit=1

=== 8.4d there is no MongoDB CI workflow ===
26 workflow files exist under .github/workflows and none of them mentions mongo
(grep -rn 'mongo' ../.github/workflows -> no matches).
The sibling JPA leaf has seven: jpa-pr, jpa-nightly, jpa-release, jpa-r2-evidence and
three jpa-next-* forward-compatibility workflows.
So the six declared mongo lanes - all of which are excluded from the default 'test' task
and all of which need a container - run only when somebody invokes them by hand.
