Fret Zealot — Web Bluetooth probe

M1 gate. Does the FZ stay stable driven from a browser? Protocol layer is fzproto.js, verified byte-for-byte against fz.py (274/274). If something fails here, it is the browser or the radio, not the bytes.

1. Connect not run

What happens: a device chooser opens. Pick the Fret Zealot. Nothing lights up yet — this only opens the link and reports what it found.

2. Single LED not run

Watch for: one red LED on the low E string, 5th fret. Nothing else lit.
Did you see it?

3. Colors not run

Watch for: the D string, 7th fret cycling through five colors, about 1.5 s each — red, orange, yellow, purple, white. The names are printed in the log as each one fires.
Did all five render, and roughly match their names?

4. Additive writes — no CLEAR not run

Watch for: four LEDs lighting one at a time at the 5th fret, E then A then D then G, about a second apart — and each one staying lit as the next appears. All four should be on at the end.
This is the whole basis of the heavy-mode hot path: if lighting a new LED wipes the previous one, the additive design does not survive the browser.
Did all four end up lit at once?

5. Intensity 0 extinguishes not run

Run this right after test 4, with all four LEDs still lit.
Watch for: the A and D LEDs going dark while E and G stay lit — with no flash, blink, or full-board wipe in between.
Did A and D go out cleanly, leaving E and G?

6. Open strings (fret 0) not run

Watch for: the board clearing, then the four open-string LEDs at the nut lighting one at a time and all staying lit.
Fret 0 has its own history on this hardware, so it gets its own test.
Did all four open strings light and stay lit?

7. Sustained run not run

This is the real test. Notes change at song speed (0.75 s tick, the heavy-mode cadence) with a full CLEAR flush every 30 s, exactly like ledsync.
Watch for: a steady walking pattern up and down the neck that never freezes, stutters, or goes dark. At 30 s, 60 s, 90 s there is a brief flush — a single blink is fine, a board that stays dark or stops moving is a failure.
Keep an eye on the error and disconnect counters below; they should stay at zero.
On the Pixel, also test backgrounding: about a minute in, switch to another app for ~30 s, then come back. The LEDs will almost certainly pause while you are away — what matters is whether they resume on their own or the link is dead and needs a reconnect. Note which in the Fail box either way; this is information, not a pass/fail on its own.
Elapsed
0:00
Ticks
0
Writes
0
Errors
0
Drops
0
Write ms avg
Write ms max
Flushes
0
Steady the whole way, no freeze or dropout?

Log