Take the markdown fences out of the example files - #20
Merged
Conversation
All eight files in examples/ opened with a ```plainsong fence and closed with ```. They are .song files, not markdown, so the fence meant nothing -- the parser skips it, nothing sounded wrong and nothing warned. It still mattered. These files are the first thing anyone reads to learn the notation, and the failure mode observed while probing this tool with small models was an agent copying an example verbatim. What it would copy is a fence. No music moved, and that is checked rather than claimed: the corpus fingerprint hashes the compiled arrangement rather than the source, so a change that altered anything audible would show. It reads 6,321 files compiling exactly as recorded, unchanged. The three warnings `check examples` reports were investigated and left alone. Two are sections whose chords deliberately stop short of the section -- one is an outro named "fading sonar" -- and the third is edge-3-dense-chords.song, whose degenerate tokens BUGS.md already documents as testing graceful degradation. Changing any of them would change the music to silence a warning, which is backwards. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01PBAjxy7cD6DzJ72NX8TJEc
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
A pre-ship pass: play-test the shipped artifact end to end, clean up what it turned over, and change nothing that isn't a defect.
The one thing that needed fixing
All eight files in
examples/opened with```plainsongand closed with```. They are.songfiles, not markdown. The parser skips the fence, so nothing sounded wrong and nothing warned.It still mattered: these files are the first thing anyone reads to learn the notation, and the failure mode observed while probing this tool with small models was an agent copying an example verbatim. What it would copy is a fence.
No music moved, and that is checked rather than claimed — the corpus fingerprint hashes the compiled arrangement, not the source, so anything audible would show. It reads 6,321 files compiling exactly as recorded, unchanged. 16 deletions, 8 files.
Play-test of the actual shipped wheel
Built
plainsong-1.5.0-py3-none-any.whl, installed it into a clean venv outside the tree, and drove the documented surface — 17 commands, all passing. Then verified the outputs were real rather than trusting exit codes:MThdheader, 783 bytes, 63 note-on eventsPlus the check CI structurally cannot run, because it has no browser:
Eight cases, note-for-note identical between the browser demo's own JavaScript compiler and this one.
Two things I investigated and deliberately did not change
plainsong check examplesreports 3 warnings. All three are intentional:edge-3-dense-chords.song, whose degenerate tokens (e2-.-g2,c3--e3) are already documented inexamples/edge-cases/BUGS.mdas testing that they degrade gracefully to 2-note chords.Changing any of them would alter the music to silence a warning, which is backwards.
I also chased what looked like a defect —
check --jsonappearing to reportpath: None— and it was my own misreading. The key issource, and it identifies every file correctly. No change made.Ship gate
ruff check/format --checkverify_release.py --stage wheelWorking tree is clean — no build artifacts tracked, no stray worktrees, all caches gitignored.
Generated by Claude Code