From b6f1c59e15ca4d2f915b1c14fffc26d1debf69a7 Mon Sep 17 00:00:00 2001 From: type-two Date: Fri, 10 Jul 2026 23:42:05 +1000 Subject: [PATCH] =?UTF-8?q?=F0=9F=93=96=20brief:=20STATUS=20+=20CONTINUATI?= =?UTF-8?q?ON=20=E2=80=94=20Z0-Z2=20approved,=20C1-C4=20instructions=20(Fa?= =?UTF-8?q?ble=20review)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Fable 5 --- ZERO_OMNI_BRIEF.md | 65 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 65 insertions(+) diff --git a/ZERO_OMNI_BRIEF.md b/ZERO_OMNI_BRIEF.md index bc3a285..2db6587 100644 --- a/ZERO_OMNI_BRIEF.md +++ b/ZERO_OMNI_BRIEF.md @@ -225,3 +225,68 @@ FM→string→GODSONIQ and plucks confirm; screenshot for the session log; conso - Don't gate existing users into zero — it's a door, not a wall. `gs_mood` returning users land where they left off. - Keep the first-visit card copy short and Godstrument-voiced. No onboarding-speak. + +--- + +# STATUS + CONTINUATION (Fable review, 2026-07-10) + +**Z0–Z2 verified and approved** (commits 2a705e3, d30cea4, 4e44533, 9a7f947): the three-door +card, the calm 7+7 ring field, spinning orbs, drag-to-route, the synth-roll assign menu — +all live-verified, Z-AC met (bitcoin sang through a sun-opened filter from zero), console +clean, syntax clean, field-draw correctly guarded. Genuinely good work. + +Continue from here, in this order: + +## C1. Fix: leaving zero silently DISCARDS the user's build (real bug) + +`exitZeroToMood` always restores `gs_prezero`, replacing routesArr — so a user who built +cables in zero and clicks "first light" loses their build with no warning. The brief's +intent (§2 graduation): *"leaving zero shows the full field with everything the user +built still wired."* Fix: on exit, if the current (zero-built) patch has ≥1 route, offer a +small three-way choice (same visual language as the door card, but compact): +- **keep my build** — don't restore prezero; just drop the overlay + apply the mood's + mutes/gains only (the build stays as the whole patch); +- **bring the old world back** — current behavior (restore prezero); +- **weave them together** — restore prezero THEN re-registerRoute the zero-built routes + on top (registerRoute dedups by source|dest). +If the zero build has 0 routes, skip the prompt entirely (current behavior is right). + +## C2. Zero build must survive a reload + +Routes persist via the matrix, but `zeroUI.nodes` (picked feeds / stage orbs) don't — a +returning zero-user (gs_mood="0 zero") reloads into an empty stage even though their +cables exist. Persist the picks to localStorage (`gs_zeronodes`: {group: [srcKeys]}) on +every pick/route; restore in `zeroUI.open()`. Also reconstruct socket lit-state (already +done via refreshSockets) — verify with a reload test. + +## C3. Orb interactions beyond drag (touch + depth) + +HTML5 drag doesn't exist on touch, and orbs currently have no menu: +- **Tap-to-patch fallback:** click/tap an orb → it "arms" (glow ring, cursor hint); + click a socket → routeGroup(armed, dest); click elsewhere → disarm. Keep drag working. +- **Right-click an orb** → small menu: member list with × to remove a feed, "unpatch + everything from this orb", and (stub for Z3) "💾 save as vibe". Removing the last + member removes the orb. +- **⛈ graduation affordance:** a small fixed "⛈ enter the storm" pill inside the zero UI + (bottom-right above the rack) → runs the C1 exit flow with mood "the full storm". + +## C4 = Z3 (vibes), Z5 (OMNI panel), Z4 (dimensions), Z6 (ship) — per the brief above + +Follow the brief sections 3, 4, 5, 6 as written, with these additions learned since: +- The orb right-click "save as vibe" (C3) is the natural zero-mode entry to Z3 — a vibe + is exactly one orb's members + the routes they carry. +- auth.py vibes store: use the existing `CREATE TABLE IF NOT EXISTS` idiom (auth.py:44-46 + style) so the server migrates itself on restart — additive only. Test locally against a + COPY of godstrument_users.db, never the live file, and remember the deploy never ships + the db. +- Vibe import parses user-pasted data → validate hard (source/dest against known sets, + numeric clamps, 32-route cap, try/catch the base64/JSON). This is a trust boundary. +- **Before the Z6 deploy, run the `/ship-check` skill** (pre-deploy security sweep) — + this feature set touches auth.py and user-pasted input, which is exactly its territory. +- Nit (low): while in zero, the chakra-view key (F3/C) flips chakraMode with nothing + drawn — make it a no-op in zero (or have it exit zero first via the C1 flow). + +Keep the cadence: extraction-check → build → verify in the logged-in preview (z0test / +zeropass123 account exists) → screenshot → commit per milestone. Deploy only at Z6 after +the adversarial review. The grimoire is truth — Z6 writes zero/vibes/dimensions/OMNI-panel +sections in the tech-manual style (numbered how-to + spec table) and regenerates the manual.