# revision: 21234e38cdb9a926cbc92bb97a2aee2e4a7d2916

## A. the six public types, referenced outside the owning leaf
DefaultMessagePublisher        2
DefaultDeliveryProcessor       0
DestinationProfileRegistry     1
RegisteredMessageCodecs        1
TransportMessagingRuntime      1
DeclaredDestinationAccess      1

## B. publish path: assembled
src/messaging/messaging-runtime-core/src/main/java/dev/caskeleton/messaging/runtime/DestinationProfileRegistry.java:29:    return new DestinationProfileRegistry(
src/messaging/messaging-runtime-core/src/main/java/dev/caskeleton/messaging/runtime/DestinationProfileRegistry.java:35:    return new DestinationProfileRegistry(Map.of());
src/messaging/messaging-runtime-core/src/main/java/dev/caskeleton/messaging/runtime/RegisteredMessageCodecs.java:63:    return new RegisteredMessageCodecs(byContentType, defaultCodec);
src/messaging/messaging-spring-boot-starter/src/main/java/dev/caskeleton/messaging/autoconfigure/MessagingCoreAutoConfiguration.java:396:    return dev.caskeleton.messaging.runtime.DeclaredDestinationAccess.of(destinations.all());
src/messaging/messaging-spring-boot-starter/src/main/java/dev/caskeleton/messaging/autoconfigure/MessagingCoreAutoConfiguration.java:446:    return new dev.caskeleton.messaging.runtime.DefaultMessagePublisher(
src/messaging/messaging-spring-boot-starter/src/main/java/dev/caskeleton/messaging/autoconfigure/MessagingCoreAutoConfiguration.java:476:          new dev.caskeleton.messaging.runtime.TransportMessagingRuntime(

## C. consume path: not assembled
DefaultDeliveryProcessor       src/main=0 src/test=1

## D. observation: implementation, call site, and the missing wire
--- the interface has one implementation
src/messaging/messaging-observability/src/main/java/dev/caskeleton/messaging/observation/MessagingMetrics.java:29:public final class MessagingMetrics implements MessagingObservation {
--- DefaultMessagePublisher takes it as a constructor argument, not a decorator
79:  private final dev.caskeleton.messaging.observation.MessagingObservation observation;
146:      dev.caskeleton.messaging.observation.MessagingObservation observation) {
--- and defines a no-op for the shorter constructors
96:        NO_OBSERVATION);
100:  private static final dev.caskeleton.messaging.observation.MessagingObservation NO_OBSERVATION =
134:    this(destinations, access, codecs, admission, runtimes, transport, nanoTime, NO_OBSERVATION);
--- the starter calls the six-argument constructor
      MessagingRuntimeRegistry runtimes,
      dev.caskeleton.messaging.transport.MessagingTransport transport) {
    return new dev.caskeleton.messaging.runtime.DefaultMessagePublisher(
        destinations, access, codecs, admission, runtimes, transport);
  }
--- is MessagingMetrics ever created as a bean or otherwise?
src/messaging/messaging-observability/src/main/java/dev/caskeleton/messaging/observation/MessagingMetrics.java:29:public final class MessagingMetrics implements MessagingObservation {
src/messaging/messaging-observability/src/test/java/dev/caskeleton/messaging/observation/MessagingMetricCardinalityTest.java:14:  private MessagingMetrics metrics(int limit) {
src/messaging/messaging-observability/src/test/java/dev/caskeleton/messaging/observation/MessagingMetricCardinalityTest.java:15:    return new MessagingMetrics(registry, new CardinalityGuard(limit), new MessagingRedactor());
src/messaging/messaging-observability/src/test/java/dev/caskeleton/messaging/observation/MessagingMetricCardinalityTest.java:31:    MessagingMetrics metrics = metrics(2);
src/messaging/messaging-observability/src/test/java/dev/caskeleton/messaging/observation/MessagingMetricCardinalityTest.java:44:    MessagingMetrics metrics = metrics(1);
src/messaging/messaging-observability/src/test/java/dev/caskeleton/messaging/observation/MessagingMetricCardinalityTest.java:54:    MessagingMetrics metrics = metrics(10);
src/messaging/messaging-observability/src/test/java/dev/caskeleton/messaging/observation/MessagingMetricCardinalityTest.java:92:    MessagingMetrics metrics = metrics(10);
src/messaging/messaging-observability/src/test/java/dev/caskeleton/messaging/observation/MessagingMetricCardinalityTest.java:103:    MessagingMetrics metrics = metrics(10);
src/messaging/messaging-observability/src/test/java/dev/caskeleton/messaging/observation/MessagingSecretLeakTest.java:74:    MessagingMetrics metrics = new MessagingMetrics(registry, new CardinalityGuard(100), redactor);
src/messaging/messaging-observability/src/test/java/dev/caskeleton/messaging/observation/MessagingSecretLeakTest.java:105:    MessagingMetrics metrics = new MessagingMetrics(registry, new CardinalityGuard(100), redactor);
exit=0  (1 = never constructed anywhere)
--- observability beans the starter DOES create
253:  public MessagingRedactor messagingRedactor() {
264:  public CardinalityGuard cardinalityGuard() {

## verdict
The publish path records every outcome through MessagingObservation.
MessagingMetrics implements that interface.
The shipped composition uses the constructor that substitutes NO_OBSERVATION,
and creates no MessagingObservation bean, so the recorded outcomes go nowhere.
