You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
Chord.Parse accepts quality characters in any order and any number: "C7M", "C57", "C77" and "C7m" all parse as C7 #346
Once the modifiers have been consumed, IsQualityVocabulary (Chord.cs:200-211) accepts a body made of any mix of m M - ° + Δ 5 6 7, in any order and in any count.
DetermineQuality and DetermineSeventh only read characters at particular positions. For example, IsMinor checks StartsWith('m'), and "M7" is only recognised when the two characters are adjacent. Characters those readers don't look at are dropped. This is the "dropped silently" case the #280 check was meant to close.
Priority: Medium. Most of the inputs are junk that should be rejected. C7M, however, is a real regional spelling of maj7 and comes back as the wrong chord (C7) with no error.
Area / suggested assignment:Semantics.Music/Chord.cs, in IsQualityVocabulary (200-211), DetermineQuality, DetermineSeventh and IsMinor.
Activity
matt-edmondson commentedon Sep 30, 2026
Triage
C7M, however, is a real regional spelling of maj7 and comes back as the wrong chord (C7) with no error.Semantics.Music/Chord.cs, inIsQualityVocabulary(200-211),DetermineQuality,DetermineSeventhandIsMinor.CM9/CM11/CM13read as dominant) is the same position-dependent quality reading. Chord.Parse reads "-"/"+" alteration signs as chord quality: "C7-9" becomes Cm9, "C7-5" becomes Cm7, "Cmaj7-5" becomes CmMaj7, "C7+9" becomes Caug9 #345 (-/+read as quality) and Chord.Parse reads "Cm7#5", "Cm#5" and "Cm+" as augmented chords with a major third (Cm7#5 comes back as Caug7) #340 (Cm#5read as augmented) also change quality detection. Chord.Parse drops everything after the slash-bass note: "C/Gm", "C/E/G" and "C/Bb7" parse as "C/G", "C/E" and "C/A#" #344 is the matching leftover-text gap after the slash. All of these follow up the Chord.Parse turns "C69", "Cadd11" and "Cadd13" into dominant-seventh chords with an extra b7 instead of rejecting them #280 leftover check.7Mmeans maj7 or is rejected, and record that choice in a test.Generated by Claude Code
matt-edmondson commentedon Sep 30, 2026
Covered by #360, which redesigns this bug cluster as a whole. Implement it through that issue rather than individually.
Generated by Claude Code
[minor] Redesign chord symbols; fixes #300, #322, #336, #340, #341, #344