Sub-scope 10 (mongo) advanced/** - manifest and negative-space probes revision=a24ece9cf797f7ea647e33bf846b115208ed1ba5 generatedAt=2026-08-30T00:27:31+00:00 === OWNED FILES === cf0b58082713dff7ed4b8d4dac613359dd01343d main/java/dev/caskeleton/adapter/outbound/mongo/advanced/MongoAdvancedCapabilityFlags.java 84 76a78f17b37f3e6d9531e6cc8bbac469ab913324 main/java/dev/caskeleton/adapter/outbound/mongo/advanced/MongoAdvancedCapabilityGuard.java 81 57558b21d7ef2650d4c51123ff141e85f320181e main/java/dev/caskeleton/adapter/outbound/mongo/advanced/MongoAdvancedEntryPoint.java 33 4eb1bfbafd243fd96995da10292d5b19dbdd1b32 main/java/dev/caskeleton/adapter/outbound/mongo/advanced/MongoAdvancedPolicy.java 24 1042d08eb388d4542cee4fa153d36d665992d942 main/java/dev/caskeleton/adapter/outbound/mongo/advanced/MongoAdvancedPromotionEvidence.java 61 98a57ef8c8d096b892482a5f6794a63adebac956 main/java/dev/caskeleton/adapter/outbound/mongo/advanced/MongoAdvancedPromotionGate.java 47 fbaf4fa730bad951431e9371fb2bb1ffd492c997 main/java/dev/caskeleton/adapter/outbound/mongo/advanced/autoconfigure/MongoAdvancedConfiguration.java 43 ecd0d65bc26811770219b40d6249fba0fdfd9b80 main/java/dev/caskeleton/adapter/outbound/mongo/advanced/autoconfigure/MongoAdvancedSettings.java 49 879181c1a388cd35c232c096093e762428e659e4 main/java/dev/caskeleton/adapter/outbound/mongo/advanced/bridge/MongoBridgeCheckpointPolicy.java 35 50563d099ba0e60c5767e6eb7ecbdcb4ff928c9c main/java/dev/caskeleton/adapter/outbound/mongo/advanced/bridge/MongoBridgeOutboxPolicy.java 46 f7e563641d1ece707e73b3cd36de604034e4bfe3 main/java/dev/caskeleton/adapter/outbound/mongo/advanced/bridge/MongoChangeMessagingBridge.java 87 6e01fc6246368f95435ede76804d1908ee2b93f1 main/java/dev/caskeleton/adapter/outbound/mongo/advanced/bridge/MongoChangeToIntegrationEventMapper.java 24 d02e9b227e4e67e21323624e3cd53136d3f55805 main/java/dev/caskeleton/adapter/outbound/mongo/advanced/bridge/MongoIntegrationEventEnvelope.java 37 f092848cf4e5617d84d368cdb10bf9109d1132f5 main/java/dev/caskeleton/adapter/outbound/mongo/advanced/bridge/MongoIntegrationEventPublisher.java 25 da8c3a9c30a8acacf2440f0a8696da76f57be165 main/java/dev/caskeleton/adapter/outbound/mongo/advanced/bridge/MongoPublishResult.java 51 ac63404c901a2ad79140aaed876d8049cf6ae451 main/java/dev/caskeleton/adapter/outbound/mongo/advanced/encryption/csfle/MongoCsfleClientFactory.java 54 16d32b92c40b0d9966eb83a2db9d85840058eb4c main/java/dev/caskeleton/adapter/outbound/mongo/advanced/encryption/csfle/MongoCsfleFieldPolicy.java 57 6ffcec5b844f64611b0b9d9ea4edd8ec7c2d376a main/java/dev/caskeleton/adapter/outbound/mongo/advanced/encryption/csfle/MongoCsfleMode.java 32 32d83861cdb0c511ac9b944a274c2694a1c16fc2 main/java/dev/caskeleton/adapter/outbound/mongo/advanced/encryption/csfle/MongoCsfleProfile.java 60 47de1e2bf771a2a5d3e496fcfb9fc708fbb9f8ca main/java/dev/caskeleton/adapter/outbound/mongo/advanced/encryption/csfle/MongoDataKeyResolver.java 28 51ccb6a71690787ec834dd9e31efc6967e047dbb main/java/dev/caskeleton/adapter/outbound/mongo/advanced/encryption/qe/MongoEncryptedFieldDescriptor.java 62 f2f055643c8f03eaaebda115ad46da3e54604408 main/java/dev/caskeleton/adapter/outbound/mongo/advanced/encryption/qe/MongoEncryptionMetadataOwnership.java 47 0d68cd3d1808ba6f7e1d97b659b29170a3652dea main/java/dev/caskeleton/adapter/outbound/mongo/advanced/encryption/qe/MongoQueryShape.java 32 fd6af5d50e9e25d7b488bc8b35a3c5fdee2512d1 main/java/dev/caskeleton/adapter/outbound/mongo/advanced/encryption/qe/MongoQueryShapeSupport.java 32 d68b7d6dadbc389f088649739fd0c3e6ddfa8aca main/java/dev/caskeleton/adapter/outbound/mongo/advanced/encryption/qe/MongoQueryableEncryptionCollectionManager.java 72 c4eba71a5cac8dcf3d243a34d67fc025c1ca9ab2 main/java/dev/caskeleton/adapter/outbound/mongo/advanced/encryption/qe/MongoQueryableEncryptionProfile.java 75 436fc3081a1d3a31964904617c62fe82b5634cdc main/java/dev/caskeleton/adapter/outbound/mongo/advanced/encryption/qe/MongoQueryableEncryptionQueryType.java 19 f48ecabd05430ccd7ff147038d3a99d65754b780 main/java/dev/caskeleton/adapter/outbound/mongo/advanced/gridfs/MongoGridFsCompatibilityReader.java 45 9a64c88c5d4041bfb0fc822867ce2845add2901f main/java/dev/caskeleton/adapter/outbound/mongo/advanced/gridfs/MongoGridFsMigrationCheckpoint.java 106 6ab3e4e59f6ae0553ef65439be2f358ef837dbb6 main/java/dev/caskeleton/adapter/outbound/mongo/advanced/gridfs/MongoGridFsMigrationJob.java 86 58dec8cf9ff53b6b5f643a0d17521e4222901e57 main/java/dev/caskeleton/adapter/outbound/mongo/advanced/gridfs/MongoGridFsObjectReference.java 33 3f201c0830d8743d022c7048f295baacffad1e7a main/java/dev/caskeleton/adapter/outbound/mongo/advanced/search/MongoSearchIndexDescriptor.java 38 3b4f825030dab1985e0faefa05e2f25b74395e8a main/java/dev/caskeleton/adapter/outbound/mongo/advanced/search/MongoSearchIndexState.java 32 d8c87417264c8d6288ab1788dcd71d94ac5940aa main/java/dev/caskeleton/adapter/outbound/mongo/advanced/search/MongoSearchOperations.java 28 f371ff53b7127138ef03d5faf0a795dd703292fa main/java/dev/caskeleton/adapter/outbound/mongo/advanced/search/MongoSearchQuery.java 57 fa4737ae0f1a0647f0e1c861ec23cba7ad4694e2 main/java/dev/caskeleton/adapter/outbound/mongo/advanced/search/MongoSearchReadinessGate.java 37 77525497a042f7d2354721a2a7590c77ebf05c25 main/java/dev/caskeleton/adapter/outbound/mongo/advanced/sharding/MongoRoutingClassification.java 29 d0a809bc54d712cd102ef27e2de3b9a4e5d861a4 main/java/dev/caskeleton/adapter/outbound/mongo/advanced/sharding/ShardAwareQueryValidator.java 89 40ba3eae2d898ecd7b02c99f0f960683ff1a9026 main/java/dev/caskeleton/adapter/outbound/mongo/advanced/sharding/ShardKeyDescriptor.java 75 d7772f9446c764421ccbed83dee671a2c59f8d3e main/java/dev/caskeleton/adapter/outbound/mongo/advanced/sharding/ShardKeyPart.java 20 4367c5bdbc898bc1d6f39069ea6ed192ab847010 main/java/dev/caskeleton/adapter/outbound/mongo/advanced/sharding/ShardStrategy.java 23 e8b325e6fc5373e3adf7facd11064937132f7d7c main/java/dev/caskeleton/adapter/outbound/mongo/advanced/sharding/admin/MongoShardingAdminGateway.java 94 c061609d842ff0aca9e7dc14b25e65e36e98acbd main/java/dev/caskeleton/adapter/outbound/mongo/advanced/sharding/admin/ReshardApproval.java 55 6b1d5c4e1629d5fa41bc9487782518829a7868a9 main/java/dev/caskeleton/adapter/outbound/mongo/advanced/sharding/admin/ShardKeyAnalyzer.java 78 46cb8bf0f8ef7364ac723fc9c2df53bfcaafdbd1 main/java/dev/caskeleton/adapter/outbound/mongo/advanced/sharding/admin/ShardKeyReadinessReport.java 61 d322b44756a0d7066e2d03dfb496042b2f39af04 main/java/dev/caskeleton/adapter/outbound/mongo/advanced/tenancy/database/MongoTenantClientRegistry.java 141 c1abb429cd5f94ee8ceb9ac7fbe40fb0d61e4ff6 main/java/dev/caskeleton/adapter/outbound/mongo/advanced/tenancy/database/MongoTenantDatabaseResolver.java 18 395a950d8873bac0b7497562e534bee7217cfaa1 main/java/dev/caskeleton/adapter/outbound/mongo/advanced/tenancy/database/MongoTenantLifecyclePolicy.java 74 82062210a9f80c077858d5649152c3a8ecd78574 main/java/dev/caskeleton/adapter/outbound/mongo/advanced/tenancy/database/MongoTenantMigrationCheckpointStore.java 31 5e6cef68234114f4441ed526c5b9ea102d26865a main/java/dev/caskeleton/adapter/outbound/mongo/advanced/tenancy/database/MongoTenantMigrationCoordinator.java 134 68457ed1fcccbdc1db8783973abc2a488b2c0033 main/java/dev/caskeleton/adapter/outbound/mongo/advanced/tenancy/shared/MongoTenantContext.java 52 2b2ab94c13123b2bd1e3da8db3ef0271d4fb6b07 main/java/dev/caskeleton/adapter/outbound/mongo/advanced/tenancy/shared/MongoTenantManifestValidator.java 70 11e935c18a38b1aa28704ccfe2f90022961aabb3 main/java/dev/caskeleton/adapter/outbound/mongo/advanced/tenancy/shared/MongoTenantPredicateInjector.java 67 19c752c2e3c93358932d7cfbbaedef76c482b163 main/java/dev/caskeleton/adapter/outbound/mongo/advanced/tenancy/shared/TenantScopedMongoOperations.java 39 d3964e66a3232a317d58aebb69f225a3107e8c66 main/java/dev/caskeleton/adapter/outbound/mongo/advanced/timeseries/MongoTimeSeriesCapability.java 24 256607703623d14df02ca42caac6fc5008c5e456 main/java/dev/caskeleton/adapter/outbound/mongo/advanced/timeseries/MongoTimeSeriesCapabilityValidator.java 70 edc4892d5534c6806111dd5d562b175ab5f9e3e5 main/java/dev/caskeleton/adapter/outbound/mongo/advanced/timeseries/MongoTimeSeriesDescriptor.java 52 e89ca8f952e66889127afdada563fda74e36f8af main/java/dev/caskeleton/adapter/outbound/mongo/advanced/timeseries/MongoTimeSeriesGranularity.java 33 6649eff9590942094adedd2f114f6a9b0ec8a608 main/java/dev/caskeleton/adapter/outbound/mongo/advanced/timeseries/MongoTimeSeriesOperations.java 34 31a0987535a07f5320921542aa14248bf75248e2 main/java/dev/caskeleton/adapter/outbound/mongo/advanced/timeseries/MongoTimeSeriesSupport.java 40 abf5bd6a66042ed92869f561ff44341dd32dafe9 main/java/dev/caskeleton/adapter/outbound/mongo/advanced/vector/MongoEmbedding.java 65 efde94add89c656f4c9d75e93a495e6a63c80cc8 main/java/dev/caskeleton/adapter/outbound/mongo/advanced/vector/MongoVectorIndexDescriptor.java 53 8f8a962368163508d4b9f0572c2968292b5cd8ea main/java/dev/caskeleton/adapter/outbound/mongo/advanced/vector/MongoVectorQuery.java 62 a8677d6e3a3f97a6b1f7c12203951c98915ae149 main/java/dev/caskeleton/adapter/outbound/mongo/advanced/vector/MongoVectorSearchBenchmarkGate.java 60 c4f034b9ab823dfc15f89f22ac73b381bcefcb69 main/java/dev/caskeleton/adapter/outbound/mongo/advanced/vector/MongoVectorSearchOperations.java 37 cce5a22c86eae1da860b17bf9c0dc1c5e4de3edc test/java/dev/caskeleton/adapter/outbound/mongo/advanced/MongoAdvancedPromotionGateTest.java 97 360f67467463ad5aad2647554ada6d04a76bf9fb test/java/dev/caskeleton/adapter/outbound/mongo/advanced/autoconfigure/MongoAdvancedConfigurationTest.java 109 efd2c30ccd34991599ec31a3fbaf81aa63180d34 test/java/dev/caskeleton/adapter/outbound/mongo/advanced/bridge/MongoChangeMessagingBridgeTest.java 159 4eea828823db53ad6fc98bfeb3478054697dfb13 test/java/dev/caskeleton/adapter/outbound/mongo/advanced/encryption/MongoEncryptionContractTest.java 158 6689b007848f5c089836ec204f864734f76739bb test/java/dev/caskeleton/adapter/outbound/mongo/advanced/gridfs/MongoGridFsMigrationJobTest.java 197 862fe567c572a8eda132849606fddfa30dd44564 test/java/dev/caskeleton/adapter/outbound/mongo/advanced/search/MongoSearchReadinessGateTest.java 110 e504b3a379f503c173a748809557ecd05c2a2184 test/java/dev/caskeleton/adapter/outbound/mongo/advanced/sharding/ShardAwareQueryValidatorTest.java 81 77f7540a360d6235054b372897ffede9c3f0cd08 test/java/dev/caskeleton/adapter/outbound/mongo/advanced/sharding/admin/ShardKeyAnalyzerTest.java 103 b3869ce22bf9348db19ce6f61806fef4517a0d75 test/java/dev/caskeleton/adapter/outbound/mongo/advanced/tenancy/MongoTenancyContractTest.java 276 66c0f6a2991e5049f97233a41e48bb320703c3a5 test/java/dev/caskeleton/adapter/outbound/mongo/advanced/timeseries/MongoTimeSeriesCapabilityValidatorTest.java 75 production: 65 test: 10 production LOC: 3439 total === 8.1 reachability: the guard bean and who imports the Advanced configuration === $ git grep -rn 'MongoAdvancedConfiguration' -- . | grep -v 'advanced/autoconfigure/MongoAdvancedConfiguration.java' adapter/outbound/persistence-mongo/CLAUDE.md:142: `MongoAdvancedProperties`. `MongoAdvancedConfiguration` is imported by name, never auto-loaded: adapter/outbound/persistence-mongo/src/main/java/dev/caskeleton/adapter/outbound/mongo/advanced/autoconfigure/MongoAdvancedSettings.java:19: * MongoAdvancedConfigurationTest} asserts the two cannot drift apart. adapter/outbound/persistence-mongo/src/test/java/dev/caskeleton/adapter/outbound/mongo/advanced/autoconfigure/MongoAdvancedConfigurationTest.java:26:class MongoAdvancedConfigurationTest { adapter/outbound/persistence-mongo/src/test/java/dev/caskeleton/adapter/outbound/mongo/advanced/autoconfigure/MongoAdvancedConfigurationTest.java:31: .withUserConfiguration(MongoAdvancedConfiguration.class) adapter/outbound/persistence-mongo/src/test/java/dev/caskeleton/adapter/outbound/mongo/advanced/autoconfigure/MongoAdvancedConfigurationTest.java:46: .withUserConfiguration(MongoAdvancedConfiguration.class) exit=0 $ grep -rn 'advanced' adapter/outbound/persistence-mongo/src/main/resources/META-INF/spring/*.imports exit=1 $ git grep -rn 'MongoAdvancedCapabilityGuard' -- 'adapter/outbound/persistence-mongo/src/main' | grep -v '/advanced/' exit=1 === 8.1b the entry-point / policy classification, counted === $ git grep -l '@MongoAdvancedEntryPoint' -- 'adapter/outbound/persistence-mongo/src/main/java/dev/caskeleton/adapter/outbound/mongo/advanced' | sort adapter/outbound/persistence-mongo/src/main/java/dev/caskeleton/adapter/outbound/mongo/advanced/bridge/MongoChangeMessagingBridge.java adapter/outbound/persistence-mongo/src/main/java/dev/caskeleton/adapter/outbound/mongo/advanced/encryption/csfle/MongoCsfleClientFactory.java adapter/outbound/persistence-mongo/src/main/java/dev/caskeleton/adapter/outbound/mongo/advanced/encryption/qe/MongoQueryableEncryptionCollectionManager.java adapter/outbound/persistence-mongo/src/main/java/dev/caskeleton/adapter/outbound/mongo/advanced/gridfs/MongoGridFsMigrationJob.java adapter/outbound/persistence-mongo/src/main/java/dev/caskeleton/adapter/outbound/mongo/advanced/sharding/admin/MongoShardingAdminGateway.java adapter/outbound/persistence-mongo/src/main/java/dev/caskeleton/adapter/outbound/mongo/advanced/tenancy/database/MongoTenantClientRegistry.java adapter/outbound/persistence-mongo/src/main/java/dev/caskeleton/adapter/outbound/mongo/advanced/tenancy/database/MongoTenantMigrationCoordinator.java exit=0 $ git grep -l '@MongoAdvancedPolicy' -- 'adapter/outbound/persistence-mongo/src/main/java/dev/caskeleton/adapter/outbound/mongo/advanced' | sort adapter/outbound/persistence-mongo/src/main/java/dev/caskeleton/adapter/outbound/mongo/advanced/MongoAdvancedCapabilityFlags.java adapter/outbound/persistence-mongo/src/main/java/dev/caskeleton/adapter/outbound/mongo/advanced/MongoAdvancedCapabilityGuard.java adapter/outbound/persistence-mongo/src/main/java/dev/caskeleton/adapter/outbound/mongo/advanced/MongoAdvancedPromotionGate.java adapter/outbound/persistence-mongo/src/main/java/dev/caskeleton/adapter/outbound/mongo/advanced/encryption/qe/MongoEncryptionMetadataOwnership.java adapter/outbound/persistence-mongo/src/main/java/dev/caskeleton/adapter/outbound/mongo/advanced/search/MongoSearchReadinessGate.java adapter/outbound/persistence-mongo/src/main/java/dev/caskeleton/adapter/outbound/mongo/advanced/sharding/ShardAwareQueryValidator.java adapter/outbound/persistence-mongo/src/main/java/dev/caskeleton/adapter/outbound/mongo/advanced/sharding/admin/ShardKeyAnalyzer.java adapter/outbound/persistence-mongo/src/main/java/dev/caskeleton/adapter/outbound/mongo/advanced/tenancy/shared/MongoTenantManifestValidator.java adapter/outbound/persistence-mongo/src/main/java/dev/caskeleton/adapter/outbound/mongo/advanced/tenancy/shared/MongoTenantPredicateInjector.java adapter/outbound/persistence-mongo/src/main/java/dev/caskeleton/adapter/outbound/mongo/advanced/timeseries/MongoTimeSeriesCapabilityValidator.java adapter/outbound/persistence-mongo/src/main/java/dev/caskeleton/adapter/outbound/mongo/advanced/vector/MongoEmbedding.java exit=0 $ git grep -c 'public final class\|public class' -- 'adapter/outbound/persistence-mongo/src/main/java/dev/caskeleton/adapter/outbound/mongo/advanced' | wc -l 19 exit=0 $ git grep -n 'MongoAdvancedRules' -- 'adapter/outbound/persistence-mongo/src' adapter/outbound/persistence-mongo/src/main/java/dev/caskeleton/adapter/outbound/mongo/advanced/MongoAdvancedEntryPoint.java:22: * the first call against a cluster that has no such feature. {@code MongoAdvancedRules} enforces adapter/outbound/persistence-mongo/src/test/java/dev/caskeleton/adapter/outbound/mongo/architecture/MongoAdvancedRulesTest.java:12:import dev.caskeleton.adapter.outbound.mongo.testkit.arch.MongoAdvancedRules; adapter/outbound/persistence-mongo/src/test/java/dev/caskeleton/adapter/outbound/mongo/architecture/MongoAdvancedRulesTest.java:28:class MongoAdvancedRulesTest { adapter/outbound/persistence-mongo/src/test/java/dev/caskeleton/adapter/outbound/mongo/architecture/MongoAdvancedRulesTest.java:38: assertThatCode(() -> MongoAdvancedRules.everyAdvancedTypeIsClassified().check(production)) adapter/outbound/persistence-mongo/src/test/java/dev/caskeleton/adapter/outbound/mongo/architecture/MongoAdvancedRulesTest.java:45: assertThatCode(() -> MongoAdvancedRules.everyEntryPointConsultsTheGuard().check(production)) adapter/outbound/persistence-mongo/src/test/java/dev/caskeleton/adapter/outbound/mongo/architecture/MongoAdvancedRulesTest.java:56: MongoAdvancedRules.everyAdvancedTypeIsClassified( adapter/outbound/persistence-mongo/src/test/java/dev/caskeleton/adapter/outbound/mongo/architecture/MongoAdvancedRulesTest.java:57: MongoAdvancedRulesTest.class.getPackageName() + "..") adapter/outbound/persistence-mongo/src/test/java/dev/caskeleton/adapter/outbound/mongo/architecture/MongoAdvancedRulesTest.java:68: assertThatThrownBy(() -> MongoAdvancedRules.everyEntryPointConsultsTheGuard().check(fixtures)) adapter/outbound/persistence-mongo/src/test/java/dev/caskeleton/adapter/outbound/mongo/architecture/MongoAdvancedRulesTest.java:79: assertThatThrownBy(() -> MongoAdvancedRules.everyEntryPointConsultsTheGuard().check(fixtures)) adapter/outbound/persistence-mongo/src/testkit/java/dev/caskeleton/adapter/outbound/mongo/testkit/arch/MongoAdvancedRules.java:29:public final class MongoAdvancedRules { adapter/outbound/persistence-mongo/src/testkit/java/dev/caskeleton/adapter/outbound/mongo/testkit/arch/MongoAdvancedRules.java:33: private MongoAdvancedRules() {} exit=0 === 8.2 the sharding admin gateway: high-risk operations through the 5-arg execute === $ grep -n 'adminGateway.execute' adapter/outbound/persistence-mongo/src/main/java/dev/caskeleton/adapter/outbound/mongo/advanced/sharding/admin/MongoShardingAdminGateway.java 64: adminGateway.execute(MongoAdminOperation.SHARD_COLLECTION, collection, operator, reason, apply); 75: adminGateway.execute(MongoAdminOperation.REFINE_SHARD_KEY, collection, operator, reason, apply); 86: adminGateway.execute( 92: adminGateway.execute(MongoAdminOperation.BALANCER_CONTROL, scope, operator, reason, apply); exit=0 $ grep -n 'SHARD_COLLECTION\|REFINE_SHARD_KEY\|RESHARD_COLLECTION\|BALANCER_CONTROL' adapter/outbound/persistence-mongo/src/main/java/dev/caskeleton/adapter/outbound/mongo/security/admin/MongoAdminOperation.java 37: SHARD_COLLECTION(true), 40: REFINE_SHARD_KEY(true), 43: RESHARD_COLLECTION(true), 46: BALANCER_CONTROL(false), exit=0 $ grep -n 'public T execute(' -A 14 adapter/outbound/persistence-mongo/src/main/java/dev/caskeleton/adapter/outbound/mongo/security/admin/MongoAdminGateway.java | head -40 57: public T execute( 58- MongoAdminOperation operation, 59- String target, 60- String operator, 61- String reason, 62- Supplier body) { 63- return execute( 64- MongoAdminCommand.routine( 65- operation, target, operator, reason, clock.instant().plus(COMMAND_VALIDITY)), 66- null, 67- body); 68- } 69- 70- /** 71- * Runs one administrative command under the audit state machine. -- 83: public T execute(MongoAdminCommand command, MongoAdminApproval approval, Supplier body) { 84- Objects.requireNonNull(command, "command"); 85- Objects.requireNonNull(body, "body"); 86- Instant now = clock.instant(); 87- authorization.require(command.operation()); 88- if (command.expiredAt(now)) { 89- throw MongoOperationRejectedException.of( 90- "admin.command", 91- "this admin command expired before it ran; a stale command may describe a cluster that no" 92- + " longer looks like the one it was written for"); 93- } 94- if (command.operation().highRisk()) { 95- if (approval == null) { 96- throw MongoOperationRejectedException.of( 97- "admin.approval", exit=0 === 8.2b duplicated shard-key/index compatibility logic === $ grep -n 'supportsUniqueIndexOn' -A 10 adapter/outbound/persistence-mongo/src/main/java/dev/caskeleton/adapter/outbound/mongo/advanced/sharding/ShardKeyDescriptor.java 67: public boolean supportsUniqueIndexOn(List indexFields) { 68- Objects.requireNonNull(indexFields, "indexFields"); 69- List shardFields = fields(); 70- if (indexFields.size() < shardFields.size()) { 71- return false; 72- } 73- return indexFields.subList(0, shardFields.size()).equals(shardFields); 74- } 75-} exit=0 $ grep -n 'supportingIndexFields' -A 8 adapter/outbound/persistence-mongo/src/main/java/dev/caskeleton/adapter/outbound/mongo/advanced/sharding/admin/MongoShardingAdminGateway.java 42: List supportingIndexFields, 43- String operator, 44- String reason, 45- Supplier apply) { 46- Objects.requireNonNull(collection, "collection"); 47- Objects.requireNonNull(shardKey, "shardKey"); 48- Objects.requireNonNull(readiness, "readiness"); 49- if (!readiness.approved()) { 50- throw MongoOperationRejectedException.of( -- 54: if (!supportingIndexFields 55: .subList(0, Math.min(shardKey.fields().size(), supportingIndexFields.size())) 56- .equals(shardKey.fields())) { 57- throw MongoOperationRejectedException.of( 58- "sharding.shard-collection", 59- "sharding '" 60- + collection 61- + "' needs a supporting index prefixed by the shard key " 62- + shardKey.fields()); 63- } exit=0 === 8.3 two promotion-evidence vocabularies === $ grep -n 'REQUIRED =' -A 3 adapter/outbound/persistence-mongo/src/main/java/dev/caskeleton/adapter/outbound/mongo/advanced/MongoAdvancedPromotionEvidence.java 18: public static final Set REQUIRED = 19- Set.of("stable-platform", "actual-topology", "security", "migration", "failure", "runbook"); 20- 21- public MongoAdvancedPromotionEvidence { exit=0 $ grep -n 'requiredEvidence' -A 5 adapter/outbound/persistence-mongo/src/main/java/dev/caskeleton/adapter/outbound/mongo/advanced/vector/MongoVectorSearchBenchmarkGate.java 56: public static Set requiredEvidence() { 57- return Objects.requireNonNull( 58- Set.of("index-readiness", "recall", "latency", "memory", "actual-topology")); 59- } 60-} exit=0 $ git grep -n 'MongoVectorSearchBenchmarkGate\|requiredEvidence()' -- 'adapter/outbound/persistence-mongo/src' adapter/outbound/persistence-mongo/src/main/java/dev/caskeleton/adapter/outbound/mongo/advanced/vector/MongoVectorSearchBenchmarkGate.java:15:public record MongoVectorSearchBenchmarkGate( adapter/outbound/persistence-mongo/src/main/java/dev/caskeleton/adapter/outbound/mongo/advanced/vector/MongoVectorSearchBenchmarkGate.java:19: public static MongoVectorSearchBenchmarkGate standard() { adapter/outbound/persistence-mongo/src/main/java/dev/caskeleton/adapter/outbound/mongo/advanced/vector/MongoVectorSearchBenchmarkGate.java:20: return new MongoVectorSearchBenchmarkGate(0.9, 200, 4L * 1024 * 1024 * 1024); adapter/outbound/persistence-mongo/src/main/java/dev/caskeleton/adapter/outbound/mongo/advanced/vector/MongoVectorSearchBenchmarkGate.java:23: public MongoVectorSearchBenchmarkGate { adapter/outbound/persistence-mongo/src/main/java/dev/caskeleton/adapter/outbound/mongo/advanced/vector/MongoVectorSearchBenchmarkGate.java:56: public static Set requiredEvidence() { adapter/outbound/persistence-mongo/src/test/java/dev/caskeleton/adapter/outbound/mongo/advanced/search/MongoSearchReadinessGateTest.java:10:import dev.caskeleton.adapter.outbound.mongo.advanced.vector.MongoVectorSearchBenchmarkGate; adapter/outbound/persistence-mongo/src/test/java/dev/caskeleton/adapter/outbound/mongo/advanced/search/MongoSearchReadinessGateTest.java:104: MongoVectorSearchBenchmarkGate benchmark = MongoVectorSearchBenchmarkGate.standard(); adapter/outbound/persistence-mongo/src/test/java/dev/caskeleton/adapter/outbound/mongo/advanced/search/MongoSearchReadinessGateTest.java:108: assertThat(MongoVectorSearchBenchmarkGate.requiredEvidence()).contains("recall"); exit=0 === 8.3b scaffold interfaces: implementations and disclaimers === --- MongoSearchOperations implementations: says Scaffold: adapter/outbound/persistence-mongo/src/main/java/dev/caskeleton/adapter/outbound/mongo/advanced/search/MongoSearchOperations.java:1 --- MongoTimeSeriesOperations implementations: says Scaffold: adapter/outbound/persistence-mongo/src/main/java/dev/caskeleton/adapter/outbound/mongo/advanced/timeseries/MongoTimeSeriesOperations.java:1 --- MongoVectorSearchOperations implementations: says Scaffold: adapter/outbound/persistence-mongo/src/main/java/dev/caskeleton/adapter/outbound/mongo/advanced/vector/MongoVectorSearchOperations.java:1 --- TenantScopedMongoOperations implementations: says Scaffold: none --- MongoTenantDatabaseResolver implementations: says Scaffold: none --- MongoDataKeyResolver implementations: says Scaffold: none --- MongoIntegrationEventPublisher implementations: says Scaffold: none --- MongoChangeToIntegrationEventMapper implementations: says Scaffold: none === 8.4 documentation drift: what the module docs claim about Advanced === $ grep -rn 'Advanced' adapter/outbound/persistence-mongo/README.md | head -25 87:| `advanced/**` | opt-in Advanced/Experimental capability (sharding, time series, CSFLE, QE, search, vector, tenancy, bridge, GridFS) | 97: 무의존, Stable은 Advanced에 의존 금지, production은 testkit에 의존 금지, imperative↛reactive, exit=0 $ grep -rn 'advanced' adapter/outbound/persistence-mongo/build.gradle | head 3:// and docs/mongodb/repository-adaptation.md (how the design's 19 stable + 12 advanced library 7:// `modules/mongodb` and `modules/mongodb-advanced`. This repository's fail-closed module registry exit=0 === 8.1c the 19th concrete class: which one carries neither annotation === $ git grep -l 'public final class\|public class' -- 'adapter/outbound/persistence-mongo/src/main/java/dev/caskeleton/adapter/outbound/mongo/advanced' | sort > /tmp/all19.txt; git grep -l '@MongoAdvancedEntryPoint\|@MongoAdvancedPolicy' -- 'adapter/outbound/persistence-mongo/src/main/java/dev/caskeleton/adapter/outbound/mongo/advanced' | sort > /tmp/ann18.txt; comm -23 /tmp/all19.txt /tmp/ann18.txt adapter/outbound/persistence-mongo/src/main/java/dev/caskeleton/adapter/outbound/mongo/advanced/autoconfigure/MongoAdvancedConfiguration.java exit=0 $ grep -n 'ADVANCED_PACKAGE\|everyAdvancedTypeIsClassified' -A 20 adapter/outbound/persistence-mongo/src/testkit/java/dev/caskeleton/adapter/outbound/mongo/testkit/arch/MongoAdvancedRules.java | head -50 23: *

Two rules, because one alone is escapable. {@link #everyAdvancedTypeIsClassified()} makes a 24- * new concrete class declare which half it is in, so "we only gate the executable ones" cannot 25- * quietly become "we gate the ones somebody remembered". {@link #everyEntryPointConsultsTheGuard()} 26- * then checks that a declared entry point takes a {@link MongoAdvancedCapabilityGuard} and calls 27- * it, which is the part that actually refuses. 28- */ 29-public final class MongoAdvancedRules { 30- 31: private static final String ADVANCED_PACKAGE = "dev.caskeleton.adapter.outbound.mongo.advanced.."; 32- 33- private MongoAdvancedRules() {} 34- 35- /** Every concrete Advanced class states whether it executes or only decides. */ 36: public static ArchRule everyAdvancedTypeIsClassified() { 37: return everyAdvancedTypeIsClassified(ADVANCED_PACKAGE); 38- } 39- 40- /** The same rule over a stated package, so a fixture can prove it fails. */ 41: public static ArchRule everyAdvancedTypeIsClassified(String... packageIdentifiers) { 42- return ArchRuleDefinition.classes() 43- .that() 44- .resideInAnyPackage(packageIdentifiers) 45- .and(concreteClass()) 46- .should() 47- .beAnnotatedWith(MongoAdvancedEntryPoint.class) 48- .orShould() 49- .beAnnotatedWith(MongoAdvancedPolicy.class) 50- .as( 51- "every concrete Advanced type is annotated @MongoAdvancedEntryPoint or" 52- + " @MongoAdvancedPolicy") 53- .because( 54- "an unclassified class is one nobody decided about, and the capability invariant is" 55- + " only as strong as the weakest unclassified entry point"); 56- } 57- 58- /** A declared entry point takes the guard and asks it before it exists. */ 59- public static ArchRule everyEntryPointConsultsTheGuard() { 60- return ArchRuleDefinition.classes() 61- .that() exit=0 === 8.2c does any test drive MongoShardingAdminGateway? === $ git grep -n 'MongoShardingAdminGateway' -- 'adapter/outbound/persistence-mongo/src' adapter/outbound/persistence-mongo/src/main/java/dev/caskeleton/adapter/outbound/mongo/advanced/sharding/admin/MongoShardingAdminGateway.java:22:public final class MongoShardingAdminGateway { adapter/outbound/persistence-mongo/src/main/java/dev/caskeleton/adapter/outbound/mongo/advanced/sharding/admin/MongoShardingAdminGateway.java:26: public MongoShardingAdminGateway( adapter/outbound/persistence-mongo/src/main/java/dev/caskeleton/adapter/outbound/mongo/advanced/sharding/admin/MongoShardingAdminGateway.java:30: Objects.requireNonNull(guard, "guard").require(MongoShardingAdminGateway.class); exit=0 === 8.3c the bridge is a second writer of the change stream checkpoint store === $ git grep -n 'checkpoints.save' -- 'adapter/outbound/persistence-mongo/src/main' adapter/outbound/persistence-mongo/src/main/java/dev/caskeleton/adapter/outbound/mongo/advanced/bridge/MongoChangeMessagingBridge.java:60: return checkpoints.save(checkpoint); adapter/outbound/persistence-mongo/src/main/java/dev/caskeleton/adapter/outbound/mongo/advanced/bridge/MongoChangeMessagingBridge.java:84: ? checkpoints.save(checkpoint) adapter/outbound/persistence-mongo/src/main/java/dev/caskeleton/adapter/outbound/mongo/advanced/tenancy/database/MongoTenantMigrationCoordinator.java:74: checkpoints.save( adapter/outbound/persistence-mongo/src/main/java/dev/caskeleton/adapter/outbound/mongo/changestream/projector/MongoChangeStreamRunner.java:75: ? checkpoints.save(checkpoint).thenReturn(result) exit=0 === 8.3d TenantScopedMongoOperations is the one scaffold interface with no disclaimer === $ git grep -n 'Scaffold' -- 'adapter/outbound/persistence-mongo/src/main/java/dev/caskeleton/adapter/outbound/mongo/advanced' adapter/outbound/persistence-mongo/src/main/java/dev/caskeleton/adapter/outbound/mongo/advanced/search/MongoSearchOperations.java:13: *

Scaffold. This repository ships no implementation of {@code adapter/outbound/persistence-mongo/src/main/java/dev/caskeleton/adapter/outbound/mongo/advanced/timeseries/MongoTimeSeriesOperations.java:14: *

Scaffold. This repository ships no implementation of {@code adapter/outbound/persistence-mongo/src/main/java/dev/caskeleton/adapter/outbound/mongo/advanced/vector/MongoVectorSearchOperations.java:14: *

Scaffold. This repository ships no implementation of {@code exit=0 $ git grep -rn 'implements TenantScopedMongoOperations\|implements MongoSearchOperations\|implements MongoTimeSeriesOperations\|implements MongoVectorSearchOperations' -- 'adapter/outbound/persistence-mongo/src' exit=1 === 8.1d why the rule passes despite MongoAdvancedConfiguration carrying neither annotation === $ grep -n 'concreteClass' -A 20 adapter/outbound/persistence-mongo/src/testkit/java/dev/caskeleton/adapter/outbound/mongo/testkit/arch/MongoAdvancedRules.java | tail -30 58- /** A declared entry point takes the guard and asks it before it exists. */ 59- public static ArchRule everyEntryPointConsultsTheGuard() { 60- return ArchRuleDefinition.classes() 61- .that() 62- .areAnnotatedWith(MongoAdvancedEntryPoint.class) 63- .should(consultTheGuardInEveryConstructor()) 64- .because( 65- "a capability that is checked at the first call has already been wired into a running" -- 69: private static com.tngtech.archunit.base.DescribedPredicate concreteClass() { 70- return new com.tngtech.archunit.base.DescribedPredicate<>("are concrete classes") { 71- @Override 72- public boolean test(JavaClass candidate) { 73- // A @Configuration class is the package's composition root: it builds entry points through 74- // the guard rather than being one, and gating it would gate the thing that supplies the 75- // guard. 76- return !candidate.isInterface() 77- && !candidate.isEnum() 78- && !candidate.isRecord() 79- && !candidate.isAnnotation() 80- && !candidate.isAnonymousClass() 81- && !candidate.isAnnotatedWith("org.springframework.context.annotation.Configuration") 82- // A private nested helper cannot be constructed from outside its enclosing type, so the 83- // enclosing type's classification already covers everything it can do. 84- && !candidate 85- .getModifiers() 86- .contains(com.tngtech.archunit.core.domain.JavaModifier.PRIVATE) 87- && !candidate 88- .getModifiers() 89- .contains(com.tngtech.archunit.core.domain.JavaModifier.ABSTRACT); exit=0 $ sed -n '28,50p' adapter/outbound/persistence-mongo/src/test/java/dev/caskeleton/adapter/outbound/mongo/architecture/MongoAdvancedRulesTest.java class MongoAdvancedRulesTest { private final JavaClasses production = new ClassFileImporter() .withImportOption(ImportOption.Predefined.DO_NOT_INCLUDE_TESTS) .importPackages("dev.caskeleton.adapter.outbound.mongo.advanced"); @Test @DisplayName("every concrete Advanced type declares whether it executes") void everyAdvancedTypeIsClassified() { assertThatCode(() -> MongoAdvancedRules.everyAdvancedTypeIsClassified().check(production)) .doesNotThrowAnyException(); } @Test @DisplayName("every declared entry point consults the capability guard") void everyEntryPointConsultsTheGuard() { assertThatCode(() -> MongoAdvancedRules.everyEntryPointConsultsTheGuard().check(production)) .doesNotThrowAnyException(); } @Test @DisplayName("an unclassified Advanced class fails the classification rule") exit=0 === PROBE (execution): every sharding operation with complete evidence === One temporary probe class was added, run, and removed: src/test/.../advanced/sharding/Ss10ShardingProbe.java (@Tag mongodb-contract, hermetic) Inputs: SHARDING capability enabled; MongoAdminAuthorization.approved(all four operations, 'release-engineer') - i.e. a named approver AND a completed dry run; an approved ShardKeyReadinessReport; a complete ReshardApproval (approved readiness, dry run completed, named approver, written forward strategy); a supporting index prefixed by the shard key; a non-expired command clock. PROBE shardCollection -> REFUSED MongoOperationRejectedException: admin operation SHARD_COLLECTION destroys data or rewrites a collection; it runs under an approval bound to this exact command or not at all PROBE refineShardKey -> REFUSED (same, REFINE_SHARD_KEY) PROBE reshardCollection-> REFUSED (same, RESHARD_COLLECTION) PROBE controlBalancer -> APPLIED PROBE bodies actually executed = 1 of 4 Reading: MongoShardingAdminGateway routes its three high-risk operations through MongoAdminGateway's 5-argument execute convenience, which builds MongoAdminCommand.routine and passes approval = null. MongoAdminGateway.execute(command, approval, body) refuses any highRisk() operation when approval == null. The gateway builds a complete ReshardApproval of its own and hands none of it to the plane that decides. $ git status --short | wc -l 0 exit=0