Skip to content

Releases: barebaric/raydriver

v0.2.0

Choose a tag to compare

@knipknap knipknap released this 27 Sep 12:36
43696e3

Added

  • packaging: publish aarch64 (ARM64) Linux wheels to PyPI, built natively on ubuntu-24.04-arm runners. The CI test suite now also runs on ARM64 so the architecture is exercised before every release. macOS ARM64 wheels were already published; this closes the Linux ARM64 gap.

v0.1.4

Choose a tag to compare

@knipknap knipknap released this 25 Sep 02:28

Fixed

  • Interpreter shutdown crash: the shared tokio runtime and its
    GIL-watchdog task outlived Python finalization. The watchdog attaches
    to the interpreter every 10 seconds, so a worker thread could still be
    holding a Python thread state when CPython ran
    PyInterpreterState_Delete, aborting the process with
    "remaining threads" (observed on the Windows CI runner after the
    rayforge test suite passed). The runtime is now torn down from an
    atexit hook, which CPython runs before interpreter finalization:
    tasks are cancelled and the worker threads joined while it is still
    safe to do so, and the watchdog checks the shutdown flag before
    attaching.

v0.1.3

Choose a tag to compare

@knipknap knipknap released this 25 Sep 00:04

Fixed

  • Job error attribution race: after a GRBL error halted a job, the
    emergency cancel's safety shutdown could race into the alarm state and
    overwrite the recorded error with a secondary error:9 ("Commands
    Locked"). The first error recorded now wins, so consumers reliably see
    the root-cause failure instead of a teardown side effect.
  • Secondary errors during teardown no longer break recovery: they still
    resolve pending interactive command futures and still trigger the job
    halt — only the redundant state mutation is skipped.
  • test_error_halts_stream was flaky on slow runners: an emergency soft
    reset racing in-flight motion legitimately leaves the machine
    alarm-locked (real Grbl behaves the same). The test now recovers with
    $X and waits for the status poller to report Idle before starting
    the next job.

Added

  • init_logging(filter, path) binding: Rust-side session diagnostics
    (stall detection, liveness, unexpected device lines) now reach stderr
    or a dedicated log file instead of being silently dropped when no
    logger is installed. The raydriver run CLI gains --log-file.
  • Terminal job errors are published through the device state
    (state.error): run() resolves normally even on failure, so the
    state is the only way consumers can detect a failed job. Protocol
    errors keep their proper GRBL error codes; a stale error is cleared
    on the next job start.
  • Newline-terminated, rate-limited progress output when stdout is not a
    TTY, so redirected log output never interleaves with the progress
    line.

Tooling

  • Type checking is now enforced: pyright runs over python/ and
    tests/ in CI, and a .pre-commit-config.yaml (ruff + pyright) was
    added. Generated stubs were fixed along the way — parser functions
    previously landed in the root stub, where they do not exist at
    runtime, leaving raydriver.grbl.parser untyped.
  • CI simplified to a plain four-platform test matrix
    (ubuntu, windows, macos-15-intel, macos-15).

Full changelog: v0.1.2...v0.1.3

v0.1.2

Choose a tag to compare

@knipknap knipknap released this 23 Sep 19:25

Full Changelog: v0.1.1...v0.1.2

v0.1.1

Choose a tag to compare

@knipknap knipknap released this 23 Sep 17:37

Full Changelog: v0.1.0...v0.1.1

v0.1.0

Choose a tag to compare

@knipknap knipknap released this 23 Sep 15:13