Skip to content

v0.7.0

Choose a tag to compare

@Jepson2k Jepson2k released this 04 Sep 04:21
· 130 commits to main since this release
b776ea3

Everything since 0.3.2, the last release. Four tags landed in between without notes, so this collects them. Pre-1.0, so breaking changes bump the minor.

Breaking changes

  • RobotError comes from waldoctl rather than being defined here. A frontend represents a refusal the same way whichever backend raised it. It is an exception now, not a frozen dataclass, so a client can raise it as-is; anything that built one positionally or called dataclasses.replace on it needs updating. Tool-error attribution rebuilds the error from its wire form for exactly that reason.
  • stop, estop and reset replace halt and resume, and a stop cancels the whole motion pipeline rather than just the active command.
  • home(calibrate=) replaces the separate CALIBRATE command. Unhomed, or with calibrate=True, the arm runs the full end-stop referencing sequence; already homed, it takes a planned collision-checked move back to standby.
  • Planned motion is refused while unhomed. Jogging stays available.
  • The waldoctl pin moves v0.7.0 → v0.12.0, which removes the Plane keep-out shape. Persisted worlds containing a plane now raise on load.

Status surface

  • The control loop broadcasts its own health. The p99 period and the deadline-miss count ride every STATUS frame in a loop_health mapping, so a display no longer polls the loop-statistics query for them. drive_health sits beside it and stays empty on this backend: the drives report per-joint error flags, not analog registers, and empty distinguishes "no such sensor" from "all zero".
  • StatusBuffer, homing progress and loop statistics conform to waldoctl, and homing progress now survives a cancel.
  • A hardware e-stop disables the controller, rather than only halting motion.

Motion

  • Trajectory settling is gated on progress, not elapsed ticks.
  • Fast-path home: an already-referenced arm takes a planned return move instead of re-running the firmware seek.
  • Command indices stay monotonic across a reset.
  • The dry-run snapshot carries the pending blend chain, so a preview mid-blend matches what the runtime will execute.

Fixes and hygiene

  • A system command's Command_out was clobbered in the same tick by the executor fallback.
  • The MSG gripper is seated on the flange rather than inside the wrist, and its built-in camera mount is declared.
  • Test fixes surfaced by loaded runners: the unreachable-client test takes a free port instead of adding to the live one, which overflowed past 65535; the loop-health comparison waits for a frame that has caught up instead of demanding two samples of a climbing counter be equal.
  • Typing: scipy stubs pinned per Python version, stale suppressions dropped, sync tool wrappers typed as SyncTool.