The wire: event names

Last updated: 2026-09-05An event is a fact that happened, not a command. The closed participle vocabulary, the subject shape, and why a live name is never renamed.

The wire

An event is a fact that happened, not a command. A subject reads as a sentence in the past tense: v1.{domain}.{subject}.{what happened}.

v1.user.email.verified        not  v1.user.verifyEmail
v1.billing.invoice.paid            v1.billing.payInvoice
v1.iam.role.granted                v1.iam.grantRole

The difference is not cosmetic. A command is addressed to someone; a fact is published to no one in particular. An imperative name promises that somebody is obliged to carry it out — and the first service that subscribes "just to look" turns the bus into a hidden RPC: the event acquires an addressee the system cannot work without, and nowhere is that written down.

A closed vocabulary of participles

The participle comes from a list (event_verbs) for the same reason the code has a closed verb dictionary: updated and changed must not mean the same thing in two different domains.

activated added approved archived banned cancelled changed created decided deleted
enrolled executed expired failed followed granted liked normalized paid played
published purchased read refunded registered removed requested restored revoked
scanned submitted unlocked updated uploaded verified

A compound tail is fine as long as the participle stays the last word: v1.family.memberAdded, v1.iam.role.statusChanged.

A live name is never renamed

Working consumers are subscribed to a subject, so changing the name is not a refactor but a migration: a new subject, both published for a while, consumers move over, the old one is retired. That is why the name is chosen once and chosen right — and why the shape is checked in CI rather than in someone's head.

The wire: event names | AS Docs