facett-flow — Falsett shared graph renderer
Created by Andreas Persson. Source-agnostic Elm graph component and optional caller-owned rendering API. No I/O or wall clock lives inside the component.
The main baseline retains its unchanged plain WGSL, 128-byte uniforms, 16-byte Point/Link storage and adaptive 2–16 segment curves. Optional host features expose persistent scenes, explicit camera mapping, labels, rounded boxes, arrows, status/rate tables, core layered layout, compact introspection, box/curve picking and opt-in screen-size packet culling.
Pipeline, plandag, brokkrview and brokkr retain their domain models and interactions; Falsett draws the geometry. Caller identity plus complete graph content identify geometry. Separate attribute revisions update group 1 without rebuilding group 0. Node attributes use 16 bytes; GPU edge attributes use packed speed/count/status/rate flags in 8 bytes. Absent tables use the plain pipelines. Shader on/off feature hooks are validated in 32 compositions plus the unmodified plain shader.
Feature unification does not opt existing instances into compact state or labels. Hosts retain FlowScene across frames, use distinct pane IDs, explicitly choose the animation owner, and call evict_idle even after closing the last flow view. Invalid setters reject without mutation; changed graph ordering clears optional tables. Visibility and node picking reuse the existing 64-unit bucket index with box extents. Edge bounds are scanned with 16-segment cubic hit tests. The alternative tree index is deferred, as requested; no index performance improvement is claimed.
Verification: CPU model/host contracts, Naga compositions, plain ABI/source witness, all 24 native/wasm feature compilation rows, and Metal device tests on Apple M2 Pro (normal/Retina density) for boxes/arrows/status/rates/LOD/cache/eviction. GPU tests require FACETT_TEST_GPU=integrated|discrete|software and loudly skip otherwise. flow_lab benchmark JSON includes compiled features, CPU p50/p95, actual sampled GPU pass p50/p95 and upload accounting; this work does not claim new benchmark numbers.
Chrome154/Metal shader gate: all 65 valid shader/composition rows passed (including all 33 Falsett rows), and both negative controls were rejected. The test-owned Chrome was terminated after reporting results. Remaining external evidence: Loki baseline/feature GPU p50 comparisons and large-graph performance runs require their target host. Local Metal correctness does not stand in for that performance evidence or the target-host release gates. Release/publishing belongs to the owner; no release was performed here.