hardware verification checklist · run on the actual norns + grid + Minilab
A short, hand-runnable checklist for confirming the recent batch
ships clean on real hardware. Each step has a setup, an action,
and a clear pass/fail expectation.
Confirms the scale-discoverability fix from commit 26b2911: editing any scale param auto-enables Key Mode so the snap actually changes what you hear.
V1.a Off-key root sounds wrong before, snapped after
From a fresh script load (or after Reset to defaults), grid: hold maj (R2C3) and tap C# on row 8 (the cell just right of C). You hear a literal C#maj chord.
Now navigate to the Options screen (E1 cycles to it). Scroll to scale_mode with E2; turn E3 once to Lydian (or any non-Natural mode).
Look at key_mode in Options — it should now read ON automatically.
Hold maj + tap C# again.
Pass: the second C# press snaps to a chord built from C major scale tones — sounds noticeably different from the literal C#maj. Top-left of the Home screen shows C maj lyd.
Fail: chord still sounds identical, or key_mode didn't auto-flip. Capture the maiden REPL output and report.
V1.b Pentatonic + Blues are reachable
Options screen → key_quality: Major. Then scale_mode: turn E3 four times → reads Pentatonic. Top-left of Home screen shows C maj pen.
Now key_quality: Minor. scale_mode: turn until you reach Pentatonic (mode 6) and Blues (mode 7). Top-left shows C min pen / C min blu.
Pass: both Pentatonic variants and Blues label correctly and are dial-reachable.
V2Bass-mode round-trip
Confirms the fix in commit 69cdfe2: switching out of Solo bass mode restores the chord notes (was stuck at "bass-only forever" before).
V2.a Solo → Chords Only restores the chord
Hold maj + tap C on row 8 — you hear Cmaj plus a low C bass.
Keep both pads pressed. Navigate to the Bass screen (E1) and turn E2 to Solo. Chord drops out; only the bass note remains.
Turn E2 back to Chords Only.
Pass: the chord notes return, audible alongside the bass. Switching to Unison or Single Notes also restores them.
Fail (pre-fix behavior): only the bass keeps sounding; chord stays silent until you re-press the root.
V2.b Bass dial sweep is audible
Hold maj + C.
On the Bass screen, turn E3 (bass dial) from −2 through +2.
Pass: bass note octave shifts up and down audibly. Above +1 you may hit the chord-overlap range; that's normal.
If you can't hear bass at all, check that bass voice in PARAMS is set to a different nb voice than the chord (or to "share with chord"), and that bass_enabled is on (K2 on the Bass screen).
V3Minilab Hold button → play_style
NEW this batch: the Hold button on the Minilab 3 (which sends MIDI CC 64) cycles play_style Simple → Advanced → Free → wrap on each press. Sustain pedals plugged into the Minilab share CC 64 and behave the same.
V3.a Hold button cycles play_style
Connect the Minilab 3 to the norns. Confirm in PARAMS > MIDI Input > MIDI In Device that the Minilab vport is selected.
Open the Options screen. Scroll to play_style at the top — it should read Simple.
Press the Minilab's Hold button once. Watch the Options screen.
Pass: on each Hold press, play_style advances Simple → Advanced → Free → Simple. Releasing Hold does NOT cycle (press-edge only).
V3.b Free style on the Minilab keyboard
Press Hold twice so play_style is Free.
Play single notes on the Minilab keyboard.
Pass: single notes play (no chord engine, no bass). Holding a Minilab pad (chord type) and pressing keys still produces single notes — chord type is ignored in Free.
V4C7 — Free + chord-type alone is silent
Spec deviation that appeared in early triage; verified clean in code on 2026-05-13. This step confirms the live behavior matches the spec: in Free play_style, pressing only a chord-type pad (no root) must NOT trigger the chord engine.
V4.a Chord-type pad alone in Free mode is silent
Set play_style to Free (Options → play_style, OR press Minilab Hold twice).
Make sure no roots are held.
Press and hold the maj chord-type pad (R2C3) on the grid for 2–3 seconds. Don't touch row 8.
Pass: total silence. No chord, no bass, nothing.
Fail (would be C7 violation): a chord rings out from the chord-type press alone. Capture maiden REPL output and report.
V5Smoke pass — a quick song
Two-minute end-to-end sanity check covering chord engine, perf modes, scales, beats, FX. If this works, you're shipping.
V5.a The everything pass
Load the script (it loads with bass already enabled and a polyphonic voice picked).
Play a I IV V i progression in C minor — hold min, tap C; hold min, tap F (R8 col 9); hold maj, tap G (R8 col 11); hold min, tap C again.
Add an extension — while holding the last C min, tap m7 on R4. Hear the new note added.
Switch perf mode — E1 to Perform; E2 to Strum. Hold a chord and hear the cascade.
Start beats — top-right cell of grid R1, OR K2 on the BPM screen. Drum pattern starts in time.
Apply FX — PARAMS > crocus > Audio > reverb_send: turn up. Hear the chord wet.
Quick-Key to G major — K2-long on the Home screen → tap G on row 8 (without holding Min). Top-left should now read G maj; subsequent root presses snap to G major.
Pass: all seven steps work without restarting the script. No stuck notes after release.
V5.b No stuck notes
After the V5.a sequence, lift everything from the grid and the Minilab. Wait 3 seconds.
Pass: the chord, bass, perf cascade, and any arp all stop within 1 second of the last release. The drum pattern keeps running until you stop it (that's correct).
Fail: any tone keeps ringing. Note which voice (chord / bass / perf) and report.