feat(music): 9 new semantic commands — version control that understands music
Add a full suite of music-domain CLI commands that are structurally impossible in Git — treating MIDI files as typed, content-addressed graphs of note events rather than binary blobs.
New shared helper: - muse/plugins/music/_query.py: NoteInfo, load_track(), load_track_from_workdir(), key_signature_guess(), detect_chord(), notes_by_bar(), notes_to_midi_bytes(), walk_commits_for_track()
New analysis commands (read-only): - muse notes: Every note as musical notation (pitch, beat, duration, velocity) - muse note-log: Note-level commit history — which notes changed in each commit - muse note-blame: Per-bar attribution — which commit introduced these notes? - muse harmony: Chord analysis + Krumhansl-Schmuckler key detection - muse piano-roll: ASCII piano roll visualization with bar separators - muse note-hotspots: Bar-level churn leaderboard across all tracks - muse velocity-profile: Dynamic range, RMS, and per-dynamic-level histogram
New agent-scale commands: - muse transpose: Surgical pitch transformation — shift all notes by N semitones - muse mix: Combine notes from two MIDI tracks into a single output track
All commands support --json for pipeline integration. All pass mypy strict, typing_audit --max-any 0, 797 pytest tests green.
Add docs/demo/tour-de-force-music.md with a 9-act narrative. Update docs/demo/README.md and muse/cli/app.py to include both music and code domain commands together.
Closes #56
Comments
0No comments yet. Be the first to start the discussion.