Repository navigation
G6: domain-blind viewers - #1178
Merged
Merged
Conversation
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
ExecutionConnectionProjection (renamed ExecutionConnectionFields: it carries a connection, nothing is projected) moves beside ExecutionConnectionSpec, so agent/dto/viewer.py no longer pulls zmq_execution_client, the orchestrator and the microscope handlers into the napari server (203 -> 75 openhcs modules). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…family, ViewerFamily - The display-config wire section carries the stream's DeclaredAxis list (name, label, roles, value kind). Viewers lay a stream out and validate it against its own declarations; no viewer module reads AxisFamily.active(). The exact-set rejection and from_display_payload copies in config.py are deleted; the viewer decodes NapariDisplaySettings/FijiDisplaySettings and no longer imports openhcs.core.config. - Each viewer owns a ViewerSlotFamily (NapariSlots: layer/stack; FijiSlots: window, C, Z, T by role, FRAME otherwise). NapariDimensionMode and FijiDimensionMode are views derived from them, and the per-role config defaults derive from the slot families. Partition and stack special cases in napari are role queries on the declared axes. Labels come from Axis.label. - One ViewerControlAction family: every viewer inherits shutdown, force-shutdown, clear-state, process-launch and settle over a ViewerServerPort; unknown messages answer ERROR (Fiji answered SUCCESS); pong capabilities derive from the registry for both viewers. The FijiUnsupported* plans are deleted. - One ViewerFamily class per viewer (NapariViewer, FijiViewer) owns wire name, backend, display settings and visualizer; ViewerType is the boundary enum derived from the registry; ViewerDeclarationABC and the StreamingConfig forwarding properties are deleted. start_viewer/stop_viewer live once in ManagedViewerLifecycleMixin. - Lockstep: zmqruntime 0.4.2 (flat ViewerComponentMode deleted) and PolyStore 0.3.5 (receivers take window/layer components). - Rule 1b renames in the viewer modules (Authority/admission/receipt names). - Guards in tests/unit/test_g6_viewer_guards.py; one-shot cutover tool for the moved NapariVariableSizeHandling import. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
… the cutover tool The owner's files do not reference NapariVariableSizeHandling, so the one-shot import cutover is not needed. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…ies; absorb napari 0.9.2 slicing API - zmqruntime 0.5.0 (079a1c41d), PolyStore 0.4.0 (f6af43a9b), python-introspect 0.2.5 (4bb7d132d); minimum versions raised. - Axis keeps G6's label beside G4's metadata declarations; the installed demo takes main's typed viewer payload check. - napari 0.9.2 removed Layer._make_slice_input and _indices_view: native frame completion uses _slicing_state.make_slice_input (B2's fix, #1182) and the displayed-subject projection reads _view_indices. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
… payload spatial rank; napari tests read _view_indices Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…tions The viewer took axis labels only from merged value-name metadata, so a stream without value names showed raw axis names. The display batch now declares the route's axes on the viewer's name metadata. The official30 test reads ViewerType members by value and their config key through the family. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…orts NapariVariableSizeHandling from viewer_display FijiSlots.Channel collided with the microscopy member name the kernel guard forbids; the slots are HyperstackChannel/Slice/Frame and the form-choice enum members derive from the slot wire values (unchanged CHANNEL/SLICE/FRAME). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Surface G6 (receipt:
docs/refactor/consolidation-20261009/G6-domain-blind-viewers.md). The napari and Fiji viewers no longer use OpenHCS's axis family. They lay out any stream from the axes that the stream declares.Wire and layout
declared_axes(DeclaredAxis: name, label, roles, value kind). Each viewer validatescomponent_modesandcomponent_orderagainst the payload's own axes. The exact-set rejection inconfig.pyis deleted. No viewer module readsAxisFamily.active()(guarded).ViewerSlotFamily.NapariSlotsare layer and stack.FijiSlotsput colour in C, stack in Z, time in T, and anything else in FRAME, plus a window slot; axes that share a slot combine in declared order.NapariDimensionModeandFijiDimensionModeare derived from these families, keeping their member names so saved configs still load. The per-role field defaults also come from the slot family.Axis.label, which the microscopy family sets to Ch, Z and T.ViewerAxisLabelStrategyis deleted. A named channel label now readsCh 1: DNA(before:Ch1: DNA).NapariDisplaySettings/FijiDisplaySettings, soopenhcs.core.configis never imported in the viewer process.Control: there is now one
ViewerControlActionfamily. Each viewer inherits the lifecycle actions (shutdown, force-shutdown, clear-state, process-launch, settle) over aViewerServerPort.FijiUnsupported*plans are deleted.Identity: each viewer is one
ViewerFamilyclass (NapariViewer,FijiViewer) that owns its backend, config key, title, display settings (and so its slot family) and visualizer.ViewerTypeis now a boundary enum derived from that registry.ViewerDeclarationABCand the forwarding properties onStreamingConfigand its mixin.start_viewer/stop_viewerare written once, inManagedViewerLifecycleMixin.Import cut:
ExecutionConnectionProjectionis renamedExecutionConnectionFieldsand moved next toExecutionConnectionSpec. The napari server now loads 75 openhcs modules instead of 203, with no microscopes, orchestrator or config (guarded).Lockstep library PRs (not tagged; the lead releases): OpenHCSDev/ZMQRuntime#27 (0.5.0, deletes the flat
ViewerComponentMode), OpenHCSDev/PolyStore#33 (0.4.0, receivers take window and layer components; requires zmqruntime 0.5) and OpenHCSDev/PyQT-reactive#17 (0.3.29, accepts zmqruntime <0.6). The pins are bumped here, and the submodule pointers point at those branches' commits.Durable state:
NapariVariableSizeHandlingmoved toopenhcs.runtime.viewer_display. None of the owner's saved files reference it (checked by the lead), so no cutover tool is needed.Rule 1b: Authority, admission and receipt names in the viewer modules are renamed (for example
ViewerComponentCoordinateAuthority→ViewerComponentCoordinatesandadmit_settlement→request_settlement).Tests: 37 viewer test files ran under
-n 2against a cleanorigin/mainworktree. This branch introduces no failures beyond the baseline's 99.test_completed_shapes_publish_full_inventory_and_declared_domainfails only in the full-file run and passes alone; the same file fails 47 times on the baseline. A further 58 related files (agent, MCP, GUI, config, demos) show the same failures as the baseline after the fixes. New: guards (6), a witness in which a viewer under microscopy decodes a RemoteSensing stream and a family-level control test.G6 · PR #1178 · guards 6/6 · production −1778 +1643 · tests −578 +886
🤖 Generated with Claude Code