Actors and objects change only at camera cuts. int/bool/discrete params skip drift, lookahead and reactivity; discrete slowAxis steps on the section-held journey. Venues fade instead of toggling on interpolated popMul; roadside density is arrangement-only. DESIGN.md collects the project's design decisions; AGENTS.md points agents at it and the build-visualizer loop.
1.5 KiB
1.5 KiB
AGENTS.md — flow-state
Design decisions
All load-bearing decisions live in DESIGN.md. Read it before
changing behaviour. Changing a decision means updating DESIGN.md and
the gate that enforces it. PLAN.md is the full design; EPIC-*.md are the
epic designs.
Adding / fixing a scene
Follow the build-visualizer skill (.claude/skills/build-visualizer/).
Short version:
npm run new:scene -- "Name" --family=<flow|organic|minimal|structural|geometric|glitch> --traits=...
# ... write the scene() body ...
npm run lint:scenes
# open http://localhost:5180/checks.html?scene=Name
Verify in order: lint:scenes (~1s) → per-scene gate in checks.html →
checks.html?slow=1 once before committing. Each rung is ~10× the cost of
the previous.
Rules that have bitten before (all in DESIGN.md §3–4)
- Anything multiplying
u_timemust berate: true— and rate params are never modulated (drift/reactive/lookahead skip them). - Discrete params (
int/bool/discrete: true) hold per cue and are never reactive: actors and objects change only at camera cuts. - No contract-uniform reuse, no hardcoded colours (use
pal()), base image under everyprev(), honour every declared trait, feedsigCamerainto the image. - No
Math.random/ wall-clock in render-path code; motion is analyticf(t, seed)so seek === playback and preview === export.
Checks
npm test # audio pipeline + venue/model headless tests
npm run lint:scenes # determinism grep + schema/shader agreement