Historical report from an earlier Stage24 revision; current results and limits are in VALIDATION-VOICESPLIT.txt.

Complete combined revision: swag voicing mode rename + live loop transpose

boot: normal reset power-on failed 0 pending 1 counted 0 prev_stage 0 (none)
layer: open 6 (locked)
loop transpose: +7 semitones
metro: cells Click - - Loop trans
loop transpose: +12 semitones
loop transpose: -12 semitones
loop transpose: +0 semitones
PASS: SEQ KNOB4/UI, +/-12 clamps, all performance modes, live retuning and bass, shared note ownership, clipping recovery, scheduled offs, unchanged loop records
boot: normal reset power-on failed 0 pending 1 counted 0 prev_stage 0 (none)
lock: latched MAJ
lock: latched MAJ m7
lock: latched MAJ M7
lock: latched MAJ M7
lock: latched none
popup: part 0 02 / FM BELL / FM6 · 02/26
popup: part 0 03 / FM BASS / FM6 · 03/26
popup: part 0 02 / FM BELL / FM6 · 02/26
PASS: SELECT menu, retired scales/settings, exclusive sevenths in Simple/Advanced/Free and LOCK, exact Ping Pong, Random, release/retrigger/pads, third protection on CZ/Prophet with BASS
Host structure sizes: chord engine 7368, chord voice 172; target sizes require device build
boot: normal reset power-on failed 0 pending 1 counted 0 prev_stage 0 (none)
popup: part 0 01 / TINE EP / FM6 · 01/26
popup: part 0 02 / FM BELL / FM6 · 02/26
popup: part 0 03 / FM BASS / FM6 · 03/26
popup: part 0 02 / FM BELL / FM6 · 02/26
PASS: GLOBAL hold, CZ/Prophet seventh priority and restoration, ROSEN queue, harmony dedup, Next/Random/Ping Pong
boot: normal reset power-on failed 0 pending 1 counted 0 prev_stage 0 (none)
engine-switch queued notes: 5 (expected 5)
fixture: Prophet BASS on inversion -5 major third MIDI 52 PASS
fixture: Prophet BASS on inversion -5 minor third MIDI 51 PASS
fixture: Prophet BASS on inversion +0 major third MIDI 64 PASS
fixture: Prophet BASS on inversion +0 minor third MIDI 63 PASS
fixture: Prophet BASS on inversion +2 major third MIDI 76 PASS
fixture: Prophet BASS on inversion +2 minor third MIDI 75 PASS
fixture: Prophet BASS on inversion +8 major third MIDI 88 PASS
fixture: Prophet BASS on inversion +8 minor third MIDI 87 PASS
Chord integration: 71411 cases, 0 failures
boot: normal reset power-on failed 0 pending 1 counted 0 prev_stage 0 (none)
mode 0 impulse energy 275886182
mode 1 impulse energy 123643424
mode 2 impulse energy 205913054
mode 3 impulse energy 182467368
PASS: four models, distinct impulses, size decay, bounded stress, tail silence, all model transitions, UI icons
va: load slot 3 patch crc 4292
fm6: load slot 5 patch crc bb3d
va: load slot 3 patch crc 4292
fm6: load slot 5 patch crc bb3d
va: load slot 5 patch crc 4292
cz: load slot 20 tone crc f025
quad: load slot 7 patch crc 3a02
quad: load slot 7 patch crc 3a02
va: load slot 5 patch crc 4292
objects: settings 764 (PER4 572), bank 3080, FM6 3612, VA 3536, FM6 patches 2 x 2064, QUAD 2576, loop <= 3664 bytes
cr backup tests passed: 94 checks, 0 failed
cr_trans_test: 24 checks, 0 failed
reverb: ROOM: the buses bit for bit as before SPRING (30 s of noise sends, settings changing)        ok
reverb: SPRING decay rises with SIZE: RT60 0.30 s (SIZE 0), 0.81 (64), 3.08 (127)                    ok
reverb: SPRING chirp: 1st arrival's group delay 10 8 10 16 36 137 samples (0.5 1 2 3 4 5 kHz)        ok
reverb:   the next pass more spread: 2nd arrival 0.5 -> 5 kHz 5.8 ms (1st 2.9)                       ok
reverb: SPRING at SIZE 127 DAMP 0: 2 s of full-scale noise: peak 196608, the last second 0           ok
reverb: SPRING at SIZE 127 DAMP 127: 2 s of full-scale noise: peak 196608, the last second 0         ok
reverb: SPRING at SIZE 127 DAMP 0: 2 s of a full-scale 3.2 kHz square: peak 196608, the last second 0 ok
reverb: SPRING at SIZE 127 DAMP 127: 2 s of a 416 Hz square: peak 196608, the last second 0          ok
reverb: level: SPRING's tail -2.7 dB from ROOM's (the same burst, SIZE 90 DAMP 60)                   ok
reverb: ROOM -> SPRING while the tail rings: largest step 18 (the tail's own 501), silent after: 0   ok
reverb:   and back to ROOM                                                                           ok
reverb: cost: no instruction counter on this host
reverb test passed
cr_settings: 53 passed, 0 failed
cr_bootguard_test: 0 of 90 checks failed
cr_bootguard_test passed
ok   free: REC arms (nothing runs until a chord)
ok   free: still armed after 100 ms of silence
ok   free: the first chord started the take
ok   free: REC again commits
ok   free: playing, 1 layer, 2 events
ok   free: 2 s at 120 BPM = one 4/4 bar (len 384 ticks)
ok   free: events D at 0, Em at beat 3 (resolved roots and qualities)
ok   free: a 500 ms chord lasts a beat (96 ticks)
ok   playback: D re-triggers every 2 s (2 ons: 3100 5099)
ok   playback: Em 1 s after each D
ok   the ring position is a fraction of the cycle
ok   voicing +1 at playback: D's lowest note moved up (D5, no D4)
ok   240 BPM: the loop cycles in 1 s (3 ons)
ok   overdub: REC while playing arms it
ok   overdub: the chord opened a layer
ok   overdub: REC ends it: 2 layers, 3 events
ok   overdub: C plays in the next cycle
ok   undo: the overdub layer is gone
ok   undo: C no longer plays, D still does
ok   undo: the first layer stays (CLEAR empties)
ok   LOOP tap: stop
ok   stop: nothing left sounding
ok   LOOP tap: play again from the start
ok   play: the event at 0 sounds at once
ok   clear: empty
ok   clear: no stuck, double or stray note
ok   sync: REC starts a one-bar count-in
ok   sync: half-way through the count-in, 2 beats left
ok   sync: recording after one bar
ok   sync: the count-in clicked 4 beats, the first accented (1 + 3)
ok   sync: still recording in bar 2
ok   sync: committed by itself after 2 bars (768 ticks), playing
ok   sync: no quantize: D 30 ms (5.76 ticks) late as played
ok   sync: D plays once per 4 s cycle
ok   quantize 1/16: a chord 6 ticks late lands on 0
ok   quantize: its note-off kept (the length grows by the shift)
ok   panic: stopped, loop kept, silence
ok   after panic: plays again
ok   stop after panic: silence
ok   panic during a take: dropped
ok   pack: header + 2 layer counts + 2 x 7 bytes
ok   unpack: the same loop back (layers kept)
ok   unpack: a bad event: refused, empty
ok   unpack: short: refused
ok   queue while playing: waits for the cycle's end
ok   the next cycle is the queued slot's (C plays)
ok   set when stopped: loaded at once, not dirty
ok   set(0): empty
ok   slots: no stuck, double or stray note
ok   the event cap ends the take by itself (512 events)
ok   a full loop played and stopped: silence
ok   determinism: the same take, the same loop
ok   loop level 50%: velocity 100 plays at 50
ok   loop level 0: silent

cr_loop: 54 passed, 0 failed

Target C syntax: PASS
QUAD source and legacy golden files unchanged
No device flash; no legacy golden regeneration
No audio buffers added; one runtime loop transpose value plus UI mirror
Settings and recorded-loop formats unchanged; original loop roots retained
This revision has not been built with the target toolchain or run on FM1
Exact firmware flash/RAM report, package validity and device timing pending Mac build
