Map of the GeoLeaf custom DOM events whose payload is JSON-serialisable.
The membership criterion is the PAYLOAD, not the carrier — that is what makes this map's
boundary a real one and not a stylistic split. dispatchGeoLeafEvent deep-clones every
payload through JSON.parse(JSON.stringify(detail)) (kernel/events/event-bus.ts:48-68);
a detail holding a DOM node, a function or a Map does not survive that round-trip, and
belongs in GeoLeafRawEventMap instead. The two maps state one rule from both ends.
The Events facade subscribes to both maps (kernel/events/facade.ts); only emission
through the sanitising bus is restricted to this one.
⚠️ Being listed here does NOT mean the event travels through that bus — it means it
COULD. This sentence read « events carried by the sanitising bus » until task 7.3, which
was narrower than the rule the two maps actually enforce, and it had no answer for the
nine geoleaf:editor:* events: their payloads clone perfectly, but the editor dispatches
them as raw CustomEvents and dispatchGeoLeafEvent is exported to no plugin. Reading
the criterion as the carrier would have pushed them into the raw map, whose own warning —
« adding a key here is a statement that the payload CANNOT be JSON-cloned » — they
contradict. Arbitré par Mattieu : the payload decides, and the carrier is a separate
question this contract deliberately does not type.
Emitted when the accent palette changes (capability theme-palette).
Distinct from geoleaf:theme:applied (MAP themes) and from
geoleaf:ui-theme-changed (light/dark) — the three axes are orthogonal.
Map of the GeoLeaf custom DOM events whose payload is JSON-serialisable.
The membership criterion is the PAYLOAD, not the carrier — that is what makes this map's boundary a real one and not a stylistic split.
dispatchGeoLeafEventdeep-clones every payload throughJSON.parse(JSON.stringify(detail))(kernel/events/event-bus.ts:48-68); a detail holding a DOM node, a function or aMapdoes not survive that round-trip, and belongs in GeoLeafRawEventMap instead. The two maps state one rule from both ends.The
Eventsfacade subscribes to both maps (kernel/events/facade.ts); only emission through the sanitising bus is restricted to this one.⚠️ Being listed here does NOT mean the event travels through that bus — it means it COULD. This sentence read « events carried by the sanitising bus » until task 7.3, which was narrower than the rule the two maps actually enforce, and it had no answer for the nine
geoleaf:editor:*events: their payloads clone perfectly, but the editor dispatches them as rawCustomEvents anddispatchGeoLeafEventis exported to no plugin. Reading the criterion as the carrier would have pushed them into the raw map, whose own warning — « adding a key here is a statement that the payload CANNOT be JSON-cloned » — they contradict. Arbitré par Mattieu : the payload decides, and the carrier is a separate question this contract deliberately does not type.