vestige/apps
Sam Valladares ba5a28d5f9 fix(dashboard): close remaining BackdropEngine audit findings (M3 H1-H4 + mediums)
Clears the rest of the MiniMax M3 audit backlog (all verified, svelte-check green):
- H1: Canvas2D fallback now honors decay (inward pull+damp) and birth (outward
  bloom) events, not just firewall — full event parity with the WGSL path for
  pre-iOS-26 / no-WebGPU users.
- H2: noise/flow time is now an `activeT` accumulator advanced by dt only while
  drawing, so a backgrounded tab no longer fast-forwards the curl flow and snaps
  it to a new direction on resume (was wall-clock `(now-startedAt)`). Both the
  WebGPU and Canvas2D paths share it.
- H3: prefers-reduced-motion is now reactive ($state + a matchMedia change
  listener) so toggling the OS setting mid-session takes effect next frame
  (was a const snapshot at init).
- H4: documented that `count` is read once at boot (buffer sizing); `intensity`
  is the live knob.
- M3: cache the Canvas2D context once in bootFallback (was getContext per frame).
- M4: coalesce resize bursts to one resize/frame via rAF (was thrashing the
  swapchain config + 2D backing store on every drag event).
- M7: register device.lost BEFORE pipeline creation (was after the handle,
  leaving a race window where a loss mid-build never fired the fallback).
- L2/L4/L1: drop the empty onMount return (single onDestroy teardown); reset
  lastT in bootFallback so a WebGPU recovery sees no giant dt; document the
  intentionally-non-reactive animation state.

svelte-check 0 errors / 967 files. Cosmetic-only items left (M1 dead DPR slot,
M2 dead vel.w, M5 sizePx naming, L3 alpha-mode smell) — no behavior, deferred.
Memory Cinema / Graph3D untouched.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-27 15:35:05 -05:00
..
dashboard fix(dashboard): close remaining BackdropEngine audit findings (M3 H1-H4 + mediums) 2026-06-27 15:35:05 -05:00