topicArn is required. It was optional through Phase 1, when the publish
seam had to ship before the topic existed and a legacy Hookdeck target
carried delivery; that arm — and the flag, the URL, the signing secret and
the publishLegacy HMAC POST — was deleted wholesale in Phase 5 rather
than kept as a fallback. There is one delivery path now, and a publisher
without a topic delivers nowhere, so it must not be constructible.
attributesFor has no default: each bus supplies its own mapper
explicitly. The customer bus passes messageAttributesFor, which emits
customerId as a required routing attribute; the internal bus injects
its own. Requiring it is what stops a tenantless envelope from being
published through the customer mapper — see
docs/proposals/EVENT_BUS.md §8.20.3.
topicArnis required. It was optional through Phase 1, when the publish seam had to ship before the topic existed and alegacyHookdeck target carried delivery; that arm — and the flag, the URL, the signing secret and thepublishLegacyHMAC POST — was deleted wholesale in Phase 5 rather than kept as a fallback. There is one delivery path now, and a publisher without a topic delivers nowhere, so it must not be constructible.attributesForhas no default: each bus supplies its own mapper explicitly. The customer bus passesmessageAttributesFor, which emitscustomerIdas a required routing attribute; the internal bus injects its own. Requiring it is what stops a tenantless envelope from being published through the customer mapper — see docs/proposals/EVENT_BUS.md §8.20.3.