# revision: 21234e38cdb9a926cbc92bb97a2aee2e4a7d2916
# construction pattern: new ([a-zA-Z0-9_.]+\.)?<Type>\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);
