E2E tests referenced test-mscore/sia-snowman/ which was not committed
in the PR. Switch to royalty-free "Twinkle Twinkle Little Star" scores
stored in tests/fixtures/twinkle-twinkle/, keeping fixture paths simple
and co-located with the test files.
Store project_path in undo/redo stack entries so that reverting a
mutation correctly points the session back to the original input file,
preventing the next command from reading the wrong file when input and
output paths differ.
Commands now reload project metadata from output files after backend
operations, ensuring session.project_data reflects actual changes.
Previously, snapshot() captured state before mscore operations, but
project_data was never updated afterward—undo restored unchanged
metadata. Now all mutation commands (transpose, add/remove/reorder
instruments) update session state from the output file.
Fixes the issue identified in PR review where undo/redo was
scaffolding-only for backend-driven harnesses.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- Fix add_instrument off-by-one: count parts before SubElement append
- Replace bare except with logger.debug in instruments, media, parts, project
- Make project save delegate to real mscore export instead of no-op
- Pass help= to Click export subcommands for proper --help text
- Preserve --json flag across REPL command dispatches
- Guard `import fcntl` for Windows compatibility (try/except with fallback)
- Use `shlex.split()` in REPL for proper quoted argument handling
- Error on incomplete `reorder_instruments` to prevent silent data loss
- Use `functools.wraps` in `handle_error` decorator
First music notation tool in the CLI-Anything ecosystem. Wraps MuseScore 4's
mscore backend following the HARNESS.md 7-phase methodology.
Supports: transpose (by key/interval/diatonic), export (PDF/PNG/SVG/MP3/FLAC/
WAV/MIDI/MusicXML/Braille), part extraction, instrument management, score
analysis (probe/diff/stats), and interactive REPL with undo/redo.
56 tests (39 unit + 17 E2E) — all passing on macOS with MuseScore 4.6.5.