Skip to content

Changelog

Stay up to date with new features and improvements.

September 7, 2026CLI 1.7.4Dashboard 2.42.12Release Server 1.4.13Docs 2.5.8Website 0.11.34

Install the CLI from tofupilot.app

Some corporate networks block the tofupilot.sh domain, so a station could not install or update the CLI without an IT ticket. Everything a station needs now lives under one domain that stations already reach for the API.

  • Moved the CLI installer to curl -fsSL https://tofupilot.app/install | sh (and install.ps1 for Windows), with binaries, updates and the Python runtime mirror served from dl.tofupilot.app and get.tofupilot.app
  • Moved the self-hosted deploy script to curl -fsSL https://www.tofupilot.com/deploy | bash, the domain the license check already uses
  • Updated the station page, Orbit, docs and FAQ to the new commands; the firewall allowlist for a station is now *.tofupilot.app

The tofupilot.sh commands keep working, and installed stations update themselves without any change.

September 6, 2026Dashboard 2.42.11

See how many filter values are hidden

Filter lists on the runs, phases and measurements pages show at most 30 values, and the cut was silent, so a part number or measurement name past the 30th row looked like it did not exist.

  • Added a footer under every cut filter list that stays visible while you scroll and points you to the search box, so you know more values exist and how to reach them
  • Added the real total where it is known, for example "Showing 30 of 1,800" on the Measurement Control and Phase Pareto filters and on every environment, deployment and version filter
  • Improved row counts in filter lists so digits are grouped the same way as in the command bar
September 5, 2026CLI 1.7.2Docs 2.5.7

Stop a burn-in safely, even mid-run

Long multi-slot runs on shared instruments now stop the way an operator expects.

  • Added a graceful stop on Ctrl-C, Ctrl-Break, SIGTERM and station stop: running phases are interrupted, the execution-scoped teardown (your power-off) runs, and every slot's run is queued as ABORTED with what it measured
  • Added a second-signal escalation to force, ignored inside 3 s of the first so a reflex double Ctrl-C cannot cut a power-off in progress
  • Fixed operator stops on multi-slot runs, where the shared plugs were released before the teardown could use them
  • Fixed shared plug processes outliving the CLI and holding their instrument session after a crash or kill
  • Fixed the operator screen showing idle after a reconnect hours into a run
  • Changed phase deadlines to a monotonic clock, so a time sync no longer shortens a timeout

Closing the console window on Windows is best-effort inside the 5 s the OS grants; use Ctrl-C to stop a run, and an instrument-side watchdog for fixture safety.

September 5, 2026Studio 1.4.15Station 1.4.15Framework 1.4.15

Declare 80 slots in one line

Multi-slot procedures no longer need one YAML entry per slot.

  • Added an integer shorthand for execution.slots: slots: 80 expands to slots slot_01 to slot_80, zero-padded so they sort in order everywhere
  • Kept the list form for custom slot keys and names
  • Improved load errors: a wrong count or type says what was expected, and a bad entry in the list keeps its own message
  • Updated Studio to open procedures that use the shorthand
September 4, 2026StudioStationFramework

Reject bad operator input before the test runs

Operator entries used to be checked differently by the kiosk, the web console and the terminal, and a serial the server would refuse was only caught at upload, after the test had already run.

  • Added: every submission is now judged by the station itself; a rejected entry keeps the form open with a plain-language message under the field (“Remove the space (character 3) — allowed: uppercase letters, digits, -”, “Must be exactly 4 digits — you typed 2”), and the raw pattern is never shown to the operator
  • Added: prefix and suffix on unit fields and text inputs, displayed locked around the input and composed into the recorded value, so the operator scans only the variable part and pattern never has to repeat the fixed one
  • Added: pattern_message for patterns that cannot explain themselves; patterns now match the whole entry (SN-[0-9]+ rejects SCRAP SN-0042 XX, anchors optional), and serial, part, revision and batch fields default to the server's allowed characters so a bad scan fails at the form, not at upload
  • Improved: one shared form for phase prompts and unit identification with keyboard-first flow, Ctrl/⌘+Enter submit and password managers suppressed; the Studio editor refuses a pattern the station cannot compile while you type, nudges you to add a message when one cannot be derived, and screen previews use the exact verdict a run would give
  • Fixed: “Run again” no longer crashes when the unit config changed between two runs; the docs for text inputs and unit under test cover the new fields (Studio desktop keeps the previous client-side checks for now)
