Skip to content

Changelog

Stay up to date with new features and improvements.

August 5, 2026Docs 2.4.5

Document procedure entry points and run_if

Teams that run several procedures from one codebase no longer have to rename files to main.py or guess which file a station executes.

  • Added a full reference for the procedure entry point and root directory settings: accepted values, defaults for each framework, when a change takes effect, and how imports resolve for entry points in subdirectories.
  • Added a monorepo guide for deploying several procedures from one repository, including procedure files with custom names.
  • Documented how to run a subset of phases with OpenHTF's run_if option, and how skipped phases appear on the dashboard.
August 3, 2026Dashboard 2.37.23

Upload and view attachments behind a firewall

Factory networks behind strict proxies had to whitelist third-party storage domains to use run attachments; every attachment URL now stays on TofuPilot domains.

  • Added attachments.tofupilot.app: uploads and downloads from SDKs, stations, and the dashboard no longer touch external storage hosts
  • Added a 95 MB per-attachment limit with a clear error message, replacing an undocumented unlimited behavior
  • Improved attachment serving with video seeking support and stricter content-type protections
August 3, 2026Dashboard 2.37.21

Fix cut-off labels on the measurement chart

The Y axis on a measurement control chart could cut the leading digits off its own labels, so the scale read as non-linear and the same number appeared twice at two different heights.

  • Fixed axis labels being clipped, which hid the most significant digits of every long value and made limit lines look misplaced
  • Rounded the axis values so they stay short and readable whatever the measurement scale
  • Kept enough decimals on narrow ranges, where every label used to collapse to 0
August 3, 2026Dashboard

Connect Bitbucket Data Center repositories

Teams hosting their code on a self-managed Bitbucket Data Center instance can now link it to TofuPilot, alongside GitHub and GitLab.

  • Added Bitbucket Data Center as a git provider, connected with your instance URL and an HTTP access token
  • Added automatic repository sync and webhooks so procedures deploy on push, with commit details shown in deploy views
  • Added a Bitbucket settings page to manage the connection and replace tokens
August 3, 2026CLI 0.26.25

Continue between phases with the keyboard

Operators work with their hands on a barcode scanner, not a mouse, but only phases starting with a text input kept the keyboard alive — an acknowledge prompt, a switch, a radio group or a bare Continue step forced a reach for the mouse once per phase.

  • Added keyboard focus on every prompt shape, so Enter — including the trailing Enter a barcode scanner sends — acknowledges a phase and moves to the next one.
  • Added Cmd/Ctrl+Enter to confirm a prompt from anywhere, including inside a multi-line text field where Enter must stay a newline.
  • Fixed a held Enter skipping a prompt the operator never saw, and restored focus to the form automatically after a failed send so a retry needs no mouse.
  • Added a ⏎ hint on the Continue button, shown only when Enter really confirms.
August 3, 2026CLI 0.26.24

Deploy and run behind a strict firewall

Stations on locked-down networks could not reach the third-party hosts used to download the Python runtime and to transfer deployment archives, so setup failed where IT could not allowlist them.

  • Added a TofuPilot-hosted mirror for Python interpreter downloads, so station networks now only need *.tofupilot.app, tofupilot.sh and dl.tofupilot.sh (plus PyPI).
  • Moved deployment uploads and downloads to artifacts.tofupilot.app, with no change to how stations work — they follow whatever address the API returns.
  • Added a clear error when a project's sources exceed the 95 MB upload limit, instead of an opaque failure part-way through.
  • Added overrides for air-gapped setups: point the mirror at your own host, or turn it off to use the upstream source.
August 3, 2026CLI 0.26.24Docs

Run a specific Python file with tofupilot run

Projects with several test stages sharing one codebase could not validate a stage locally: local runs always fell back to main.py, so the only workarounds were renaming files or keeping separate checkouts.

  • Added support for naming the entry file directly, so tofupilot run ./stage1_entry.py runs that stage instead of main.py, with a warning when the framework expects a directory rather than a file.
  • Fixed ID columns in tofupilot ls being cut to eight characters, so IDs can now be copy-pasted straight into get, update, rm and link.
  • Improved the logged-out and "no procedure found" messages to show the direct-file form, annotated as needing no account.
August 3, 2026CLI 0.26.24

Add a red STOP button to abort a run

Operators could not find how to abort a running sequence: the stop control was a small grey icon that read as decoration rather than an emergency control.

  • Added a solid red STOP button that morphs into KILL after a stop, with a fixed width so the bottom bar never reflows.
  • Added a 500 ms delay before KILL becomes available, so a touchscreen double-tap cannot escalate a graceful stop into a forced kill.
  • Fixed the button keeping the previous run's state after a restart or a lost command, and made a kill re-sendable if the run has not ended after 5 seconds.
August 3, 2026CLI 0.26.24

Fix stations dropping offline mid-run

A single oversized event — a large image in a prompt, a verbose log dump or a long measurement trace — used to cut a station's live link for the rest of the session, so runs kept passing locally while the dashboard showed the station as offline.

  • Fixed the live link dropping when a phase sends an unusually large payload: the event is now shrunk to fit instead of breaking the connection.
  • Added readable stand-ins for degraded content — an oversized image becomes a short note explaining the operator screen still shows the full picture, and truncated logs keep their start and end with an explicit marker.
  • Kept normal runs untouched: only the payloads that would break the connection are degraded, and phase outcomes always arrive.
August 3, 2026Docs 2.4.3

Fix operator UI examples the CLI rejected

The Text and Progress pages documented a value field that the CLI does not accept, so every example on those pages failed to load when copied into a procedure.

  • Fixed the Text and Progress operator UI pages to use default_value, the field the CLI actually reads, in all eleven YAML examples and both property tables.

Try these features today