Releases ·

Roastwarden 0.22.0

rustRoast now installs as one container: the server can run its own MQTT broker, with the same locked-down rules as the Mosquitto it shipped with, so a Raspberry Pi needs nothing but Docker, and a new install guide walks a new owner through it. Tested on arm64. The install test also found two problems now fixed: a data folder the server cannot write stops it with the fix in the message instead of running on a database in memory, and the broker restarts cleanly.

Added

  • One container, with the server's own MQTT broker (Next 68, Install, Running it, "One container"): RUSTROAST_BROKER_ADDR=0.0.0.0:1883 makes the server run its own broker (rmqtt as a library, broker.rs) and sign in to it itself, so an install on a Raspberry Pi is one container and no Mosquitto. The same rules as the shipped Mosquitto: no anonymous clients, the roasters in MQTT_DEVICES each kept to roaster/<id>/# and reading the server's presence, retained messages kept in memory; MQTT_PASSWORD is optional. docker-compose.single.yml (host networking, so mDNS reaches the LAN; every .env variable passed through) and it goes in each release's compose bundle with INSTALL.md, a step-by-step guide for a new owner. GET /api/about and roast status have mqtt_broker (where it listens, which roasters may sign in); Settings → About says it on the MQTT line. Its passwords never reach the log, whatever RUST_LOG asks.

Fixed

  • rustroast_mqtt_connected in /metrics read 0 while connected: the client connected before the loop that sets it subscribed to its events; it now starts from the client's state.
  • A database that cannot be opened stops the server instead of running on one in memory: on a fresh install whose data/ folder the server (uid 999) could not write, it started normally with a single warning and would have lost every roast at the next restart (found installing on arm64). It now exits with the path and the fix (sudo chown 999:999 data); the owner-key error says the same.
  • The built-in broker binds again at once after a restart (SO_REUSEADDR): without it docker compose restart stopped the server with "address in use" for a minute.
  • The live-prediction test's CI flake (a_running_roast_is_predicted_kept_and_scored): the background refit could fit a half-inserted history roast, a model that never reached first crack; the test now fits after its history is in, and says the last answer it saw when it fails. Production could not hit it.
  • The skill's receipt flow: a clean check on an order the owner asked to record is recorded at once (it stopped to ask before; eval tasks 47 and 50); eval task 46's setup hooks were missing. Eval tasks 46–51 pass on hermes.