Prep aspirate: batched as the STAR's, every refusal the model can decide before the first move - #1371
Merged
Merged
Conversation
rickwierenga
added this pull request to stack #1374
September 25, 2026 12:42
rickwierenga
force-pushed
the
prep-aspirate-batched
branch
4 times, most recently
from
September 25, 2026 13:18
50ea895 to
cb8c227
Compare
rickwierenga
removed this pull request from stack #1374
September 25, 2026 13:19
rickwierenga
added this pull request to stack #1375
September 25, 2026 13:19
…ide before the first move The Prep's aspirate sent every container in one command at its cavity bottom's X, whatever the X, took its own argument names, and found a refusal only once the channels had moved. It now takes the STAR's names and order, plans the containers into batches by X (one LLD category a command), and checks every batch - lists, channels, reach, flow rates, clot heights, what each container holds and each tip has room for - before sending anything. A missing liquid height comes from the tracked volume, channels sharing a container spread across it, and the tip follows the container's profile, or a surface_following_distance scaled from it. It also takes piston_volumes, clld_sensitivity, immersion_depths and pre_mixes as the STAR does. A flow rate of 0 is refused, a blow-out of 0 is sent as given, a clot height other than 0 is refused until the check is verified, and a pressure LLD without p_lld is refused rather than sent seeking at 0 uL/s. A tip still holding liquid is dropped with a warning. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
rickwierenga
force-pushed
the
prep-aspirate-batched
branch
from
September 26, 2026 21:32
cb8c227 to
bf94c26
Compare
rickwierenga
approved these changes
Sep 26, 2026
BioCam
added a commit
to BioCam/pylabrobot
that referenced
this pull request
Sep 27, 2026
… STAR 96-head PyLabRobot#1372/PyLabRobot#1373, VolumeTracker PyLabRobot#1377 v1 keeps its own code where it has moved on: the three-layer aspirate and dispense, the surface following rule, head8's auto_surface_following, the 96-head's layout, the resolver. From main, as decided in review: the Prep second session private as `_second_io` and always on with a host, Well-only cross-section and bottom types, the aspirate tests' command check, the reworded docstrings, and the rollback test. Legacy is main's again, but for `_get_core_x` reading the holder's centre (PyLabRobot#1389), and the 1000 uL holder's tools stand on its centre. Duplicates the merge made are resolved. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
A Prep aspiration took one channel's firmware struct; nothing aspirated from containers, and nothing was refused before the device was.
aspirate(containers, volumes, ...)takes the STAR's argument names and order, batches the containers over the channels, and aspirates each batch with surface following, clot heights, pre-mixes and flow/blow-out checks; every refusal the model can decide comes before the first move.p_lld, or a seek outside 1–630 uL/s, is refused.LLDMode.ZTOUCHfor aspirate follows after it has run on a device.Tests: the aspirate frames (a golden-frame test over 21 calls, byte-identical to the driver this is extracted from), batching, refusals, surface following, mixes.
🤖 Generated with Claude Code