Skip to content

refactor(step-generation): drop tip appropiately #18658

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 6 commits into from
Jun 20, 2025

Conversation

jerader
Copy link
Collaborator

@jerader jerader commented Jun 17, 2025

Overview

Note: Jeremy's PR is stil wrapping up but the arg name and its usage in this PR should be correct. You just can't test it with an app built off of this branch.

Now, we emit drop_tip at the end of the step based off of the subsequent transfer step, and if there is no subsequent transfer step, we will emit a final drop tip.

Test Plan and Hands on Testing

Review code and upload a test protocol to the app, should pass analysis with a subsequent step new tip of never

Test the protocol you make on Jeremy's PR branch.

import json
from opentrons import protocol_api, types

metadata = {
    "created": "2025-06-20T15:41:00.846Z",
    "lastModified": "2025-06-20T15:47:14.313Z",
    "protocolDesigner": "8.4.4",
    "source": "Protocol Designer",
}

requirements = {"robotType": "Flex", "apiLevel": "2.24"}

def run(protocol: protocol_api.ProtocolContext) -> None:
    # Load Labware:
    tip_rack_1 = protocol.load_labware(
        "opentrons_flex_96_tiprack_50ul",
        location="C2",
        namespace="opentrons",
    )
    well_plate_1 = protocol.load_labware(
        "biorad_96_wellplate_200ul_pcr",
        location="D1",
        namespace="opentrons",
    )

    # Load Pipettes:
    pipette_left = protocol.load_instrument("flex_1channel_50", "left", tip_racks=[tip_rack_1])

    # Load Trash Bins:
    trash_bin_1 = protocol.load_trash_bin("A3")

    # PROTOCOL STEPS

    # Step 1:
    pipette_left.transfer_with_liquid_class(
        volume=10,
        source=[well_plate_1["A1"]],
        dest=[well_plate_1["H12"]],
        new_tip="once",
        trash_location=trash_bin_1,
        keep_last_tip=True,
        liquid_class=protocol.define_liquid_class(
            name="transfer_step_1",
            properties={"flex_1channel_50": {"opentrons/opentrons_flex_96_tiprack_50ul/1": {
                "aspirate": {
                    "aspirate_position": {
                        "offset": {"x": 0, "y": 0, "z": 2},
                        "position_reference": "well-bottom",
                    },
                    "flow_rate_by_volume": [(0, 24)],
                    "pre_wet": False,
                    "correction_by_volume": [(0, 0)],
                    "delay": {"enabled": False},
                    "mix": {"enabled": False},
                    "submerge": {
                        "delay": {"enabled": False},
                        "speed": 100,
                        "start_position": {
                            "offset": {"x": 0, "y": 0, "z": 2},
                            "position_reference": "well-top",
                        },
                    },
                    "retract": {
                        "air_gap_by_volume": [(0, 0)],
                        "delay": {"enabled": False},
                        "end_position": {
                            "offset": {"x": 0, "y": 0, "z": 2},
                            "position_reference": "well-top",
                        },
                        "speed": 50,
                        "touch_tip": {"enabled": False},
                    },
                },
                "dispense": {
                    "dispense_position": {
                        "offset": {"x": 0, "y": 0, "z": 2},
                        "position_reference": "well-bottom",
                    },
                    "push_out_by_volume": [(0, 2)],
                    "flow_rate_by_volume": [(0, 50)],
                    "correction_by_volume": [(0, 0)],
                    "delay": {"enabled": False},
                    "mix": {"enabled": False},
                    "submerge": {
                        "delay": {"enabled": False},
                        "speed": 100,
                        "start_position": {
                            "offset": {"x": 0, "y": 0, "z": 2},
                            "position_reference": "well-top",
                        },
                    },
                    "retract": {
                        "air_gap_by_volume": [(0, 0)],
                        "delay": {"enabled": False},
                        "end_position": {
                            "offset": {"x": 0, "y": 0, "z": 2},
                            "position_reference": "well-top",
                        },
                        "speed": 50,
                        "touch_tip": {"enabled": False},
                        "blowout": {"enabled": False},
                    },
                },
            }}},
        ),
    )
    pipette_left.drop_tip()

    # Step 2:
    pipette_left.distribute_with_liquid_class(
        volume=10,
        source=[well_plate_1["A1"]],
        dest=[well_plate_1["G12"], well_plate_1["H12"]],
        new_tip="once",
        trash_location=trash_bin_1,
        keep_last_tip=True,
        liquid_class=protocol.define_liquid_class(
            name="distribute_step_2",
            properties={"flex_1channel_50": {"opentrons/opentrons_flex_96_tiprack_50ul/1": {
                "aspirate": {
                    "aspirate_position": {
                        "offset": {"x": 0, "y": 0, "z": 2},
                        "position_reference": "well-bottom",
                    },
                    "flow_rate_by_volume": [(0, 24)],
                    "pre_wet": False,
                    "correction_by_volume": [(0, 0)],
                    "delay": {"enabled": False},
                    "mix": {"enabled": False},
                    "submerge": {
                        "delay": {"enabled": False},
                        "speed": 100,
                        "start_position": {
                            "offset": {"x": 0, "y": 0, "z": 2},
                            "position_reference": "well-top",
                        },
                    },
                    "retract": {
                        "air_gap_by_volume": [(0, 0)],
                        "delay": {"enabled": False},
                        "end_position": {
                            "offset": {"x": 0, "y": 0, "z": 2},
                            "position_reference": "well-top",
                        },
                        "speed": 50,
                        "touch_tip": {"enabled": False},
                    },
                },
                "dispense": {
                    "dispense_position": {
                        "offset": {"x": 0, "y": 0, "z": 2},
                        "position_reference": "well-bottom",
                    },
                    "push_out_by_volume": [(0, 2)],
                    "flow_rate_by_volume": [(0, 50)],
                    "correction_by_volume": [(0, 0)],
                    "delay": {"enabled": False},
                    "mix": {"enabled": False},
                    "submerge": {
                        "delay": {"enabled": False},
                        "speed": 100,
                        "start_position": {
                            "offset": {"x": 0, "y": 0, "z": 2},
                            "position_reference": "well-top",
                        },
                    },
                    "retract": {
                        "air_gap_by_volume": [(0, 0)],
                        "delay": {"enabled": False},
                        "end_position": {
                            "offset": {"x": 0, "y": 0, "z": 2},
                            "position_reference": "well-top",
                        },
                        "speed": 50,
                        "touch_tip": {"enabled": False},
                        "blowout": {"enabled": False},
                        "conditioning_by_volume": [(0, 0)],
                        "disposal_by_volume": [(0, 0)],
                    },
                },
            }}},
        ),
    )
    pipette_left.drop_tip()

    # Step 3:
    pipette_left.consolidate_with_liquid_class(
        volume=10,
        source=[well_plate_1["A12"], well_plate_1["H12"]],
        dest=[well_plate_1["D8"]],
        new_tip="once",
        trash_location=trash_bin_1,
        keep_last_tip=True,
        liquid_class=protocol.define_liquid_class(
            name="consolidate_step_3",
            properties={"flex_1channel_50": {"opentrons/opentrons_flex_96_tiprack_50ul/1": {
                "aspirate": {
                    "aspirate_position": {
                        "offset": {"x": 0, "y": 0, "z": 2},
                        "position_reference": "well-bottom",
                    },
                    "flow_rate_by_volume": [(0, 24)],
                    "pre_wet": False,
                    "correction_by_volume": [(0, 0)],
                    "delay": {"enabled": False},
                    "mix": {"enabled": False},
                    "submerge": {
                        "delay": {"enabled": False},
                        "speed": 100,
                        "start_position": {
                            "offset": {"x": 0, "y": 0, "z": 2},
                            "position_reference": "well-top",
                        },
                    },
                    "retract": {
                        "air_gap_by_volume": [(0, 0)],
                        "delay": {"enabled": False},
                        "end_position": {
                            "offset": {"x": 0, "y": 0, "z": 2},
                            "position_reference": "well-top",
                        },
                        "speed": 50,
                        "touch_tip": {"enabled": False},
                    },
                },
                "dispense": {
                    "dispense_position": {
                        "offset": {"x": 0, "y": 0, "z": 2},
                        "position_reference": "well-bottom",
                    },
                    "push_out_by_volume": [(0, 2)],
                    "flow_rate_by_volume": [(0, 50)],
                    "correction_by_volume": [(0, 0)],
                    "delay": {"enabled": False},
                    "mix": {"enabled": False},
                    "submerge": {
                        "delay": {"enabled": False},
                        "speed": 100,
                        "start_position": {
                            "offset": {"x": 0, "y": 0, "z": 2},
                            "position_reference": "well-top",
                        },
                    },
                    "retract": {
                        "air_gap_by_volume": [(0, 0)],
                        "delay": {"enabled": False},
                        "end_position": {
                            "offset": {"x": 0, "y": 0, "z": 2},
                            "position_reference": "well-top",
                        },
                        "speed": 50,
                        "touch_tip": {"enabled": False},
                        "blowout": {"enabled": False},
                    },
                },
            }}},
        ),
    )
    pipette_left.drop_tip()

