1@README.md 2 3## Notes for agents 4 5**Stop playback before playing `song.js`.** Its section masks count from cycle 0. 6 7**Sing only what the papers say.** SPEC.md's table sets the brief against the two papers: neither says "robotic", "hiss", "sibilance", "mush", "phase modulation" or "vocoder sizzle", and TQCodec's bit allocation favours the low frequencies, not the 3–8 kHz band. "Almost metallic, like a snake" is the listener's ear and is sung as that. A new line needs its source in the Vocals table. 8 9**Neither paper links the band to generated music.** TQCodec is a streaming codec that found its own RVQ noisy at 3000–8000 Hz on real music; WanSong names no band and no hiss. The link is the brief's, and `song.what` and the spec's Intent say so: keep the text Jev reads from crediting either paper with it. 10 11**The snake never goes through `codec()`.** It is what the codec leaves behind: crushing it turns the band-limited hiss into broadband grit and the 3–8 kHz point is lost. Its band is two resonant filters (`hiss`), and the ending's last hiss uses the same ones. 12 13**The codec is section masks, not Jev.** `rough`, `scan`, `half` and `clean` follow the bars as written, which `form.arrange` moves with each section, so a section sounds the same wherever Jev plays it. The hunt's last four bars are in none of the four masks on purpose: everything under `codec()` is silent there, and the kick under the snake is written outside it. 14 15**Nothing after the fix leads back before it.** The form's one choice is whether the clean chorus repeats; a way from `flow` or later back to a rough section would bring the snake back after the song said it was gone. 16 17**What a passage is made of is not a part.** These play outside `part()`, so Jev cannot turn them off: "That's a snake" (`found`), "Two stems, one run" (`alone`), the snake alone in the hunt and its answer in chorus 1 (`snakeSolo`), and the arpeggio in bars 1–4 (`opening`). They keep their part's orbit, so the meter and the level questions still see them. The ending is outside every level and the energy. The sung lines have no "out": `vocals` is a two-level question (back, full), played through `sung()`, not `part()`. 18 19**A held note needs `stopping()` to honour a dropout.** The gap mask only removes onsets in a section's last beat; a note already sounding rings through it. `stopping(held, cut)` plays the cut form on a dropout bar. It reads the next section's transition, so use it only where a next section always exists (not in the outro). Chorus 1's two-bar answer starts a bar early and reads it two bars ahead (`dropsOutAfter`). 20 21**No delay time in seconds.** The echoes use superdough's default, `delaysync` 3/16 (a dotted eighth at the song's tempo). `.delaytime(.375)` is a dotted eighth at 120 bpm only. 22 23**The harmony moves every two bars on purpose.** Each vocoded line is rendered on one chord (`samples/README.md` lists which). "Three to eight kilohertz" exists twice, `shkhza` on Am (the choruses) and `shkhzf` on F (the hunt). 24 25**Re-measure after any level change.** `measured:` holds only for the `song.js` whose hash it records.