New Pioreactor release: 25.2.11

:wave: this is a minor release with some improvements and bug fixes from the last release.

:arrow_down_small: Download the release here

25.2.11

Enhancements

  • New OD Calibration: Introduced a new OD calibration using standards (requires multiple vials). Run:

    pio calibrations run --device od
    

    Inspired by the plugin by @odcambc.

  • UI Improvements:

    • Improved chart colors.
    • Added the ability to choose the level of detail on the new Event Logs page.
  • New OD Reading Option: The OD reading CLI now includes a --snapshot option to start the job, take a single reading, and exit. This is useful for scripting.

  • New Pump Control CLI: Introduced a new CLI for pumps:

    pio run pumps --media 1 --waste 2
    

    This command will add 1ml of media and remove 2ml of waste. The order matters, and pumps can be specified multiple times:

    pio run pumps --waste 2 --media 1 --waste 2
    

    This new CLI is really useful for experiment profiles. For example, a chemostat can be “programmed” as (but don’t actually do this, using a dosing automation):

    common:
      jobs:
        pumps:
          actions:
            - type: repeat
              hours_elapsed: 0 # start immediately
              repeat_every_hours: 0.5 # every 30m, run the following actions
              actions:
                - type: start
                  hours_elapsed: 0
                  options:
                    media: 1
                    waste: 2
    
    
  • Experiment & System Enhancements:

    • Initial support for 40ml model.
    • Ability to run multiple experiment profiles per experiment.
    • Users can now specify which Pioreactor to update on the Updates page (available only with release archives).
    • Stirring calibration is now included as part of the self-test.
    • Improved stirring job handling when OD readings have long pauses.
  • Previously, if a worker’s web server was down, an update would be blocked. Now, the leader will first attempt the web server, and if a 5xx error is observed, it will attempt SSH communication instead.


Web API Changes

  • Introduced:
    • GET /unit_api/jobs/running/<job>
    • GET /api/experiment_profiles/running/experiments/<experiment>

Breaking Changes

  • Calibration Structs:

    • predict → x_to_y
    • ipredict → y_to_x
    • This change makes naming clearer.
  • Plugin Migration (Upcoming):

    • Plugins should migrate from click_some_name to auto-discovered plugins by importing run.
    • Example migration:
      import click
      from pioreactor.cli.run import run
      
      @run.command("my_name")
      @click.option("--my_option")
      def my_name(my_option):
          ...
      

Bug Fixes

  • Fixed UI not displaying third-party calibrations.
  • Experiment profiles now directly use unit_api/, potentially mitigating Huey worker stampedes when starting multiple jobs.
  • Fixed pio calibrations run ... -y not saving as active.
  • Fixed manual dosing issues in the UI.
  • Fixed manual log recording in the UI.
  • There was a race condition between monitor and a db creation job that was preventing the monitor job from starting. Awkwardly, this only seemed to happen on power cycles, and only sometimes. This escaped our testing. We’ve fixed it by improving how we initialize the dbs, and how we connect to them.

How to update

Known issues:

  • fresh install of the worker images are having network trouble. We are investigating. For now, these images are pulled from “latest”. Updating to 25.2.11 seems to be okay.
  • “more” on the Event logs page doesn’t load with the detail filter

We’ve fixed the 25.2.11 worker images - kcco!