Skip to content

Conversation

@neo-jesse
Copy link
Collaborator

8.8.0

jerader and others added 30 commits October 14, 2025 09:39
…19765)

Standardize AWS role usage for static deployments

Problem:
Static deployment workflows (Protocol Designer, Labware Library, and
Docs) were using inconsistent AWS role secrets, making role management
complex and potentially causing deployment failures.

Changes:
Renamed DOCS_SANDBOX_ROLE to STATIC_DEPLOYMENT_ROLE across all static
deployment workflows
Updated Protocol Designer workflow to use the unified role instead of
PD_SANDBOX_ROLE
Fixed sandbox bucket name from sandbox.designer.opentrons.com to
opentrons.sandbox.designer to match actual S3 bucket
Updated corresponding test assertions to reflect the new bucket name
Kept domain URLs unchanged (sandbox.designer.opentrons.com) as these are
the user-facing URLs

Files Updated:
.github/workflows/pd-test-build-deploy.yaml
.github/workflows/ll-test-build-deploy.yaml
.github/workflows/docs-build-deploy.yaml
.github/workflows/docs-build.yaml
scripts/static-deploy/deploy_config.py
scripts/static-deploy/tests/test_deploy_config.py
scripts/static-deploy/tests/test_deploy.py

Result:
All static deployments now use a single, consistent AWS role
(STATIC_DEPLOYMENT_ROLE), simplifying role management and ensuring
proper permissions across all static site deployments.
Note: The STATIC_DEPLOYMENT_ROLE secret will need to be created/updated
in GitHub repository settings with the appropriate AWS role ARN.
* fix(protocol-designer) fix liquid form submit issue
* fix(protocol-designer): fix export button z-index issue
…#19787)

* fix(protocol-designer) fix whitescreen issue when clicking an adapter
# Overview
This essentially adds the TrackFromLocation and the TrackToLocation to
the protocol engine commands.

It then passes new information down to the OT3Api, replacing the Z
distance with the end point, and updating the motion utilities to create
the target position from that instead of z_distance.

If no TrackToLocation is provided to the engine command then it
preserves the old behavior where it tracks the meniscus.

As is the protocol api just preserves the current behavior, hooking up
the TrackToLocation with that layer is another ticket.

TODO add checking that makes sure the X/Y/Z move is a valid move that
can occur within the timeframe of the plunger move.
Closes EXEC-1957

For the camera work, the filename created when saving an image will require certain metadata that is not solely available to PE, but some of which is available on the robot-server, RunFileNameMetadata. The FileProviderExecutor singleton will need to set this metadata on a per-run basis and also manage cleanup of this metadata when a run is un-currented.
# Overview
Robot context was incorrectly kicking back that the p200_96 was not a 96
channel when someone tried to use it for resin tips.

This just centeralizes the test into validation and adds a test that
iterates through all the pipette names to make sure everything is
working properly now.
chore(release): placeholder notes for internal 2.8.0
Update title to match designs: "Shake" -> "Shake speed"

Closes RQA-4731
## Overview

Closes EXEC-1907.

## Changelog

Behind the concurrent module actions feature flag:

