Make configuration contracts nominal and viewer-native - #92
Merged
Conversation
Replace closed string choices and generated display-config mirrors with owning enum/dataclass declarations, remove inert public options, and route processor dispatch through existing registry strategy mixins. Apply the typed viewer contracts through Napari and Fiji while virtualizing the first-party ROI table and chunking Shapes updates for large result sets. Add generated configuration-consumer and mirror-deletion gates plus focused CellProfiler, streaming, and ROI regressions.
Synchronize package, Codex plugin, MCP bundle, and registry metadata for the typed-configuration and viewer-performance release. Document the removed inert options, owner-derived MCP diagnostics, ObjectState form-construction improvements, and virtualized ROI table benchmarks.
|
👀 Human Input Needed → Pair Review Briefing |
| return {} | ||
| if not is_dataclass(cls): | ||
| return dict(patch.values) | ||
| authoring_path = f"{ConfigPatch.__name__}.{ConfigPatch.values.__name__}" |
There was a problem hiding this comment.
This constructs the diagnostic root from ConfigPatch.values.__name__, but values is a dataclass field with a default_factory, so the class has no values attribute at runtime. Any non-empty patch for a dataclass config will raise AttributeError before unknown-field validation can run, turning valid patches and the new diagnostics tests into generic config_patch_invalid failures.
Severity: high
🤖 Was this useful? React with 👍 or 👎
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.
Summary
OpenHCS 0.7.0 makes configuration declarations, generated forms, MCP reflection,
and viewer transport share the same nominal contracts. It removes public options
that had no working runtime effect, eliminates duplicated display and backend
payload models, and moves remaining specialization back to the declarations that
own it.
The release also improves the two user-facing performance boundaries reported in
the GUI: repeated configuration-form construction and large Napari ROI tables.
Configuration architecture
declaration through UI, schema generation, code round trips, compilation, and
execution.
Repeated-choice module settings now retain enum identity through runtime binding.
hosts and registry names, and non-positive Z spacing at the declaring type.
their viewer wire projection.
ZarrConfigand the typed viewer display contract; itdoes not import OpenHCS configuration declarations.
factories, and compatibility-only coercion paths were removed.
Public configuration cleanup
The UI no longer advertises settings that were inert, misleading, or impossible
to select meaningfully:
Array conversion choices now come from ArrayBridge rather than a second OpenHCS
dtype model.
ObjectState and generated forms
updates, checkpoints, and time travel.
metadata, field validation, and UI semantics.
annotation names its concrete base. This keeps unresolved inheritance sentinels
out of concrete validation while resolved reconstruction still normalizes through
the registered base type.
nested configuration structure for every form.
Qt objects, ObjectState instances, parents, or signals.
MCP diagnostics
provide live near matches, and point clients to architecture-topic discovery.
the reflected dataclass authoring schema.
ObjectState previously dropped.
Napari and ROI performance
layer instead of eagerly rebuilding one widget per ROI.
geometry, features, colors, and selection ownership.
to 1.07 ms.
through the typed display contract.
Verification
Python 3.11, 3.12, and 3.13 on Linux, Windows, and macOS.
.cppipeZMQ regressions: 3 passed.parser-boundary enum defect; the corrected 24-step imaging-flow cytometry case
then passed exact native-reference equivalence in isolation.
3.12 environment, exposed all eight console scripts, and included the Napari
manifest and all 42 packaged knowledge assets.
rendered the portable neurite preset, executed it through the packaged MCP
and ZMQ runtime, and completed without importing the source checkout.
failures. It includes all 30 headless CellProfiler parity cases, real Fiji and
Napari viewer smoke tests, installed-wheel integration, Python 3.11 and 3.13
boundaries, Linux/macOS/Windows package installation, both desktop installer
harnesses, OMERO, disk/Zarr, and ImageXpress/Opera Phenix combinations.
External package releases
OpenHCS pins compatible minimum versions so older published OpenHCS releases do not
silently adopt the new infrastructure contracts.