CHANGELOG

Small changes. Better testing.

Stay up to date with new features and improvements.

October 15, 2026Dashboard 2.44.4Docs 2.5.33

Remove and delete deployments you no longer use

Old deployments stayed in the Deployments list and on stations, and the only way to take one off a station was to unlink the procedure, which also stopped the station from uploading runs.

  • Added Remove deployment, which takes a deployment off a station while the procedure stays linked and the station keeps uploading runs. It is on the station's procedure cards and next to each station on a deployment's page, and the confirmation names the build that goes.
  • Added Delete on the deployment page and in the Deployments list. A deployment that is still on a station, still building, used by runs or targeted by an instant rollback cannot be deleted, and the dialog says why and what to do.
  • Improved the station views: the station page and the procedure's Stations section now show the build each station actually runs, and the action that unlinks a procedure is now called Unlink procedure.
  • Fixed runs from a station that still had the code of a deleted deployment: they now upload without the link instead of failing.
October 15, 2026CLI 1.10.1

Fix plugs that receive the dashboard client

A plug whose constructor takes the dashboard client was refused before the run started, although the Framework passes that client in on every uploading run.

  • Fixed the procedure check that reported dashboard as a missing config: value and stopped the run
  • Updated the error shown when a procedure asks for dashboard on a run that does not upload: it now says to run with --upload or on a station, instead of pointing to a procedure setting that no longer exists
October 15, 2026CLI 1.10.0Dashboard 2.44.3Docs 2.5.32

Fix kiosk prompts, reloads and preset UI values

Operators on the station kiosk and the dashboard operator page lost prompts or saw stale screens after a reconnect, and preset UI values only worked in agent mode.

  • Fixed the operator screen after a reload or a dropped connection: finished phases stay finished, retries keep their own outcome and prompt, answered prompts no longer come back, and the submit button no longer stays locked.
  • Fixed --ui-values to answer prompts in every mode (kiosk, terminal UI, plain and agent) and every framework, including unit identification; a run with no way to answer a required prompt now fails at once instead of hanging, and locked unit fields are no longer requested.
  • Added a Deployment section to the kiosk's details panel with the procedure's commit, message, pull time and folder.
  • Improved the operator screen with tooltips that also work on disabled buttons, coloured plug logs, and a Kill button that a stray Enter key cannot trigger.
  • Fixed a run whose kiosk port is already taken: it now explains which process holds the port and stops instead of waiting with no screen.
October 15, 2026CLI 1.9.7Dashboard 2.44.2

Fix teardown, stops and limits in the Framework

A full review of the Framework found teardowns that lost their instruments, runs that could hang, and limits that passed without being checked; this release fixes them and hardens the station.

  • Fixed teardown phases losing their instruments after the first one, runs hanging when a phase timed out during a stop, teardown retries dropped under a stop, and teardown prompts closed by the stop that triggered them; a failed unit with an interactive teardown now reads FAIL, not ERROR.
  • Fixed limits that could never be checked passing silently: a numeric limit written as text, in without a list, an invalid regex or a missing expected value is now refused when the procedure loads, with its line and column, and duplicate slot keys are refused too.
  • Fixed shell phases not being stopped on timeout or stop, NaN and numpy measurement values losing the whole phase, and plug and worker errors going missing from the logs.
  • Fixed runs with several attachments getting stuck in the upload queue after one network error, and OpenHTF, pytest and Robot runs without --upload being uploaded later; a stopped pytest or Robot run now uploads its finished tests as ABORTED.
  • Improved station safety and the operator UI: only the operator UI's own commands are accepted locally, a reverted deploy is no longer applied at the end of a run, and a kiosk reload no longer brings back an answered prompt or loses one still open.
October 15, 2026Dashboard 2.44.1Docs 2.5.31

Choose and sort the columns of Runs and Units

The Runs and Units lists showed a fixed set of columns, so checking a part number, a unit's secondary serial or its sub-units meant opening each row.

  • Added a column picker at the right end of the table header on the Runs and Units lists, grouped like the filters, with every run and unit metadata key available as a column.
  • Added sorting on every column that holds a single value, metadata included. Rows without a value always come last.
  • Added a Sub-units column and a Contains Sub-Unit filter on Units, and a Unit Metadata filter on Runs.
  • Improved long lists: the table header now stays visible while you scroll.
  • Fixed the Units search being ignored when sorting by part number, last run or last procedure.
