From 4a33a30820eb3bc9796b9b3d8e6db63c8f9f995e Mon Sep 17 00:00:00 2001 From: teahubxyz Date: Wed, 21 Oct 2026 05:24:03 +0000 Subject: [PATCH] docs: README (what it is, how it runs), ARCHITECTURE (every moving part, the playback state machine, the data), HANDOFF (seams, known rough edges, what a refactor should keep); tools/harness.html as the playback regression test Co-Authored-By: Claude Fable 5.1 Claude-Session: https://claude.ai/code/session_01K6897PWcUEwHiqZMcVnNF6 --- ARCHITECTURE.md | 77 ++++++++++++++++++++++++++++++++++++++++++++++ HANDOFF.md | 44 ++++++++++++++++++++++++++ README.md | 33 ++++++++++++++++++++ tools/harness.html | 37 ++++++++++++++++++++++ tools/harness.sh | 30 ++++++++++++++++++ 5 files changed, 221 insertions(+) create mode 100644 ARCHITECTURE.md create mode 100644 HANDOFF.md create mode 100644 README.md create mode 100644 tools/harness.html create mode 100644 tools/harness.sh diff --git a/ARCHITECTURE.md b/ARCHITECTURE.md new file mode 100644 index 0000000..36feddf --- /dev/null +++ b/ARCHITECTURE.md @@ -0,0 +1,77 @@ +# How g*ndora fits together + +One page, one script, one worker. This is the map: what each part owns, how a track moves through the system, and +the invariants that the playback code relies on. Keep it current when you change any of them. + +## The parts + +| Part | Owns | Where | +|---|---|---| +| Seed screen | the seed box, the stations row, LIBRARY / TASTE / LIGHT / RELOAD | `#seed`, `listStations`, `openStation` | +| Station | seed, name, taste {like, avoid, notes}, history (last 8 sheets), look, palette, DJ name + voice, `welcomed` | `openStation`, `saveStation`, `stationSheet`; IndexedDB `stations` | +| DJ | writes a sheet (JSON, `DJ_SCHEMA`) from seed + taste + recent tracks + the brain's taste text | `djPrompt` (base) + brain.js override, `askDJ`; breaks: `askBreak`; mashups: `askMash` | +| Renderer | audio from a sheet | `renderTrack` → worker `/v1/render` (Runware; seed, bpm, key, meter, reference audio) or Venice queue/poll with a personal key; spoken breaks → `speak` → `/v1/speech` | +| Player | one `