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.
This was fixed by d6116b6, which only closed the first issue it named. Checked on main at 7c693f4: C57, C77, C7m and Cmm7 are rejected, and they are listed in Parse_RejectsInvalidGrammar. C7M is still accepted, because it is the documented major-seventh suffix spelling and gives Cmaj7. Closing.
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
matt-edmondson commentedon Oct 26, 2026
This was fixed by d6116b6, which only closed the first issue it named. Checked on main at 7c693f4:
C57,C77,C7mandCmm7are rejected, and they are listed inParse_RejectsInvalidGrammar.C7Mis still accepted, because it is the documented major-seventh suffix spelling and givesCmaj7. Closing.Generated by Claude Code