Skip to content

LiCONiC StoreX: migrate to the v1 device architecture - #1513

Open
rickwierenga wants to merge 6 commits into
mainfrom
liconic/integration-review
Open

rickwierenga wants to merge 6 commits into
mainfrom
liconic/integration-review

Conversation

@rickwierenga

@rickwierenga rickwierenga commented Oct 18, 2026 •

Copy link
Copy Markdown
Member

Add a direct pylabrobot.liconic.StoreX device that owns serial communication, calibrated cassettes, the loading tray, and the shovel. Fetch and store operations sequence the PLC primitives in Python and update inventory after each confirmed physical stage.

If a reply is lost or a transfer is cancelled, the driver retains the last confirmed inventory and records the uncertain stage. Further handling is blocked until explicit reconciliation; reconnecting does not clear that state or home the mechanism.

  • Serialize complete operations and command exchanges; validate framing, check faults during readiness polling, and never replay an uncertain write.
  • Support cassette-to-cassette transfers, gate and calibrated swap-station movement, barcode positioning with cleanup, and installed climate/shaker options.
  • Define climate register addresses and scales once, with consistent get_target_* / set_target_* methods.
  • Add the hello-world notebook, recovery guide and state diagram, API docs, and v1 registry entry.
  • Reuse the shared error descriptions and rack construction module from legacy while preserving its exception types/messages, factory signatures, serialized geometry, and calibration values.

Validation: 102 tests pass under python -m unittest across StoreX, legacy LiCONiC/incubator, and serial transport tests. StoreX tests use standard unittest mocks and explicit command/reply expectations, covering interrupted transfers, cancellation, concurrent operations, physical-state checks, and climate actual/target separation. A before/after comparison confirms identical output for all 36 legacy rack factories, 102 error mappings, and every legacy calibration value. Ruff, mypy, notebook validation, and the Sphinx build with warnings treated as errors pass.

Hardware validation is still pending; setup warns and the registry marks the device as needing testing. Cassette pitch and swap-home orientation require instrument-specific calibration. Inventory and recovery records are in memory; serialization and an independently tracked second transfer route are not supported.

@rickwierenga
rickwierenga requested a review from a team as a code owner October 18, 2026 18:21

This branch has not been deployed

No deployments
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.

1 participant