Skip to content

read a cross-staff beam group across another voice's note without a backup in mx::impl #505

Open

Description

@webern

Written on behalf of the user by AI...

#492 (for #425) taught the reader that a change of <voice> text between two notes, with no <backup>, starts another voice, and taught the writer to put a voice that only plays in another voice's rests into those rests instead of after a <backup>.

One case was left as it was on main: a cross-staff beam group in a voice whose rests another voice fills.

MeasureReader::scanForCrossStaffBeamGroups (added for #289) runs before the notes are read and tracks open level-1 beam groups by the count of <backup>s so far, not by voice. It does not look at <voice> text. So when a note of voice 5 sits between two beamed notes of voice 4 with no <backup>, the scan sees voice 4's group broken, the same way a <forward> breaks it. The group is not recognized as cross-staff, and its notes are filed under the staff each one names instead of the voice's home staff.

What needs to be done:

  • Track open beam groups per staff and per <voice> text within a <backup> stretch, matching how findVoiceBucket now splits voices, so a note of another voice does not break the group.
  • Add a test: a two-staff measure where voice 1 has a beam group crossing to staff 2, and voice 2 plays in a rest inside that group with no <backup>. Read it, check the group's notes share one home staff, write it and read it back.

Related: #492, #425, #289, #422

Activity

  1. added
    bugsoftware defect
    non-breakingfixes or implementation that do not require breaking changes
    implAffects the mx::impl layer
    aiIssues opened by, or through, a coding agent.
    on Nov 7, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    aiIssues opened by, or through, a coding agent.bugsoftware defectimplAffects the mx::impl layernon-breakingfixes or implementation that do not require breaking changes

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions