Skip to content

Release 9.1.0#21548

Open
y3rsh wants to merge 640 commits into
releasefrom
chore_release-9.1.0
Open

Release 9.1.0#21548
y3rsh wants to merge 640 commits into
releasefrom
chore_release-9.1.0

Conversation

@y3rsh
Copy link
Copy Markdown
Member

@y3rsh y3rsh commented May 20, 2026

Flex only 9.1.0 release

Approval required to allow ff-only merge directly when stable version is ready to be cut.

CaseyBatten and others added 30 commits April 17, 2026 14:51
…21280)

Implements serializing of the PipetteDict and OT3Config, alongside implementing some related infrastructure.
…trols (#21282)

This PR updates the start and deactivate pump commands for the vacuum
module in the app, according to their recent additions as Protocol
Engine commands. In scope is updating the shared-data types for the
create command endpoints and params.
Eventually, we want to show a "locked" overlay on the on-device display
whenever access control is enabled, and the user is not actively logged
in.

This is a first step. On boot, it shows the overlay if access control
is enabled, and you dismiss it simply by tapping. So this implements
the overlay component and establishes where it will be rendered in our
component hierarchy.

This closes EXEC-2541, and goes towards (but does not fully close)
EXEC-2538.
…1313)

Wrap PyroSynchronousObject and AsyncClientPyroObjects with outbound function wrappers and async wrappers at call time
…mbers (#21323)

When I set this up, I accidentally used branch names that could change
over time, like `v6`. So when setup-node released a new version (`v6` -> `v6.4.0`),
the `v6` ref started pointing to a different SHA and Zizmor started complaining.

This PR fixes it by rewriting all of the comments to point to full
versions (like `v6.3.0`), which should be more stable.
* chore(js-package-testing): add devDependencies to package.json
Create the run subprocess (when in protocol subprocess mode) on boot and after a run is finished, rather than on demand. This reduces the time it takes for a run to initialize in the average case.
* chore: update vite version for the patch
Works toward EXEC-2535

Inter-process Pyro5 calls between the robot-server and hardware API processes would intermittently fail with Pyro5.errors.ConnectionClosedError: receiving: not enough data. This error occurs when the server closes a TCP connection before the client finishes reading the response. Critically, this error does not indicate whether the original command was received and executed by the server, only that the response was lost.

Digging into the internals of pyro, the Proxy lifecycle in AsyncAdapter is roughly the following:

1. Create a new Proxy object
2. Lazily open a new TCP connection to the Pyro daemon
3. Perform a full connection handshake
4. Execute the remote call
5. Close the connection when the proxy is garbage collected

Connection churn creates undue load, potentially causing the daemon to drop connections mid-response. To fix, we introduce a thread-local proxy cache. Each worker thread from the pool now gets one persistent Proxy that is reused across all calls on that thread. The cache also handles stale connections: if the thread-local proxy's connection has been dropped, we re-established connection without re-invoking any request (ie, no side-effects produced on reconnection).

It's difficult to say whether this refactor will eliminate the problem entirely, however, this is likely a positive addition that we want regardless.
…ion for vacuum steps (#21314)

This PR creates the formToArgs function for vacuum module step forms. It
also adds skeletons for all vacuum module command creators for type
checks to pass. The implementation of these command creators, along with
their state updater functions, will be added in a followup PR to limit
the scope of this PR.

Closes EXEC-2556
…1305)

This updates our usage of the Reselect library from v4 to v5. This is a step towards introducing Redux Toolkit, which will bring us many modern conveniences, but needs Reselect v5.

This goes towards AUTH-2863.
* fix(app): fix InlineNotification rendering condition
Improvements:

- code block error when using `protocol.create_timer()`
- `start_set_block_temperature()`'s API ref was in a code block 
- consistently stating the parameter for different module temperature
commands. some accept `celsius` and some accept `temperature`. one
change here was to fix an error. the rest are just to more explicitly
state which param each command accepts.
We no longer accept customer issues via GitHub. Update a section in the
Flex manual to include this change.

RTC-981
A short section on removing a pipette.

RTC-962
…tep-gen (#21318)

This PR updates the shared live engine command type for stop vacuum
pump, and wires up in protocol designer and step generation. This
includes small refactors to the vacuum step form UI for switching on
pump controls (setting pump or stopping pump), based on the vacuum state
at the beginning of the step. Fleshed out step generation for all other
command creators, along with state updates, will be added in #21319 for
scope.

It also fixes up some step form functionality, including:
- auto-selecting the vacuum module if there is only one vacuum module
configured (should always be true)
- auto-selecting the ending hold vent checkbox if a pump duration is set
(should be true by default)
- fixing mode-required form error
…1308)

This introduces some more modern Redux patterns (going towards EXEC-1475 and EXEC-1476), and takes a first pass at implementing the client-side state for access control mode (going generally towards EXEC-1792).

* Install Redux Toolkit. As discussed in Slack, this is how we want to use Redux going forward. In this case, it reduces the boilerplate by like 4x. It really is so much better.
* Using Redux Toolkit, take a first pass at the client-side state for access control mode. Nothing uses this yet.
This PR builds command creators for all vacuum module actions except
profiles (not yet added to PE). It also adds all state updater functions
for the various emitted commands: open vent, close vent, set pump
pressure, set pump power, and stop pump.

The behavior should be as follows:
- Initially, the vacuum vent is open, and the pump is off
- Setting the pump state (power/pressure) _without_ a duration should
hold that pump state indefinitely until explicitly turned off in a new
step
- Setting the pump state _with_ a duration should turn the pump off at
the end of the duration. The vent may remain open or closed
independently of this

Closes EXEC-2563, Closes EXEC-2561
This PR fixes a few bugs noticed in deck configuration:
1. The display location for the vacuum module should read "A3 + A4"
2. Clicking the configured VM should remove it from deck config.
* chore: update vitest to v4
…1325)