DESIGNER_APPLICATION = """{"robot":{"model":"OT-3 Standard"},"designerApplication":{"name":"opentrons/protocol-designer","version":"8.5.0","data":{"pipetteTiprackAssignments":{"c3e526a2-705a-417b-831e-dc4e274b64ae":["opentrons/opentrons_flex_96_tiprack_50ul/1"]},"dismissedWarnings":{"form":[],"timeline":[]},"ingredients":{},"ingredLocations":{},"savedStepForms":{"__INITIAL_DECK_SETUP_STEP__":{"labwareLocationUpdate":{"b5a123e4-0066-4961-bff5-c0cd4d4b7081:opentrons/opentrons_flex_96_tiprack_50ul/1":"C2","ce0bac39-b564-4782-ac4a-c5882b134b5d:opentrons/biorad_96_wellplate_200ul_pcr/3":"D1"},"moduleLocationUpdate":{},"pipetteLocationUpdate":{"c3e526a2-705a-417b-831e-dc4e274b64ae":"left"},"trashBinLocationUpdate":{"4c3f0ad2-5fa1-4ada-9041-0a6d0bb7877c:trashBin":"cutoutA3"},"wasteChuteLocationUpdate":{},"stagingAreaLocationUpdate":{},"gripperLocationUpdate":{},"stepType":"manualIntervention","id":"__INITIAL_DECK_SETUP_STEP__"},"06275067-bd0e-41d2-ad59-94222f4692d1":{"aspirate_airGap_checkbox":false,"aspirate_airGap_volume":"","aspirate_delay_checkbox":false,"aspirate_delay_seconds":"1","aspirate_flowRate":"24","aspirate_labware":"ce0bac39-b564-4782-ac4a-c5882b134b5d:opentrons/biorad_96_wellplate_200ul_pcr/3","aspirate_mix_checkbox":false,"aspirate_mix_times":"","aspirate_mix_volume":"","aspirate_mmFromBottom":2,"aspirate_position_reference":"well-bottom","aspirate_retract_delay_seconds":"","aspirate_retract_mmFromBottom":2,"aspirate_retract_speed":"50","aspirate_retract_x_position":0,"aspirate_retract_y_position":0,"aspirate_retract_position_reference":"well-top","aspirate_submerge_delay_seconds":"","aspirate_submerge_speed":"100","aspirate_submerge_mmFromBottom":2,"aspirate_submerge_x_position":0,"aspirate_submerge_y_position":0,"aspirate_submerge_position_reference":"well-top","aspirate_touchTip_checkbox":false,"aspirate_touchTip_mmFromTop":-1,"aspirate_touchTip_speed":"30","aspirate_touchTip_mmFromEdge":"0.5","aspirate_wellOrder_first":"t2b","aspirate_wellOrder_second":"l2r","aspirate_wells_grouped":false,"aspirate_wells":["A1"],"aspirate_x_position":0,"aspirate_y_position":0,"blowout_checkbox":false,"blowout_flowRate":"null","blowout_location":null,"changeTip":"always","conditioning_checkbox":false,"conditioning_volume":"","dispense_airGap_checkbox":false,"dispense_airGap_volume":"","dispense_delay_checkbox":false,"dispense_delay_seconds":"1","dispense_flowRate":"50","dispense_labware":"ce0bac39-b564-4782-ac4a-c5882b134b5d:opentrons/biorad_96_wellplate_200ul_pcr/3","dispense_mix_checkbox":false,"dispense_mix_times":"","dispense_mix_volume":"","dispense_mmFromBottom":2,"dispense_position_reference":"well-bottom","dispense_retract_delay_seconds":"","dispense_retract_mmFromBottom":2,"dispense_retract_speed":"50","dispense_retract_x_position":0,"dispense_retract_y_position":0,"dispense_retract_position_reference":"well-top","dispense_submerge_delay_seconds":"","dispense_submerge_speed":"100","dispense_submerge_mmFromBottom":2,"dispense_submerge_x_position":0,"dispense_submerge_y_position":0,"dispense_submerge_position_reference":"well-top","dispense_touchTip_checkbox":false,"dispense_touchTip_mmFromTop":-1,"dispense_touchTip_speed":"30","dispense_touchTip_mmFromEdge":"0.5","dispense_wellOrder_first":"t2b","dispense_wellOrder_second":"l2r","dispense_wells":["H12"],"dispense_x_position":0,"dispense_y_position":0,"disposalVolume_checkbox":false,"disposalVolume_volume":"","dropTip_location":"4c3f0ad2-5fa1-4ada-9041-0a6d0bb7877c:trashBin","liquidClassesSupported":true,"liquidClass":"none","nozzles":null,"path":"single","pipette":"c3e526a2-705a-417b-831e-dc4e274b64ae","preWetTip":false,"pushOut_checkbox":true,"pushOut_volume":"2","tipRack":"opentrons/opentrons_flex_96_tiprack_50ul/1","volume":"10","id":"06275067-bd0e-41d2-ad59-94222f4692d1","stepType":"moveLiquid","stepName":"transfer","stepDetails":"","stepNumber":0},"6e142ba4-09e2-4fd8-b75e-8050ee8d14bf":{"aspirate_airGap_checkbox":false,"aspirate_airGap_volume":"","aspirate_delay_checkbox":false,"aspirate_delay_seconds":"1","aspirate_flowRate":"24","aspirate_labware":"ce0bac39-b564-4782-ac4a-c5882b134b5d:opentrons/biorad_96_wellplate_200ul_pcr/3","aspirate_mix_checkbox":false,"aspirate_mix_times":"","aspirate_mix_volume":"","aspirate_mmFromBottom":2,"aspirate_position_reference":"well-bottom","aspirate_retract_delay_seconds":"","aspirate_retract_mmFromBottom":2,"aspirate_retract_speed":"50","aspirate_retract_x_position":0,"aspirate_retract_y_position":0,"aspirate_retract_position_reference":"well-top","aspirate_submerge_delay_seconds":"","aspirate_submerge_speed":"100","aspirate_submerge_mmFromBottom":2,"aspirate_submerge_x_position":0,"aspirate_submerge_y_position":0,"aspirate_submerge_position_reference":"well-top","aspirate_touchTip_checkbox":false,"aspirate_touchTip_mmFromTop":-1,"aspirate_touchTip_speed":"30","aspirate_touchTip_mmFromEdge":"0.5","aspirate_wellOrder_first":"t2b","aspirate_wellOrder_second":"l2r","aspirate_wells_grouped":false,"aspirate_wells":["A1"],"aspirate_x_position":0,"aspirate_y_position":0,"blowout_checkbox":false,"blowout_flowRate":"null","blowout_location":null,"changeTip":"once","conditioning_checkbox":false,"conditioning_volume":"","dispense_airGap_checkbox":false,"dispense_airGap_volume":"","dispense_delay_checkbox":false,"dispense_delay_seconds":"1","dispense_flowRate":"50","dispense_labware":"ce0bac39-b564-4782-ac4a-c5882b134b5d:opentrons/biorad_96_wellplate_200ul_pcr/3","dispense_mix_checkbox":false,"dispense_mix_times":null,"dispense_mix_volume":null,"dispense_mmFromBottom":2,"dispense_position_reference":"well-bottom","dispense_retract_delay_seconds":"","dispense_retract_mmFromBottom":2,"dispense_retract_speed":"50","dispense_retract_x_position":0,"dispense_retract_y_position":0,"dispense_retract_position_reference":"well-top","dispense_submerge_delay_seconds":"","dispense_submerge_speed":"100","dispense_submerge_mmFromBottom":2,"dispense_submerge_x_position":0,"dispense_submerge_y_position":0,"dispense_submerge_position_reference":"well-top","dispense_touchTip_checkbox":false,"dispense_touchTip_mmFromTop":-1,"dispense_touchTip_speed":"30","dispense_touchTip_mmFromEdge":"0.5","dispense_wellOrder_first":"t2b","dispense_wellOrder_second":"l2r","dispense_wells":["G12","H12"],"dispense_x_position":0,"dispense_y_position":0,"disposalVolume_checkbox":false,"disposalVolume_volume":"","dropTip_location":"4c3f0ad2-5fa1-4ada-9041-0a6d0bb7877c:trashBin","liquidClassesSupported":true,"liquidClass":"none","nozzles":null,"path":"multiDispense","pipette":"c3e526a2-705a-417b-831e-dc4e274b64ae","preWetTip":false,"pushOut_checkbox":true,"pushOut_volume":"2","tipRack":"opentrons/opentrons_flex_96_tiprack_50ul/1","volume":"10","id":"6e142ba4-09e2-4fd8-b75e-8050ee8d14bf","stepType":"moveLiquid","stepName":"transfer","stepDetails":"","stepNumber":0},"865169dc-bc66-4650-8efd-bc858d343a18":{"aspirate_airGap_checkbox":false,"aspirate_airGap_volume":"","aspirate_delay_checkbox":false,"aspirate_delay_seconds":"1","aspirate_flowRate":"24","aspirate_labware":"ce0bac39-b564-4782-ac4a-c5882b134b5d:opentrons/biorad_96_wellplate_200ul_pcr/3","aspirate_mix_checkbox":false,"aspirate_mix_times":null,"aspirate_mix_volume":null,"aspirate_mmFromBottom":2,"aspirate_position_reference":"well-bottom","aspirate_retract_delay_seconds":"","aspirate_retract_mmFromBottom":2,"aspirate_retract_speed":"50","aspirate_retract_x_position":0,"aspirate_retract_y_position":0,"aspirate_retract_position_reference":"well-top","aspirate_submerge_delay_seconds":"","aspirate_submerge_speed":"100","aspirate_submerge_mmFromBottom":2,"aspirate_submerge_x_position":0,"aspirate_submerge_y_position":0,"aspirate_submerge_position_reference":"well-top","aspirate_touchTip_checkbox":false,"aspirate_touchTip_mmFromTop":-1,"aspirate_touchTip_speed":"30","aspirate_touchTip_mmFromEdge":"0.5","aspirate_wellOrder_first":"t2b","aspirate_wellOrder_second":"l2r","aspirate_wells_grouped":false,"aspirate_wells":["A12","H12"],"aspirate_x_position":0,"aspirate_y_position":0,"blowout_checkbox":false,"blowout_flowRate":"null","blowout_location":null,"changeTip":"never","conditioning_checkbox":false,"conditioning_volume":"","dispense_airGap_checkbox":false,"dispense_airGap_volume":"","dispense_delay_checkbox":false,"dispense_delay_seconds":"1","dispense_flowRate":"50","dispense_labware":"ce0bac39-b564-4782-ac4a-c5882b134b5d:opentrons/biorad_96_wellplate_200ul_pcr/3","dispense_mix_checkbox":false,"dispense_mix_times":"","dispense_mix_volume":"","dispense_mmFromBottom":2,"dispense_position_reference":"well-bottom","dispense_retract_delay_seconds":"","dispense_retract_mmFromBottom":2,"dispense_retract_speed":"50","dispense_retract_x_position":0,"dispense_retract_y_position":0,"dispense_retract_position_reference":"well-top","dispense_submerge_delay_seconds":"","dispense_submerge_speed":"100","dispense_submerge_mmFromBottom":2,"dispense_submerge_x_position":0,"dispense_submerge_y_position":0,"dispense_submerge_position_reference":"well-top","dispense_touchTip_checkbox":false,"dispense_touchTip_mmFromTop":-1,"dispense_touchTip_speed":"30","dispense_touchTip_mmFromEdge":"0.5","dispense_wellOrder_first":"t2b","dispense_wellOrder_second":"l2r","dispense_wells":["D8"],"dispense_x_position":0,"dispense_y_position":0,"disposalVolume_checkbox":false,"disposalVolume_volume":"","dropTip_location":"4c3f0ad2-5fa1-4ada-9041-0a6d0bb7877c:trashBin","liquidClassesSupported":true,"liquidClass":"none","nozzles":null,"path":"multiAspirate","pipette":"c3e526a2-705a-417b-831e-dc4e274b64ae","preWetTip":false,"pushOut_checkbox":true,"pushOut_volume":"2","tipRack":"opentrons/opentrons_flex_96_tiprack_50ul/1","volume":"10","id":"865169dc-bc66-4650-8efd-bc858d343a18","stepType":"moveLiquid","stepName":"transfer","stepDetails":"","stepNumber":0}},"orderedStepIds":["06275067-bd0e-41d2-ad59-94222f4692d1","6e142ba4-09e2-4fd8-b75e-8050ee8d14bf","865169dc-bc66-4650-8efd-bc858d343a18"],"pipettes":{"c3e526a2-705a-417b-831e-dc4e274b64ae":{"pipetteName":"p50_single_flex"}},"modules":{},"labware":{"b5a123e4-0066-4961-bff5-c0cd4d4b7081:opentrons/opentrons_flex_96_tiprack_50ul/1":{"displayName":"Opentrons Flex 96 Tip Rack 50 µL","labwareDefURI":"opentrons/opentrons_flex_96_tiprack_50ul/1"},"ce0bac39-b564-4782-ac4a-c5882b134b5d:opentrons/biorad_96_wellplate_200ul_pcr/3":{"displayName":"Bio-Rad 96 Well Plate 200 µL PCR","labwareDefURI":"opentrons/biorad_96_wellplate_200ul_pcr/3"}}}},"metadata":{"protocolName":"","author":"","description":"","source":"Protocol Designer","created":1750434060846,"lastModified":1750434434313}}"""

