Repository navigation
E1: leftover families, value-to-JSON copies, path identity; enum-dispatch guard - #1203
Merged
Merged
Conversation
…tity Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…quired Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…vents, ROI columns); platform and log-level spellings stay at their boundary Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…elf through to_jsonable Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…red wire view ViewerSettlePhase becomes SettlementRunning/SettlementComplete/SettlementFailed; each phase owns its validation and idle completion. ViewerSettleProgress decodes and encodes through its declared fields (WireView), so ViewerSettleField and the from_response/to_wire_mapping copies are deleted. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
CompiledArtifactInspectionControlPayload copied the request's one field and hand-coded its codec against a one-member type enum; the request now subclasses TypedWireMessage and the control strategy keys by its wire_type. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…re families DebugSessionPhase was an enum keying the phase declarations that already carried the behaviour; the declarations are now the phases. Toolbar placement is a family the toolbar iterates; the runtime-values action is identified by its own declaration. The Pipeline* aliases of the core debug types are gone. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…eaves key by platform class AgentRuntimePlatformKey is deleted; the *AgentRuntimePlatformAuthority classes are the platforms (AgentRuntimePlatform, LinuxRuntimePlatform, ...), and Claude Desktop paths and desktop deployment select their leaf by nominal type. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
source_projection, dataset_sources and the Bio-Formats adapter compared resolve() results, a second identity rule beside K4's lexical one. They now use absolute_source_path (the lexical identity made absolute, no symlink following). A plate reached through a symlink alias is a different dataset root; the registration test now checks reuse for a lexically equal spelling. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…s and variable-size handling are families ViewerLifecycleMode and ViewerLifecycleState become the ViewerLifecycle family (ViewerStopped, ViewerConnectedExternal, ViewerOwnedProcess); each owns is_running and bootstrap rollback. ViewerLaunchContextMode becomes ViewerLaunchSession. NapariLayerKind members own layer creation, replacing the creator and logger tables. NapariDimensionLabelRouteSource members carry their logged reason. NapariVariableSizeHandling members (PadToMaxSize, SeparateLayers) own routing and materialization; the EnumKeyed strategy family is deleted and the config field holds the class (RegisteredClassChoices). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
ViewerProcessLaunchConfig encodes and decodes through its fields (WireMessage); ViewerProcessLaunchField and the hand-written mapping are deleted. Decoding still requires every declared field. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…milies; PlateManager document assignments are a record SelectedAllSelectionMode and its UiCodeDocumentSelectionMode alias are deleted: SelectedItems/AllItems own keeps() and pick(), and the wire keeps their registry names. DesktopUpdateCheckOrigin members declare quiet; DesktopUpdateProgressAction becomes ReopenAfterFailedUpdate/ ExitAfterFailedUpdate, each following itself. PlateManagerCodeNamespaceField is replaced by PlateManagerDocumentAssignments, whose fields are the names. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
… numbering CellProfilerPipelineStage, ModuleSettingCoverageStatus, CellProfilerMeasurementFeatureKind (merged with its parser family) and MeasurementImageReferenceDomain become AutoRegisterMeta families whose members own what consumers switched on; CellProfilerPipelineFileKind and the CellProfilerMeasurementImageDomain alias are deleted. SpatialGridOrdering members carry whether numbers fill a row first, so the grid stops comparing members. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The napari state projection builds summary mappings that ViewerPayloadSummary and ViewerArrayValueSummary decode strictly; ViewerPayloadSummaryField restated those field names and is deleted. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…s, field filters and bridge operation states are families Members own what consumers switched on: parameter sources answer agent_supplied and their runtime description; selected-plate targets resolve their plate root; field filters match a field summary (the separate ObjectStateFieldFilterDeclaration family is deleted); operation states answer is_terminal, severity and completion selection. Catalog signature and summary views render themselves; the unused search_rank is deleted. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…viour on the members SourceFilterMatchType, SourceFilterSubject, MetadataSource, SourceSetRole, SourceProjectionRole and SourceBindingOrigin were enums whose meaning each consumer re-decided; the matcher and target-resolver strategy families restated two of them one-to-one, keyed by .value. Each is now an AutoRegisterMeta family: match types own matches() (text comparisons and their negations, path predicates), subjects own text_of(), metadata sources own texts(), the primary-plane role checks its artifact kind. Fields hold the member class with RegisteredClassChoices; the wire spelling is the registry name (unchanged strings). CellProfiler's subject literals decode through the family registry; its operator literals are one table naming our classes. Workspace projection strategies and source-universe requests key by the member class. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…efineGrid and SplitOrMerge variants keyed by class ThresholdDiagnosticDomain, WatershedRuntimeFamily, ExperimentalAnalysisScope, DefineGridVariant and SplitOrMergeInputTopology are deleted as enums: their strategy leaves (or new variant classes) are the family members, keyed by name or function name, and own what was switched on. DefineGrid's resolve_function asks the variant instead of re-deciding it. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
StepInputDependency packed four variants into a kind enum plus optional fields that every consumer re-checked; each case is now a frozen subclass (UnresolvedStepInput, NoMainFlowInput, PipelineStartInput, StepOutputInput), and only StepOutputInput carries the producer step. SourceImageSetComponentRole restated a membership test; SourceAnchorSelectionStatus was written and never read; SourceBindingMatchResolutionStatus restated whether a binding matched. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…re families; descriptor-set size picks its resolver directly; error dialogs are a window field DescriptorSetCardinality and UiWindowSemanticMarker are deleted: the descriptor set returns the resolver for its size, and a window summary carries error_dialog instead of a one-member marker string. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…de and export scope are families OrchestratorState, TerminalExecutionStatus, ExecutionStatus, RuntimeObservationMode and ZMQRuntimeObservationExportScope become class families whose members carry what consumers switched on (retain_records, returns_every_record, completion_payload, export, succeeded). Wire spellings are the registry names; the agent run request keeps a boundary Enum view derived from the export-scope registry. ExecutionResult.is_error is deleted (derived from status). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…s use one result key FunctionCatalogControlMessageType, FunctionCatalogControlField and FunctionCatalogPreparationStatus are deleted: each request declares its wire type (the execution server keys its strategies by it), every response carries its value under one result key, and the pending reply declares its status. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…E is gone) Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…leted Each MaterializationBackend member declares its PolyStore backend and whether it writes Zarr; the compiler asks writes_zarr instead of comparing members. DatasetSource.get_required_backend had no caller. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
CustomFunctionLifetime members own whether a source file must be checked. MfdPresetKey keyed a table restating each preset and MfdPresetFamily keyed the materializer registry; each preset is now one definition naming its materializer. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
InputSource's two members were compared by every planner; ReadPreviousStep
and ReadPipelineStart now declare whether the step reads the pipeline-start
main flow, and the config field holds the class (RegisteredClassChoices).
Wire spellings unchanged ('previous', 'start'). The steps.abstract re-export
and a re-check of the declared field type are deleted.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…t the 0.2.8 branch head The guard resolves each Enum.MEMBER through the module's imports and fails on a comparison, match case, dict key or EnumKeyedStrategyMixin key outside the table of boundary spellings and reassigned enums; a stale table entry fails too. It also keeps the deleted names deleted, the dataset identity modules free of resolve(), and numpy encodable through to_jsonable. python-introspect 0.2.8 (OpenHCSDev/python-introspect#22) lets pydantic accept a RegisteredClassChoices field's registry key, which the MCP tool schemas need for the family-valued config fields. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Membership questions the converted families answer by flags become nominal identity or member behaviour: parameter sources split into agent- and runtime-supplied branches, the outcome export scope checks its own export path (one rule, written once), default step directories move onto the step-input dependency, viewers answer their own process liveness, and the semantic ObjectState field filter is the union of the four it names. Flags that restated a member's identity (writes_zarr, streams_from_source_context, keeps_every_field, completed, editable, collects_records, returns_every_record) are deleted. Forward references are unquoted. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…nts record Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Conflicts resolved keeping both sides: K5's graph-built compiles and AuthoredFunctionPattern, E1's step-input and input-source families, and the catalog's runtime_bound_parameter_names with the artifact-input family member. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…contract - ConfigService decodes a type[Family] patch value once, through the family registry (MCP JSON patches spell members by registry key). - MCP tool schemas: python-introspect's RegisteredClassChoices publishes a named enum definition, and the server's schema generator spells a family default by its registry key, so openhcs_stream_plate_files_to_viewer and openhcs_run_datasets match the published contract again; the run-datasets boundary enum keeps its published name. - python-introspect decodes registry keys without running the encoder. - benchmark CLI and the desktop update smoke script use the families. - Tests that built removed enum members (orchestrator READY, a string materialization backend) or could not populate family fields now use the member classes. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Import conflicts only: K2's owning modules under openhcs/core/artifacts/ with E1's families (input source, orchestrator state, projection roles, filename identity). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…ng owners Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This was referenced Oct 11, 2026
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.
Receipt: docs/refactor/consolidation-20261009/E1-leftover-families.md
SourceFilterMatchType,SourceFilterSubject,MetadataSource,SourceSetRole,SourceProjectionRole,SourceBindingOrigin) are families whose members own the behaviour; the matcher/target-resolver restatements are deleted.DebugSessionPhaseis its declaration family;CompiledArtifactInspectionRequestis its wire message (payload copy deleted).to_jsonable; two private switches deleted.absolute_source_path), noresolve().tests/unit/test_e1_enum_dispatch_guards.py: no Enum-member dispatch (compare, match, dict key, EnumKeyedStrategyMixin) outside listed boundary modules; stale entries fail.Checks: structural ratchet (openhcs, scripts, benchmark) exit 0; NRA R1 exit 0; official30 parity passed (1 passed, 11m17s); focused unit suites and related integration tests pass except failures that also fail on base 72a5c32.
E1 · PR #1203 · guards 6/6 · production −4095 +4010 · tests −1517 +2120
🤖 Generated with Claude Code