Replaces stub and no-op functions in run process class with actual calls and allows creation and running of protocols in subprocess mode.
# Overview

Adding a known issue for [this
bug](https://opentrons.atlassian.net/browse/RQA-5325?focusedCommentId=148349)
in PD 8.10.

For now, this includes a small, user-friendly description of low volume
mode and tries to approach the error without just stating "20 uL pipette
+ tips can't do low volume mode in PD". Open to suggestions!

## Test Plan and Hands on Testing



## Changelog


## Review requests

Does this cover the bug description? Any text suggestions/better path
forward for users?

## Risk assessment

- Indicate the level of attention this PR needs.
- Provide context to guide reviewers.
- Discuss trade-offs, coupling, and side effects.
- Look for the possibility, even if you think it's small, that your
change may affect some other part of the system.
- For instance, changing return tip behavior may also change the
behavior of labware calibration.
- How do your unit tests and on hands on testing mitigate this PR's
risks and the risk of future regressions?
- Especially in high risk PRs, explain how you know your testing is
enough.
# Overview

- Adds text description for expanded partial tip pickup.
- Updates a Stacker screenshot
(https://opentrons.atlassian.net/browse/RTC-933).
- Adds a description for updating existing PD protocols to take
advantage of protocol viz
(https://opentrons.atlassian.net/browse/RTC-951).

## Test Plan and Hands on Testing

[sandbox ](https://sandbox.docs.opentrons.com/docs-pd-8.10/)

## Changelog

- reworking `transfer.md` a bit (it's getting pretty long) to add more
sections that better separate the choices users have to make, and
reflect the order of those choices in PD.
- adding more description of partial tip pickup (and related collision
errors).
- added small description change to indicate that you can now choose the
blowout "start point" if your blowout location is a source or
destination well.
- adds an updated stacker step screenshot on the Modules page. 
- adds a tip for reimporting, updating, and exporting an updated version
of a PD protocol to take advantage of protocol viz.


## Review requests

Need to decide on nozzle naming to use in the PD manual. Either A) match
PAPI nozzle naming exactly or B) differentiate slightly, because PD
never shows the values we'll refer to

is everything else clear? 



## Risk assessment

low.
…process mode (#21333)

Fix three pyro tracebacks that would occurs when running a protocol with the run and hardware subprocesses on.
* fix(app): fix protocol visualization performance issue
Automated Locize `push-local` run triggered via workflow dispatch.
- branch: `chore_release-9.1.0`
- actor: `skowalski08`

Co-authored-by: skowalski08 <53955458+skowalski08@users.noreply.github.com>
Closes RABR-946 and RABR-947

The ODD ConfirmCancelRunModal checks the run status before performing a redirect to a new view, however, it's possible the run is not in a STOPPED condition before the runStatus is updated within the modal, which causes the redirect logic to no-op.

To fix, we can add a mechanism for handling redirects that are directly tied to the CTA: if the request succeeds, report the analytic event and redirect. If the request fails, just do the redirect.

We need to keep the useEffect in case the stop is initiated on the desktop app, however, we add need to add the case in which the run is un-currented as a reason to redirect, too. We remove the analytic from the useEffect entirely - this means the user cancelled the run on the desktop app, which has its own analytic event. If we were to keep the analytic in the useEffect, we'd be over-reporting the event.
…ved. (#21648)

# Overview
eba3fa5 moved some snaphot tests around, but package testing references
one of the ones that moved.
This updates that test to the new filepath.
* fix(app): fix labware api name text wrap issue
@koji koji temporarily deployed to pd-non-prod June 3, 2026 18:15 — with GitHub Actions Inactive
@koji koji temporarily deployed to pd-non-prod June 3, 2026 18:20 — with GitHub Actions Inactive
…QC script. (#21616)

# Overview
Combines the customer facing protocol for belt calibration I made with
the additional features of the hardware testing script so we can trash
the old script
# Overview
There are rare instances where modules briefly disconnect and reconnect.
This adds a mechanism the module control layer to detect a disconnect,
and wait up to 3 seconds to see if the module comes back. If it does, it
reconnects the old instance so any client that was using that module
reference does not notice the disappearance.

It also adds a new mechanism in mod_abc that allows the "wait for" tasks
to be tolerant of errors. so far we've only ever noticed this for sure
in the heatershaker (and perhaps once in a temp deck) so this PR adds
that tolerance to the heater-shaker and the tempdeck.

---------

Co-authored-by: Seth Foster <seth@opentrons.com>
# Overview
Protocolize the gripper QC script
# Overview
Turns the 96 channel QC script into a protocol.
Closes RQA-5473

We were not enforcing proper title casing for the instrument names on the Devices page. After syncing with Design, we do want title casing here.

The fix cleans up some improper interpolation, too.
@mjhuff mjhuff deployed to pd-non-prod June 5, 2026 20:38 — with GitHub Actions Active
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

DO NOT MERGE Indicates a PR should not be merged, even if there's a shiny green merge button available

Projects

None yet

Development

Successfully merging this pull request may close these issues.