Skip to content

Conversation

@jbleon95
Copy link
Contributor

Overview

In RESC-513, a customer reported a magnetic module not appearing on the deck layout or in LPC after updating from robot release 8.5.0 to 8.7.0.

Upon further investigation, the problem was found to be related to the refactor of updating PE state from the command results to StateUpdate handling. The change was made in #18639 but the corresponding updates to the legacy command mapper were not made. This has the effect of breaking anything that relies on that module field of the analysis results to be filled, which most obviously are the deck layout and LPC.

The fix for this is putting in the legacy command mapper the correct state update, which was already being done for pipette and labware commands.

Test Plan and Hands on Testing

The customer's protocol in the linked ticket was tested, but this minimal reproducible protocol was tested too and now works as expected:

requirements = {
    "robotType": "OT-2",
    "apiLevel": "2.8",
}

metadata = {
    "protocolName":'OT-2 module loading test',
}

def run(protocol_context):
    tiprack_1 = protocol_context.load_labware('opentrons_96_tiprack_300ul', 8)
    tiprack_2 = protocol_context.load_labware('opentrons_96_tiprack_300ul', 9)

    pipette = protocol_context.load_instrument('p300_multi_gen2', 'left', tip_racks=[tiprack_1, tiprack_2])

    magdeck = protocol_context.load_module('magnetic module gen2', 7)
    mag_plate = magdeck.load_labware('armadillo_96_wellplate_200ul_pcr_full_skirt')
    heater_shaker = protocol_context.load_module('temperatureModuleV2', 1)

    pipette.pick_up_tip()
    pipette.aspirate(50, mag_plate.wells()[0].top(-1))
    pipette.dispense()
    pipette.drop_tip()

Changelog

  • call set_load_module on StateUpdate in legacy command mapper _map_module_load

Review requests

Risk assessment

Low, this only affects OT-2 protocols on versions 2.13 and below and this fix follows the existing pattern we have for pipette and labware loads, which do work on older versions.

Copy link
Member

@sfoster1 sfoster1 left a comment

Choose a reason for hiding this comment

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

That looks good to me. Are there any remaining command that get mapped without a state update for whatever reason?

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.

Ahhh, yeah, this makes sense. Sorry for the hassle, and thank you for fixing!

Copy link
Contributor

@SyntaxColoring SyntaxColoring left a comment

Choose a reason for hiding this comment

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

Thank you! One note about requested_model. Otherwise LGTM, assuming the analysis snapshot tests get healed to add the missing entries back into modules.

@jbleon95 jbleon95 added the gen-analyses-snapshot-pr Generate a healing PR if the analyses snapshot test fails label Nov 21, 2025
@github-actions
Copy link
Contributor

A PR has been opened to address analyses snapshot changes. Please review the changes here: #20215

…apshots (#20215)

This PR was requested on the PR
#20210

Co-authored-by: jbleon95 <[email protected]>
@jbleon95 jbleon95 removed the gen-analyses-snapshot-pr Generate a healing PR if the analyses snapshot test fails label Nov 21, 2025
@jbleon95 jbleon95 changed the title correctly fill in StateUpdate when mapping legacy module loads fix(api): use StateUpdate when mapping legacy module loads Nov 21, 2025
@jbleon95 jbleon95 merged commit 02e4ce8 into chore_release-8.8.0 Nov 21, 2025
50 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.

5 participants