From de0071f7bf7ed9854110cc097fc3f641339dd453 Mon Sep 17 00:00:00 2001 From: vadimwit Date: Fri, 12 Jun 2026 15:02:33 +0100 Subject: [PATCH] kb: add bossa nova guitar pack 5 progressions (Ipanema A-section, minor ii-V-i with m6 tonic, Blue Bossa 16-bar, One Note Samba chromatic chain, Corcovado descent) x 2 plays on alternating root-string sets. Joao Gilberto rhythm layers documented (thumb surdo + syncopated block, two-bar tied pattern, partido alto contrast), improv map, sourced Ipanema melodic cell. Validator caught 6 quality mismatches (6/9 grips on maj7/min7 steps) - content fixed, gate untouched. Validator and build green. Co-Authored-By: Claude Fable 5 --- docs/kb-backlog.md | 2 +- src/data/kb/bossa/guitar.js | 227 ++++++++++++++++++++++++++++++ src/data/kb/bossa/meta.js | 7 + src/data/kb/bossa/progressions.js | 57 ++++++++ src/data/kb/index.js | 8 ++ 5 files changed, 300 insertions(+), 1 deletion(-) create mode 100644 src/data/kb/bossa/guitar.js create mode 100644 src/data/kb/bossa/meta.js create mode 100644 src/data/kb/bossa/progressions.js diff --git a/docs/kb-backlog.md b/docs/kb-backlog.md index 661dd63..eb8410d 100644 --- a/docs/kb-backlog.md +++ b/docs/kb-backlog.md @@ -15,7 +15,7 @@ The queue for the `/kb-expand` loop. One cell per session, top-to-bottom. Protoc | 1 | Jazz (part of bootstrap) | done (2026-06-12, 5 progressions × 2 plays, validator ✓) | | 2 | Blues | done (2026-06-12, 5 progressions × 2 plays, validator ✓) | | 3 | Rock | done (2026-06-12, 5 progressions × 2 plays, validator ✓) | -| 4 | Bossa Nova | todo | +| 4 | Bossa Nova | done (2026-06-12, 5 progressions × 2 plays, validator ✓) | | 5 | Funk | todo | | 6 | Reggae | todo | | 7 | Country / Folk | todo | diff --git a/src/data/kb/bossa/guitar.js b/src/data/kb/bossa/guitar.js new file mode 100644 index 0000000..cbc9fb7 --- /dev/null +++ b/src/data/kb/bossa/guitar.js @@ -0,0 +1,227 @@ +// Bossa nova guitar pack. Grips verified by note-spelling against: jazzguitar.be +// (Ipanema chords), jenslarsen.nl (bossa patterns, 5 levels), thejazzpianosite.com +// (rhythm layers), Nelson Faria "The Brazilian Guitar Book" (canonical grip source), +// mdecksmusic.com (Ipanema analysis), jazz-circle.com (Blue Bossa, Black Orpheus). +// +// Construction: thumb takes the root on string 6 or 5; fingers take 3-4 notes on +// D-G-B(-e). Every grip movable. Two plays per progression = the two root-string +// sets, because that's how bossa voice-leads: adjacent chords trade root strings +// so inner voices move by one fret ("two fingers move, the chord transforms"). + +// Root on the low E string (thumb). +const M7_6 = { rootStr: 6, offsets: [0, 'x', 0, 0, 0, 'x'], fingers: [1, 0, 2, 3, 4, 0] } // R-♭7-♭3-5 +const MAJ7_6 = { rootStr: 6, offsets: [0, 'x', 1, 1, 0, 'x'], fingers: [1, 0, 3, 4, 2, 0] } // R-7-3-5 +const DOM7_6 = { rootStr: 6, offsets: [0, 'x', 0, 1, 0, 'x'], fingers: [1, 0, 2, 3, 4, 0] } // R-♭7-3-5 +const DOM13_6 = { rootStr: 6, offsets: [0, 'x', 0, 1, 2, 'x'], fingers: [1, 0, 2, 3, 4, 0] } // R-♭7-3-13 +const DOM7B9_6 = { rootStr: 6, offsets: [0, 'x', 0, 1, 0, 1], fingers: [1, 0, 2, 3, 1, 4] } // R-♭7-3-5-♭9 +const M7B5_6 = { rootStr: 6, offsets: [0, 'x', 0, 0, -1, 'x'], fingers: [2, 0, 3, 4, 1, 0] } // R-♭7-♭3-♭5 +const M6_6 = { rootStr: 6, offsets: [0, 'x', -1, 0, 0, 'x'], fingers: [2, 0, 1, 3, 4, 0] } // R-6-♭3-5 +const DIM7_6 = { rootStr: 6, offsets: [0, 'x', -1, 0, -1, 'x'], fingers: [2, 0, 1, 3, 1, 0] } // R-♭♭7-♭3-♭5 +const DOM7S11_6 = { rootStr: 6, offsets: [0, 'x', 0, 1, -1, 'x'], fingers: [2, 0, 3, 4, 1, 0] } // R-♭7-3-♯11 (the tritone-sub grip) + +// Root on the A string (thumb). +const M7_5 = { rootStr: 5, offsets: ['x', 0, 2, 0, 1, 'x'], fingers: [0, 1, 3, 2, 4, 0] } // R-5-♭7-♭3 +const M7_5C = { rootStr: 5, offsets: ['x', 0, -2, 0, 1, 'x'], fingers: [0, 2, 1, 3, 4, 0] } // R-♭3-♭7-♭3 compact grab +const MAJ9_5 = { rootStr: 5, offsets: ['x', 0, -1, 1, 0, 'x'], fingers: [0, 2, 1, 4, 3, 0] } // R-3-7-9 +const DOM9_5 = { rootStr: 5, offsets: ['x', 0, -1, 0, 0, 'x'], fingers: [0, 2, 1, 3, 4, 0] } // R-3-♭7-9 +const DOM7B9_5 = { rootStr: 5, offsets: ['x', 0, -1, 0, -1, 'x'], fingers: [0, 3, 1, 4, 2, 0] } // R-3-♭7-♭9 +const M7B5_5 = { rootStr: 5, offsets: ['x', 0, 1, 0, 1, 'x'], fingers: [0, 1, 3, 2, 4, 0] } // R-♭5-♭7-♭3 +const M6_5 = { rootStr: 5, offsets: ['x', 0, -2, -1, -2, 'x'], fingers: [0, 4, 1, 3, 2, 0] } // R-♭3-6-R +const DIM7_5 = { rootStr: 5, offsets: ['x', 0, 1, -1, 1, 'x'], fingers: [0, 2, 3, 1, 4, 0] } // R-♭5-♭♭7-♭3 + +export default { + styleIntro: + 'The bossa guitarist is the whole rhythm section: thumb plays the surdo drum (root on 1, fifth on 3, never syncopated), fingers play the chord block on the anticipations. Quiet is louder — the genre was invented at apartment volume, and intensity comes from rhythmic placement and harmonic colour, never from strumming harder.', + + comping: [ + { + label: 'Thumb bass (the surdo)', + rhythm: 'B . . . B . . . — root on 1, fifth on 3', + description: 'Metronomic, soft, every bar, under everything. The one layer that is never syncopated. With a bassist: drop it entirely and play only the upper notes.', + }, + { + label: 'One-bar starter pattern', + rhythm: 'X . . X . . X . — hits on 1, and-of-2, 4', + description: 'The training-wheels comp: chord block on 1, the and-of-2, and 4 over the steady thumb. Master this before the two-bar pattern.', + }, + { + label: 'Two-bar João Gilberto pattern', + rhythm: 'X . . X . . . X~ | . . . X . . X . — the 4& ties over the barline', + description: 'Bar 2 has no downbeat chord — the tied and-of-4 carries across. The anticipation is the hardest and most essential bossa skill. Gilberto drifted between patterns freely; treat it as a motif, not a loop.', + }, + { + label: 'Partido alto (the samba cousin — for contrast)', + rhythm: '. X . X X . . X — lands HARD on beat 3', + description: 'Percussive, chopped, with muted ghost-strums — the opposite aesthetic. Bossa never accents beat 3: that beat belongs to the bass register (the surdo). Hammering it squares the lilt into a polka.', + }, + ], + + plays: { + 'bossa-ipanema': [ + { + label: 'Low-E roots (the João position)', + level: 'intermediate', + chords: [ + { shape: MAJ7_6, note: 'Imaj7' }, + { shape: DOM13_6, extensions: ['13'], note: 'II7(13) — the Lydian ♭7 colour' }, + { shape: M7_6, note: 'ii7' }, + { shape: DOM7S11_6, extensions: ['#11'], note: '♭II7(♯11) — tritone sub of V' }, + { shape: MAJ7_6, note: 'home' }, + { shape: DOM7S11_6, extensions: ['#11'], note: 'and the ♭II7 again — Jobim never quite lets go' }, + ], + tips: 'The whole A-section lives in a four-fret window: each change moves the thumb a fret or two and one or two fingers inside the grip. If a finger jumps more than two frets, you took a wrong turn.', + }, + { + label: 'A-string roots, colour-tone set', + level: 'intermediate', + chords: [ + { shape: MAJ9_5, extensions: ['9'], note: 'Imaj9' }, + { shape: DOM9_5, extensions: ['9'], note: 'II9' }, + { shape: M7_5, note: 'ii7' }, + { shape: DOM9_5, extensions: ['9'], note: '♭II9' }, + { shape: MAJ9_5, extensions: ['9'], note: '' }, + { shape: DOM9_5, extensions: ['9'], note: '' }, + ], + tips: 'Same progression, one string set higher and sweeter — 9ths everywhere. Use this set when another guitarist or pianist already owns the low-E register. (If the band plays a plain major tonic, the 6/9 grab — drop the 7th for the 6 — is the classic bossa colour.)', + }, + ], + + 'bossa-minor-251': [ + { + label: 'Low-E roots with the ♭9', + level: 'intermediate', + chords: [ + { shape: M7_6, note: 'i7' }, + { shape: M7B5_6, note: 'iiø7 — the ♭5 on the B string is the saudade note' }, + { shape: DOM7B9_6, extensions: ['b9'], note: 'V7♭9 — the ♭5 you just played, reinterpreted' }, + { shape: M6_6, note: 'i6 — resolve to the sixth, not the seventh' }, + ], + tips: 'One pitch threads the middle of the progression: the iiø7\'s ♭5 IS the V7\'s ♭9. Find it, hold it, let the thumb do the moving.', + }, + { + label: 'A-string roots, compact grabs', + level: 'intermediate', + chords: [ + { shape: M7_5C, note: 'compact i7 — no 5th, pure bossa economy' }, + { shape: M7B5_5, note: 'iiø7' }, + { shape: DOM7B9_5, extensions: ['b9'], note: 'V7♭9' }, + { shape: M6_5, note: 'i6' }, + ], + tips: 'Black Orpheus oscillates between this cell and the relative major\'s ii–V–I — learn both as one hand pattern and the whole tune is two moves.', + }, + ], + + 'bossa-blue': [ + { + label: 'Thumb-bass through the form', + level: 'intermediate', + chords: [ + { shape: M7_6, note: 'i7' }, { shape: M7_6, note: '' }, + { shape: M7_5, note: 'iv7 — A-string root, same fret region' }, { shape: M7_5, note: '' }, + { shape: M7B5_5, note: 'iiø7' }, + { shape: DOM7B9_6, extensions: ['b9'], note: 'V7♭9' }, + { shape: M7_6, note: '' }, { shape: M7_6, note: '' }, + { shape: M7_6, note: '♭iii7 — the excursion begins' }, + { shape: DOM9_5, extensions: ['9'], note: '♭VI9' }, + { shape: MAJ9_5, extensions: ['9'], note: '♭IImaj9 — a major-key vacation' }, + { shape: MAJ9_5, extensions: ['9'], note: '' }, + { shape: M7B5_5, note: 'iiø7 — back to reality' }, + { shape: DOM7B9_6, extensions: ['b9'], note: 'V7♭9' }, + { shape: M7_6, note: '' }, { shape: M7_6, note: '' }, + ], + tips: 'i and iv sit on adjacent root strings in one position, like a blues. The bars 9–12 excursion is a normal major ii–V–I — play it sweeter, then darken again for the iiø7.', + }, + { + label: 'Colour set (9ths and the 6/9 cadence)', + level: 'intermediate', + chords: [ + { shape: M7_5C, note: '' }, { shape: M7_5C, note: '' }, + { shape: M7_6, note: 'iv7 low' }, { shape: M7_6, note: '' }, + { shape: M7B5_6, note: '' }, + { shape: DOM7B9_5, extensions: ['b9'], note: '' }, + { shape: M7_5C, note: '' }, { shape: M7_5C, note: '' }, + { shape: M7_5C, note: '' }, + { shape: DOM13_6, extensions: ['13'], note: '♭VI13' }, + { shape: MAJ9_5, extensions: ['9'], note: '♭IImaj9' }, + { shape: MAJ9_5, extensions: ['9'], note: '' }, + { shape: M7B5_6, note: '' }, + { shape: DOM7B9_5, extensions: ['b9'], note: '' }, + { shape: M7_5C, note: '' }, { shape: M7_5C, note: '' }, + ], + tips: 'Blue Bossa\'s tonic is a true m7 — save the m6 colour for tunes that ask for it (see the minor ii–V–i cell). Keep all of it at whisper volume.', + }, + ], + + 'bossa-one-note': [ + { + label: 'Two grips falling by half-steps (A-string roots)', + level: 'intermediate', + chords: [ + { shape: M7_5, note: 'iii7' }, + { shape: DOM9_5, extensions: ['9'], note: '♭III9 — same fret region, one finger reshapes' }, + { shape: M7_5, note: 'ii7 — whole grip slides down' }, + { shape: DOM9_5, extensions: ['9'], note: '♭II9' }, + ], + tips: 'The entire progression is two grips alternating while the thumb walks down chromatically. Hold one melody note on top if you can reach it — that\'s the whole point of the tune.', + }, + { + label: 'Low-E roots with 13s', + level: 'intermediate', + chords: [ + { shape: M7_6, note: '' }, + { shape: DOM13_6, extensions: ['13'], note: '♭III13' }, + { shape: M7_6, note: '' }, + { shape: DOM13_6, extensions: ['13'], note: '♭II13' }, + ], + tips: 'The 13 on top of each dominant descends in parallel with the bass — two chromatic lines moving in lockstep, which is why this progression sounds inevitable.', + }, + ], + + 'bossa-corcovado': [ + { + label: 'Chromatic staircase, low-E roots', + level: 'intermediate', + chords: [ + { shape: M6_6, note: 'iii6' }, + { shape: DIM7_6, note: 'passing °7 — one fret down' }, + { shape: M7_6, note: 'ii7 — one more' }, + { shape: DOM7S11_6, extensions: ['#11'], note: '♭II7(♯11) — tritone sub' }, + { shape: MAJ7_6, note: 'Imaj7 — arrival' }, + ], + tips: 'The low E string walks down one fret per bar — let that bassline sing through the grips. This is the same passing-diminished device as How Insensitive; learn it once, hear it everywhere in Jobim.', + }, + { + label: 'A-string set with the 6/9 landing', + level: 'intermediate', + chords: [ + { shape: M6_5, note: 'iii6' }, + { shape: DIM7_5, note: '°7' }, + { shape: M7_5C, note: 'ii7' }, + { shape: DOM7B9_5, extensions: ['b9'], note: '♭II7(♭9)' }, + { shape: MAJ9_5, extensions: ['9'], note: 'Imaj9 — arrival' }, + ], + tips: 'When the singer holds the tonic, swap the maj9 for a 6/9 grab (7th down to the 6) — no leading tone to fight them. Over a detected maj7, stay with the maj9.', + }, + ], + }, + + improv: { + scales: [ + { over: 'ii7 / i7 / iv7', scale: 'dorian', why: 'All the minor 7ths take Dorian — bossa is jazz harmony in a swimsuit.' }, + { over: 'V7 → major I', scale: 'mixolydian', why: 'Plain Mixolydian when resolving to major; add the 13 — it\'s the genre\'s favourite colour.' }, + { over: 'II7 / ♭II7 (tritone subs)', scale: 'lydian', why: 'Lydian dominant (melodic minor from the 5th) — the ♯11 is already in the chord grip.' }, + { over: 'V7♭9 → minor i', scale: 'phrygian', why: 'Phrygian dominant (harmonic minor from the V) for the ♭9; the altered scale if you want more trouble.' }, + { over: 'iiø7', scale: 'locrian', why: 'Locrian, or raise the 2 (melodic-minor mode 6) for a smoother colour.' }, + ], + targetNotes: + 'Bossa solos are melody-first: hold or repeat a small cell and let the CHORDS recontextualise it — One Note Samba is the method stated as a song title. Target the colour tones (9, 13, ♯11) and the 3rd/7th guide-tone line; avoid sitting on roots. Phrase behind the beat and leave bar-length gaps.', + licks: [ + { + over: 'bossa-ipanema', + description: 'The Ipanema opening cell: the melody sits on the 9th and major 7th of the Imaj7 — never the root. The identical two notes work over the II7 bars, where they become root and 13.', + tab: 'e|--3--------------3-----------\nB|------5--5--3--------5--5----\n G E E D G E E\n (9) (7)(7)(6) (9) (7)(7) over Fmaj7', + source: '"Garota de Ipanema" — Jobim/de Moraes (Real Book lead sheet; mDecks harmonic analysis)', + }, + ], + }, +} diff --git a/src/data/kb/bossa/meta.js b/src/data/kb/bossa/meta.js new file mode 100644 index 0000000..423aeb6 --- /dev/null +++ b/src/data/kb/bossa/meta.js @@ -0,0 +1,7 @@ +export default { + id: 'bossa', + label: 'Bossa Nova', + feel: 'bossa', + tempoRange: [110, 160], + character: 'A whole samba band condensed into one quiet guitar: metronomic thumb bass, syncopated chord block that never accents beat 3, and jazz harmony at conversation volume.', +} diff --git a/src/data/kb/bossa/progressions.js b/src/data/kb/bossa/progressions.js new file mode 100644 index 0000000..b306a39 --- /dev/null +++ b/src/data/kb/bossa/progressions.js @@ -0,0 +1,57 @@ +export default [ + { + id: 'bossa-ipanema', + name: 'Ipanema A-section (Imaj7–II7–ii7–♭II7)', + rn: ['Imaj7', 'II7', 'ii7', '♭II7', 'Imaj7', '♭II7'], + degrees: [0, 2, 2, 1, 0, 1], + qualities: ['maj7', 'dom7', 'min7', 'dom7', 'maj7', 'dom7'], + bars: [2, 2, 1, 1, 1, 1], + mode: 'major', + songs: ['The Girl from Ipanema — Jobim', 'Desafinado (same II7 colour)'], + tip: 'The II7 is a true dominant-II (Lydian ♭7 colour), and the ♭II7 is the tritone sub of V — the bass slides home by half-step instead of jumping a fifth.', + }, + { + id: 'bossa-minor-251', + name: 'Minor ii–V–i (Black Orpheus)', + rn: ['i7', 'iiø7', 'V7♭9', 'i6'], + degrees: [0, 2, 7, 0], + qualities: ['min7', 'half_dim', 'dom7', 'min6'], + bars: [1, 1, 1, 1], + mode: 'minor', + songs: ['Manhã de Carnaval (Black Orpheus) — Luiz Bonfá', 'How Insensitive — Jobim (same engine)'], + tip: 'The bossa minor tonic is the m6, not the m7 — that major sixth is the saudade. The ♭5 of the iiø7 returns as the ♭9 of the V7.', + }, + { + id: 'bossa-blue', + name: 'Blue Bossa (16-bar form)', + rn: ['i7', 'i7', 'iv7', 'iv7', 'iiø7', 'V7', 'i7', 'i7', '♭iii7', '♭VI7', '♭IImaj7', '♭IImaj7', 'iiø7', 'V7', 'i7', 'i7'], + degrees: [0, 0, 5, 5, 2, 7, 0, 0, 3, 8, 1, 1, 2, 7, 0, 0], + qualities: ['min7', 'min7', 'min7', 'min7', 'half_dim', 'dom7', 'min7', 'min7', 'min7', 'dom7', 'maj7', 'maj7', 'half_dim', 'dom7', 'min7', 'min7'], + bars: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], + mode: 'minor', + songs: ['Blue Bossa — Kenny Dorham'], + tip: 'i–iv–iiø–V in minor, then a complete ii–V–I excursion a half-step up (♭II major) in bars 9–12. The jam-session bossa: everyone knows it, nobody minds another chorus.', + }, + { + id: 'bossa-one-note', + name: 'Chromatic ii–V chain (One Note Samba)', + rn: ['iii7', '♭III7', 'ii7', '♭II7'], + degrees: [4, 3, 2, 1], + qualities: ['min7', 'dom7', 'min7', 'dom7'], + bars: [1, 1, 1, 1], + mode: 'major', + songs: ['One Note Samba — Jobim'], + tip: 'iii–VI–ii–V with both dominants tritone-subbed: the bass walks straight down by half-steps while one melody note holds on top. Two grips, alternating, falling.', + }, + { + id: 'bossa-corcovado', + name: 'Corcovado descent', + rn: ['iii6', '♭iii°7', 'ii7', '♭II7', 'Imaj7'], + degrees: [4, 3, 2, 1, 0], + qualities: ['min6', 'dim7', 'min7', 'dom7', 'maj7'], + bars: [1, 1, 1, 1, 2], + mode: 'major', + songs: ['Corcovado (Quiet Nights) — Jobim', 'How Insensitive — Jobim (same passing-dim device)'], + tip: 'A chromatic staircase into the I: m6 → passing diminished → ii → tritone sub. (Charts vary on bar 2 — some write a II7(13) instead of the ♭iii°7; both are in circulation.)', + }, +] diff --git a/src/data/kb/index.js b/src/data/kb/index.js index a4d9121..94d3d7d 100644 --- a/src/data/kb/index.js +++ b/src/data/kb/index.js @@ -9,6 +9,9 @@ import bluesGuitar from './blues/guitar.js' import rockMeta from './rock/meta.js' import rockProgressions from './rock/progressions.js' import rockGuitar from './rock/guitar.js' +import bossaMeta from './bossa/meta.js' +import bossaProgressions from './bossa/progressions.js' +import bossaGuitar from './bossa/guitar.js' export default { jazz: { @@ -26,4 +29,9 @@ export default { progressions: rockProgressions, instruments: { guitar: rockGuitar }, }, + bossa: { + meta: bossaMeta, + progressions: bossaProgressions, + instruments: { guitar: bossaGuitar }, + }, }