ReadonlyinsertThe native node's INSERT POINT door, in the shape the engine takes it (import('@freemixer/audio-engine').NativeInsertPointControl) — arm a strip's send/return port pair at a declared place, and say whether a chain is LIVE between them.
It lives HERE, beside pushChainOrder, because both answer the same question about the same strip: the order says WHERE in the walk the detour sits, this says what the detour is made of. The lane resolver is the one both use, so the two can never address different slots.
Push EVERY channel this node carries a lane for — every input strip AND main/1 — onto
that lane, from the state the store RESOLVES (its stored value, or the console default it
would seed with). Absence in a store means "the default", and the default is PUSHED, never
assumed. The same law the head-amp arrival re-assert already follows (southbound actuator
contract §6c), applied to the built-in DSP.
WHY (rig, 2026-08-05). Audio cut on quiet passages for an hour. PipeWire reported 0 xruns
and 0 graph events, and every dynamics row — MAIN's included — read { on: false }; the
operator's ear named it ("it sounds like a gate is activated") and toggling MAIN's gate ON
then OFF stopped it, because that toggle's ONLY effect is a push. A lane was running a
value no row claimed, and nothing in the console would ever have corrected it: every push
was TOUCH-driven — this installer swept gate.snapshot() / eq.entries(), which hold only
channels an operator has moved, and a session restore drove only the channels whose stored
snapshot carried an eq/gate/comp block. MAIN is the channel most likely to be
untouched, and a lane outlives every session load, so a divergence once introduced was
permanent AND invisible. Asserting the whole console at boot and after every restore closes
it: the lanes are MADE to say what the rows say instead of being trusted to.
Cheap and idempotent — one push per processor per lane, the same calls a PATCH makes.
Compare the live-rate provider's CURRENT reading with the rate the strips' EQ cascades
were last swept at and, on a change (the RME flipping 48 kHz → 192 kHz mid-session),
re-push EVERY input strip's EQ with freshly designed coefficients. Cheap when the rate
is stable (one provider read + one compare), so it rides an EXISTING periodic path —
the adapter's meter poll via RateWatchingNativeMeterSource — never a new timer.
Gate/comp are deliberately NOT re-pushed: their attack/release cross to the native side
as milliseconds and mixer.c's resolve_dyn converts ms → per-sample coefficients at
the LIVE rate inside every RT cycle, so they can never hold a stale-rate coefficient.
Push one strip's CHAIN ORDER onto its lane — the reorderable built-ins in the order the chain declares them (deriveStageOrder). Called by the chain row after a committed order write, and by assertAll for the boot/restore sweep.
Until this existed the path was built and joined at every point but one: core derived the
step list, the addon published it torn-free, the RT walked it — and nothing in the server or
the engine ever called it, so every lane ran omx_order_default() for ever and a reorder
changed only what the surface drew (audit D11).
Re-publish one strip's walk after an ORDER write — the same push, with the chain the strip currently declares read off the engine rather than handed in. The stage-order row's station calls this and nothing else, so the order fact reaches the lane through the SAME door the chain's arrangement does (southbound actuator contract: one path to audio).
The handle installBuiltinDspNativeMixerMirror returns (task #125).