v0.1.1
Hardening and correctness fixes across the CLI, shims, and rendering pipeline. Still early software; interfaces may evolve.
Fixed
- Screenshots taken after injecting data (
snapshot --shot, scenario steps, run-session captures) could show the previous frame: capture now settles past a full LVGL refresh period first. - An invalid
serial expectregex crashed the process; it is now a structuredbad_argserror in both the one-shot CLI and the run session. - Unknown
--options, garbage or out-of-range numbers, out-of-bounds taps, and non-JSON snapshot bodies were silently accepted; all are now rejected against the schema contract. A bare--ends option parsing. - The run session desynced on lines over 16 KB, corrupted LVGL state on a second
boot, and spoke an undocumented flat error vocabulary; it now replies with the same kind/message envelope as the one-shot CLI, rejects re-boots, and answers an oversized line with one error. - Scenario steps bypassed board-capability gating and used off-schema exit codes.
- Shim fidelity:
collectHeadersretains only declared headers (device semantics), real HTTP reason phrases, read-onlyPreferencesreject writes,Serial.printfno longer truncates at 1 KB, webserver listeners reset on every boot, and snapshot posts can no longer land on an unrelated host process. - TFT_eSPI: drawing on an unbuffered sprite no longer writes to the screen, sprites compose through their parent,
createSpriterejects non-positive dimensions, and rotations 2/3 mirror their 0/1 counterparts.
Added
--version(any argument position), version single-sourced from CMake into the schema.make releaseandmake install(optimized build,cmake --install).- CI on ubuntu and macos running the same make targets used locally.
- Configure-time detection of new firmware source files (clear warning instead of a linker error).
Changed
- Run-session and scenario error replies now use the documented
{"error":{"kind":...,"message":...}}envelope; scenario failures exit with the first failing step's schema exit code.