A starter repo that runs the LabWired deterministic firmware simulator against your firmware on every push, gating the merge on whether your panel/LED/peripheral actually behaved.
.github/workflows/labwired-ci.yml:
- Installs
labwired-clifrom source (cached between runs). - Pulls a firmware ELF (defaults to the AgentDeck reference; replace with your own build step).
- Boots the firmware in the LabWired Xtensa-LX6 simulator for N cycles.
- Captures the final peripheral state and asserts:
- The SSD1680 panel actually refreshed (
refresh_generation ≥ 1). - It drew enough content to not be an empty screen (
MIN_BLACK_NON_FF).
- The SSD1680 panel actually refreshed (
- Uploads the simulator log + LWRS snapshot as a CI artifact, so you can download and inspect what your firmware drew without having a board.
cargo install --git https://github.com/w1ne/labwired-core --bin labwired
labwired snapshot capture \
--firmware path/to/firmware.elf \
--steps 35000000 \
--output post-paint.lwrs \
--profile agentdeckThe workflow file is the single source of truth. Edit it to:
- Replace the firmware download step with your own build (
arduino-cli compile,cargo buildfor Rust no_std,idf.py build, etc.). - Swap
PROFILE: agentdeckforarduino-esp32if your sketch ships with symbols (anyarduino-cli compileoutput does). - Tune
STEPSandMIN_BLACK_NON_FFto your firmware's behavior. - Add behavior assertions beyond the panel — UART output, GPIO transitions,
CPU register state are all on the
labwired test --scriptpath.
Same firmware ELF that flashes to your physical board runs in CI. No mocks, no fakes — a cycle-accurate Xtensa simulator stepping the actual ELF. That's the deal.