fn apply_focused_node_changed(
wstore: &WaveStore,
tab_id: &str,
node_id: &str,
) -> Result<(), Box<dyn Error>>Expand description
Phase E.4 (Option A) — write the reducer-emitted focused node id
onto the tab’s LayoutState.focusednodeid column. Tab→layout is
a join through Tab.layoutstate. Idempotent: silent no-op when the
tab is unknown (deleted concurrently), the layout row is missing
(legacy tab without one), or the value already matches. Other
LayoutState fields stay on their existing wcore-direct path until
Option B lands.