Puts the split branch on dev.gandora.lol so it can be tried on an iPhone before it goes to main.
What it is:index.html becomes markup + CSS; the code moves into app.js core.js covers.js dj.js render.js store.js player.js mashup.js ui/{library,player,sheet,taste}.js. Four steps, player moved last and as-is. Plus the splitter tooling (tools/split*.{js,py,json}, tools/check-pure.mjs), harness fragments reading through window.g, and updated ARCHITECTURE/HANDOFF.
Checked on hb-5: every module parses (node --check); tools/harness-safari.py (WebKit) prints the same expectations as main: handoff, hold, queue-behind-hold, pause (crackle on), resume, skip.
To check on the phone: first load after RELOAD, a fresh station and a resumed one (TAP TO PLAY), two track handoffs with the screen locked, the station sheet (DJ section, modes, room tone off), library in-place play, emoji tray/picker, stats page, webamp link.
dev had one commit of its own (webamp.html); it was set to main's version first so this merges cleanly.
Puts the `split` branch on dev.gandora.lol so it can be tried on an iPhone before it goes to `main`.
**What it is:** `index.html` becomes markup + CSS; the code moves into `app.js core.js covers.js dj.js render.js store.js player.js mashup.js ui/{library,player,sheet,taste}.js`. Four steps, player moved last and as-is. Plus the splitter tooling (`tools/split*.{js,py,json}`, `tools/check-pure.mjs`), harness fragments reading through `window.g`, and updated ARCHITECTURE/HANDOFF.
**Checked on hb-5:** every module parses (`node --check`); `tools/harness-safari.py` (WebKit) prints the same expectations as `main`: handoff, hold, queue-behind-hold, pause (crackle on), resume, skip.
**To check on the phone:** first load after RELOAD, a fresh station and a resumed one (TAP TO PLAY), two track handoffs with the screen locked, the station sheet (DJ section, modes, room tone off), library in-place play, emoji tray/picker, stats page, webamp link.
`dev` had one commit of its own (webamp.html); it was set to `main`'s version first so this merges cleanly.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
https://claude.ai/code/session_01K6897PWcUEwHiqZMcVnNF6
The harness fragments now run as inline modules (after app.js) and stub the renderer through render.setFetcher; harness.sh's loop mode goes over http + DevTools like resume (file:// cannot load modules; --dump-dom also hangs on current Chrome). No page change yet.
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Dhu3iHseRewQ2WpBSVLokG
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Puts the
splitbranch on dev.gandora.lol so it can be tried on an iPhone before it goes tomain.What it is:
index.htmlbecomes markup + CSS; the code moves intoapp.js core.js covers.js dj.js render.js store.js player.js mashup.js ui/{library,player,sheet,taste}.js. Four steps, player moved last and as-is. Plus the splitter tooling (tools/split*.{js,py,json},tools/check-pure.mjs), harness fragments reading throughwindow.g, and updated ARCHITECTURE/HANDOFF.Checked on hb-5: every module parses (
node --check);tools/harness-safari.py(WebKit) prints the same expectations asmain: handoff, hold, queue-behind-hold, pause (crackle on), resume, skip.To check on the phone: first load after RELOAD, a fresh station and a resumed one (TAP TO PLAY), two track handoffs with the screen locked, the station sheet (DJ section, modes, room tone off), library in-place play, emoji tray/picker, stats page, webamp link.
devhad one commit of its own (webamp.html); it was set tomain's version first so this merges cleanly.🤖 Generated with Claude Code
https://claude.ai/code/session_01K6897PWcUEwHiqZMcVnNF6
fc0bfe05a6d4b4f48b03c5991ebc36c2586c42e46e0259daffd607db3aacb11ff4b7b6f01be6f5b2b11b3b47a2e5317604919213647549b47f62f8e6cf522e8926c9475f62d64df29cc14f68aa7007949186dc1be6cc6ca29cbe6e3965bf1c4f846dc15af62ebdc79b5a18bb5f44045b14b6a653101a498cc1606fdf9beaaacfacc8dbe369d2c3bc7a16bb34d97628d1ad49010877ec36a8d64684c9b89d0b15be3bce8aacd0797bc2c3