Opentrons · Flex harness

flex-testing-agent

Release-driven robot test suggestions with live Jira and monorepo PR links.

← All suggestions

suggested · updated 2026-08-19

Flex 10.0.0-alpha.4 release-delta validation (chore_release-10.0.0 since alpha.3)

Three monorepo commits on chore_release-10.0.0 between v10.0.0-alpha.3 and v10.0.0-alpha.4 (PRs #22275, #22282, #22284). oe-core has no delta between those tags. KansasFLEX is on v10.0.0-alpha.4. Close RQA-5913 after the heater-shaker livedata check; App-only RQA-5900 and RQA-5895 still need a Desktop App pass before close.

Monorepo branch chore_release-10.0.0
Compared tov10.0.0-alpha.3
Robot OS10.0.0-alpha.4
Hardware flex (KansasFLEX on v10.0.0-alpha.4), heaterShakerModuleV1 (or temp / TC / vacuum for extra livedata coverage), Desktop App built from chore_release-10.0.0 at or after

Harness commands

uv run flex-test inspect
uv run flex-test status
uv run flex-test probe --no-picture

Tests

IDPlan
I0
Confirm KansasFLEX is on v10.0.0-alpha.4
pass

Robot OS tag is the gate for the API livedata fix.

  • uv run flex-test inspect → Installed software version v10.0.0-alpha.4, API 10.0.0-alpha.4.
  • oe-core v10.0.0-alpha.3..v10.0.0-alpha.4 is empty (retag only).

2026-08-19 KansasFLEX 192.168.0.21; CRS on; health 200.

F1
Heater-shaker livedata is JSON-native strings (RQA-5913 /
pass

Nested StrEnums in module live data failed Pyro serialization. The fix stores .value strings (status, latch, speed, temperature).

  • GET /modules (flex-test probe or FlexRobot.session.get_json).
  • Heater-shaker data.status / labwareLatchStatus / speedStatus / temperatureStatus are plain JSON strings, not enum objects.
  • Request does not 500 on nested live data.

2026-08-19 HSDVT22041138 heaterShakerModuleType: status=idle, labwareLatchStatus=idle_open, speedStatus=idle, temperatureStatus=idle, currentSpeed=0, currentTemperature=25.85. Evidence also on Jira comment. Ready to close RQA-5913 (transition not applied from this session).

F1b
diskDetails runStartLimit matches gate (RQA-5848 regression)
pass

Closed alpha.1 field/gate mismatch; confirm alpha.4 still reports 2048.

  • GET /health → disk_details.runStartLimitFreeSpaceMb == 2048
  • isDiskSpaceBelowRunStartLimit false at ~3.5GB free

2026-08-19 KansasFLEX: runStartLimitFreeSpaceMb=2048.0, available≈3494MB.

F1c
Uncurrent run retains commands over HTTP + audit zip (RQA-5843)
pass

Pyro clear used to stub empty commands; Ready-for-QA ticket.

  • GET /runs/{id} for a succeeded uncurrent run
  • GET /runs/{id}/commands non-empty
  • Map logPeriodId; flex-test audit download <id>; unzip run JSON commands.data

2026-08-19: run 91784348… logPeriodId=39 → audit zip has 9 commands (home/loadPipette/comment/…). Period 41 has 19 commands. Empty audit commands only when HTTP also had 0 (stopped before play). Ready to close.

F2
Download audit logs copy (RQA-5900 /
skipped

App/ODD modal no longer says logs are unsaved and unrecoverable.

  • Desktop App on a CRS-on robot: trigger Download audit logs.
  • Body is 'Once a protocol run is complete, audit logs must be downloaded locally before continuing.'
  • Primary button is 'Download now' (not the old heading text).
  • Does not claim data cannot be recovered after the session ends.

App-only. Ships in Desktop App, not robot HTTP. Confirm then close RQA-5900.

F3
Auto-commit update no false transport error (RQA-5895 /
skipped

App used to treat HTTP drops during auto-commit/reboot as failure.

  • Use a Desktop App build that includes #22284.
  • Run a Flex software update (zip or banner) on CRS and non-CRS if possible.
  • Expect the App to keep polling / rediscover; success when the robot is on the target version.
  • Fail only if the robot reports an error, never left awaiting-file, or comes back on the wrong version.

App-only. PR test plan already checked zip updates on CRS and non-CRS; banner path still unchecked on the PR. Do not close from robot OS alone.