• v0.1.2 49d96ea9fb

    v0.1.2
    All checks were successful
    Publish / Publish to PyPI (push) Successful in 51s
    CI / Type-check + test the integration (push) Successful in 4m5s
    CI / Lint, type-check, test (library) (push) Successful in 47s
    Publish / Create releases + Linux binary (Forgejo, NAS, GitHub) (push) Successful in 1m33s
    Publish / Bridge the macOS .pkg → NAS (push) Successful in 8s
    Stable

    Cody Bryant released this 2026-06-29 09:06:17 -07:00 | 236 commits to main since this release

    Removed

    • The clean-cycle command — the Home Assistant button, the CLI clean-cycle
      subcommand, and commands.clean_cycle(). A live capture proved the inherited
      0x02A30000 ("cleanCycle") opcode resets the robot (odometerPowerCycles
      increments, no cycle runs) — it was a reset disguised as a cycle, so it's gone
      rather than left shipping a surprise reboot.

    Changed

    • 0xA3 reclassified to never-send. It's the reset / main-board-OTA
      orchestrator, not a motor command; the safety guard now refuses it unconditionally
      alongside 0xA4 / 0xAC / 0xAD. No motor command is exposed until a real
      cleanCycle trigger is recovered — the MOTOR / allow_motor gate stays wired but
      empty.
    • Documented the action-command hunt in docs/reverse-engineering.md: the
      0xA3 correction, why the cleanCycle / power / empty / reset dispatch lives in a
      bootloader region absent from every public OTA image, the exhaustive (and empty)
      search for a complete firmware dump, and the recovery paths (cloud-byte capture,
      app decompile, ESP-flash / PIC-ICSP dump).
    Downloads