Sub-scope 01 (mongo) negative-space probes: opt-in reachability, conditional siblings, duplicate mechanisms
revision=a24ece9cf797f7ea647e33bf846b115208ed1ba5
executedAt=2026-08-29T23:03:26+00:00
cwd=/shared/codebase/clean-architecture-backend-template/src
observation boundary: tracked sources at this revision; reflection, generated registration and
consumers outside this repository are not covered.

=== 8.1 leaf root/autoconfigure public types consumed outside the owning leaf ===
MongoRootAutoConfiguration                 app-bootstrap/src/test/java/dev/caskeleton/bootstrap/activation/ShippedRuntimeFacadePresenceTest.java 
MongoPersistenceConfig                     
MongoPersistenceSettings                   
MongoOptInAutoConfigurationImportFilter    
MongoPlatformAutoConfiguration             
MongoPlatformSettings                      
MongoProfileProperties                     
MongoStartupValidator                      
MongoTopologyProbe                         
MongoPlatformHealthIndicator               app-bootstrap/src/main/java/dev/caskeleton/bootstrap/mongo/MongoPlatformHealthConfig.java app-bootstrap/src/main/java/dev/caskeleton/bootstrap/mongo/MongoPlatformHealthContributor.java app-bootstrap/src/test/java/dev/caskeleton/bootstrap/mongo/MongoPlatformHealthContributorTest.java 
MongoClientGenerationRegistry              
MongoClientGeneration                      
MongoDriverObservabilityAutoConfiguration  

=== 8.1b auto-configuration registration resources ===
$ cat adapter/outbound/persistence-mongo/src/main/resources/META-INF/spring.factories
org.springframework.boot.autoconfigure.AutoConfigurationImportFilter=\
dev.caskeleton.adapter.outbound.mongo.MongoOptInAutoConfigurationImportFilter
exit=0

$ cat adapter/outbound/persistence-mongo/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports
dev.caskeleton.adapter.outbound.mongo.MongoRootAutoConfiguration
exit=0

=== 8.2 conditional siblings: every production site that reads the module master switch ===
$ git grep -n 'ca-skeleton.persistence-mongo' -- 'adapter/outbound/persistence-mongo/src/main'
adapter/outbound/persistence-mongo/src/main/java/dev/caskeleton/adapter/outbound/mongo/MongoOptInAutoConfigurationImportFilter.java:17: * candidate set until {@code ca-skeleton.persistence-mongo.enabled=true}.
adapter/outbound/persistence-mongo/src/main/java/dev/caskeleton/adapter/outbound/mongo/MongoOptInAutoConfigurationImportFilter.java:22:  private static final String ENABLE_PROPERTY = "ca-skeleton.persistence-mongo.enabled";
adapter/outbound/persistence-mongo/src/main/java/dev/caskeleton/adapter/outbound/mongo/MongoPersistenceConfig.java:12: * only when {@code ca-skeleton.persistence-mongo.enabled=true}.
adapter/outbound/persistence-mongo/src/main/java/dev/caskeleton/adapter/outbound/mongo/MongoPersistenceConfig.java:22:    prefix = "ca-skeleton.persistence-mongo",
adapter/outbound/persistence-mongo/src/main/java/dev/caskeleton/adapter/outbound/mongo/MongoPersistenceSettings.java:7: * ca-skeleton.persistence-mongo.*}.
adapter/outbound/persistence-mongo/src/main/java/dev/caskeleton/adapter/outbound/mongo/MongoPersistenceSettings.java:21:@ConfigurationProperties(prefix = "ca-skeleton.persistence-mongo")
adapter/outbound/persistence-mongo/src/main/java/dev/caskeleton/adapter/outbound/mongo/MongoRootAutoConfiguration.java:28:    prefix = "ca-skeleton.persistence-mongo",
adapter/outbound/persistence-mongo/src/main/java/dev/caskeleton/adapter/outbound/mongo/advanced/MongoAdvancedCapabilityFlags.java:26:  public static final String PROPERTY_PREFIX = "ca-skeleton.persistence-mongo.advanced";
adapter/outbound/persistence-mongo/src/main/java/dev/caskeleton/adapter/outbound/mongo/advanced/autoconfigure/MongoAdvancedConfiguration.java:24:    prefix = "ca-skeleton.persistence-mongo",
adapter/outbound/persistence-mongo/src/main/java/dev/caskeleton/adapter/outbound/mongo/advanced/autoconfigure/MongoAdvancedSettings.java:15: * ca-skeleton.persistence-mongo.advanced.sharding.enabled=true} and change nothing at all.
adapter/outbound/persistence-mongo/src/main/java/dev/caskeleton/adapter/outbound/mongo/advanced/autoconfigure/MongoAdvancedSettings.java:29:  public static final String PREFIX = "ca-skeleton.persistence-mongo";
adapter/outbound/persistence-mongo/src/main/java/dev/caskeleton/adapter/outbound/mongo/autoconfigure/MongoDriverObservabilityAutoConfiguration.java:29:    prefix = "ca-skeleton.persistence-mongo",
adapter/outbound/persistence-mongo/src/main/java/dev/caskeleton/adapter/outbound/mongo/autoconfigure/MongoPlatformAutoConfiguration.java:44:    prefix = "ca-skeleton.persistence-mongo",
adapter/outbound/persistence-mongo/src/main/java/dev/caskeleton/adapter/outbound/mongo/autoconfigure/MongoPlatformSettings.java:12: * <p>Bound under {@code ca-skeleton.persistence-mongo.platform} rather than the design's {@code
adapter/outbound/persistence-mongo/src/main/java/dev/caskeleton/adapter/outbound/mongo/autoconfigure/MongoPlatformSettings.java:26:@ConfigurationProperties("ca-skeleton.persistence-mongo.platform")
adapter/outbound/persistence-mongo/src/main/java/dev/caskeleton/adapter/outbound/mongo/mapping/MongoMappingConfiguration.java:29:    prefix = "ca-skeleton.persistence-mongo",
exit=0

