Clevertuna

Hardware verification log

What has actually been run against a physical keyboard, and what has not.

2026-08-22 — CLVX S over USB

Device: CLVX S, vendor 0x36F7, product 0x5755, configuration interface at usage page 0xFF00 / usage 1.

GateResult
list finds the configuration interfacepass
info returns device fields, serial redacted by defaultpass
export full settings backuppass (1103 bytes)
get-backlight decodes all four zonespass
set-backlight applies and self-verifiespass, stage verified
independent read-back confirms the changepass
restore original schemepass, stage verified
restored scheme equals the pre-change schemepass, exact
exit code 0 on verified writepass
--json outputpass
GateResult
TUI renders, navigates zones, help, clean exit (120×32, ASCII)pass
UI binds 127.0.0.1 onlypass
UI GET / serves the embedded pagepass (9582 bytes)
UI GET /api/state returns live device statepass
UI POST /api/apply performs a verified writepass, stage verified
UI rejects an oversized bodypass (413)
UI rejects unknown endpointspass (404)
CLI grammar SENT / READ BACK / VERIFIED, column alignedpass
CLI error grammar ERROR / NEXT / CODEpass
restore the original scheme after all testingpass, exact

Unit tests: 42 passed, 0 failed (cargo test).

2026-08-22 — CLVX S over Bluetooth (--ble)

Keyboard on a Bluetooth channel, USB cable unplugged.

GateResult
list shows the GATT endpoint and no USB interfacepass
--ble info identifies the keyboard, serial redactedpass
--ble get-backlight reads all four zonespass
--ble export full backuppass (822 bytes)
--ble set-backlight applies and self-verifiespass, stage verified
independent read-back confirms the changepass
restore the original scheme over Bluetoothpass, verified, all four zones

Getting here required replacing busctl polling with a persistent D-Bus connection: BlueZ disables notifications when the client that called StartNotify exits, and ReadValue polling returns a cycling buffer that never empties — 30 KB across 600 reads, with duplicated responses and a CRC that never matched.

2026-08-30 — CLVX S, key remapping

GateResult
keys decodes the factory function row to the printed glyphspass
keys f9 volume-up writes and reads backpass, stage verified
independent re-read after replugpass
original binding restoredpass, exact

2026-08-31 — summary

Against a CLVX S, over both transports.

Over USB: list, info, full export, import, per-zone backlight read and write, a scheme moved from another machine and read back matching on all four zones, a backup/apply/restore cycle that restored exactly, and the function row remapped and put back.

Over Bluetooth, on Linux and on macOS: info, an 822-byte export, a verified profile write, match-wallpaper, and a restore that came back byte-identical apart from the device's own write counter. The cable has to come out first — the keyboard grants one connection at a time.

109 unit tests cover the codec, splicing, validation, redaction, the menu model, every shipped theme, and the conversions between a control and the number the device stores. Every theme and two hundred consecutive rolls of the randomiser are checked against the same encoder a real write uses, so a theme that the firmware would refuse fails the suite rather than the keyboard.

Not met by hardware