Chestnut protospecs — campaign plan
Goal: draft one protospec per step of the Chestnut CFPS-to-SPR chain, in the “Chesnut Development” campaign.
Campaign: 34a42965-df1f-4b27-abe3-3b1eec1f136a (empty as of 2026-08-05).
Drafts: medra_robotics/protocols/chestnut/chestnut_protospecs.py
Tests: medra_robotics/tests/protocols/test_chestnut_protospecs.py
Sources read:
- Daily note
daily/2026-08-04.md(the five steps) - Notion “Chestnut Assays” and its four step pages
- Google Doc “CFPS → SPR Workflow v1.0” (the detailed protocol)
The chain
Each step ends in one hand-off plate. That plate is the input to the next step.
| Step | Operation | Hand-off plate |
|---|---|---|
| 1 | Q5 master mix assembly (manual, at the bench) | Master mix tube |
| 2 | Three-fragment overlap PCR, 19 µL mix + 1 µL template | PCR plate, 20 µL per well |
| 3 | Magnetic bead cleanup on the KingFisher | Purified DNA plate, 40 µL per well |
| 4 | Cell-free protein synthesis, 14 µL mix + 1 µL template | Crude protein plate, 15 µL per well |
| 5 | SPR kinetics on the Carterra LSA-XT | Kinetic dataset |
The same well map carries from the Twist plate to the Carterra. Sample identity comes from position. No re-barcoding happens between instruments.
Well map, identical in all four drafts: 94 samples in A1:G12 and H1:H10,
the sfGFP expression control in H11, and the no-template control in H12.
H12 takes master mix with every other well, but no template.
Decisions made
- Four protospecs, not five. Step 1 stays a bench task.
- Not deck-specific. The drafts are
ProtoSpecobjects, which request hardware by capability and compile against any deck that satisfies them. - Single-channel pipettes, deep-well sources. A single channel avoids the dead volume of filling eight troughs. Bulk reagents sit in two wells of a deep 96-well source plate, and each source feeds half the target plate.
- Bio-Rad CFX Opus 96 for both thermal steps. Step 2 runs the Q5 program. Step 4 runs 30 °C for 6 hours, then holds at 4 °C.
carterra_lsa_xtfor the SPR run. The arm loads the plates.- KingFisher is stage-then-pause. The protospec dispenses the bead, ethanol, and elution plates. Then it pauses. The operator carries the plates to the KingFisher, runs it, and returns the eluate plate.
- No QC inside any protospec. Fragment Analyzer, Qubit, and protein gel stay manual. They are off the campaign.
Two questions answered from the code
Protospecs are not parameterizable by sample count
RunArguments is a closed TypedDict with two keys: labchip_filename and
experiment_id. Both are specific to the LabChip and to ProSE. Runtime asserts
hold the three argument TypedDicts in sync.
Source: shared_py/shared_py/protoscript/models/actions/run_arguments.py.
A well-range argument is a code change, not authoring. It needs an edit to those
three TypedDicts, an edit to RUN_ARGUMENTS, and a run of
bin/generate-cloud-models. Well ranges are baked into each action today.
The drafts are written for a full 96-well plate. A pilot run is a change to the well-range constants at the top of the module.
The CFX Opus 96 is not a thermocycler in the protoscript type system
BioradCfxOpus96Protoscript inherits OrientedModuleProtoscript,
SystemModule, and RpaModuleBase. It does not carry ThermocyclerBase. Only
the Inheco ODTC and the Bio-Rad PTC Tempo carry that trait.
So the CFX cannot use thermocycler_pcr or thermocycler_hold_at_temperature.
Its only action is biorad_cfx_opus_96_cycle, which drives CFX Manager over
py_rpa from an authored protocol file.
That action carries no plate-type constraint in task generation, so the same call covers both steps with two different protocol files. The 30 °C hold and the 4 °C hold both live inside the step 4 protocol file, so the plate stays in the instrument for the whole incubation.
The cost of this choice: the specs now name the biorad_cfx_opus_96 entity
type. A deck with an ODTC but no CFX cannot run steps 2 and 4 without an edit.
What is still open
Protocol files do not exist yet
The drafts point at placeholder paths on the CFX workstation:
C:\MedraProtocols\Chestnut_Q5_Overlap_PCR.prclC:\MedraProtocols\Chestnut_CFPS_30C_6h.prclC:\MedraProtocols\Chestnut_96.pltd
The Carterra protocol name Chestnut_AntiHis_Capture_PDL1_Kinetics is also a
placeholder. All four must exist on the instrument before a run.
The Q5 program from the Google Doc: 98 °C for 30 s; then 35 cycles of 98 °C for 30 s, 63 °C for 30 s, and 72 °C for 75 s; then 72 °C for 60 s; then a hold.
SPR boundary was assumed, not decided
The step 5 draft dilutes crude CFPS, builds the sample and analyte plates, and runs the Carterra. It assumes the anti-His capture surface is already prepared.
Printing the biotin-anti-His layer and scouting the regeneration conditions are assay-development jobs done once, not per plate. That is why they sit outside the spec. Change this if the surface must be rebuilt per run.
The analyte series is a 3-fold cascade from A1 into A2:A8, which gives the
8 points the Google Doc asks for. serial_dilution pre-fills the target wells
with buffer itself, so those wells must start empty.
No single deck runs all four steps
- Carterra LSA-XT:
ml1-010,ml1-014. Both decks are bare — an arm, four well-plate holders, and the Carterra. Neither has a pipette. - Bio-Rad CFX Opus 96:
ml1-023only. - Lynx, ODTC, Fragment Analyzer, sealer, pipettes:
arg-m5.
Steps 2 and 4 need a deck with both a pipette and a CFX. No deck has that pair today. Step 5 needs plates to travel to a Carterra deck that cannot pipette them.
Two practical costs
- The step 3 ethanol fill is 192 single-channel dispenses of 175 µL. A plate washer or a Tempest does this far faster. The volume also forced the ethanol source to an Aquafill reservoir, because 34 mL does not fit in a deep 96-well plate.
- No part of this is hardware tested. The drafts construct, type-check, and pass their well-map and reagent-sufficiency tests. Nothing has run on a robot.
Next
- Author the two
.prclfiles and the Carterra protocol. - Decide which deck gains a pipette plus a CFX, or split step 2 and step 4 across decks.
- Compile each spec against a candidate deck and read the planning errors.