# revision: 21234e38cdb9a926cbc92bb97a2aee2e4a7d2916 # construction pattern: new ([a-zA-Z0-9_.]+\.)?\s*\( ## A. policy public types: files referencing them outside the owning leaf DestinationProfile 43 DestinationProfileValidator 2 MessagingAdmissionController 8 PayloadLimitGuard 4 PayloadPolicy 15 InFlightLimiter 4 RetryPolicy 11 RetryMode 3 RetryContext 18 RetryDecision 23 RetryDecisionEngine 2 DefaultRetryDecisionEngine 1 BackoffCalculator 4 OrderingImpact 2 CapabilityTier 11 DeadLetterPolicy 11 DeadLetterOrchestrator 6 DeadLetterEnvelopeFactory 0 DeadLetterMetadata 0 DeadLetterResult 3 SourceSettlement 3 PhysicalDestination 13 ProducerPolicy 11 ConsumerPolicy 11 SchemaPolicy 17 ## B. the two policy beans the starter creates 167- public RetryDecisionEngine retryDecisionEngine() { 179- public DeadLetterOrchestrator deadLetterOrchestrator(MessagePublisher publisher) { ## C. who accepts those two types as a constructor/field dependency --- RetryDecisionEngine src/messaging/messaging-kafka/src/main/java/dev/caskeleton/messaging/kafka/KafkaRetryExecutor.java:11:import dev.caskeleton.messaging.policy.RetryDecisionEngine; src/messaging/messaging-kafka/src/main/java/dev/caskeleton/messaging/kafka/KafkaRetryExecutor.java:32: private final RetryDecisionEngine engine; src/messaging/messaging-kafka/src/main/java/dev/caskeleton/messaging/kafka/KafkaRetryExecutor.java:46: RetryDecisionEngine engine, src/messaging/messaging-spring-boot-starter/src/main/java/dev/caskeleton/messaging/autoconfigure/MessagingCoreAutoConfiguration.java:13:import dev.caskeleton.messaging.policy.RetryDecisionEngine; src/messaging/messaging-spring-boot-starter/src/main/java/dev/caskeleton/messaging/autoconfigure/MessagingCoreAutoConfiguration.java:167: public RetryDecisionEngine retryDecisionEngine() { --- DeadLetterOrchestrator src/messaging/messaging-kafka/src/main/java/dev/caskeleton/messaging/kafka/KafkaDeadLetterPublisher.java:5:import dev.caskeleton.messaging.policy.DeadLetterOrchestrator; src/messaging/messaging-kafka/src/main/java/dev/caskeleton/messaging/kafka/KafkaDeadLetterPublisher.java:22: private final DeadLetterOrchestrator orchestrator; src/messaging/messaging-kafka/src/main/java/dev/caskeleton/messaging/kafka/KafkaDeadLetterPublisher.java:29: public KafkaDeadLetterPublisher(DeadLetterOrchestrator orchestrator) { src/messaging/messaging-kafka/src/main/java/dev/caskeleton/messaging/kafka/KafkaRetryExecutor.java:6:import dev.caskeleton.messaging.policy.DeadLetterOrchestrator; src/messaging/messaging-kafka/src/main/java/dev/caskeleton/messaging/kafka/KafkaRetryExecutor.java:34: private final DeadLetterOrchestrator deadLetterOrchestrator; src/messaging/messaging-kafka/src/main/java/dev/caskeleton/messaging/kafka/KafkaRetryExecutor.java:48: DeadLetterOrchestrator deadLetterOrchestrator, src/messaging/messaging-kafka/src/test/java/dev/caskeleton/messaging/kafka/KafkaContractHarness.java:27:import dev.caskeleton.messaging.policy.DeadLetterOrchestrator; src/messaging/messaging-kafka/src/test/java/dev/caskeleton/messaging/kafka/KafkaContractHarness.java:91: private final DeadLetterOrchestrator orchestrator = src/messaging/messaging-kafka/src/test/java/dev/caskeleton/messaging/kafka/KafkaContractHarness.java:92: new DeadLetterOrchestrator(new HarnessDeadLetterPublisher()); src/messaging/messaging-rabbit/src/main/java/dev/caskeleton/messaging/rabbit/RabbitDeadLetterPublisher.java:11:import dev.caskeleton.messaging.policy.DeadLetterOrchestrator; src/messaging/messaging-rabbit/src/main/java/dev/caskeleton/messaging/rabbit/RabbitDeadLetterPublisher.java:35: private final DeadLetterOrchestrator orchestrator; src/messaging/messaging-rabbit/src/main/java/dev/caskeleton/messaging/rabbit/RabbitDeadLetterPublisher.java:47: DeadLetterOrchestrator orchestrator, src/messaging/messaging-spring-boot-starter/src/main/java/dev/caskeleton/messaging/autoconfigure/MessagingCoreAutoConfiguration.java:9:import dev.caskeleton.messaging.policy.DeadLetterOrchestrator; src/messaging/messaging-spring-boot-starter/src/main/java/dev/caskeleton/messaging/autoconfigure/MessagingCoreAutoConfiguration.java:179: public DeadLetterOrchestrator deadLetterOrchestrator(MessagePublisher publisher) { src/messaging/messaging-spring-boot-starter/src/main/java/dev/caskeleton/messaging/autoconfigure/MessagingCoreAutoConfiguration.java:180: return new DeadLetterOrchestrator(publisher); src/messaging/messaging-spring-boot-starter/src/test/java/dev/caskeleton/messaging/autoconfigure/MessagingStarterOffContractTest.java:185: + "DeadLetterOrchestrator had nothing to depend on. DefaultMessagePublisher " ## D. is each of those dependents ever constructed? KafkaRetryExecutor NEVER CONSTRUCTED KafkaDeadLetterPublisher NEVER CONSTRUCTED RabbitDeadLetterPublisher NEVER CONSTRUCTED ## E. control: the publish path IS constructed in production --- DefaultMessagePublisher src/messaging/messaging-spring-boot-starter/src/main/java/dev/caskeleton/messaging/autoconfigure/MessagingCoreAutoConfiguration.java:446: return new dev.caskeleton.messaging.runtime.DefaultMessagePublisher( --- TransportMessagingRuntime src/messaging/messaging-spring-boot-starter/src/main/java/dev/caskeleton/messaging/autoconfigure/MessagingCoreAutoConfiguration.java:476: new dev.caskeleton.messaging.runtime.TransportMessagingRuntime( --- DefaultRetryDecisionEngine src/messaging/messaging-spring-boot-starter/src/main/java/dev/caskeleton/messaging/autoconfigure/MessagingCoreAutoConfiguration.java:168: return new DefaultRetryDecisionEngine(new BackoffCalculator()); --- DeadLetterOrchestrator src/messaging/messaging-spring-boot-starter/src/main/java/dev/caskeleton/messaging/autoconfigure/MessagingCoreAutoConfiguration.java:180: return new DeadLetterOrchestrator(publisher); ## F. control: the consume path is constructed only in tests KafkaConsumerRegistrar src/main=0 src/test=4 RabbitConsumerRegistrar src/main=0 src/test=1 KafkaBatchConsumerRegistrar src/main=0 src/test=0 RabbitBatchConsumerRegistrar src/main=0 src/test=1 DefaultDeliveryProcessor src/main=0 src/test=1 ## G. every file that acts on a RetryDecision variant src/messaging/messaging-kafka/src/main/java/dev/caskeleton/messaging/kafka/KafkaRetryExecutor.java src/messaging/messaging-policy/src/main/java/dev/caskeleton/messaging/policy/DefaultRetryDecisionEngine.java src/messaging/messaging-policy/src/main/java/dev/caskeleton/messaging/policy/RetryDecision.java src/messaging/messaging-policy/src/test/java/dev/caskeleton/messaging/policy/RetryDecisionEngineTest.java ## H. the startup gate that IS called 134: new DestinationProfileValidator().validateAll(registered);