October 14, 2026CLI 1.9.6Docs 2.5.31

Keep a starting run when any tab clicks Run

On a station, a tab still showing another procedure's outcome screen could restart the run that was already starting through its Run again button, and a plug caught during that restart kept spinning on the ended run's screen.

  • Fixed the station to keep a run in its start-up window whatever procedure a Run click names; a click with a unit to reuse still restarts as before
  • Fixed plugs caught mid-start to read skipped once the run has ended, instead of a permanent initializing badge
  • Added TOFUPILOT_HOME to move every CLI file (credentials, state database, pinned CA bundles, logs, attachments) to a chosen directory, the same on every OS
  • Verified that Ctrl-C and a hard kill of the CLI both close the kiosk window and the Python workers within seconds
October 14, 2026CLI 1.9.5

Keep the auto-started run when you click Run

On a station with one procedure, clicking Run in the kiosk while the station was still starting that procedure could stop the run and leave the station stuck until a reboot.

  • Fixed a stop or kill that landed while an instrument was still connecting: the run now ends in under a second instead of hanging, and the instrument is released.
  • Improved the kiosk at boot: it shows the run that is starting instead of the procedure picker, and a click on Run during start-up no longer restarts it.
  • Fixed a kiosk page opened during a run start that could miss the run's first prompt.
October 14, 2026CLI 1.9.4Docs 2.5.30Dashboard 2.44.1Python SDK 2.22.1C# SDK 2.20.1Rust SDK 2.20.1C++ SDK 2.14.1MATLAB SDK 2.14.1

Catch upload rejections before the test runs

A run the station had already executed could be refused at upload, stay in the upload queue, and say only "input validation failed". The station now refuses up front what the dashboard would refuse, the dashboard accepts the limits a test can legitimately compare against, and a rejection names the field.

  • Added support for object and mixed-list limits on validators (== {} for "no deviation from the reference configuration"), so these runs upload instead of being refused
  • Changed the identify form and Python assignments to refuse serial, part, revision, batch and sub-unit values longer than 60 characters or outside letters, digits and _ . : + - before the test runs, and to refuse measurement names over 100 characters
  • Fixed == [3] failing against a recorded [3]: numbers now compare by value in ==, != and in
  • Improved upload errors to name the rejected field, for example phases[2].measurements[4].validators[0].expected_value
  • Fixed depends_on: a dependency on a phase further down the file is honoured, unknown keys and cycles are refused in every stage, and a teardown cut by the shutdown limit is recorded as an error instead of disappearing
October 14, 2026CLI 1.9.4Dashboard 2.44.1Docs 2.5.30Python SDK 2.22.0C# SDK 2.20.0Rust SDK 2.20.0C++ SDK 2.14.0MATLAB SDK 2.14.0

Call the TofuPilot API from a procedure

A test that needs workspace state as an input, such as reserving a serial number by creating a unit or checking that a unit's previous run passed, no longer needs its own API key stored on the station.

  • Added a dashboard parameter for phases and plugs: a run that uploads hands the procedure a ready-made TofuPilot API client acting as the identity the run uploads with, the station on a bench, your own login on a development machine, with nothing to declare in procedure.yaml
  • Added GET /v2/whoami, which names the station or the user behind any API key and its organization, and GET /v2/users/current, the mirror of GET /v2/stations/current, so a procedure that must act as a station checks for it instead of failing mid-run
  • Removed the current=true option of GET /v2/users, replaced by the two routes above
  • Fixed procedures inheriting an API key set on the station: a run that does not upload receives no credentials at all
October 14, 2026CLI 1.9.1Docs 2.5.27

Fix kiosk window relaunch and macOS copy-paste

The station kiosk window now comes back after a crash or Dock Quit, and the macOS window accepts the standard keyboard shortcuts.

  • Fixed the kiosk watcher on macOS and Linux: a closed or crashed window was never detected, so the station kept running with no window. It now reopens one a few seconds later.
  • Added the Edit menu to the macOS kiosk window, so Cmd+C, Cmd+V, Cmd+X, Cmd+A and Cmd+Z work in operator forms. Cmd+Q stays disabled.
  • Fixed the Linux kiosk profile sweep to remove the profile left behind by a crashed window.

Try these features today