For agents, on top of README.md, which they read first.

Notes for agents

Stop playback before playing song.js. Its section masks count from cycle 0.

The harmony moves every two bars on purpose. Each vocoded line is rendered on one chord (samples/README.md lists which), so a line must start on the first bar of its chord. Changing the section lengths or the chord order means re-rendering the lines with vocode.

The blue shell's hit is two bars after its trigger. samples/blueshell is trimmed so the impact lands exactly 2 bars (2.824 s at 170 bpm) in; re-trim it if the tempo changes. The hook plays it twice: the warning up to .end(.65) ducked under Pong, then from .begin(.65) at full on bar 19, so the hit is not ducked.

The drops play the chord cycle four bars on, so they land on Am. Every drop part applies .early(4) to its notes before its section mask: .early(4) after .mask(drops) moves the mask too, and the part plays in the wrong bars.

The hook is not a part. The title lines and the builds' memes sit in hook, outside part(), so no Jev level can silence them; only the energy and a dropout's gap reach them. Lines Jev may level go in vox.

joysticks is not vocoded throughout. The vocoder turns "Jev" into "Jeb" or "Jeff" (whisper, 2026-09-25, even from an IPA phoneme), so "Jev is" is the dry SAPI voice over a ducked vocoder (samples/README.md). Re-rendering it means repeating that blend, then checking it with whisper.

Measure twice. nix run .#measure on this song varied by up to 3 dB in the drums and 1.3 dB in the peak between runs of the same code (2026-09-25), so the master level leaves margin under −1 dBFS.