September 4, 2026Dashboard 2.42.8

See every slot of a fixture from one run

Runs from a multi-slot execution now show where they ran and what ran beside them.

  • Added a Slot section on the run page with the slot key, name and execution, and a hover card listing every sibling run with its serial and outcome
  • Added a Slot filter group to the runs list with key, name and execution, with counts, shown only for procedures that use a fixture
  • Improved the runs toolbar with a tooltip on Import and consistent pointer cursors
September 4, 2026Dashboard 2.42.5CLI 1.6.1

Follow every slot of a multi-slot run

Stations that test many units at once now get an operator view built for the fixture instead of a single-unit screen.

  • Added a fixture grid with one tile per slot showing its name, serial, current phase and status, sized to fill the screen from 2 to 80 slots
  • Added slot pages with each slot's own phases, prompts, outcome and run link, reachable from the grid or a direct link
  • Improved the progress bar to show one group per slot with its phases, and a violet state wherever a slot waits on the operator
  • Updated the CLI to report slot names, units and outcomes so every slot gets its own run in the dashboard
September 4, 2026Dashboard 2.42.4

Export charts and pick measurements by name

Getting a Measurement Control curve into a report meant a screenshot, and finding one measurement among hundreds meant scrolling a narrow list, so the analytics pages now do both from where you already work.

  • Added Copy chart as image, Export chart to PNG and Export chart to PDF to the right-click menu of every chart on Measurement Control and Phase Pareto, with the KPI strip included in the picture
  • Added measurement picking by name in the filter bar: tick several at once, see the typed characters highlighted in each name, and remove any filter with one click
  • Added a shortcut from a measurement's page to Measurement Control, with a date window that already contains the run it came from
  • Fixed the date range filter so a date can be typed on the keyboard, keeps its day in every timezone and includes the whole end day, in the run filters and on the usage page
  • Fixed the sidebar collapse strip covering the filter list's scrollbar, and made slider handles easier to grab
September 3, 2026Python SDK 2.20.0C# SDK 2.18.0C++ SDK 2.13.0MATLAB SDK 2.13.0

Filter and group runs by slot in every SDK

Multi-slot stations now upload one run per slot; the SDKs needed the matching fields to read and query them.

  • Added: execution_id, slot_key and slot_name on run creation and run details in the Python, C#, C++ and MATLAB clients
  • Added: execution_ids and slot_keys filters on run listing, so one start's runs or one fixture position's history can be pulled in a single call
  • Updated: clients regenerated from the current API specification; no breaking changes
September 3, 2026CLI 1.6.0Docs 2.5.4Rust SDK 2.19.0

Upload one run per slot on multi-slot stations

A station testing several units at once used to upload a single run for the whole fixture, so per-unit results and per-slot yield were invisible.

  • Added: one run per slot on every start, each with its own unit, outcome, phases, measurements, logs and attachments; the runs of one start share an execution id and carry their slot key and name (needs a dashboard at 2.42.2 or later; single-slot uploads are unchanged)
  • Added: {slot} and {slot_name} placeholders in unit default values, so auto_identify derives each slot's serial number and a burn-in rack starts with no operator input
  • Added: execution_id on run_started and per-slot outcomes on run_finished in the agent protocol, per-slot phase rows and prompts in the terminal UI
  • Updated: Rust client with the run grouping fields and filters; docs on slot placeholders and one run per slot

Try these features today