Changelog

  • add arg to compound pipetting commands and drop tip ingenerateRobotStateTimeline
  • fix tests

Risk assessment

low-ish

@jerader jerader added the DO NOT MERGE Indicates a PR should not be merged, even if there's a shiny green merge button available label Jun 17, 2025
@jerader jerader requested review from ddcc4 and ncdiehl11 June 17, 2025 16:51
Copy link

codecov bot commented Jun 17, 2025

Codecov Report

Attention: Patch coverage is 78.26087% with 5 lines in your changes missing coverage. Please review.

Project coverage is 57.10%. Comparing base (35cb888) to head (9411b80).
Report is 1 commits behind head on chore_release-pd-8.5.0.

Files with missing lines Patch % Lines
...organisms/ODD/QuickTransferFlow/utils/pythonDef.ts 76.47% 4 Missing ⚠️
...c/timelineMiddleware/generateRobotStateTimeline.ts 66.66% 1 Missing ⚠️
Additional details and impacted files

Impacted file tree graph

@@                     Coverage Diff                     @@
##           chore_release-pd-8.5.0   #18658       +/-   ##
===========================================================
+ Coverage                   24.11%   57.10%   +32.98%     
===========================================================
  Files                        3284     3256       -28     
  Lines                      285508   281367     -4141     
  Branches                    29082    34855     +5773     
