feat(editor): chord grips may use open voicings — flagged for individual review - #257
Merged
Conversation
|
Caution Review failedThe pull request is closed. ℹ️ Recent review info⚙️ Run configurationConfiguration used: defaults Review profile: CHILL Plan: Pro Plus Run ID: 📒 Files selected for processing (5)
📝 WalkthroughWalkthroughChord-grip resolution now permits ambiguous open-string placements, marks them for review, propagates those markers through window resolution, and excludes them from bulk confirmation. Tests cover grip selection, propagation, singleton refusal, and Accept all behavior. Changelog wording was updated. ChangesOpen voicing resolution
Estimated code review effort: 3 (Moderate) | ~20 minutes Possibly related PRs
Sequence Diagram(s)sequenceDiagram
participant Editor
participant _resolveWindowPure
participant _resolveChordGripPure
participant ConfirmationSweep
Editor->>_resolveWindowPure: resolve anchor window
_resolveWindowPure->>_resolveChordGripPure: resolve chord grip
_resolveChordGripPure-->>_resolveWindowPure: assignments with ambiguousOpen
_resolveWindowPure-->>Editor: moves and review indices
Editor->>ConfirmationSweep: accept all with reviewOnly refs
ConfirmationSweep-->>Editor: confirm only non-review refs
🚥 Pre-merge checks | ✅ 5✅ Passed checks (5 passed)
✨ Finishing Touches📝 Generate docstrings
🧪 Generate unit tests (beta)
Comment |
byrongamatos
force-pushed
the
feat/editor-open-voicings
branch
from
July 14, 2026 17:42
9487a2c to
5b73cad
Compare
"Use opens, flag for review" (#245 follow-up): _resolveChordGripPure may voice an ambiguous note open, tagging the pick ambiguousOpen; _resolveWindowPure propagates the tag to its moves and lists flagged indices; the sweep's Accept-all excludes flagged refs via the existing refused-notes gate. Singleton open-vs-fretted refusal unchanged. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01EBQCHCNA81E9tHmSDHSe2Q
The sweep object grew a reviewOnly set (refused + ambiguous-open refs); the state comment still described the old two-field shape. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
An agent worktree symlinked node_modules; .gitignore only lists node_modules/ (trailing slash), which matches a directory but not a symlink, so git add -A tracked it. The symlink pointed at a local absolute path and would break any other checkout.
byrongamatos
force-pushed
the
feat/editor-open-voicings
branch
from
July 14, 2026 19:00
896fb33 to
d8383a6
Compare
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.
What
Follow-up to #245, implementing the agreed "use opens, flag for review" policy from the review discussion:
_resolveChordGripPureno longer bails on a cluster note playable both open and fretted — it may voice the note open (opens are how real chord shapes use the neck, and the span metric naturally prefers them), tagging the pickambiguousOpenwhenever a fretted alternative was eligible._resolveWindowPurepropagates the tag onto its moves and returns anambiguousOpenindex list — including identity picks (a note already sitting on the chosen open string writes no move but still needs the review gate)._acceptAllRefsPurewith a unioned review-only set) — the charter confirms each machine-chosen open individually, in view. The status line counts them ("… · 2 open voicings to review").Deliberately unchanged: the singleton resolver (
_suggestPositionPure) still refuses open-vs-fretted — outside a chord shape there is nothing to justify the machine deciding. A new scope-guard test pins that.Tests
tests/chord_grip.test.mjs: the three ambiguity cases flip from refuse→grip+flag (min-span grip with the open tagged; D+G dyad collapses to two opens, both tagged; the_resolveWindowPureintegration case asserts flag propagation).tests/open_voicings.test.mjs(5): unambiguous open never flagged; fretted pick never flagged even with an open alternative; identity pick still listed for review; singleton scope guard; Accept-all exclusion. The behavioral cases fail on main (grip returns null there).routes.pyuntouched.Notes
[Unreleased]left by earlier merges (the Map Health and onset-detection entries each had a repeated tail line).🤖 Generated with Claude Code
https://claude.ai/code/session_01EBQCHCNA81E9tHmSDHSe2Q
Summary by CodeRabbit