Skip to content

L3: zmqruntime runtime vocabulary, declared messages, launch policy and transport config - #1188

Merged
trissim merged 8 commits into
mainfrom
refactor/L3-zmqruntime-vocabulary
Oct 11, 2026
Merged

trissim merged 8 commits into
mainfrom
refactor/L3-zmqruntime-vocabulary

Conversation

@trissim

@trissim trissim commented Oct 10, 2026

Copy link
Copy Markdown
Collaborator

Surface L3: the zmqruntime runtime vocabulary (receipt: docs/refactor/consolidation-20261009/L3-zmqruntime-vocabulary.md, first commit).

Lockstep library PRs (not merged or tagged)

The submodules point at the PR branch heads for verification; repin to the release commits after publishing. Release order: zmqruntime 0.6.0 first; then PolyStore (uv lock cannot resolve before that, so its lock and CI wait for the publication) and pyqt-reactive (drop its CI source-candidate line).

OpenHCS changes

  • Bounds: zmqruntime>=0.6,<0.7, polystore>=0.6,<0.7, pyqt-reactive>=0.4,<0.5.
  • The execution client builds a declared ExecuteRequest (ZMQExecutionRequestBuilder.request()); ZMQRequest and five hand-assembled request_items are deleted. Status requests and the OMERO plugin's control requests are declared types.
  • OpenHCSZMQConfig is zmqruntime's ExecutionTransportConfig under OpenHCS's app_name and IPC prefix (the type name is kept, so saved UI preferences load unchanged).
  • The progress event's generic subject field is subject_id on the wire (zmqruntime's TaskProgress reads it); OpenHCS attribute names (plate_id, owned_wells, …) are G7's.
  • The pong enricher's restated queue projection is deleted (the lifecycle's queue is the one source); the generic subject projection is read by subject_id.
  • Guards: tests/unit/test_l3_zmqruntime_vocabulary_guards.py (no plate/well in zmqruntime; no message class writes its own codec; no pyqt_reactive.process_launch; OpenHCSZMQConfig declares only its names).

Other surfaces touched where a renamed API forced it: G5 — one import line in openhcs/processing/backends/lib_registry/registry_service.py (zmqruntime.process_launch). U1 — none in production; tests in tests/unit/pyqt_gui and tests/unit/agent updated for the renamed fields.

Verification (local, nice -n 19, -n 2)

  • zmqruntime pytest tests: 376 passed. pyqt-reactive: 605 passed. PolyStore: 594 passed, 2 skipped.
  • OpenHCS runtime/ZMQ/streaming/progress/viewer unit tests (≈2.2k tests across the affected files): every remaining failure also fails on origin/main (checked on a main snapshot: napari settlement/ROI, plate streaming, plate manager, artifact publication, config-consumer coverage, …).
  • tests/integration/test_main.py -k "disk and zmq": 12/12 (napari/fiji cases under a private headless Xvnc display).
  • Official30 parity over ZMQ (CI env incl. NPY_DISABLE_CPU_FEATURES=AVX512_SKX,X86_V4), after merging current main (G5): 29/30; the one failure is the known cp_tutorial_3d_monolayer (No image serialization format is registered for suffix '.pkl'). A first run also lost ExampleWoundHealing (no server-side failure logged); it is equivalent with 0 differences run alone and in the full rerun.

L3 · PRs ZMQRuntime#28, PyQT-reactive#20, PolyStore#37, this · guards 4/4 · production −270 +92 · tests −71 +152

🤖 Generated with Claude Code

trissim and others added 3 commits October 10, 2026 16:19
…sport config

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…and transport config

- Point zmqruntime, pyqt-reactive and PolyStore at their L3 PR branches
  (zmqruntime 0.6.0, pyqt-reactive 0.4.0, PolyStore 0.6.0) and bump the bounds.
- The execution client builds a declared ExecuteRequest; ZMQRequest and the
  hand-assembled request_items are deleted. Status and the OMERO plugin's
  control requests are declared types too.
- The progress event's generic subject field is subject_id on the wire.
- OpenHCSZMQConfig is zmqruntime's ExecutionTransportConfig under OpenHCS's
  app_name and IPC prefix; the generic fields moved to the library.
- Background process launch policy is imported from zmqruntime.
- The pong enricher's restated queue projection is deleted; the lifecycle's
  queue is the one source of queued executions.
- Guards: tests/unit/test_l3_zmqruntime_vocabulary_guards.py.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Copilot AI balanced review requested due to automatic review settings October 10, 2026 22:29

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Copilot was unable to review this pull request because the user who requested the review has reached their quota limit.

trissim and others added 5 commits October 10, 2026 19:22
@trissim
trissim merged commit d35934d into main Oct 11, 2026
1 of 4 checks passed
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