Skip to content

Investigate pitch updates across full ties and D.S. partial ties sharing a segno destination #35545

Open

Description

@coderabbitai

Summary

Investigate whether pitch edits update all notes connected by a full tie and a D.S. partial tie that share a segno destination. This is a follow-up to the partial-tie review discussion on #35541, separate from that PR's TAB tie-chain fix for #32422.

Note::tiedNotes() backtracks with firstTiedNote() and then traverses forward with findTiedNotes(). The shared traversal implementation is unchanged by #35541. The review identified a possible omitted incoming D.S. source when traversal starts from the full-tie source.

Scenario to reproduce

  1. Create notes A and B with a full tie from A to B.
  2. Place a segno at B's location.
  3. Add a later note C with a D.S. partial tie that reaches B.
  4. Use linked standard and TAB staves.
  5. Change A's fret on the TAB staff.
  6. Check the actual pitches of A, B, C, and their linked notes.

The reported concern is that A and B change pitch while C retains its previous pitch. This report is based on source inspection, not a runtime reproduction. Confirm the behavior and the affected versions before treating it as a confirmed regression.

Required investigation and changes

  • Confirm whether Note::tiedNotes() omits C when invoked from A in this topology.
  • Determine the intended pitch-edit semantics for incoming partial-tie sources that share a destination with a full tie.
  • If all connected notes should change, update shared traversal or the appropriate pitch-edit operation to include the incoming source.
  • Preserve TAB string matching and linked-staff behavior.
  • Avoid duplicate updates and cyclic traversal.
  • Add regression coverage for the shared-destination topology.

A change to Note::tiedNotes() is one possible solution, not a required implementation. Check other callers before changing its contract.

Affected areas

  • src/engraving/dom/note.cpp: Note::firstTiedNote(), Note::findTiedNotes(), and Note::tiedNotes().
  • src/engraving/dom/tie.cpp and src/engraving/dom/tiejumppointlist.cpp: partial-tie jump relationships.
  • src/engraving/editing/noteinput.cpp: TAB fret-entry updates.
  • src/engraving/editing/editnote.cpp: pitch and fretting updates.
  • src/engraving/tests/partialtie_tests.cpp: existing segnoBefore and segnoAfter scenarios provide topology examples.
  • src/engraving/tests/note_tests.cpp: linked-staff pitch-edit regression coverage.

Acceptance criteria

  • A regression test establishes the expected pitch behavior for A, B, and C.
  • Under the agreed semantics, pitch edits keep the connected notes and linked staves consistent.
  • TAB fret values remain consistent with the resulting pitches.
  • Undo and redo restore and reapply the complete edit.
  • Ordinary full ties and existing partial-tie scenarios still work.
  • If shared traversal changes, tests cover duplicate prevention and cycle safety.

Context

Requested by @valentijnnieman.

Activity

  1. valentijnnieman commented on Nov 6, 2026

    @valentijnnieman

    I asked coderabbitai to make this issue, as it came up in my pr #35541 as a review comment, and I felt it was out of scope for that pr. I don't mind picking this up sometime next week, if someone want to assign it to me!

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

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions