mirror of
https://github.com/samvallad33/vestige.git
synced 2026-07-22 23:31:02 +02:00
The Observatory is a full-bleed, zero-library WebGPU surface that renders the memory graph as a living cognitive field. Five deterministic demo moments driven by a URL contract (?demo=<name>&seed=...&frame=N): recall-path, engram-birth, salience-rescue, forgetting-horizon, firewall. Capture mode (?frame=N) freezes the sim deterministically so the same URL produces identical pixels, the viral-clip primitive. Architecture: bare-metal WebGPU engine (no Three.js), seeded demo clock, per-demo plan + renderer modules, WGSL shaders (simulate, nodes, edges, path, birth particles, rescue, forgetting, firewall) plus a post-processing chain (tone mapping, MIP). DOM is instrument overlays only (telemetry strip, timeline spine, rescue verdict); the layout gives /observatory the same full-bleed bypass as marketing routes so recordings stay clean. Reads the real memory graph. Verified live: svelte-check 939 files 0 errors, 96 observatory unit tests green, all 5 demos load at 108-119fps with zero console errors against the live brain. Known follow-up: engram-birth capture-mode particle cluster needs a render fix pass before it is camera-ready; the other 4 demos are camera-ready. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
108 lines
5.9 KiB
Markdown
108 lines
5.9 KiB
Markdown
# Backward-Trace Animation — Storyboard ("The X Rocket")
|
|
|
|
**Purpose:** the single most shareable launch artifact. A ~15s looping clip,
|
|
pinned to the top of the launch thread on X and used as the Show HN demo. It
|
|
shows the ONE thing nothing else does: when a failure hits, Vestige's arrow
|
|
snaps *backward through time* past the confounders to the quiet change that
|
|
actually caused it — while a vector search sits stuck on the symptom.
|
|
|
|
**Design law (from 2026 viral-demo research):** animate the *mechanism*
|
|
legibly, no narration needed, payoff visible in the first 1.5s, loops clean, no
|
|
logo intro. The tldraw / X-algorithm-viz / CodeReel pattern: the demo IS the
|
|
pitch.
|
|
|
|
---
|
|
|
|
## The case shown (canonical CauseBench archetype)
|
|
|
|
Uses the exact incident SHAPE the benchmark is built on (see
|
|
`benchmarks/causebench/data/real/*.meta.json`: a config/limit/cert/migration/flag
|
|
change that shares an *entity* with a later failure but *none of its words*, with
|
|
a more-recent confounder planted to defeat naive recency).
|
|
|
|
Timeline of stored memories (left = 3 weeks ago, right = today):
|
|
|
|
| When | Memory | Role |
|
|
|---|---|---|
|
|
| 21 days ago | `Lowered connection-pool max from 100 → 20 in db.config.yaml` | **the true cause** (shares entity `db.config.yaml` / the DB, not words) |
|
|
| 9 days ago | `Renamed UserService to AccountService across the API` | confounder (loud, recent, unrelated) |
|
|
| 4 days ago | `Bumped Postgres driver to 5.2` | confounder (shares "Postgres", more recent than cause) |
|
|
| **today** | `PagerDuty: checkout timing out under load — "connection acquisition timeout"` | **the failure (symptom)** |
|
|
|
|
Vector search ranks by resemblance → it surfaces the driver bump and the
|
|
timeout log (they share words like "connection", "Postgres"). It ranks the
|
|
pool-size change near the *bottom* — that memory shares no vocabulary with
|
|
"timeout under load". Vestige's Retroactive Salience Backfill reaches backward
|
|
along the shared entity (the database / `db.config.yaml`) and promotes the
|
|
pool-size change to #1.
|
|
|
|
---
|
|
|
|
## Frame-by-frame (15s, 30fps, loops)
|
|
|
|
**Beat 0 — 0.0s to 1.5s · THE HOOK (payoff visible immediately)**
|
|
- A red failure card slams in at the right edge (today): `checkout timing out — connection acquisition timeout`. Subtle shake.
|
|
- Caption, one line, monospace: `your agent's bug, today →`
|
|
- (Why first: a scroller must see the payoff-shape in 1.5s or they're gone.)
|
|
|
|
**Beat 1 — 1.5s to 4.0s · THE TIMELINE FILLS**
|
|
- A horizontal time axis draws left→right. Four memory cards fade in at their dates: the pool-size change (far left, dim/dormant), the two confounders (mid), the failure (right, red).
|
|
- The dormant cause is visibly *faded* — small, low-contrast. It looks unimportant. That's the point.
|
|
|
|
**Beat 2 — 4.0s to 6.5s · VECTOR SEARCH TRIES (and fails)**
|
|
- Label appears: `vector search` with a small magnifying-glass icon.
|
|
- Three thin gray "similarity" beams shoot from the failure card to the cards that *share words*: the driver bump and (self) the log. A rank badge appears: the true cause gets tagged `#7` in gray, sinking to the bottom.
|
|
- Caption: `finds what looks like the bug`
|
|
- Beat ends with a gray ✕ over the search — it never touched the real cause.
|
|
|
|
**Beat 3 — 6.5s to 10.5s · THE ARROW SNAPS BACK (the money moment)**
|
|
- Everything else desaturates. A single bright teal arrow launches from the failure card and travels *right-to-left, backward in time*, deliberately skipping the two confounders (each pings faintly and is passed over — "shares words, not entity" micro-label flickers).
|
|
- The arrow lands on the dormant pool-size card 21 days back. On contact the card **ignites**: scales up, fills teal, snaps from dim to bright. A link line labeled `same entity: db.config.yaml` connects them.
|
|
- Caption: `Vestige reaches back to what caused it`
|
|
- This is the frame that gets clipped and reshared. Make the snap fast and physical (ease-in, slight overshoot).
|
|
|
|
**Beat 4 — 10.5s to 13.0s · THE VERDICT**
|
|
- The promoted cause card shows a teal `#1` badge; the vector `#7` badge greys beside it for contrast.
|
|
- Two-line stat, big: `root-cause recall@1` / `Vestige 60% · vector search 0%`
|
|
- Small honest sub-label: `on CauseBench · reproducible`
|
|
|
|
**Beat 5 — 13.0s to 15.0s · SIGNATURE + LOOP RESET**
|
|
- Wordmark `vestige` fades in bottom-left, tiny. Tagline: `memory that finds the cause, not the resemblance.`
|
|
- Everything gently fades and the failure card is already sliding back in at the right — the loop restart is seamless (no hard cut).
|
|
|
|
---
|
|
|
|
## Production notes
|
|
|
|
- **Format:** build in HTML/CSS/SVG (animated), screen-record to MP4 + GIF.
|
|
Alternatively Remotion (React) if you want a clean MP4 export pipeline — but
|
|
the animated-SVG prototype below is enough to record from directly.
|
|
- **Palette:** teal `#1d9e75` = Vestige/cause/truth; gray `#888780` = vector
|
|
search/confounders/noise; red `#e24b4a` = the failure only. Two-color
|
|
discipline + one alarm color. Works on light and dark.
|
|
- **Text:** monospace for the memory-card content (feels like real logs);
|
|
sans for captions. No narration — captions carry it, so it works muted in a
|
|
feed (most X video autoplays silent).
|
|
- **Honesty guardrails (non-negotiable, same as the chart):** the stat frame
|
|
must say `60%` with `on CauseBench` attached, and pair it with `vector search
|
|
0%`. Never imply an industry benchmark. Never show the FALSE cross-session
|
|
claim.
|
|
- **Loop length:** 15s is the sweet spot for X autoplay + a clean GIF under
|
|
~8MB. If the GIF is too heavy, cut Beat 1 to 2s and land at 13s total.
|
|
|
|
---
|
|
|
|
## The X post it pins to
|
|
|
|
> Every AI memory tool is built on vector search. Vector search finds what
|
|
> *looks like* your bug.
|
|
>
|
|
> But a root cause never looks like the bug it creates.
|
|
>
|
|
> So I built memory that reaches *backward in time* to the change that actually
|
|
> caused it. 60% root-cause recall where vector search scores 0%. 🧵👇
|
|
>
|
|
> [pinned: the 15s clip]
|
|
|
|
(Then the thread: the wall-of-zeros chart, the repro command, the "here's where
|
|
it's weak" honesty tweet.)
|