New Pioreactor release: 26.4.x

:wave: this is a fun release! We are fixing some fundamental problems that have confused users for a while now. I’ll make some highlights, and then full changelog below:

  1. Plugins installed on a worker now show up in the UI on their Pioreactor card. This was always confusing previously: “I installed a plugin on worker X, why isn’t it appearing in the UI”. The problem was that the UI’s data was purely provided by the leader, so any plugins had to be installed on the leader to show up in the UI. Now, each Pioreactor card is populated by the respective Pioreactor.
  2. Workers now control their own configuration via a local unit_config.ini . The “shared” config.ini lives on the leader, and the leader shares that with the workers, but each worker now has their own unit_config.ini that can override the global config.ini. In the Edit Config page, you are now editing the config directly on the worker.
  3. New caches on the leader to make providing data from workers faster. This makes both the above faster, and lots of pages in the UI (plugins, calibrations, etc) are now faster to display too.

:arrow_down: Download here: release_26.4.1.zip

26.4.0

Breaking changes

  • Unit-specific configuration is now owned by each worker’s local unit_config.ini. The filename-based config editor APIs (/api/config/files*) have been removed; use /api/config/shared, /api/config/units/<unit>/specific, and /api/config/units/<unit> instead.
  • pios sync-configs --specific now refreshes leader-side snapshots from each worker’s unit_config.ini instead of pushing leader-local config_<unit>.ini files to workers.
  • Renamed the shared bioreactor volume setting max_working_volume_ml to efflux_tube_volume_ml, including the UI label (Efflux tube level), MQTT/API state, and device config/cache migration during update.
  • Job and Automation controls now use worker-provided descriptors for individual Pioreactors, so worker-only plugin jobs automations appear in per-unit UI even if the leader doesn’t have that plugin installed. Bulk “Control All Pioreactors” automation flows remain leader-driven. A update script will attempt to add the necessary UI files to workers.
  • growth_rate_calculating now assumes the new grpredict hidden-state filter and warmup-based initialization. It no longer supports --ignore-cache, cached growth-rate/filtered-OD startup state, or od_blank correction in this job. The parameters in [growth_rate_kalman] are no longer used.
  • od_blank correction is now applied upstream in od_reading on a per-experiment basis before readings reach growth_rate_calculating. If a blank exists for the experiment, od_reading now refuses to start with OD calibrations or fused estimators enabled, instead raising a ValueError.
  • new version of grpredict that has significant changes to the responsiveness of the growth-rate model.

Enhancements

  • Updated the config editor and worker-add flow for worker-owned unit configuration. The UI now edits shared cluster config separately from per-unit unit_config.ini, and existing leaders update their add-worker helper so new workers receive shared config without overwriting their unit-specific config.
  • Added pio config get <section> <parameter> and pio config set <section> <parameter> <value> for single-entry config access from the CLI. get defaults to the effective merged value and also supports --shared / --specific for file-specific reads. set uses --shared / --specific to target config.ini or unit_config.ini.
  • Added short-lived leader-side caching for several fan-out metadata APIs, reducing repeated worker fetches and improving UI load times for calibrations, protocols, estimators, automations, jobs, and installed plugins.
  • New growth-rate algorithm: designed the growth-rate EKF around a log-OD state model. You should see much faster convergence and better behaviour.
  • Added pio run stirring --measure-rpm-only to hold a fixed duty cycle while still measuring and publishing measured_rpm, making it easier to inspect fan RPM at settings like --duty-cycle 100.

Bug fixes

  • Fixed dosing_automation subdosing to emit only the top-level DosingStarted and DosingStopped events, avoiding duplicate nested dosing events during recursive IO actions.
  • Fixed repeated in-process actions such as dosing/pump runs to clean up MQTT listeners, signal handlers, and short-lived MQTT clients more reliably, preventing runaway socket/file-descriptor growth in long-lived jobs.
  • Fixed fed_batch dosing to skip additions that would push the vial past the configured hard-stop safety volume, pausing the automation instead of risking overflow.
  • Fixed non-interactive SSH and nohup command execution for pio and pios by installing /usr/local/bin wrappers that source /etc/pioreactor.env before execing the Pioreactor virtualenv binaries.
  • Fixed pump calibration dosing_events from changing retained bioreactor state such as vial volume and alt-media fraction.
  • Fixed overview chart legends so relabelled aliases are truncated consistently and still hide/show the correct series when clicked.
  • Fixed pio update app default release installs to download and apply the single release_<version>.zip archive, reusing the same archive update path as uploaded release bundles instead of fetching individual release assets.

How to update

2 Likes

Known issues

  • stirring isn’t clearing PWM locks correctly - incoming hotfix

release_26.4.1.zip

1 Like

release_26.4.2.zip

26.4.2

Enhancements

  • Updated pio cache purge to parse Python literals for cache keys, so tuple-shaped entries can be removed directly. For example:

    pio cache purge leader_multicast_get_cache "('multicast_get', 'calibrations', '/unit_api/calibrations', 'unit1')"
    

Bug fixes

  • Fix new worker images not having the correct data in ~/.pioreactor/ui
  • Fix bioreactor diagram not responding to waste pump actions.
  • Improved experiment profile validation to catch more semantic errors before execution or save, including conflicting action time fields and invalid profile expressions.
  • Updated the Create/Edit Experiment Profile UI to show backend validation messages when a profile save fails, making profile errors easier to diagnose.
  • Fix for blinking self-tests on the Pioreactors page
  • Fix for Pioreactor page crashing.

There were some issues with the 26.4.0 and 26.4.1 release. I re-released it with some fixes. If you are getting errors with jobs not showing up in the UI, try re-updating to release_26.4.1.zip, and then back to the latest release.

1 Like

26.4.3

Bug fixes

  • Performance improvements in the UI frontend
  • Improved software update reliability by avoiding temp-file name collisions between web-uploaded release archives and pio update app downloads.
  • Fixed duplicate pio run od_reading starts to fail before reinitializing ADC hardware, avoiding disruptions to an already-running OD reader and spurious noisy-reference warnings.

release_26.4.3.zip