mirror of
https://github.com/samvallad33/vestige.git
synced 2026-07-12 22:42:10 +02:00
The living field is now interactive, killing Classic's main reason to exist. Clicking a node in the WebGPU field opens the same Memory Detail inspector (content, FSRS bars, retention forecast, promote/demote, explore) that Classic's Three.js picking drove. How: NodeRenderer.pickAt(ndcX, ndcY) — the one sanctioned GPU readback, input-driven and click-frequency only, so the render loop's determinism contract (spec §6) holds. It copies the live NodeState buffer (post force-sim positions) to a MAP_READ staging buffer, reprojects every node on the CPU through the SAME deterministic orbit camera the frame used (engine params phase + canvas aspect, column-major viewProj), and picks the nearest node whose projected disc (r·f/w with a floor for faint nodes, 1.6x halo slop) contains the click. NodeState gains COPY_SRC for the copy; a fresh staging buffer per click is created and destroyed. ObservatoryStage gains an onpick prop wired to the canvas layer (crosshair cursor when interactive); the graph page passes onNodeSelect so field picks open the existing panel. Verified live: click at field center hit a real memory, panel opened with real FSRS data (retention 65.4%, forecast 65%->37% @30d), zero console errors. svelte-check 940 files 0/0; 96 observatory tests green. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> |
||
|---|---|---|
| .. | ||
| lib | ||
| routes | ||
| app.css | ||
| app.html | ||