Conversation
…et checks Logging: the gap report is where gaps go. The MNX exporter no longer logs every unclassified smart shape or unplaceable gap anchor, and the MusicXML exporter no longer logs lyric hyphens and word extensions as unclassified. Those two shape types now classify as smartshape::Suppress, which vanishes from every shape path without export, gap, or log; the lyric that owns them exports or reports them. A shape that fails calcIsValid keeps its real type in the classification, and the MusicXML log says "invalid" rather than "unclassified" for it. A text expression whose text block names no text is suppressed: Human Playback authors those for its MIDI data, and one score carried 1,740 warnings about them. musxdom pin advanced to aff4981c, which interprets the Beam Over Barlines plugin's default (unhidden) singleton beams, merges the tie flags the plugin splits across the two entries, and follows an entry-attached smart shape endpoint's entry when its recorded measure went stale. Denigma reads the tie flags through NoteInfoPtr::calcHasTieStart/calcHasTieEnd and endpoint staves and measures through EndPoint::calcStaff/calcMeasure, except where a shape is found from its recorded measure's assignment, which is where Finale keeps it. MNX safety nets for what musxdom does not interpret: a zero-length tuplet the iterator does not resolve is omitted with its entries rather than written as a tuplet with a zero ratio, which the schema rejects; beams, ties and slurs skip the omitted entries. Ties and slurs written against an entry are checked once every entry has been exported: a tie whose target is not in the document becomes l.v., and a slur whose end is not becomes a gap. A cue-discarded measure was leaving a tie pointing at a note that did not exist. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
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.
Logging
The gap report is where gaps go; a client that does not want them is not owed a log full of them.
classifier-designskill updated to match.smartshape::Suppress, which vanishes from every shape path without export, gap, or log (the lyric that owns them exports or reports them). MusicXML was logging 8,000 of these per run on a large score.calcIsValidkeeps its realshapeTypein the classification (it used to default toSlurDown), and the MusicXML log says invalid rather than unclassified for it.Suppress. Human Playback authors those for MIDI data; one score carried 1,740 warnings about them.musxdom pin →
aff4981c(openmusx/musxdom#199, #200)musxdom now interprets the Beam Over Barlines plugin's default singleton-beam form, merges the tie flags the plugin splits across the two entries, and follows an entry-attached endpoint's entry when its recorded measure went stale. Denigma reads tie flags through
NoteInfoPtr::calcHasTieStart/calcHasTieEnd(MNX, MusicXML, ottavas) and endpoint staves/measures throughEndPoint::calcStaff/calcMeasure— except at the four assignment-dispatch sites, which stay on the recorded measure because that is where Finale keeps the assignment (each carries a comment). mnxdom pin (ee14988b) confirmed current.MNX safety nets
"multiple": 0, which the schema rejects. Beams, ties and slurs skip the omitted entries. Recorded indesign-decisions.md. Since the pin advance this no longer fires on the score that motivated it.finalizeEntryTargetsonce every entry has been exported: a tie whose target is not in the document becomeslv, a slur whose end is not is removed and reported as a gap. A cue-discarded measure was leaving a tie pointing at a note that did not exist.Verification
check_format.pyclean.No fixture exercises the zero-length-tuplet fallback, a cue-discarded tie target, or a stale endpoint; those paths are verified only against that score.
🤖 Generated with Claude Code