aide-p2-descent-intro · git:20260826.8da8b03 · 2026-08-26 · sha256 e5841b863a60c914

aide-p2-descent-intro git:20260826.8da8b03A

Immutable. This exact content is served forever at /api/v1/blob/e5841b863a60c914.

---
name: aide-p2-descent-intro
description: SOP for the FSI AIDE "Descent" cinematic onboarding — avatar falls from space, shatters, reassembles into the IDE. Covers the tiered WebGL architecture (Three.js scene / reduced tier / pre-rendered fallback), asset pipeline (Blender→Draco/KTX2), performance budgets proven by the ZERO case study, accessibility/skip laws, the credo copy, and the frame-time verification battery. Use when building or auditing the first-launch experience.
---

# P2b — The Descent (first-run cinematic)

The emotional payload IS the product moment — WebGL earns its cost here (Praxvon
framework: interactive brand piece where interaction = emotional payload).
Non-negotiables: skippable always, `prefers-reduced-motion` bypasses straight to
walkthrough, never-show-again persisted (`aide.onboarding.descent=done`), zero
network during playback.

## Sequence storyboard (operator canon)
1. SPACE: avatar floats among stars over a binary-matrix field (0/1 glyph points,
   green/pink/purple/blue palette). Title: **FSI AIDE**.
2. CREDO card (typewriter reveal over matrix rain) — see Credo below. Banner:
   *developed by neuro_nomad*.
3. GATE: "Are you ready for the descent?" [Begin] [Skip] — Begin only after fonts/
   assets preloaded (honest progress counter, DeepSee pattern).
4. FALL: camera follows avatar through atmosphere (heat-glow shader rim, speed
   lines as particle streaks). ~6-8s.
5. IMPACT + SHATTER: pre-fractured mesh explodes on contact; 200ms color snap-back
   (ZERO timing law); camera dives WITH the shards between cracks underground.
6. REASSEMBLY: shards converge/morph into the cockpit layout silhouette; pull-back
   reveals the real landing page underneath (scene fades as DOM fades in — one
   continuous motion, no pop).
7. Handoff → P2 spotlight walkthrough starts automatically.

## Tech stack (per tier, auto-selected)
| Tier | Trigger | Treatment |
|---|---|---|
| A discrete GPU | `navigator.gpu \|\| high-end dGPU heuristic` | Full Three.js: starfield points, atmosphere shader rim, fracture shards, bloom-lite post |
| B integrated | default | Same scene, no post-processing, half particles, baked shadows |
| C fallback | `prefers-reduced-motion` OR WebGL unavailable OR user skips | Pre-rendered MP4/WebM (rendered ONCE from the same Blender scene) → still ends at walkthrough |

Hard budgets (ZERO-case proven): final assets ≤10 MB total (KTX2/ETC1S textures,
Draco geometry); ≤50k triangles avatar+shards combined; DPR clamped at 2;
lazy-init AFTER app shell paints (never the LCP element); adaptive quality monitor
steps pixel-ratio/effects down when rolling frame-time buffer degrades.

## Asset pipeline
Blender avatar (stylized low-poly robot w/ neon emissive edges matching palette) →
fracture modifier for shard set → export GLTF+Draco → gltf-transform KTX2 encode →
bundle under `assets/descent/`. Matrix field + stars are procedural (no assets).
Video fallback rendered from the same Blender file (Cycles bake → MP4 ~4 MB).

## The Credo (draft v1 — operator approves final wording)
> **We build for the local developer.**
> Your machine. Your models. Your data. Your revenue.
> Sovereign. Private. Nothing leaves without your hand.
> We verify before we claim. We ship what works, offline, out of the box.
> We give tools back to the people who build — and help them own their work.
> *FSI — Ferrell Synthetic Intelligence. First deployment in production.*
> **developed by neuro_nomad**

## Pitfalls (from researched failures)
- Shader precision: force `highp float` (mobile mediump broke ZERO's animations).
- GPU texture uploads block frames: chunk atlas tiles, upload one per frame.
- Escape/listener leaks on overlay teardown (VS Code review findings).
- Never gate the product on the scene: Skip visible from frame one; failure to init
  WebGL must fall through silently, not error.
- Bundle discipline: Three.js loaded dynamic-import after shell paint (~140 KB gz).

## Verification battery (compile ≠ shipped)
`scripts/descent-battery.mjs` (headless):
1. First boot shows descent (state flag absent) → second boot skips it (flag set).
2. Skip button visible within 500ms of scene start; clicking lands on walkthrough.
3. Reduced-motion env → no canvas ever created, straight to walkthrough.
4. Frame-time probe: avg ≥45fps on Tier-A profile (forced via debug override),
   ≥30fps Tier-B, over the full sequence.
5. Asset weight: `assets/descent/` total ≤10MB (CI gate).
6. No network calls during playback (egress audit extension).
7. End-state: walkthrough scenario #1 active after completion OR skip.