Diagnostics

the same events, without the room — proof the pipeline is real

CE-side commands (the touch panel)

highlight = CE belief (ui.active_button_id from preset_changed); a click only pulses until the event confirms.

Bus side & fault injection (the simulator)

these bypass CE's command path — CE only overhears the resulting frames (the <RX* console lines).

Ceiling (simulator truth — lights_changed only)

levels are NOT on the wire — a recall carries only area+preset; this matrix is the load controller's preset memory.

State readout (GET /api/state every 2 s)

connecting…  VACANT
(waiting for first poll)

Protocol console (protocol_log + connection_status)