Composition-root scan boundary: which inbound-web packages are excluded from the component scan, and who registers them
revision=a24ece9cf797f7ea647e33bf846b115208ed1ba5
generatedAt=2026-08-30T08:13:36+00:00

=== AUTO_CONFIGURED_PACKAGES (component-scan exclusion regex) ===
$ sed -n '100,115p' app-bootstrap/src/main/java/dev/caskeleton/bootstrap/CaSkeletonApplication.java
  static final String AUTO_CONFIGURED_PACKAGES =
      "dev\\.caskeleton\\.bootstrap\\.autoconfigure\\..*"
          + "|dev\\.caskeleton\\.bootstrap\\.notification\\..*"
          + "|dev\\.caskeleton\\.adapter\\.inbound\\.web\\.fileserver\\.admin\\..*"
          + "|dev\\.caskeleton\\.adapter\\.outbound\\.mongo\\..*"
          + "|dev\\.caskeleton\\.adapter\\.outbound\\.messaging\\..*"
          + "|dev\\.caskeleton\\.adapter\\.outbound\\.notification\\..*"
          + "|dev\\.caskeleton\\.adapter\\.outbound\\.persistence\\..*"
          + "|dev\\.caskeleton\\.adapter\\.inbound\\.graphql\\..*"
          + "|dev\\.caskeleton\\.adapter\\.inbound\\.web\\.mvc\\.error\\..*"
          + "|dev\\.caskeleton\\.adapter\\.inbound\\.web\\.mvc\\.budget\\..*"
          + "|dev\\.caskeleton\\.adapter\\.inbound\\.web\\.mvc\\.operation\\..*"
          + "|dev\\.caskeleton\\.adapter\\.inbound\\.web\\.webflux\\.error\\..*"
          + "|dev\\.caskeleton\\.adapter\\.inbound\\.web\\.webflux\\.operation\\..*"
          + "|dev\\.caskeleton\\.messaging\\..*";

exit=0

=== 그 이유 (javadoc) ===
$ sed -n '89,99p' app-bootstrap/src/main/java/dev/caskeleton/bootstrap/CaSkeletonApplication.java
   * <p>The Fileserver admin package is here for a different reason: those routes belong to the
   * management context, and a component scan that also found them would publish the management
   * plane on the public connector — the exposure the separate context exists to remove.
   *
   * <p>The web platform's error, budget and operation packages are here for a third reason. Their
   * advices and controllers need beans that only exist when the corresponding platform
   * auto-configuration is active, and a component scan finds them regardless — so an all-off or
   * partially configured deployment failed to start on an unsatisfied dependency rather than simply
   * not installing the control. Ownership by auto-configuration is what ties a control's presence
   * to its dependency's.
   */
exit=0

=== 제외된 다섯 web 패키지가 담고 있는 타입 ===
$ ls adapter/inbound/web/src/main/java/dev/caskeleton/adapter/inbound/web/mvc/error adapter/inbound/web/src/main/java/dev/caskeleton/adapter/inbound/web/mvc/budget adapter/inbound/web/src/main/java/dev/caskeleton/adapter/inbound/web/mvc/operation adapter/inbound/web/src/main/java/dev/caskeleton/adapter/inbound/web/webflux/error adapter/inbound/web/src/main/java/dev/caskeleton/adapter/inbound/web/webflux/operation
adapter/inbound/web/src/main/java/dev/caskeleton/adapter/inbound/web/mvc/budget:
BoundedHttpServletRequest.java
BoundedHttpServletResponse.java
WebMvcBudgetExceptionHandler.java
WebMvcBudgetFilter.java

adapter/inbound/web/src/main/java/dev/caskeleton/adapter/inbound/web/mvc/error:
WebMvcProblemExceptionHandler.java

adapter/inbound/web/src/main/java/dev/caskeleton/adapter/inbound/web/mvc/operation:
OperationHttpController.java

adapter/inbound/web/src/main/java/dev/caskeleton/adapter/inbound/web/webflux/error:
WebFluxProblemExceptionHandler.java

adapter/inbound/web/src/main/java/dev/caskeleton/adapter/inbound/web/webflux/operation:
ReactiveOperationHttpController.java
exit=0

=== 등록자가 있는가 ===
$ grep -rn 'WebMvcProblemExceptionHandler\|WebFluxProblemExceptionHandler\|WebMvcBudgetExceptionHandler\|OperationHttpController\|ReactiveOperationHttpController' --include=*.java app-bootstrap/src/main | wc -l
0
exit=0

$ cat adapter/inbound/web/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports
dev.caskeleton.adapter.inbound.web.mvc.autoconfigure.WebMvcPlatformAutoConfiguration
dev.caskeleton.adapter.inbound.web.webflux.autoconfigure.WebFluxPlatformAutoConfiguration
exit=0

$ grep -n '@Import\|@Bean' adapter/inbound/web/src/main/java/dev/caskeleton/adapter/inbound/web/mvc/autoconfigure/WebMvcPlatformAutoConfiguration.java | head -20
57:  @Bean
64:  @Bean
73:  @Bean
87:  @Bean
94:  @Bean
101:  @Bean
108:  @Bean
115:  @Bean
122:  @Bean
129:  @Bean
142:  @Bean
151:  @Bean
158:  @Bean
exit=0

$ grep -rn 'mvc.error\|webflux.error\|mvc.budget\|mvc.operation\|webflux.operation' --include=*.imports --include=*.factories adapter app-bootstrap | wc -l
0
exit=0

=== 결과: 제외되었고 아무도 등록하지 않는다 ===
$ grep -rln 'WebProblemFactory' --include=*.java app-bootstrap/src/main | wc -l
0
exit=0