===========================================================
+ Hits                        68853   160661    +91808     
+ Misses                     216631   120514    -96117     
- Partials                       24      192      +168     
Flag Coverage Δ
protocol-designer 19.05% <17.39%> (-0.09%) ⬇️
step-generation 5.20% <13.04%> (-0.07%) ⬇️

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

Files with missing lines Coverage Δ
...ration/src/commandCreators/compound/consolidate.ts 80.80% <100.00%> (+2.66%) ⬆️
...eration/src/commandCreators/compound/distribute.ts 76.00% <100.00%> (+2.59%) ⬆️
...eneration/src/commandCreators/compound/transfer.ts 86.19% <100.00%> (+0.21%) ⬆️
...c/timelineMiddleware/generateRobotStateTimeline.ts 75.23% <66.66%> (-0.22%) ⬇️
...organisms/ODD/QuickTransferFlow/utils/pythonDef.ts 44.79% <76.47%> (+44.79%) ⬆️

... and 1813 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.

@jerader jerader removed the DO NOT MERGE Indicates a PR should not be merged, even if there's a shiny green merge button available label Jun 20, 2025
@@ -61,8 +67,20 @@ export function quickTransferStepCommands(
? nonLoadCommandCreator.python ?? []
: []

let finalDropTipCommand = ''

if (Object.values(trashBinEntities).length > 0) {
Copy link
Collaborator Author

Choose a reason for hiding this comment

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

had to add this final drop tip command back since step-generation is shared between QT and PD. Technically, QT can emit keep_last_tip=False always since it doesn't support new_tip=never but since PD needs keep_last_tip=True and i didn't wanna have branching logic, i decided to just add this drop tip atomic command back.

@jerader jerader marked this pull request as ready for review June 20, 2025 16:40
@jerader jerader requested review from a team as code owners June 20, 2025 16:40
Copy link
Collaborator

@ddcc4 ddcc4 left a comment

Choose a reason for hiding this comment

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

See question below:

args.commandCreatorFnName === 'mix' || !willReuseTip
? curryCommandCreator
: curryWithoutPython

Copy link
Collaborator

Choose a reason for hiding this comment

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

So if willReuseTip==true, why do you want to emit a JSON dropTipInBlah but omit the Python drop_tip() command?

Copy link
Collaborator Author

@jerader jerader Jun 20, 2025

Choose a reason for hiding this comment

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

oooh this is a good catch! this only needs to emit curryCommandCreator now, i think. this logic is sort of remnants of when i removed emitting drop tip a few days ago 😓

@jerader jerader merged commit ed65587 into chore_release-pd-8.5.0 Jun 20, 2025
29 checks passed
@jerader jerader deleted the sg_drop-tip-eagerly branch June 20, 2025 20:31
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