Pyro / protocol-subprocess smoke (Flex internal 4.0.0-alpha.10)
Validated suite for Pyro5 IPC on KansasFLEX after installing internal ot3@4.0.0-alpha.10 (hardware + protocol subprocess flags default on). Covers systemd/nameserver health, restart recovery failures, HTTP hardware paths, door events, protocol upload/analyze/create-run, process teardown leak, and a live P50 tip pickup/return smoke. Full narrative: docs/pyro-testing.md. Parent bug epic: RQA-5786.
ot3@4.0.0-alpha.94.0.0-alpha.10Harness commands
uv run flex-test inspect uv run flex-test probe --no-picture ALLOW_MUTATIONS=true uv run flex-test put 4.0.0-alpha.10 --channel internal ssh -i ~/.ssh/robot_key -o IdentitiesOnly=yes root@$ROBOT_HOST
Tests
| ID | Plan |
|---|---|
| A1 Systemd pyro stack active pass |
Nameserver must precede hardware-api and robot-server for IPC.
|
| A2 OT3API registered on nameserver pass |
Hardware entrypoint notifies ready only after OT3API is listed.
|
| A3 Health OK with HW proxy path pass |
robot-server identify_hardware_process depends on NS + OT3API.
|
| A4 Nameserver restart recovery fail |
Producers should re-register or dependents should fail clearly.
|
| A5 Hardware-api restart reattach fail |
robot-server must refresh OT3API proxy after HW daemon URI changes.
|
| B1 Instruments and subsystems via HTTP pass |
Lower-line IPC must serve robot-server instrument inventory.
|
| B2 Module nested proxies skipped |
pyro_behavior attached_modules should expose module proxies.
|
| B3 Door open/close via HTTP pass |
Door watcher / HW door events must surface through robot-server.
|
| C1 Create run registers ot-protocol pass |
Run lifetime should own a protocol subprocess + NS name.
|
| C2 Protocol analysis completes pass |
Analysis path uses simulating / subprocess machinery.
|
| C3a Idle run actions contract pass |
Actions must cross robot-server to ot-protocol Pyro boundary.
|
| C3b Live tip smoke play pass |
Play must execute motion commands across the protocol subprocess boundary.
|
| C6 Uncurrent tears down process fail |
Spec: protocol process lifetime matches run record create to uncurrent.
|
| D1 Door enum via HTTP pass |
DoorState must serialize through robot-server product path.
|
| D2 DoorState via Proxy with registry pass |
Specialty enums require Opentrons Serpent registry on the client.
|
| D3 attached_instruments with registry pass |
NonBuiltinKeyDictWrapper / Mount keys must deserialize with registry.
|
| D4 Run currentState payload pass |
StateSummary-shaped HTTP payload must load for a current run.
|
| D4b Legacy StateSummary persistence fail |
Older stored StateSummary JSON must still validate or migrate.
|
| D5a Analysis command slices pass |
Pydantic command models must round-trip on analysis path.
|
| D5b Succeeded run command history fail |
Executed run commands must persist and list via HTTP.
|
| D6 Invalid request error surface pass |
Error responses must serialize cleanly over HTTP.
|
| D7 Subsystems status healthy pass |
Regression check for RQA-5788 unhashable dict on subsystem path.
|
| D8 Raw Proxy without registry (negative) pass |
Specialty types must fail closed without registry (not silent wrong values).
|