$ CP=$(find ~/.m2 -iname "spring-modulith-events-api-2.1.1.jar")
$ unzip -o -q "$CP" "org/springframework/modulith/events/ApplicationModuleListener.class" -d /tmp/inspect
$ javap -v /tmp/inspect/org/springframework/modulith/events/ApplicationModuleListener.class

RuntimeVisibleAnnotations:
  0: #28()
    org.springframework.scheduling.annotation.Async
  1: #14(#22=e#24.#25)
    org.springframework.transaction.annotation.Transactional(
      propagation=Lorg/springframework/transaction/annotation/Propagation;.REQUIRES_NEW
    )
  2: #29()
    org.springframework.transaction.event.TransactionalEventListener
  3: #30()
    java.lang.annotation.Documented
  4: #31(#32=[e#33.#34,e#33.#35])
    java.lang.annotation.Target(
      value=[Ljava/lang/annotation/ElementType;.METHOD,Ljava/lang/annotation/ElementType;.ANNOTATION_TYPE]
    )
  5: #36(#32=e#37.#38)
    java.lang.annotation.Retention(
      value=Ljava/lang/annotation/RetentionPolicy;.RUNTIME
    )

This is the compiled annotation class itself, not documentation describing it --
@ApplicationModuleListener is literally @Async + @Transactional(propagation =
REQUIRES_NEW) + @TransactionalEventListener (default phase AFTER_COMMIT), stacked as
meta-annotations. Confirmed this way rather than taken from prose because the reference
documentation does not spell out the propagation level, and getting it wrong is exactly
what produces the failure in output/05-redundant-transactional-failure.txt.
