Truth: unlagged focused id.
Truth: unlagged root id list.
Publish every pending change synchronously, bypassing notifyMs,
dwell, and stagger alike. Subscribers are notified before this returns.
Use at a synchronization point where pending latency is unwanted — an explicit user gesture that must feel immediate, or a test assertion.
Read the persisted strategy state for id's container (e.g. splitStrategy
ratio), or undefined if nothing has been written yet — in which case the
consumer initializes via strategy.initialState. Lives on
node.container.state, round-trips through snapshot/hydrate.
NOT meant to feed undo/redo: when v2 history lands, this field should be explicitly excluded — resize gestures should not pollute the timeline.
What throttling is currently withholding for id, or null if
nothing is. Always null on a store with no throttle policy — an
un-throttled store tracks nothing and withholds nothing.
eligibleAt on the result is when the node's gate opens, not when it
will publish: notifyMs and stagger waves can defer the flush past
it. Pair with the throttle.pending / throttle.published events to
observe the transitions rather than poll.
Write strategy state for id's container. Emits container.stateChanged
and schedules a notify. Throws if id has no container capability.
Store — the unified-node-model store.
Single
nodesmap; every mutation that touches a node produces a fresh Node object (record replacement) so React's useSyncExternalStore detects the change via referential equality. FSM transitions are paired with a node-record swap.