mirror of
https://github.com/got-feedBack/feedBack.git
synced 2026-09-11 02:44:30 +00:00
71833705b29fefca36cb23b7c402dc54371eed66
Reported by a 6-string bassist: a Sleep Token chart tuned A0 D1 G1 C2 F2 A#2 (standard 6-string bass, whole step down) imported and displayed as "6 string D Standard". They called it A standard and they were right. Root cause: `tuning_name()` gated its naming ladder on `len(offsets) == 6`, treating six offsets as proof of a 6-string GUITAR. A 6-string BASS also has six offsets, but its lowest string is B, not E — so the guitar ladder mislabels the whole family: an all-zeros bass read "E Standard" (it is Standard/B) and a whole-step-down bass read "D Standard" (it is A Standard). The function's own comment warned about exactly this error for 7-string guitars; nobody guarded the bass axis. The stored value feeds the library's Tuning filter, so every 5/6-string bass song in every library was filed under a guitar name. - `tuning_name(offsets, *, is_bass=False)`: bass 5/6 use the low-B ladder (Standard / Bb / A / G# / G) and bass 4 keeps the E ladder it shares with guitar. Drop names come off the resulting low string. Default stays guitar, so existing callers are unaffected. - `sloppak._tuning_for_meta_kind()` reports WHICH kind supplied the tuning; `extract_meta` emits `tuning_is_bass` and scan_worker passes it through. Guitar-first selection for the library index is unchanged — a pack with a guitar part still indexes by the guitar. - `TUNING_PRESET_MIDIS` bass-5/bass-6 renamed to match, with `TUNING_PRESET_ALIASES` so `_valid_tuning_for_key` MIGRATES a saved profile carrying an old name instead of rejecting it (it refuses names belonging to another key's built-ins, and "D Standard" still exists for guitar-6/bass-4 — so a rename alone would have invalidated those profiles). Pitches are untouched; only labels change. Convention confirmed by the bass- and guitar-pedagogy seats: name extended range off the ACTUAL lowest string, which is what the 7-string guitar presets already do. The old names came from the band-level habit of saying "we're in D standard" — true of the guitars, while the bassist in that band is in A standard. Right answer, wrong scope. The bass table was also internally inconsistent: its Drop A was already named off the low string while its standards were not. Tests: bass ladders for 4/5/6 strings, the reported chart pinned both ways (is_bass=True -> "A Standard", same offsets as guitar -> "D Standard"), bass drop naming, a table-wide invariant that every bass preset name matches the note its low string sounds, and alias migration (incl. not leaking into guitar-6/bass-4). The existing legacy-flat-bass migration test now asserts the corrected label — same pitches, right name. Suite: 1735 passed vs 1720 on main, with the same 99 pre-existing env failures. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01929LgKdJMyPGLf8N1WpEVW Signed-off-by: ChrisBeWithYou <christian.a.cowan@gmail.com>
Languages
JavaScript
56.4%
Python
37.1%
HTML
3.2%
CSS
1.2%
TypeScript
1.1%
Other
1%