Skip to content

Prep aspirate: batched as the STAR's, every refusal the model can decide before the first move - #1371

Merged
rickwierenga merged 1 commit into
mainfrom
prep-aspirate-batched
Sep 26, 2026
Merged

rickwierenga merged 1 commit into
mainfrom
prep-aspirate-batched

Conversation

@BioCam

@BioCam BioCam commented Sep 25, 2026

Copy link
Copy Markdown
Collaborator

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.
  • A tip that is dropped while it holds liquid is a warning.
  • LLD aspirates without capacitive LLD send the firmware's default pLLD block (a non-default block seeking at 0 uL/s was sent before); PRESSURE without p_lld, or a seek outside 1–630 uL/s, is refused.
  • LLDMode.ZTOUCH for 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

@BioCam
BioCam requested a review from a team as a code owner September 25, 2026 07:26
@rickwierenga
rickwierenga added this pull request to stack #1374 September 25, 2026 12:42
@rickwierenga
rickwierenga force-pushed the prep-aspirate-batched branch 4 times, most recently from 50ea895 to cb8c227 Compare September 25, 2026 13:18
@rickwierenga
rickwierenga removed this pull request from stack #1374 September 25, 2026 13:19
@rickwierenga
rickwierenga added this pull request to stack #1375 September 25, 2026 13:19
Base automatically changed from prep-container-segments to main September 26, 2026 21:32
…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
rickwierenga merged commit 7b0187a into main Sep 26, 2026
3 of 20 checks passed
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>
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