Command: current reachability and history for JpaTransactionConfig / TransactionProfileRegistry / removed declarative retry interceptor Working directory: /shared/codebase/clean-architecture-backend-template Executed at: 2026-08-29T08:05:13Z Source revision: a24ece9cf797f7ea647e33bf846b115208ed1ba5 Observation boundary: Distinguishes a zero-direct-reference Spring configuration reached by component scan from a zero-production-reference registry left after declarative retry interceptor removal. It does not prove external consumers of non-api public classes. --- stdout/stderr --- === JpaTransactionConfig current refs === src/adapter/outbound/persistence-jpa/src/main/java/dev/caskeleton/adapter/outbound/persistence/config/JpaAdapterComponentsConfig.java:51: * same package — {@code JpaTransactionConfig} for {@code JpaTransactionSettings}, {@code src/adapter/outbound/persistence-jpa/src/main/java/dev/caskeleton/adapter/outbound/persistence/transaction/JpaTransactionConfig.java:24:public class JpaTransactionConfig {} === adapter component scan === * the JDBC one — and was registered by nothing but a test calling {@code ctx.register(...)}. So a * single-instance deployment had no {@code DistributedLockPort} at all, and a multi-instance one * could not start: the composition root's own {@code DistributedLockConfig} asks for a bean * qualified {@code jdbcDistributedLock} that only that configuration declares. * *
Each package's {@code @ConfigurationProperties} type is enabled by a configuration inside that
* same package — {@code JpaTransactionConfig} for {@code JpaTransactionSettings}, {@code
* DistributedLockPersistenceConfig} for {@code LockSettings} — rather than from here. Enabling them
* centrally would give {@code config} an edge to {@code lock} and {@code transaction} that the
* module map does not grant it, and the map is right: this class knows which packages to scan, not
* what is inside them. They need enabling at all because {@code @ConfigurationPropertiesScan}
* excludes this tree as deliberately as {@code @ComponentScan} does.
*/
@Configuration(proxyBeanMethods = false)
@ComponentScan(
basePackages = {
"dev.caskeleton.adapter.outbound.persistence.audit",
"dev.caskeleton.adapter.outbound.persistence.failure",
"dev.caskeleton.adapter.outbound.persistence.idempotency",
"dev.caskeleton.adapter.outbound.persistence.lock",
"dev.caskeleton.adapter.outbound.persistence.outbox",
"dev.caskeleton.adapter.outbound.persistence.transaction"
})
public class JpaAdapterComponentsConfig {}
=== TransactionProfileRegistry current refs ===
src/adapter/outbound/persistence-jpa/src/main/java/dev/caskeleton/adapter/outbound/persistence/transaction/TransactionProfileRegistry.java:16:public final class TransactionProfileRegistry {
src/adapter/outbound/persistence-jpa/src/main/java/dev/caskeleton/adapter/outbound/persistence/transaction/TransactionProfileRegistry.java:20: public TransactionProfileRegistry(Map