Commit Graph

125 Commits

Author SHA1 Message Date
vadimwit 677d7b99d1 feat(rail): all stations expanded, playhead highlights only (task D-41)
Every loop chord is a permanently expanded vertical row: education
header (solo-scale label, guide-tone aim dots with honest 5th
fallback, voice-leading chip incl. the wrap-around loop rail) + the
full voicing gallery for the global instrument; galleries flex-wrap,
zero row-level horizontal scroll; playhead adds highlight classes only
(rows proven byte-equal modulo highlight artifacts); pin simplified to
a focus toggle (onFocusChord contract byte-compatible with L-40).
VoicingBrowser: show='bass' now renders an honest one-liner instead of
falling through to both galleries; dense drops section chrome
(non-dense proven byte-identical across 336 SSR combos). Critic PASS.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-10 19:03:48 +01:00
vadimwit 7d6fe8ad50 ledger: integrated-glance iteration 2 — P-41/L-40 done (gate notes logged); D-41 in flight
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-10 18:47:14 +01:00
vadimwit c899132b94 feat(app): Jam Guide band promoted below the main module — one loop display, one instrument selector (task L-40)
The always-open zero-chrome band (GlanceRail + licks strip +
heard-live fallback) replaces CurrentJamPanel right below the
instrument view; the four-section dock becomes KnowledgeDock at the
bottom; RoadmapTrack unmounted (banner is the single loop display);
JamGuide's internal instrument/style tabs die — App's global
GUITAR/PIANO/BASS selector drives everything incl. the dock's
VoicingsSection; honest bass state (computed root-fifth-approach rows
+ notice, no galleries/licks); GlanceRail's scrollIntoView effect
deleted same-commit (would yank the document in page flow).
Ride-along: JamGuide resolveDegree exported (logic byte-identical) for
the C-40 drift guard. Critic PASS (SSR 22/22, audio-contract grep
zero hits, deletion sweep clean).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-10 18:38:30 +01:00
vadimwit 01a7c32f55 feat(kb): blues bass cell — the KB first bass pack, 8 plays over 5 progressions (task P-41)
Boogie walkups, 8th-note ramble, Jimmy Reed R-5-6-5 shuffle, 12/8
root-fifth-octave slow burn, minor box riff (quality-resolved 3rd
self-majorizes on bVI7/V7), walking turnaround + two-beat kicks. The
maj-7 climb authored as a typed chrom-below approach (pitch derived,
offset 11 never written). KB now 172 plays. Critic PASS first try
(all 76 patterns machine-realized in C AND A; 12 prose identities
recomputed, all hold key-agnostically).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-10 18:32:41 +01:00
vadimwit 2450318d42 ledger: integrated-glance iteration 1 — M-05/P-40/C-40/D-40/C-41 done; L-40/P-41 in flight
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-10 18:17:18 +01:00
vadimwit 996218f39c feat(kb): bass play schema — degree-based patterns with typed approach notes (task C-41)
Key-agnostic bass plays (piano-recipe language): deg XOR typed
approach (chrom-below/above, fifth-of-next — pitch derived from the
next station, never authored), octave 0-1 with a 19-semitone cap
(exactly fret 15 on E-A-D-G), root rule, terminal approaches,
non-decreasing beats, MIN_PLAYS_BASS=1. Legacy BASS_TOKENS stub
replaced (zero references). Smoke 849/849 with 13 new checks;
sabotage-proven twice (author + gate, different malformations).
Ride-along: SCHEMA documents the resolveDegree 7-on-6-chords quirk.
Critic PASS.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-10 18:11:02 +01:00
vadimwit 7d1f64c718 docs(design): integrated-glance concept — band below the module, one loop display, one selector (task D-40)
Zero-chrome always-open band replaces CurrentJamPanel below the
instrument row; ProgressionBanner survives as the single loop display
(RoadmapTrack retires, education folds into rail row headers); App
instrument state threads everywhere (JamGuide internal tabs die);
vertical rows, all stations expanded, playhead highlights; honest
wrap-based math (worst piano gallery 1,178px). Critic returned once
(Dm7-specific worst case + 3 factual fixes incl. the interim
page-yank), fixed, PASS on scoped re-gate (pixel-exact recompute).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-10 18:08:26 +01:00
vadimwit 090d3a9cbf test(smoke): drift guards for resolveDegree + technique vocab (task C-40)
Smoke 836/836: a literal 16x14 degree truth table (all 224 cells
independently recomputed at the gate) pins the validator resolveDegree
behaviourally via span-probe recipes; technique vocab set-equality
between validate-kb LICK_TECHNIQUES and LickCard TECHNIQUE_VOCAB via a
scoped .jsx esbuild load hook. Both guards sabotage-proven twice
(author + gate, different perturbations). Ride-along: loop-fixtures
header line-ref fixed to App.jsx:363-365. Critic PASS.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-10 17:53:41 +01:00
vadimwit 6f59add11b docs(kb): backlog refreshed to reality — 14 cells done, licks tracked, bass column activated (task P-40)
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-10 17:47:02 +01:00
vadimwit facf6c8cc3 ledger: seed sprint-integrated-glance (M-05) — promote guide up top, single loop display, one instrument selector, all-expanded voicings
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-10 17:37:51 +01:00
vadimwit 9772e951b7 ledger: iteration 4 — SPRINT sprint-glance-and-loop COMPLETE (P-31/C-31 done; all 11 tasks green)
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-10 10:10:20 +01:00
vadimwit 81cd230a4c feat(kb): blues piano cell — 5 progressions x 2 authored plays (task P-31)
Guide-tone/tritone dyad system with the parallel half- and whole-step
laws, 7#9 as the codified blue note, the bVI7->V7 five-voice plane,
VI7b9 turnaround hinge, RH sixths; solo two-fisted vs rootless-band
contrasts per play. KB now 164 plays. Critic returned once (turnaround
jump-kicks bars 3-4 dyad orientations flipped + 2 prose rewordings),
fixed, PASS on scoped re-gate (stepwise lap chain recomputed from
scratch; "only leap" now provably unavoidable, not just chosen).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-10 09:58:41 +01:00
vadimwit 0b982f9514 ledger: iteration 3 reconciled — L-33/L-31 done (gate notes logged); P-31 gating; C-31 ready
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-10 09:47:20 +01:00
vadimwit ce24d5490f fix(app): progression commit-layer tuning — survive fills, replace on evidence (task L-31)
COMMIT_VOTES=2 (unchanged, ~one bar), REPLACE_VOTES=3 (a transient or
flapping detection can never displace a committed loop; section change
replaces one commit later), NULL_CLEAR=6 (post-L-30, nulls only start
~28 commits after the loop last played — traced exactly). Vote ref now
{committedKey, candidateKey, candidateCount}; agreement resets rivals.
Diff = one hunk in the progression useEffect; audio-contract grep
clean. Ride-along: theory.js docstring overclaim softened (L-30 gate
finding b), comment-only. Critic PASS (independent re-trace of all
five scenarios + 3 hostile traces; REPLACE_VOTES=3 proven load-bearing).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-10 09:28:52 +01:00
vadimwit c78baf4943 feat(jamguide): glance mode — the playhead accordion (task L-33)
The station under the playhead auto-expands to the full voicing
gallery (VoicingBrowser dense) and advances with the music; other
stations keep their recommended thumb; level-filtered licks strip
below with token-boundary context sort and strip-owned "fits — now"
chrome; pin replaces tap-to-enlarge with identical onFocusChord
semantics; auto-follow never emits focus or audio; heard-live fallback
shows the live chord gallery. App.jsx and all renderers untouched.
Critic PASS (SSR 37/37, matcher proven on hostile cases, dense-less
render byte-identical to 0945a08).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-10 09:28:51 +01:00
vadimwit 5e9b4c5925 ledger: iteration 2 reconciled — P-30/L-30 done (gate notes logged); L-31/L-33 in flight; P-31 claimed
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-10 09:17:30 +01:00
vadimwit 4cc0009983 feat(theory): noise-tolerant loop detection rewrite (task L-30)
detectRepeatingProgression redesigned: consecutive-dup collapse,
weak-period candidate rejection (kills self-overlap ghosts
structurally), lengths 2-8, <=1 substitution/insertion per cycle with
a >=2-exact-occurrences evidence gate, recency-weighted linear
coverage scoring. All 17 C-30 fixtures pass plain (smoke 817/817,
expectedFail markers removed). Critic PASS: 15 novel generalization
probes correct or data-faithful, 0.2-0.7 ms/call, diff confined to the
repeating-progression section, fixture contract untouched.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-10 09:10:28 +01:00
vadimwit b51daa1339 feat(kb): neo-soul/rnb piano cell — 7 progressions x 2 authored plays (task P-30)
Signature comp voicings over the computed fallback: m9 spreads, So What
quartal planing, Stevie 9sus cadence, m6/9 borrowed iv, 13sus, one 7#9
per loop; 3 comping cells + 5 improv rows. KB now 154 plays. Critic
PASS first try (independent arithmetic on 11 prose claims, spans <=11,
all 12 keys render in the 36-key window).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-10 09:06:53 +01:00
vadimwit 7926783778 ledger: iteration 1 reconciled — D-30/C-30/D-31 done; L-30/P-30 resumed; L-33 claimed
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-10 08:57:07 +01:00
vadimwit 6c7a1a7828 docs(design): glance-mode concept — the playhead accordion (task D-31)
Knowledge Center behaviour while a jam plays, zero clicks: the station
under the playhead auto-expands to the full D-30 voicing gallery and
advances with the music; level-filtered licks strip below with
context-first sort; pin gesture inherits onFocusChord semantics;
auto-follow never emits focus or auto-plays audio. Honest space math
(piano rail scrolls as normal state), 5-commit migration order for
L-33, four rejected alternatives. Critic returned once (piano gallery
width understated ~45%), fixed, PASS on scoped re-gate.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-10 01:00:16 +01:00
vadimwit fdd93c7158 test(loop): truth fixtures for detectRepeatingProgression + smoke wiring (task C-30)
17 fixtures (9 regression guards, 8 annotated expectedFail) pinning the
current detector failure map: len^2 self-overlap artifact on 2-chord
vamps, ghost 4-patterns under substituted/inserted misdetections,
duplicate-commit safety, 7/8-loop length cap, stale-section recency.
Stale expectedFail markers turn smoke red, forcing L-30 to flip them.
Critic PASS (arithmetic recomputed, sabotage x3 proven to bite).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-10 00:55:27 +01:00
vadimwit 0945a08497 feat(voicings): VoicingBrowser gallery — every shape and piano style side by side, no chips (task D-30)
All placeable guitar shapes and all four pianoVoicing styles render
simultaneously, each cell with its own play button; one-at-a-time
playback and the show prop semantics preserved. Critic PASS (SSR-verified
cell counts, zero aria-pressed, rootPc badge guard intact).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-10 00:50:33 +01:00
vadimwit 401d9d1f17 ledger: seed sprint-glance-and-loop (M-04) — gallery voicings, loop-detection redesign, glance mode
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-10 00:38:49 +01:00
vadimwit 3077ae2ac0 fix(dev): allow 127.0.0.1 HMR websocket in the CSP
Follow-up to the 127.0.0.1 bind: connect-src only whitelisted the
localhost variants, silently blocking Vite's HMR socket on the new
origin.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-09 23:41:56 +01:00
vadimwit fab385a612 fix(dev): pin dev server, wait-on gate, and Electron loadURL to 127.0.0.1
With plain localhost, node >=17 can bind the Vite dev server to ::1
only; on this machine IPv4/IPv6 loopback mismatch made the browser,
wait-on, and the Electron window all see connection-refused while Vite
reported ready. Explicit 127.0.0.1 on all three ends fixes dev startup
(user-verified: electron:dev window now opens).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-09 23:40:44 +01:00
vadimwit b5073353ef ledger: sprint-knowledge-center COMPLETE — PR #3 opened; loop closed
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-09 01:45:20 +01:00
vadimwit 0f24c757a1 ledger: C-21 done (sprint sweep PASS); prune shipped backlog entries
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-09 01:39:43 +01:00
vadimwit 72c6d457b0 ledger: iterations 6-7/24 — L-24/L-25/C-22/P-23 done; C-21 claimed; log
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-09 01:28:54 +01:00
vadimwit 2165bb571c feat(jamguide): stations render authored piano packs when a style has one (task L-24)
Piano branch prefers kb[style].instruments.piano.plays[prog][0],
resolving recipe degrees via a validator-mirrored resolveDegree +
strict-ascending stacking into MiniPiano's [0,36] space; per-station
fallback to computed pianoVoicingChain (reachable: 4 wide gospel
stations in key B); pack-less styles byte-identical to the computed
path. Critic PASS (0 drift cells vs the validator's resolveDegree;
390-cell sweep; key-B fallback confirmed rendering, not dead).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-09 01:28:22 +01:00
vadimwit 564a9e0a3a feat(kb): gospel piano cell — 14 plays across all 7 progressions (task P-23)
Church pillars vs rootless, hymn 12/8 vs octave-6/9, passing-dim walks
vs praise clusters, worship pads vs anticipated stabs; gospel comping
cells distinct from jazz's. KB: 140 plays. Critic returned once (one
improv-row scale claim false for vi7/iii7 — split into arithmetic-exact
rows), PASS on re-gate; 39/40 first-pass claims held.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-09 00:55:45 +01:00
vadimwit b4e8f12539 feat(kb): validator enforces the piano hand-span rule (task C-22)
checkPianoRecipe stacks each hand low-to-high (nearest strictly above,
repeated pc -> octave up) and fails any hand spanning > 15 semitones
(minor 10th, SCHEMA rule 3); errors name style/prog/play/chord/hand/
span; refactored to a pure exported checker surfacing all errors per
recipe. Smoke +6 checks -> 799. Independent gate PASS (injection
surfaces 10 named errors exit 1; weakened gate caught behaviorally).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-09 00:27:25 +01:00
vadimwit e24aa4b6ed feat(jamguide): chord modal tabs show only their instrument's voicings (task L-25)
GuitarTab/PianoTab pass show=guitar/show=piano to VoicingBrowser
(D-23 prop); Knowledge Center + station-enlarge keep both rows by
design. Critic PASS (SSR: each tab renders only its row, legacy
content intact below).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-09 00:25:13 +01:00
vadimwit ee009a708d ledger: iteration 5/24 — D-23/D-24/P-24 done (Critic PASS x3); log
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-09 00:00:42 +01:00
vadimwit 0f9c87c1e8 feat(kb): licks pack #2 — 11 licks for rock, country, reggae guitar (task P-24)
Berry double-stops, unison bend, Mixolydian rail, pentatonic cascade;
Flatt G-run, chicken-pickin' 3rds, pedal-steel bend, forward roll
(first techniques:[] lick); skank-answer dyads, bass-doubling riddim,
chromatic walk into the one drop. KB: 23 licks across 6 styles.
Critic PASS (every note independently pitch-verified; conventions
script-checked; empty-techniques branch verified in the validator).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-09 00:00:42 +01:00
vadimwit e2110ae21f feat(design): MiniPiano voicing thumbs crop to the voicing's octave span (task D-24)
Thumb window = whole octaves from the octave-C at-or-below the lowest
note (+ closing high C): shell thumbs 266px -> 142px, level with guitar
diagram thumbs. size=full and the legacy lh/rh path byte-identical.
Critic PASS (SVG geometry decoded back to absolute notes incl. the
octave-2 offset case; 793/793 smoke).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-08 23:58:23 +01:00
vadimwit db397f6ceb feat(design): VoicingBrowser show prop + LickCard stack-guard hardening (task D-23)
show='guitar'|'piano'|'both' (default both — 50/50 SSR renders
byte-identical for existing mounts); LickCard double-stop collision
guard now checks all same-column notes. Critic PASS (subsumption
proven; 13/13 lick layouts unchanged; adversarial overlap dead).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-08 23:56:22 +01:00
vadimwit ee81326db0 ledger: iteration 4/24 — P-21/P-22/L-22 done; promote L-24/C-22/P-23; log
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-08 23:53:35 +01:00
vadimwit 9e2567cf20 feat(kb): jazz piano cell — the KB's first authored piano pack (task P-22)
14 plays (7 progressions x 2): Bud Powell shells, rootless Type A/B,
guide-tone comps; comping rhythms; piano-angled improv. Hand spans
<= a 10th throughout. Critic returned once (6 prose voice-leading
overclaims on fifths-apart dominant alternation), fixed, PASS on
re-gate (all 6 corrected sentences arithmetic-verified both
directions); ride-along one-word polish per gate suggestion.
Rendering the authored pack in the Jam Guide is task L-24.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-08 23:52:23 +01:00
vadimwit 78706ce5ba feat(jamguide): Knowledge Center shell — four-section dock with level filter (task L-22)
Jam Guide (live, verbatim Roadmap move) / Explore (KB browser + famous
progressions, filter-exempt) / Voicings (picker follows live chord ->
VoicingBrowser) / Licks & Techniques (LickCard grids + one legend,
honest empty states). Shared foundation/intermediate filter chips;
ExplorePanel refactored to named exports (was orphaned, now imported).
App.jsx: exactly one additive prop (onChordClick). Critic PASS (48/48
SSR checks; audio contract grep clean; Roadmap hunks byte-identical).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-08 23:38:28 +01:00
vadimwit 6ea1089295 feat(kb): licks pack #1 — 12 licks for blues, jazz, funk guitar (task P-21)
4 per style using the C-20 lick schema: B.B. box, turnaround, slow-blues
curl, IV9 tritone slide; The Lick, ii-V-I enclosure, bebop dominant
descent, guide-tone rails; 9th riff, chromatic snapback, Dorian stabs
and 6-line. Every note hand-verified against its chordContext; sources
hedged. Critic PASS (independent pitch computation of all 12; validator
12 licks green; double-stop/slide glyph ordering render-checked).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-08 23:32:18 +01:00
vadimwit 432a238c15 ledger: iterations 2-3/24 — D-21/D-22/P-20/L-21/L-23 done; narrow P-21 lock; log
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-08 22:57:36 +01:00
vadimwit c08b334bad feat(kb): intermediate progressions + level tags for jazz, gospel, rnb (task P-20)
6 new level:'intermediate' progressions (tritone sub, rhythm-changes
bridge, gospel passing-dim walk-up, tonicized amen w/ borrowed iv,
Just-the-Two-of-Us loop, Sir Duke chromatic vi) x 2 guitar plays each;
all progressions in the three styles now carry explicit level. KB:
56 progressions / 112 plays. Critic returned once (3 caption theory
misstatements), fixed, PASS on re-gate (voice-leading arithmetic
hand-verified from shape constants).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-08 22:56:58 +01:00
vadimwit 951d5440e1 feat(jamguide): playable VoicingBrowser in chord modal + enlarged stations (task L-21)
ChordDetailModal Guitar/Piano tabs mount VoicingBrowser on top with
legacy grips/technique reference preserved below; Jam Guide enlarged
station view gains the browser on both instrument tabs; parse-null
never mounts a wrong-chord fallback. App.jsx untouched. Critic PASS
(SSR-verified both entry points; onFocusChord effects byte-untouched).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-08 22:55:42 +01:00
vadimwit f4e0ac67e0 fix(voicings): correct movable-shape base-fret indexing in getGuitarVoicings (task L-23)
strIdx = rootStr-1 read OPEN [s6..s1] backwards: every rootStr-5 shape
sat 2 frets low, every rootStr-4 shape 5 frets low (A-shape C major
labeled fret 1 instead of 3) in ChordDetailModal/ExplorePanel/
CurrentJamPanel; rootStr-6 was accidentally correct (same pc both ends).
Now uses the shared 6-rootStr convention. Also: playChord docstring
octave example corrected. Critic PASS (6 independent fret checks +
252-entry pre/post sweep, structure unchanged).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-08 22:54:18 +01:00
vadimwit 3c903ad1d9 feat(design): VoicingBrowser — switchable, playable voicings per chord (task D-21)
Guitar row (placeable GUITAR_SHAPES via ChordDiagram) + piano row (4
pianoVoicing styles via MiniPiano), chips + explicit play button per
voicing through chordAudio; single shared stop handle; graceful
guitar-empty cell (only add9@E across 168 quality x root cells).
voicings.js gains an export-only GUITAR_SHAPES line. Critic returned
once (rootless voicings badged lowest voice as root — rootPc now passed
through), PASS on scoped re-gate.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-08 22:43:21 +01:00
vadimwit 44d9c4f0e8 feat(design): LickCard — tab-style SVG lick renderer with technique glyphs (task D-22)
String 1 (high e) on top per tab convention; h/p slurs, slide, bend,
vibrato, ghost, double-stop column stacking; TechniqueLegend named
export (once per grid); layoutTab pure + testable; DEMO_LICK fixture
until P-21 lands. Critic PASS (47/47 harness checks, schema-exact).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-08 17:29:17 +01:00
vadimwit 0eeb308aa8 ledger: iteration 1/24 — L-11/L-20/D-20/C-20 done (Critic PASS x4); file L-23; log
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-08 17:08:06 +01:00
vadimwit 793e60ab05 feat(kb): schema + validator + smoke for progression levels and licks (task C-20)
Optional additive shapes: progression level (foundation|intermediate)
and per-pack licks (8-word technique vocab, tab notes string 1-6 /
fret 0-15, ids global with progressions). Validator exports checkLick
as a lib for smoke (KB_VALIDATE_AS_LIB guard); smoke 776 -> 787.
Critic PASS (independent sabotage re-proof: injected bad lick exit 1
with named errors; weakened vocab fails smoke 2/787).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-08 17:07:10 +01:00
vadimwit 96dda6a3ef docs(design): Knowledge Center concept — unified four-section dock (task D-20)
Jam Guide (live) / Explore / Voicings / Licks & Techniques grown from
the JamGuide dock; level filter as toggle chips; 5-commit migration
order for L-22. Audit finding: ExplorePanel + EducationPanel are
orphaned (never mounted) — migration risk far lower than assumed.
Critic PASS (orphan claim, App.jsx one-prop claim, contrast ratios all
independently verified).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-08 17:04:16 +01:00
vadimwit 7b669f8c11 feat(jamguide): piano tab live — per-station voice-led MiniPiano voicings (task L-11)
Piano is computed (pianoVoicingChain over canonical stations), no
authored KB needed; guitar path value-identical; tap-station guide-tone
contract intact; App.jsx untouched. Critic PASS (303/303 empirical
station checks across 3 progressions x 3 keys; voice-leading threads).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-08 17:01:55 +01:00