* Update the copy of the existing modals that show up after you save a
Temperature Module or Heater-Shaker step.
* Remove the ability to skip adding the pause step.
* Add new modals for Thermocycler lid, block, and profile steps. These
modals aren't used anywhere yet.
…tors (#19791)

Just deleting some dead code:

* Delete the `collapsedSteps` part of Redux state, and its sole selector
`getCollapsedSteps()`.
* Delete the `getSelectedStepTitleInfo()` selector.
This PR fixes up `handleContinue` logic, specifically for OT-2 liquid
handling forms. Here, I correctly display errors if clicking 'continue'
when errors exist on the current page of the stepform, whereas
previously, clicking 'continue' advanced the stepform page with null
values, resulting in a whitescreen. I also refactor the `handleContinue`
logic for readability.

Closes RQA-4759
Needs to checkout before sending alerts
This PR continues the implementation of tip selection functionality in
Protocol Designer. It enhances how tip states are visually represented
and selected within the UI, expanding from static rendering to
interactive tip selection and highlighting.
* feat(app):  update slot detail containers
Closes EXEC-1969

For the upcoming camera capture work, we'll need to persist image files on the robot. We don't want to handle saving images in our persistence directory, because doing so opens up issues when performing database migrations.

This commit adds a new robot setting, images_directory, which allows for specifying the directory in which images will be saved. We largely mirror the behavior of persistence_directory here: if no explicit env is passed, we create a temporary directory. By default via settings injection, if the persistence directory is /data/opentrons_robot_server, then the images directory is analogously specified as /data/images.
…#19796)

baby step to fixing the slot overlay stuff is making the labware renders
on the deck map the default view so i deleted the other view where it
just showed the rectangle copy layers

---------

Co-authored-by: Max Marrone <[email protected]>
* feat(app, components): update slot detail container
# Overview

Implement `/camera` requests in app

- Uses hook in run set up, camera slide out, and robot settings

## Test Plan and Hands on Testing

- built dev app and toggled camera switches to ensure buttons in other
areas of the app updated as well:


https://github.com/user-attachments/assets/a18c188a-17cd-4616-8ae9-e6f3b2cc0f28

Camera tab for run set up when camera is enabled
<img width="1386" height="473" alt="Screenshot 2025-10-16 at 12 50
44 PM"
src="https://github.com/user-attachments/assets/bcac5c3f-4f12-40f2-81a4-a29285958ff8"
/>


## Changelog

- creates hook for `POST` request
- implements hook in `CameraCard`, `ProtocolRunCamera` and
`ProtocolRunSetup`

## To Do
in future PR create a blank image gallery when camera is disabled

Finishes EXEC-1835
# Overview
Hook up end location to the protocol api layer. 

- update all the tests
- add in a check for the old dynamic pipetting version and use the new
version to preserve behavior
- pass start and end locations down to the engine commands.
This PR adds new fields for `tip_tracking`, `tiprack_selected`, and
`tips_selected` to moveLiquid and mix forms in PD. Also adds migration
for 8.7.0
CaseyBatten and others added 30 commits November 6, 2025 15:48
…agnostic (#20066)

Covers EXEC-2031

Implements file name validation and formatting for image files.
…volume is out of bounds (#20056)

# Overview

Add a default value for the thermocycler max block volume when the found
well volume is out of bounds

## Test Plan and Hands on Testing

Simulated protocol
`/Users/rhyannclarke/opentrons/abr-testing/abr_testing/protocols/active_protocols/4_Illumina
DNA Enrichment.py` with apiLevel to 2.27 and received this error:
`ProtocolCommandFailedError [line 299]: Error 4000 GENERAL_ERROR
(ProtocolCommandFailedError): InvalidBlockVolumeError: Thermocycler max
block volume must be between 0 and 100, but got 150.0.`

After the change was made, the protocol simulated successfully with
`start_set_block_temperature()` and `set_block_temperature()`

## Changelog

- Added default block temperatures based on if it was higher than the
max or lower than the min


## Risk assessment

low

Closes RQA-4820
# Fix Slack notifications to prevent workflow failures

Fixes two issues with Slack notifications:

1. **Added missing `webhook-type` input** to `simple-build-alert` action
(required by `slackapi/[email protected]`)

2. **Made all Slack notifications non-blocking** by adding
`continue-on-error: true` to 5 notification steps in
`app-test-build-deploy.yaml`

Slack notification failures will no longer cause workflow failures,
while still logging warnings for debugging.
…20077)

Ensures the configuration file that use to default to "NONE" now reinforces the new oe-core default.
…ug fix (#20076)

# Overview

Adding a bullet to release notes for #20072.

## Changelog

- One new bullet in 8.6.3 section.
- Remove some duplicate lines further down the notes file.

## Review requests

words good?

## Risk assessment

v low
# Overview
This PR updates the OT3 Controller's motion planning to adjust the
commanded speed for a multi axis move if one of the plunger's are in the
moving axis. this ensures that the pipettes' plunger will move at the
speed commanded.

Right now we only move the plunger and other axis during dynamic
pipetting so this won't affect anything else in the system.

After doing it's best to adjust this speed, if the move is still
impossible an error will be logged into the api logs.
… color on camera settings (#20061)

# Overview

Removed wrapping behavior of module icons in protocol card and robot
card
Corrected text on camera settings in run setup
Updated camera enabled text to a chip

## Test Plan and Hands on Testing

Smoke tested: 
<img width="931" height="332" alt="Screenshot 2025-11-06 at 12 35 10 PM"
src="https://github.com/user-attachments/assets/696b8acd-a14f-4b32-95c6-7643240d3ee5"
/>
<img width="931" height="149" alt="Screenshot 2025-11-06 at 4 11 08 PM"
src="https://github.com/user-attachments/assets/b37ebf6b-7a86-4b6b-95f8-98950bbbe47e"
/>


<img width="900" height="547" alt="Screenshot 2025-11-06 at 3 15 43 PM"
src="https://github.com/user-attachments/assets/d8198898-5852-4930-9830-85385138b68c"
/>

<img width="913" height="564" alt="Screenshot 2025-11-06 at 3 21 59 PM"
src="https://github.com/user-attachments/assets/7a5e8bcd-6cab-417a-9724-ac342613d165"
/>
<img width="991" height="617" alt="Screenshot 2025-11-06 at 4 19 05 PM"
src="https://github.com/user-attachments/assets/d4c4266a-45b0-4c3d-874b-5078a79c564c"
/>



## Risk assessment
low

Closes RQA-4819
Closes RQA-4825
Closes RQA-4824
Closes RQA-4830
Closes RQA-4823
Closes RQA-4835
Currently, we inject the `runId` into the secondary window, and that
`runId` serves as the basis for determining whether or not we should
render the stream. However, if a user keeps the secondary window open
when creating a new run on the same robot, the stream still reflects the
old run.

To fix, we check if this robot has a current run, and use that as the
basis for rendering the livestream. All of this works as expected
largely because we block the "show livestream" button for historical
runs.
…20082)

# Overview

Changes the `check_preferences` text to yellow if the image storage is
almost full, red if the camera is disabled but needed for the run, grey
if the camera settings are is ready to be confirmed, and green if the
camera settings have been confirmed.

## Test Plan and Hands on Testing

- smoke tested on robot


https://github.com/user-attachments/assets/144dce45-58f7-4da8-b9d0-c7a819ca2176

## Changelog

- an additional param was added to check the storage info
- camera set up is now being viewed as a module set up type to allow for
checking of camera enablement and storage

## Review requests

- What do you need from reviewers to feel confident this PR is ready to
merge?
- Ask questions.

## Risk assessment
- lowish
- may have accidentally changed other text formatting

Closes
RQA-4828
Resolved conflicts:
- protocol-designer/release-notes.md
We render "robot is busy" banners on the robot details and robot settings views, however, the conditions in which we disable certain actions (ex., uploading zip files to a robot or allowing recalibration) are inconsistent from the conditions in which we render the banner.

Currently, we disable or enable certain actions based on a variety of factors:

* Whether the robot is "busy", which is roughly defined as whether there is a maintenance run or protocol run in progress, or there is an active subsystem update.
* Whether a protocol run exists.
* Whether a user has clicked specific module CTAs. The implementation of this one currently lacks a way to disable the "robot is busy" state, so once those specific items were clicked, the robot was busy so long as a user was on the robot settings page.

Another downstream consequence of this logic is that we permit desktop users to launch a maintenance run flow while another maintenance run is active.

The solution in this commit is the following:

* No actions of any kind should be permitted if the robot is busy (see the first bullet, above). This is the most conservative approach, but it is by far the least surprising to end-users. There's no more confusion why certain settings are disabled without the banner rendering and vice versa. For example, we could in theory update camera settings while a run is in progress, but under this proposal, a user wouldn't be permitted to do so. The additional (and more important benefit I think), is the code is significantly more auditable - we invoke the useIsRobotBusy hook exactly once at the top level component responsible for rendering all the settings, and that's it.
* We only block updating by zip file if there is a current, non-terminal run.

NOTE: The one spot that is quite annoying is still the whole "run uncurrenting" logic, which will cause the banner to persist when an end-user may think it shouldn't. This isn't a regression introduced by this commit, but yeah, if a user over-eagerly navigates away from a run and the ODD can't implicitly close the run context, then the banner persists...but that's a different problem for a different day I think.
…onsistencies (#20093)

# Overview

Added missing labware images and fixed brand casing inconsistencies

## Test Plan and Hands on Testing

Smoke tested on labware-library
<img width="422" height="349" alt="Screenshot 2025-11-10 at 11 00 42 AM"
src="https://github.com/user-attachments/assets/10221ea4-8f57-4b76-9c6f-e265f1ee603c"
/>
<img width="424" height="351" alt="Screenshot 2025-11-10 at 11 00 56 AM"
src="https://github.com/user-attachments/assets/accb27e7-9879-4509-addd-0a259e8593a4"
/>
<img width="428" height="353" alt="Screenshot 2025-11-10 at 11 01 07 AM"
src="https://github.com/user-attachments/assets/85e50709-a7bb-48da-9f0c-94d702144494"
/>
<img width="429" height="349" alt="Screenshot 2025-11-10 at 11 02 40 AM"
src="https://github.com/user-attachments/assets/a6dd5ac9-e9a1-4611-8bb1-5f7f8ed1726c"
/>


## Risk assessment

low

Finishes AUTH-1941 & EXEC-1770
Other labware do not have tickets associated.
# Overview
new motion planning from dynamic pipetting can trigger a zero move
length error in a new spot so that call needs to be added into the
try/except portion.
… endpoints (#20100)

Covers RQA-4839
Ensures that the camera device is always validated to exist first before any action is taken regarding any camera behavior anywhere.
#20100 ensures that configuring a camera usage setting 503s if the
camera is disconnected, but the default state is to render the camera as
`enabled` if we can't GET the camera usage settings. We should do the
exact opposite of that.
The old opentrons deploy actions would build the distributables as well
as deploy them; now that we're using the pypi-maintained deploy actions,
we need to build them explicitly (we can't use the ones we already built
because that happened in a different job aka vm).
# Overview

The JavaScript console for the ODD was filling up with log messages of:
```
[app//opt/opentrons-app/resources/app.asar/ui/assets/index-XXX.js] debug: Received action from main via IPC
--------------------------------------------------
▶ Object
```
which is not very helpful.

This PR is a small tweak to inline the action into the log message so
that you can see it without clicking on `▶ Object`, decluttering the
console.

#### Before:
<img width="1176" height="586" alt="image" src="https://github.com/user-attachments/assets/fb503f36-337a-4031-a026-2067db8df67f"/>

#### After:
<img width="1166" height="432" alt="image" src="https://github.com/user-attachments/assets/ec79376f-c692-4b1f-a9b4-b7bfcb7c7fab"/>

## Test Plan and Hands on Testing

Built the ODD and deployed it to AuthorshipPVT for hands-on testing.

## Risk assessment

Low.
# Overview

Specify Camera type based on robot type on peripherals card

## Test Plan and Hands on Testing

Smoke tested
<img width="390" height="172" alt="Screenshot 2025-11-10 at 11 54 37 AM"
src="https://github.com/user-attachments/assets/8b4368b2-7776-402c-8e68-38b8557e339b"
/>
<img width="341" height="166" alt="Screenshot 2025-11-10 at 11 55 18 AM"
src="https://github.com/user-attachments/assets/8b09ed20-0d1d-42cd-bee1-a415b14005c2"
/>

## Changelog

Conditionally displays camera type based on robot, added in camera icon


## Risk assessment

low

closes EXEC-2040
…20122)

# Overview
Plunger moves in the negative direction were broken because the unit
vector is negative and the plan motion function expects speed to always
be positive.
…20107)

Covers RQA-4842
Ensures we execute error image capture even if the original exception that prompted image capture gets interrupted by another exception.
The old opentrons deploy actions would build the distributables as well
as deploy them; now that we're using the pypi-maintained deploy actions,
we need to build them explicitly (we can't use the ones we already built
because that happened in a different job aka vm).

## Testing
Unfortunately there's not much we can do here, but this is already
broken and this is pretty straightforward.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.