Files
Claude c1b14fed87 fix(theory): nashville() modifiers + analyze() secondary-dominant labels
Two correctness fixes found while surveying:

- nashville() stripped the "m" minor modifier and then ignored it ("4m"
  gave F major), and a flat degree like "b7" crashed (it parsed the 7 as a
  seventh-chord marker, leaving "b"). Rewrite so a bare number keeps its
  diatonic chord (and diatonic seventh quality — "17" stays Imaj7), while
  "m"/"-", "°", "+", "maj" and leading b/# borrow/alter correctly ("b7" ->
  bVII = Bb major). Shares the corrected approach with progression().

- Chord.analyze() gains secondary_dominants=True, returning "V7/V" instead
  of the bare "II7" — the inverse of progression("V7/V"), so generate ->
  analyze round-trips.

+5 tests; nashville guide and changelog updated.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_014ijpMiuST8kXnBoB5pSu8t
2026-06-22 03:38:00 +00:00
..