=== 8.2b production construction sites of MongoStartupValidator ===
$ git grep -n 'new MongoStartupValidator' -- 'adapter/outbound/persistence-mongo/src/main' 'app-bootstrap/src/main'
adapter/outbound/persistence-mongo/src/main/java/dev/caskeleton/adapter/outbound/mongo/autoconfigure/MongoPlatformAutoConfiguration.java:354:      new MongoStartupValidator(
exit=0

$ git grep -n 'new MongoStartupValidator' -- 'adapter/outbound/persistence-mongo/src/test'
adapter/outbound/persistence-mongo/src/test/java/dev/caskeleton/adapter/outbound/mongo/autoconfigure/MongoStartupValidatorTest.java:143:    return new MongoStartupValidator(
exit=0

=== 8.2c changeStreams: the record component, its only writer, and its only reader ===
$ grep -n 'changeStreams' adapter/outbound/persistence-mongo/src/main/java/dev/caskeleton/adapter/outbound/mongo/autoconfigure/MongoPlatformSettings.java
22: * assuming it. Both it and {@code changeStreams} used to be literal {@code true}s passed into
30:    boolean changeStreams,
55:    changeStreams = false;
exit=0

$ grep -n 'changeStreams\|changeStreamsEnabled' adapter/outbound/persistence-mongo/src/main/java/dev/caskeleton/adapter/outbound/mongo/autoconfigure/MongoStartupValidator.java
34:  private final boolean changeStreamsEnabled;
44:      boolean changeStreamsEnabled,
51:    this.changeStreamsEnabled = changeStreamsEnabled;
104:    if (changeStreamsEnabled && !capabilities.isStable(MongoCapability.CHANGE_STREAM)) {
exit=0

=== 8.3 active-profile: required by the composition root, bound by nothing in the leaf ===
$ git grep -n 'active-profile' -- app-bootstrap/src/main
app-bootstrap/src/main/java/dev/caskeleton/bootstrap/activation/CapabilityDependencyValidator.java:105:                MasterSwitch.PERSISTENCE_MONGO.property().replace(".enabled", ".active-profile"),
app-bootstrap/src/main/java/dev/caskeleton/bootstrap/activation/CapabilityDependencyValidator.java:111:              + "ca-skeleton.persistence-mongo.active-profile.");
app-bootstrap/src/main/resources/application.yml:370:    active-profile: ${APP_PERSISTENCE_MONGO_ACTIVE_PROFILE:}
exit=0

$ git grep -n 'active-profile' -- 'adapter/outbound/persistence-mongo'
exit=1

$ sed -n '100,113p' app-bootstrap/src/main/java/dev/caskeleton/bootstrap/activation/CapabilityDependencyValidator.java
              + "=true.");
    }
    if (mongo
        && environment
            .getProperty(
                MasterSwitch.PERSISTENCE_MONGO.property().replace(".enabled", ".active-profile"),
                "")
            .isBlank()) {
      violations.add(
          MasterSwitch.PERSISTENCE_MONGO.property()
              + "=true needs exactly one profile; set "
              + "ca-skeleton.persistence-mongo.active-profile.");
    }
    if (graphQl) {
exit=0

$ grep -n 'CapabilityDependencyValidator.violations' app-bootstrap/src/main/java/dev/caskeleton/bootstrap/activation/CapabilityDependencyStartupCheck.java
26:    List<String> violations = CapabilityDependencyValidator.violations(environment);
exit=0

=== 8.4 documented activation recipe as published by the leaf README ===
$ sed -n '33,40p' adapter/outbound/persistence-mongo/README.md
기본값은 비활성이다.

```properties
ca-skeleton.persistence-mongo.enabled=true
spring.data.mongodb.uri=mongodb://localhost:27017/portfolio
```

활성화 시 `MongoPersistenceConfig`가 Spring Boot의 Mongo client 및 data auto-configuration을
exit=0

