Status: implemented — in review (PR incoming). Foundation for got-feedBack/feedBack#334.
Problem
The editor flattens chords→notes for editing; reconstructChords() rebuilds chord_templates from scratch at save with blank name/fingers (screen.js). Authored chord names + fingerings are destroyed on edit→save. Verified: GP5 imports carry chord names (lib/gp2rs.py) and the editor wipes them.
Fix
Snapshot the authored templates (still on arr.chord_templates at reconstruct time) and carry name + per-string fingers forward by fret-pattern match — the key the editor dedup and both GP converters already use. Width-normalized to L (7/8-string). No-metadata packs save byte-identical. Pure helpers (@pure:chord-relink) + zero-drift node unit test.
Notes
- Editor-only;
routes.py already persists name/fingers.
displayName/template-arp deferred to E1 (backend writer drops them today).
- Same-fret chords collapse to one template (first-wins) — pre-existing flattened-model limit, strictly better than prior blank.
Status: implemented — in review (PR incoming). Foundation for got-feedBack/feedBack#334.
Problem
The editor flattens chords→notes for editing;
reconstructChords()rebuildschord_templatesfrom scratch at save with blankname/fingers(screen.js). Authored chord names + fingerings are destroyed on edit→save. Verified: GP5 imports carry chord names (lib/gp2rs.py) and the editor wipes them.Fix
Snapshot the authored templates (still on
arr.chord_templatesat reconstruct time) and carryname+ per-stringfingersforward by fret-pattern match — the key the editor dedup and both GP converters already use. Width-normalized toL(7/8-string). No-metadata packs save byte-identical. Pure helpers (@pure:chord-relink) + zero-drift node unit test.Notes
routes.pyalready persists name/fingers.displayName/template-arpdeferred to E1 (backend writer drops them today).