ZMQ Server Browser System

Overview

OpenHCS implements a thin wrapper over the generic pyqt-reactive browser:

  • Generic base: pyqt_reactive.widgets.shared.ZMQServerBrowserWidgetABC

  • OpenHCS adapter: openhcs.pyqt_gui.widgets.shared.zmq_server_manager.ZMQServerManagerWidget

This split keeps UI infrastructure generic while preserving OpenHCS-specific progress semantics and topology validation.

Boundary

This page documents OpenHCS-owned browser behavior:

  • progress topology validation

  • OpenHCS tree construction and presentation

  • OpenHCS server/process actions

Generic widget infrastructure (tree rebuild/state sync/poll scheduling) remains owned by pyqt-reactive and is documented there.

OpenHCS Browser Components

  • ProgressTopologyState: validates worker/well ownership claims from progress events.

  • ProgressTreeBuilder: builds ProgressNode trees with recursive aggregation policies.

  • ServerRowPresenter: type-dispatched rendering for execution/viewer/generic servers.

  • ServerTreePopulation: composes live scan results, launching viewers, and busy fallback rows.

  • ServerKillService: kill-plan execution (graceful/force) with logging hooks.

Canonical Tree Path

Execution subtree path is invariant:

plate -> worker -> well -> step

Compilation path is plate -> compilation entries until execution events begin.

Aggregation Semantics

Tree percentages are recursive and policy-driven:

  • mean for parent aggregates (plate, worker)

  • explicit for leaf/detail nodes (well, step, compilation)

Policies are enforced per node type in ProgressTreeBuilder.

Refresh/State Preservation

OpenHCS coalesces progress updates on a timer and only rebuilds when dirty. Expansion/selection preservation is delegated to the generic browser base.

Primary Modules

  • openhcs/pyqt_gui/widgets/shared/zmq_server_manager.py

  • openhcs/pyqt_gui/widgets/shared/server_browser/progress_tree_builder.py

  • openhcs/pyqt_gui/widgets/shared/server_browser/presentation_models.py

  • openhcs/pyqt_gui/widgets/shared/server_browser/server_tree_population.py

  • openhcs/pyqt_gui/widgets/shared/server_browser/server_kill_service.py

See Also