hard gate · built 2026-07-02 · executable

Music Pro Gate

Why music sheets kept shipping below the pro bar (guitar staves and lyric words missing from ixi sheets, twice in one day), and the executable gate that makes it impossible to call one done. The bar is a published tab book, not a demo.

Why it kept happening — the failure chain

  1. Format truth was sampled from live pages, not the spec. The sheets copied believeyoume-endless-v5 as "the house standard." Run the new gate against that very page and it fails four checks itself (no lyric words, annotation-cramped vocal, no rendered tab, no evidence table). Copying instances propagates rot; the SKILL.md spec had the right answer the whole time.
  2. The skill's own renderer was skipped. believe-you-me ships build_sheet.py with the pro layout baked in. Hand-rolled HTML forfeits every guarantee the renderer enforces.
  3. An evidence gap silently became a content gap. pyin transcribes monophonic stems (vocal, bass). Guitar had no MIDI, so guitar quietly vanished from the score instead of being transcribed with the right tool (basic-pitch) or flagged out loud.
  4. QA measured "renders," not "complete." The in-browser check counted SVG paths and console errors. A two-voice, no-lyrics block passes that test forever.
  5. Every executable gate covered prose or web-shape; music-shape had none. Voice rules are enforced by a hook. Ship closeout is enforced by ship.py. The music content itself had no enforcement, and what is not executable gets skipped under momentum.

The prompt (paste at Step 0 of any music ask)

1. Read the CURRENT spec, not a live example. Open the owning skill's SKILL.md and follow its output spec today. Live pages are stale instances, never the format truth. If the skill ships a renderer, use it.
2. Full stack, every sung section: Vocal system with engraved lyric words under the notes, Guitar system with real rendered tablature, Keys system when keys play, Bass system with real 4-string tab. Four systems top to bottom, like a published tab book.
3. No ASCII tab. No annotation chords stuffed on the vocal line. Chord symbols ride the Guitar and Bass staves.
4. Every staff grounded, bar for bar, in transcribed MIDI or a named published chart, linked in a sources block. A tool limitation is a flag to use the right tool, never a silent omission of an instrument.
5. Evidence on the page: per-section transcription-weight table, Roman-numeral function labels, linked .mid files.
6. QA = completeness, not render-success. Run python3 ~/.claude/skills/_shared/music_pro_gate.py <index.html> and require PASS before any done-claim. ship.py checks web-shape only.
7. Anything impossible this pass gets said out loud and queued. A silently reduced sheet is the fraud pattern.

Canonical copy: ~/.claude/skills/_shared/music_pro_gate_prompt.md · wired into believe-you-me SKILL.md as step 4c.

The gate has teeth — live results at build time

PageVoices G1Words G2Real tab G3Clean vocal G4Verdict
thirteenth-step-weak-and-powerlesspasspassFAILFAILHARD FAIL
thirteenth-step-the-outsiderpasspassFAILFAILHARD FAIL
thirteenth-step-the-noosepasspassFAILFAILHARD FAIL
believeyoume-endless-v5 (the copied "standard")FAILFAILFAILFAILHARD FAIL

The three Thirteenth Step sheets carry voices, words, evidence tables, and sources after today's fix, and still hard-fail on rendered tablature and vocal-line annotations. The reference page they were copied from fails harder. Nothing currently live meets the bar, which is exactly the point: the gate now says so mechanically, and the upgrade ladder is queued one sheet per pass (q-2026-07-02-0b6a71).

What changed today, concretely

What this page is: Brandon's music pages kept coming out half-finished, like a coloring book with pages missing. The guitar part and the song words kept getting left out.

This page explains why that kept happening (the computer copied an old page instead of reading the newest instructions) and shows the new checker robot that looks at every music page and yells FAIL if anything is missing.

Now a music page cannot be called finished unless the robot says PASS.