diff --git a/REVELATION_BRIEF.md b/REVELATION_BRIEF.md index 3222bf9..4331665 100644 --- a/REVELATION_BRIEF.md +++ b/REVELATION_BRIEF.md @@ -4,6 +4,56 @@ --- +## ⚠ AMENDMENTS — read BEFORE your lane (Fable, 2026-07-14, post-convergence) + +This brief was drafted at `main@b8b1188`, **before** the pantheon merged with the +crossover wave (keyroll note-length · world_sats · OpenSky cache · the god's-eye +Spirit · 18 post-merge review fixes). The convergence landed as `19f1770`. These +amendments override anything they contradict below. + +1. **GATE (replaces §0.2's):** branch from `main` ≥ `19f1770`. Confirm your base + has BOTH waves: `grep -c godspeakCommand viz/index.html` ≥ 1 (ε) AND + `grep -c attachNoteLengths viz/index.html` ≥ 1 (keyroll) AND + `git log --oneline -3` includes the ⚭ convergence commit. If not, STOP. +2. **WHEELS — the `len` name is TAKEN.** Keyroll landed `seq.len` as a + **per-step ARRAY of note lengths** (see `seqFor`: `len: new Array(16).fill(1)`, + plus `migrateSeq`'s `len-default`/`len-badlen` self-checks). WHEELS's per-lane + pattern length must be a **different field: `wlen` (int 1–16, default 16)**. + Everywhere W.1–W.5 below says `len`, read `wlen`. Your `migrateSeq` additions + must coexist with the existing len-array migration (add `wlen` clamping beside + it; new self-check assertions for `wlen`, don't touch the len ones). +3. **WHEELS × keyroll indexing:** the note branch of `seqTick` now reads + `sq.len[cur]` (per-step note length) — with wheels, `cur` becomes + `wheelStep(sq)` for BOTH the `steps[]` gate and the `len[]` lookup (one `cur`, + used twice — do not let them diverge). +4. **WHEELS × exportMid:** the drum block now has an `owned(v, sq)` gate (lanes + export only if playing or edited off `DRUM_SEED`) — your absolute-loop rewrite + in W.4 must keep that gate exactly. The note track is length-aware with a + same-pitch overlap clamp; don't disturb it. +5. **TESTAMENT:** the master chain gained nodes since your anchor was written + (squash from β; the Schumann layer predates). Grep the actual tail of + `build()` for the final limiter node and its name — do not trust `N.lim` as a + name, verify it. Also `Synth.pluck` now takes an optional `durMs` — irrelevant + to your tap, but don't be surprised by the signature. +6. **PSALM:** `Synth.pluck(midi, vel, durMs)` exists — sustained sung notes may + pass a duration instead of relying on the fixed decay; treat that as an + allowed (flag-it-in-report) enhancement, not scope creep. The mic-analysis + AudioContext isolation rule stands. +7. **CANON:** factory patches must survive `migrateSeq` with the NEW fields + (len arrays, `wlen` once WHEELS lands, `locked`, `kit`) — author them by + exporting real patches from a post-WHEELS build, never by hand-writing JSON. +8. **Regression additions to §0.7:** the groove self-check must stay green + (it now asserts len-array migration), and the god's-eye skin must still cycle + (right-click → skin) with zero console errors — it shares the overlay/render + path some of you will be near. +9. **Deploy note for ω (the closer):** the production box is currently TWO waves + behind and its venv still lacks `sgp4` — the deploy checklist you prepare must + start with `/home/humanjing/godstrument/.venv/bin/pip install sgp4`, then the + CLAUDE.md filtered rsync, then restart. GODSPEAK stays local-rig-only (inert + on the VPS); `mlx-whisper` must never enter `requirements.txt`. + +--- + ## Part 0 — shared context ### 0.1 The four revelations