Skip to content

Changelog

Stay up to date with new features and improvements.

August 28, 2026Dashboard 2.41.0Python SDK 2.18.0C# SDK 2.16.0Rust SDK 2.17.0C++ SDK 2.11.0MATLAB SDK 2.11.0

Add metadata to stations, parts and revisions

Stations, parts and revisions now carry custom metadata, the same typed key/value pairs runs and units already had, so a station's location or a part's supplier lives in TofuPilot instead of a spreadsheet next to it.

  • Added a metadata editor to the station, part and revision pages: string, number and boolean values, up to 50 keys per entity, read-only for viewers.
  • Added metadata to the V2 create, get and update endpoints for stations, parts and revisions. Updates are a patch: keys you don't send are kept, a null value deletes a key.
  • Added a metadata filter and include_metadata to the station and part list endpoints, with per-key operators (in, contains, gte/lte/gt/lt/eq, boolean eq), so you can list every station in one building or every part from one supplier in a single call.
  • Added every metadata change to the entity's timeline with who made it and the old and new value. The station Activity section now shows without a CLI install, since these edits come from the dashboard or the API.
  • Shipped the new fields and list parameters in the Python, C#, Rust, C++ and MATLAB SDKs.
August 27, 2026Dashboard 2.40.7

Fix run duration filtering at any timescale

The duration histogram in the run filters bucketed every run shorter than ten seconds into a single column, so a fast test was drawn a full second away from its real duration and the slider could not select it.

  • Fixed the histogram collapsing short runs into one column — it now spans the real range of the runs you are filtering, down to milliseconds
  • Fixed the slider handles not lining up with the bars, and typed values like 0.4s being rounded away to no bound at all
  • Fixed the histogram failing to load when the run list was filtered by sample, procedure version or environment
August 26, 2026CLI 1.4.5Dashboard 2.40.6

Fix operator emails rejected in Operated By

Declaring operated_by at the procedure root prompts the operator on the identify-unit screen, where the field wrongly inherited the serial-number character check and rejected email addresses.

  • Fixed the Operated By field rejecting emails and other free-text operator names on the identify-unit screen
  • Fixed custom metadata values on the same screen being limited to the serial-number character set
  • Added regression tests locking the identify-form validation to unit-identity fields only
August 26, 2026CLI 1.4.4Dashboard 2.40.5

Attribute runs to operators without accounts

A run's operator no longer has to be a TofuPilot account, so a line running on a station key can attribute its runs to the operators who ran them.

  • Added free-text operator names to operated_by: an email matching a member of your organization still links the run to that account, any other value is recorded as a declared name.
  • Extended it to every surface that produces a run — the V2 API, the operated_by: key in procedure.yaml, an Operator UI badge scan, Python phases, OpenHTF, pytest, Robot, and CSV, STDF, ATDF, ATML, TestStand, WATS and WSXF imports.
  • Added declared names to the runs list, the Operated By filter and the operator analytics, so a declared operator gets its own row instead of falling into Unknown, and alert concentration can name them.
  • Added operated_by_names to the run, histogram, measurement and phase list endpoints, combined with operated_by_ids as OR.
  • Changed file imports to take the operator from the file rather than from whoever clicks Import.
August 26, 2026Dashboard 2.40.0

Automate InvenTree stock from your workflows

Workflows can write test results and stock movements straight into InvenTree, so your inventory reflects what happened on the line without anyone retyping it.

  • Added workflow actions that create stock items, upload test results, update stock status, transfer stock, complete build outputs and print labels on your InvenTree server, with an existing serial reused rather than rejected so a re-run stays idempotent.
  • Added serial-number matching, with an optional part IPN when several parts share a serial, so an action targets the item a run actually produced.
  • Added pickers for parts, stock locations, build orders, build outputs and label templates, so a resolved option shows its name rather than a raw ID.
August 24, 2026CLI 1.4.3

Fix Python procedures crashing on Windows

Every OpenHTF, pytest and Robot Framework procedure died at startup on a Windows station, before the first phase could run, showing a Python traceback instead of a test result.

  • Fixed two calls in the connector the CLI injects that do not exist on Windows, which stopped the interpreter before any phase started.
  • Restored station deployment on Windows for all three frameworks — procedures written on the TofuPilot framework were never affected.
  • Added Windows to the automated test suite, so a procedure now runs end to end on Windows before every release.
August 24, 2026CLI 1.4.2

Catch broken Python references before the run

A test run that cannot succeed now refuses to start and tells you exactly why, and everything your phase code logs is captured where you expect it.

  • Added a pre-flight check that names every unresolvable Python reference — phase or plug — before the run starts, replacing mid-run tracebacks and silently missing plug arguments
  • Added capture of Python logging output from phase code into run logs, with severity and file:line origin; critical messages render as errors
  • Fixed deploy packing the .git file of worktree checkouts into the source archive
  • Fixed printed dashboard links mixing identities on machines holding both a user and a station login, and a false "Not logged in" hint when the identity cache was cold
August 18, 2026Dashboard 2.39.2

Filter units that have never been tested

The units list could not answer "which units were never tested?" — filtering by run count only ever considered units that already had a run, so asking for zero came back empty on every organization.

  • Fixed the run count filter to count units with no runs as zero and return them.
  • Added the zero bucket to the run count histogram, so the range covers never-tested units.
August 14, 2026Docs 2.5.1

Rework access and alerts documentation

The access and alerts docs are rewritten in a shorter overview-and-configure format: corrected access-group visibility rules, five alerts pages collapsed into two with all detection thresholds documented, and Root Cause Analysis promoted to the top level of the AI section, with redirects for every removed page.

August 13, 2026Python SDK 2.16.1C# SDK 2.14.0Rust SDK 2.15.1C++ SDK 2.9.1MATLAB SDK 2.9.1

Add Bitbucket support to all five SDKs

All five official clients are generated from one V2 specification, so they stay consistent with each other and with the API.

  • Added Bitbucket alongside GitHub and GitLab wherever a repository provider is returned, so procedures and deployments connected through Bitbucket now read correctly.
  • Improved aggregation values in the C# client to carry any measured type, instead of text only.
  • Documented the order phases are returned in: the attempts of a retried phase always arrive in attempt order.
  • Removed the conflict error from the station create and update paths, since station names are deliberately not unique and the API never returns it.

Try these features today