Realtime
The company-scoped event bus, and the recovery model that makes a dropped stream survivable.
Publish an event
Each button publishes through the real FoundationEventBus. Two of them are meant to be refused.
Nothing has been refused yet. A cross-company event never enters the bus at all, so it cannot reach a subscriber or the history.
The stream
Drop it, publish while it is down, then reconnect. Reconnecting is not proof that nothing was missed.
What the client no longer trusts
An event marks a revision stale; it never writes a value. That is §31.3 made mechanical.
| Surface | Revision last fetched | State | Why |
|---|---|---|---|
| navigation | nav_7 | fresh | — |
| settings | set_2 | fresh | — |
| dashboard | wid_4 | fresh | — |
| branding | brand_1 | fresh | — |
| notifications | ntf_9 | fresh | — |
Delivered events
Company-scoped and validated before any subscriber runs, so an invalid event is never half-delivered.
Publish something above.
The mapping from event to invalidated surface is data, not a switch inside a component: revisionKeysForEvent("foundation.customization.published") is branding, navigation, theme. Three copies of that mapping in three components would disagree the day a new event type is added.