Repository navigation
Description
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
- Create notes A and B with a full tie from A to B.
- Place a segno at B's location.
- Add a later note C with a D.S. partial tie that reaches B.
- Use linked standard and TAB staves.
- Change A's fret on the TAB staff.
- 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(), andNote::tiedNotes().src/engraving/dom/tie.cppandsrc/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: existingsegnoBeforeandsegnoAfterscenarios 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
valentijnnieman commentedon Nov 6, 2026
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!