Skip to content

Conversation

@rclarke0
Copy link
Contributor

@rclarke0 rclarke0 commented Oct 7, 2025

Overview

Waste chute warnings are now separate pages during 96ch calibration flow.

This was changed because there are reports that the smaller warnings on other pages were easy to miss and caused collisions in the field.

NOTE: No images for these pages per this slack conversation: slack convo

Test Plan and Hands on Testing

  • Tested calibration flow on a robot with a 96ch with the deck configured with/without the waste chute to confirm the page flow
  • Tested Detach Left Pipette and Attach 96-Channel Pipette flow
  • Test 96ch detach flow to confirm page flow

Changelog

  • Changed warning banner on probe page to only display when a 96ch is attached and not a waste chute
Screenshot 2025-10-16 at 4 50 44 PM

Set up page includes a screwdriver because it is needed to remove the waste chute
Screenshot 2025-10-07 at 3 03 20 PM
Remove waste chute page
Screenshot 2025-10-17 at 12 18 31 PM

Re-attach waste chute page
Screenshot 2025-10-16 at 4 53 27 PM

Closes EXEC-1100

@rclarke0 rclarke0 requested review from mjhuff and smb2268 October 7, 2025 19:58
Copy link
Contributor

@mjhuff mjhuff left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Good start! I do think we have to handle more cases than just the FLOWS.CALIBRATE case though. See comment below.


