diff --git a/.council/GOD-TIER-ALLWEBGPU-PLAN.md b/.council/GOD-TIER-ALLWEBGPU-PLAN.md new file mode 100644 index 0000000..ca1c057 --- /dev/null +++ b/.council/GOD-TIER-ALLWEBGPU-PLAN.md @@ -0,0 +1,374 @@ +# GOD-TIER PLAN — The All-WebGPU Cognitive OS Dashboard +### Vestige · HN launch July 14 2026 · written July 9 (T-5 days) + +> **THE ONE RULE THAT OVERRIDES EVERYTHING:** The ENTIRE dashboard renders in +> WebGPU. **Text and all. Zero DOM chrome.** Every pixel a user sees — labels, +> memory content, receipt IDs, numbers, buttons, the cursor's effect — is drawn +> by the GPU into one canvas. This is not negotiable and it is the whole point: +> **a full-screen WebGPU canvas is the only artifact that survives a screen +> recording, an OS screenshot, or a phone camera pointed at the monitor — which +> is the only thing that makes people share it.** A DOM dashboard is a website. +> An all-WebGPU dashboard is footage. +> +> Sam, verbatim: *"EVERYTHING needs to be WebGPU/RawGPU so the visuals can be to +> the ABSOLUTE MAX"* and *"I WANT THIS WHOLE DASHBOARD AS WEBGPU BECAUSE THAT'S +> THE ONLY THING THAT WILL GET USERS TO SHARE THIS."* + +DOM's ONLY remaining job: a single invisible accessibility mirror (offscreen +`aria-live` + focusable proxies) so screen-readers/keyboard work. It is never +seen. It carries zero visual styling. `app.css` becomes ~empty. + +Branch: `feat/dashboard-live-max`. Repo: `/Users/entity002/vestige`. Reuse the +raw-WebGPU `ObservatoryEngine` + `PostChain`. Never touch Memory Cinema or the +Graph field. + +--- + +## 0. WHY THIS IS THE SHAREABLE MOVE (the launch thesis) + +Verified precedents (Vestige memory, HN Algolia, July 2026): +- ghostty-blackhole (raytraced black hole whose SIZE = context fill) went viral + because **the visual IS a live gauge** and it's pure canvas — remixable. +- XorDev singularity shader (381 chars) → ~60M views, remixed into shadcn/godot. +- pilot flight-globes 1539pts, neal.fun, wplace.live 0→1M users in 4 days. +- **The 5 transferable mechanics:** (1) personalization — render THEIR data; + (2) one absurd verifiable number in the title; (3) receipts — every flourish + is a gauge of real state; (4) deterministic 12s perfect loop = remixable clip; + (5) chain moments into one journey ending in a personal payoff. + +A DOM dashboard fails all five the moment someone screen-records it (the DOM +chrome screams "web app"). An all-WebGPU organism passes all five: it looks like +a living brain, it's a single shareable surface, every glow is a real gauge, and +the 720-frame loop is already deterministic. + +**The moat is the conjunction:** raw-WebGPU engine (ours) × real Vestige-only +data (FSRS decay, RSB causal receipts, contradiction pairs, suppression, live +events) × the discipline test (swap real data for Math.random and the viewer can +tell). Nobody else has all three. Rendering the TEXT in-canvas too is what makes +it uncopyable *and* unscreenshottable-as-a-webpage. + +--- + +## 1. WHAT ALREADY EXISTS (verified in-repo, reuse — do not rebuild) + +- `lib/observatory/engine.ts` — `ObservatoryEngine`: FramePass plugin system + (`addPass`, `compute(encoder)` + `render(pass)`), params uniform buffer, + deterministic `DemoClock` (720-frame loop), DPR clamp, `setPaused`, + `preFrameHook`, `wallNowMs`, `totalFrames`, GPU picking. +- `post/post-chain.ts` — HDR chain: `SCENE_FORMAT='rgba16float'` scene → mip + bloom → Khronos PBR neutral tonemap → grain → vignette. **Text drawn into the + scene texture gets bloom for free** — that's how labels "glow." +- `live-bridge.ts` — real WebSocket `VestigeEvent` → GPU mutation, with the live + lanes (liveKind/liveFrame/liveEnergy/projectionDays) + the metaball/firewall/ + dream/causal-recall machinery. +- `cognitive-palette.ts` — the invented color language (blackwater base, FSRS + oxygen ramp, magenta=RSB-only, scarlet=immune, indigo=bitemporal, cyan accent). +- `route-scene.ts` — `RouteSceneModel` + `Provenance` + `assertProvenance` (the + discipline test as a type constraint). +- Working organ passes to copy: `reasoning/reasoning-theater-pass.ts`, + `contradictions/contradictions-pass.ts`, `blackbox/blackbox-pass.ts`. +- `RouteStage.svelte` — the organ shell (engine lifecycle, WebGPU fallback, + pause, reduced-motion). **Must be rebuilt to host the text layer + input layer + and remove all DOM panels.** + +**THE ONE MISSING PIECE (the linchpin):** there is NO text pipeline in the +observatory. All-WebGPU text = we build an MSDF glyph renderer. This is the +critical path. Everything else is variation on proven passes. + +--- + +## 2. WEBGPU PLATFORM WE CAN RELY ON (verified July 5 2026, Chrome stable) + +SHIPPED (use freely): HDR **extended-range canvas** (`toneMapping:{mode:'extended'}` ++ rgba16float + display-p3 — ignitions brighter than page-white on M1 Max XDR — +the "gasp" nobody else has), subgroups (134/144/145), shader-f16 (120), +dual-source-blending (130), timestamp-query (121, dev perf HUD only), +texture-formats tier1/tier2, IMMEDIATES/push-constants (149-150). +NOT shipped (do NOT depend on): multi-draw-indirect, bindless. +Cross-browser: Safari 26 all Apple, Firefox 141+ Windows/145+ AS-Mac. **WebGPU +absent → the accessibility DOM mirror shows a static "open in Chrome/Safari for +the live view" + the last server-rendered OG still. Never a black screen.** + +**Capture/share gotchas (verified, launch-critical):** WebGPU canvases IGNORE +`preserveDrawingBuffer` — snapshot must copy `getCurrentTexture()` IN THE SAME +TASK as the render (gpuweb#1781). Clip export: `mediabunny` (WebCodecs +canvas→MP4). Safari clipboard: pass `Promise` inside `ClipboardItem`. Bake +the wordmark into the POST CHAIN (not DOM) so it survives OS screen recordings +(the Loom/tldraw viral-watermark move). + +--- + +## 3. THE ARCHITECTURE — one canvas, four GPU layers, zero DOM chrome + +Every route = `ObservatoryEngine` rendering into the HDR scene texture, composed +in this Z order, all in WebGPU: + +``` + L0 BLACKWATER FIELD full-bleed metaball/organism substrate (the "tissue") + L1 ORGAN PASS(es) the route's bespoke hero (chambers/synapse/rings/…) + L2 MSDF TEXT LAYER every label/number/content, drawn in-scene (gets bloom) + L3 INTERACTION LAYER GPU cursor field, click shockwaves, hover ignition + → POST CHAIN bloom + tonemap + grain + vignette + baked wordmark +``` + +Input: ONE transparent full-canvas hit-layer. Pointer/keyboard events → +CPU hit-test against a GPU-picking ID buffer (already have picking) OR a CPU +rect/quadtree of the laid-out text/controls → drive `live-bridge` + API calls. +No `