Repository navigation
fix(generators): string-count-aware system defaults + bass shape guards (v0.1.12) - #6
ChrisBeWithYou wants to merge 1 commit into
Conversation
…ds (v0.1.12) Audit verdict: "8-string exercises ignore the extra strings" was DESIGN, not plumbing - string count/tuning reach every builder, but CAGED/Open anchor the top-six EADGBE subset by construction (correct for CAGED itself) and 'caged' was the universal beginner/session default, so most exercises never touched strings 7-8 (renderers draw all N lanes; the bottom two just sat empty). Fix (guitar-pedagogy + bass-pedagogy + metal-idiom panel): - defaultFretboardSystem(instrument, count): bass -> 'position' (bass never uses guitar shape systems; the pathway path already coded this - now Custom/beginner + sessions agree), guitar N>6 -> '3nps' (THE extended-range scale system - tiles every string, so 7/8-string runs actually reach the low B/F#), guitar 6 -> 'caged' (unchanged). Explicit advanced-mode picks and rung-coded systems always win; a rung that TEACHES a CAGED shape stays a CAGED lesson. Wired into readConfig + buildSegmentConfig. - Instrument-first guards (defense-in-depth) on every count-gated shape path: resolveCurrentShape, cagedShapeNotesForChord, templateFromShape, sweep wantShape. Kills a REAL latent pitch bug: a 6-string bass satisfies the old count-only >=6 guards, but the CAGED templates bake EADGBE's G->B major 3rd - on an all-4ths B-E-A-D-G-C bass the top two strings land a semitone flat. Only UI suppression protected it (hidden shape controls); programmatic configs (preset import, host sync) were exposed. Smoke: new smoke-strings rows (12) default routing (8-string default=3nps, reaches s=0/s=1, no-unison holds; 6-string stays caged; explicit caged preserved) + (13) bass never resolves a shape, forced 6-string-bass caged sweeps stay diatonic, 5-string scale plays the low-B string. Suite green; full run 16/19 with only the pre-existing base reds (backing-engine voice- leading row, progress, variation); contained-verifier + level-gate-async flaked under concurrency, green solo. Deferred by panel verdict (ROADMAP open thread): opt-in extended-range CAGED window-continuation (never a re-rooted box), bassRootGrip low-fifth downward reach, drop-tuning s0+s1+s2 barre primitive. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01MS2YFb6UUSwJVV6CmEa25i
|
Important Review skippedAuto reviews are disabled on base/target branches other than the default branch. Please check the settings in the CodeRabbit UI or the ⚙️ Run configurationConfiguration used: defaults Review profile: CHILL Plan: Pro Plus Run ID: You can disable this status message by setting the Use the checkbox below for a quick retry:
✨ Finishing Touches🧪 Generate unit tests (beta)
Comment |
|
Landed on |
What
Tester symptom: switching 6-string → 7/8-string guitar didn't add the extra strings to most exercises. Full audit verdict: design, not plumbing — string count/tuning reach every builder, but CAGED/Open deliberately anchor the top-six EADGBE subset (
off = N-6; correct for CAGED itself — no method teaches an "8-string CAGED"), andcagedwas the universal beginner/session default. Renderers were innocent (they draw all N lanes).Fix (guitar-pedagogy · bass-pedagogy · metal-idiom panel verdicts)
defaultFretboardSystem(instrument, count)— bass →position, guitar N>6 →3nps(the extended-range scale system; tiles every string), guitar 6 →caged(unchanged). Explicit advanced-mode picks and rung-coded systems always win — a rung that teaches a CAGED shape stays a CAGED lesson. Wired intoreadConfig+buildSegmentConfig.resolveCurrentShape,cagedShapeNotesForChord,templateFromShape, sweepwantShape). Kills a real latent pitch bug: a 6-string bass passes the old count-only>=6guards, but CAGED templates bake EADGBE's G→B major 3rd — on an all-4ths bass the top two strings land a semitone flat. Only UI suppression protected it; programmatic configs (preset import, the new host sync) were exposed.Deliberately NOT in this PR (panel-ratified, ROADMAP open thread)
Verification
smoke-stringsrows: (12) default routing — 8-string default = 3nps, run reaches s=0/s=1, no-unison holds, 6-string stays caged, explicit caged preserved; (13) bass never resolves a shape, a forced 6-string-bass caged sweep stays diatonic (traps the semitone-flat leak), 5-string scale plays the low-B string.backing-enginevoice-leading row,progress,variation) fail identically on base;contained-verifier+level-gate-asyncflaked once under concurrency-4, green solo.🤖 Generated with Claude Code
https://claude.ai/code/session_01MS2YFb6UUSwJVV6CmEa25i