export const AttachWasteChute = (
props: PipetteWizardStepProps
): JSX.Element | null => {
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
): JSX.Element | null => {
): JSX.Element => {

Copy link
Contributor

@mjhuff mjhuff Oct 7, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

While these changes cover the calibration case, I'm pretty sure we also need to cover the other flow type that involves calibration: FLOWS.ATTACH.

I believe we unfortunately also need to handle the cases that involve calibration or attachment or remove + attach in getPipetteWizardStepsForProtocol, too.

Effectively, any 96ch flow that has an ATTACH step needs to be considered.


export const RemoveWasteChute = (
props: PipetteWizardStepProps
): JSX.Element | null => {
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
): JSX.Element | null => {
): JSX.Element => {

@codecov
Copy link

codecov bot commented Oct 8, 2025

Codecov Report

❌ Patch coverage is 0% with 366 lines in your changes missing coverage. Please review.
✅ Project coverage is 25.49%. Comparing base (d659fa7) to head (3e0e29e).
⚠️ Report is 43 commits behind head on edge.

Files with missing lines Patch % Lines
...tteWizardFlows/getPipetteWizardStepsForProtocol.ts 0.00% 91 Missing ⚠️
app/src/organisms/PipetteWizardFlows/utils.tsx 0.00% 72 Missing ⚠️
...anisms/PipetteWizardFlows/getPipetteWizardSteps.ts 0.00% 60 Missing ⚠️
.../organisms/PipetteWizardFlows/RemoveWasteChute.tsx 0.00% 41 Missing ⚠️
.../organisms/PipetteWizardFlows/AttachWasteChute.tsx 0.00% 34 Missing ⚠️
...p/src/organisms/PipetteWizardFlows/AttachProbe.tsx 0.00% 29 Missing ⚠️
app/src/organisms/PipetteWizardFlows/index.tsx 0.00% 23 Missing ⚠️
...c/organisms/PipetteWizardFlows/BeforeBeginning.tsx 0.00% 14 Missing ⚠️
app/src/organisms/PipetteWizardFlows/constants.ts 0.00% 2 Missing ⚠️
Additional details and impacted files

Impacted file tree graph

@@            Coverage Diff             @@
##             edge   #19744      +/-   ##
==========================================
+ Coverage   23.89%   25.49%   +1.59%     
==========================================
  Files        3515     3526      +11     
  Lines      294480   296851    +2371     
  Branches    32833    32815      -18     
==========================================
+ Hits        70363    75673    +5310     
+ Misses     224096   221155    -2941     
- Partials       21       23       +2     
Flag Coverage Δ
app 3.12% <0.00%> (+2.81%) ⬆️

Flags with carried forward coverage won't be shown. Click here to find out more.

Files with missing lines Coverage Δ
app/src/organisms/PipetteWizardFlows/types.ts 100.00% <ø> (ø)
app/src/organisms/PipetteWizardFlows/constants.ts 0.00% <0.00%> (ø)
...c/organisms/PipetteWizardFlows/BeforeBeginning.tsx 0.00% <0.00%> (ø)
app/src/organisms/PipetteWizardFlows/index.tsx 0.00% <0.00%> (ø)
...p/src/organisms/PipetteWizardFlows/AttachProbe.tsx 0.00% <0.00%> (ø)
.../organisms/PipetteWizardFlows/AttachWasteChute.tsx 0.00% <0.00%> (ø)
.../organisms/PipetteWizardFlows/RemoveWasteChute.tsx 0.00% <0.00%> (ø)
...anisms/PipetteWizardFlows/getPipetteWizardSteps.ts 0.00% <0.00%> (ø)
app/src/organisms/PipetteWizardFlows/utils.tsx 0.00% <0.00%> (ø)
...tteWizardFlows/getPipetteWizardStepsForProtocol.ts 0.00% <0.00%> (ø)

... and 163 files with indirect coverage changes

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.
  • 📦 JS Bundle Analysis: Save yourself from yourself by tracking and limiting bundle sizes in JS merges.

Copy link
Contributor

@mjhuff mjhuff left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is really coming along. Unfortunately, there's a bug outside of your PR that's causing the functional changes introduced in this PR to break under some circumstances.

flowType,
},
]
if (selectedPipette === NINETY_SIX_CHANNEL && wasteChute) {
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ah ok, so there's a bug manifesting here that was not introduced in this PR but exposed by your code. selectedPipette is specifically the user selected pipette when going through an attachment flow. The user first starts by clicking a button that says "I'm attaching a 1ch, 8ch, or 96ch" pipette. selectedPipette refers to that selection.

When we do a calibrate flow, the user doesn't select a pipette - we're just calibrating the existing pipette. This should inject the correct pipette as the selected value, but it seems that in the desktop overflow menu specifically, we don't...we just appear to be injecting a 1ch/8ch selected always. So if you have a 96ch attached with a waste chute, the user always sees the steps that aren't specific to a 96ch with a waste chute.

Fortunately, we are correctly injecting the proper value elsewhere in our code, so we just need to copy that pattern for this overflow menu.

@rclarke0 rclarke0 requested a review from mjhuff October 15, 2025 14:01
Copy link
Contributor

@mjhuff mjhuff left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

One cleanup comment. I'd recommend smoke testing this PR before merging on a real robot, going through the different attach and detach 96ch cases just to be sure.

Nice work! 🚀

Comment on lines 57 to 62
if (
left_instrument != null &&
left_instrument.ok &&
left_instrument.mount !== 'left' &&
left_instrument.mount === 'left' &&
left_instrument.data?.channels === 96
) {
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Hm, on second thought, let's make this check:

const left_instrument = instrument[LEFT]
const right_instrument = instrument[RIGHT]

// if either instrument is not null AND has channels === 96

We historically have these mount issues where the 96ch is either on the left or the right mount and it isn't super consistent which mount it's on.

Copy link
Contributor

@mjhuff mjhuff left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Good stuff. The code looks like it all should work but would give it one last smoke test if you haven't already. Thank you!

const pipetteWizardStep = { mount, flowType, section: SECTIONS.ATTACH_PROBE }
const [showUnableToDetect, setShowUnableToDetect] = useState<boolean>(false)

const deckConfig = useNotifyDeckConfigurationQuery()
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Let's pass deckConfig from our coordinating component to save ourselves the extra network request.

@rclarke0 rclarke0 merged commit 4615c55 into edge Oct 20, 2025
37 of 38 checks passed
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.

2 participants