- Clipping: min width per bar raised (16ths 420px, 8ths 330px, quarters
240px) and format width reserves more room (clef/key 100px, barline
margin 24px) — narrow screens now wrap into more rows with real margins
instead of clipping the last bar.
- 6/8 crash ROOT CAUSE: Giuliani figures whose length didn't divide the
bar into renderable note values produced 96-tick durations (32nd-ish)
that durationCode can't spell -> renderer threw -> white screen.
Giuliani generator now snaps figure subdivision to renderable durations
(per 2/3/4 divisions, quarter-note walk as last resort); pimamim in
6/8 renders as a walking quarter figure.
- 6/8 melody templates: fixed sums (were 2640/3120 in 4 templates — those
filtered out, silently degrading to the fallback).
- More variants: arpeggio figures 1-3-5-3, 1-2-1-3-2-1, 1-5-4-5-3-5,
1-3-2-5-3-2; Giuliani patterns p-i-a-i, p-m-a-m-i, p-i-m-a-m-i (waltz),
p-i-m-a-i-a.
- Tests 179/179.
- PhraseSheetMusic: min width per bar scales with notation density
(16ths 320px, 8ths 260px, quarters 210px) — narrow screens wrap into
more rows instead of clipping notes off-screen.
- 6/8 crash fixed at the root: melody templatesFor had no 6/8 templates
(empty pool -> pick on empty array). Added 6/8 template sets for levels
1/2 plus an empty-pool fallback guard so generators can never pick from
an empty array again (any meter/level combination stays playable).
- More arpeggio broken-chord figures: 1-3-5-3, 1-2-1-3-2-1, 1-5-4-5-3-5,
1-3-2-5-3-2.
- More Giuliani patterns: p-i-a-i (wide), p-m-a-m-i, p-i-m-a-m-i (waltz
feel), p-i-m-a-i-a.
- Tests 179/179.
- NEW material 'giuliani': figures require a real voicing — the generator
assigns cycle positions (bass root + upper chord tones) to DISTINCT
strings with valid frets per bar; bars that cannot be voiced are skipped
(deterministic), clear error when nothing fits. Patterns: p-i-m, p-i-m-a,
p-a-m-i, a-i-m, p-i-m-a-m-i, p-m-a-m-i-m. Honors the chord pool, string
restrictions and the tuning; one figure per beat.
- 6/8 meter added (numerator 6) across score model, settings, generators;
meter selects now offer 4/4, 3/4, 6/8.
- Arpeggio category: Giuliani entries replaced with note-sequence
broken-chord figures (1-3-2-1, 1-3-2-5(8), 1-5-3-5(8), 1-2-3-5-3) —
pure pitch sequences, no voicing claims.
- Beam fix (root cause): setBeam now happens BEFORE voice.draw — VexFlow
decides flag vs beam at draw time; registering after drawing left both
flag and beam. Beams drawn after notes, flags suppressed correctly.
- Metronome/phrase: 'With tempo' renamed to 'Sync to metronome' (auto-enables
the metronome when selected); phrase click now yields to the metronome
click (no more double clicks) with an explicit opt-out checkbox.
- Count-in: subtle numeric badge next to the status line (muted pill, 11px).
- Melody rhythm level 3 'Elaborate': sixteenth/dotted-eighth templates for
4/4 and 3/4; renderer supports 120/360-tick codes and beams 16th pairs.
- Transpose control for library/import material widened to ±2 octaves.
- Tests 161/161 (bar-total invariants hold over 500 seeds at level 2).