Skip to content

v0.7.0

Choose a tag to compare

@github-actions github-actions released this 30 Jul 20:55
· 710 commits to main since this release
035fa20

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

  • Closed configuration choices and registered-function choices remain enums from
    declaration through UI, schema generation, code round trips, compilation, and
    execution.
  • CellProfiler text conversion is limited to import/export setting boundaries.
    Repeated-choice module settings now retain enum identity through runtime binding.
  • Generic annotation validation rejects invalid worker counts, viewer ports, blank
    hosts and registry names, and non-positive Z spacing at the declaring type.
  • Napari and Fiji display configurations are concrete typed dataclasses that own
    their viewer wire projection.
  • PolyStore consumes its own ZarrConfig and the typed viewer display contract; it
    does not import OpenHCS configuration declarations.
  • Forwarding strategy shells, display payload mirrors, generated field-description
    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:

  • visualization dtype
  • streaming batch size
  • Fiji executable path
  • experimental analysis-function injection
  • unused well-pattern fields
  • custom aggregation aliases
  • singleton database-type selection
  • ineffective CPU-mask toggles

Array conversion choices now come from ArrayBridge rather than a second OpenHCS
dtype model.

ObjectState and generated forms

  • ObjectState owns direct-child field topology and rebuilds that derived index after
    updates, checkpoints, and time travel.
  • Generated lazy and injected dataclasses preserve declaration docstrings, source
    metadata, field validation, and UI semantics.
  • Raw reconstruction preserves a registered lazy runtime type when an enclosing
    annotation names its concrete base. This keeps unresolved inheritance sentinels
    out of concrete validation while resolved reconstruction still normalizes through
    the registered base type.
  • PyQT-reactive consumes ObjectState-owned immutable topology instead of rediscovering
    nested configuration structure for every form.
  • Responsive form layout uses reusable construction metadata without caching live
    Qt objects, ObjectState instances, parents, or signals.

MCP diagnostics

  • Architecture-symbol lookup errors now state that the namespace is curated,
    provide live near matches, and point clients to architecture-topic discovery.
  • Invalid config patches report unknown nested fields and suggestions derived from
    the reflected dataclass authoring schema.
  • Synthesized configuration descriptions now expose the declaration rationale that
    ObjectState previously dropped.

Napari and ROI performance

  • The first-party ROI manager uses a virtual table backed by the native Shapes
    layer instead of eagerly rebuilding one widget per ROI.
  • ROI payloads are added to Napari Shapes in coherent chunks while preserving
    geometry, features, colors, and selection ownership.
  • Binding 4,097 ROIs in the focused benchmark improved from approximately 490 ms
    to 1.07 ms.
  • Napari streaming applies configured colormaps and component display semantics
    through the typed display contract.

Verification

  • ObjectState: 159 tests passed on the release candidate; its GitHub matrix passed
    Python 3.11, 3.12, and 3.13 on Linux, Windows, and macOS.
  • OpenHCS broad release suite: 680 passed.
  • CellProfiler nominal binding and repeated-row regressions: 109 passed.
  • UI/configuration caller migration suite: 176 passed.
  • Generated .cppipe ZMQ regressions: 3 passed.
  • Disk/Zarr pipeline configuration integrations: 2 passed.
  • Exhaustive configuration-consumer coverage gate: passed.
  • Configuration mirror/deletion gates: passed.
  • The full local official30 ZMQ run exercised all 30 cases and identified one
    parser-boundary enum defect; the corrected 24-step imaging-flow cytometry case
    then passed exact native-reference equivalence in isolation.
  • 0.7.0 wheel and sdist built, passed Twine checks, installed in a clean Python
    3.12 environment, exposed all eight console scripts, and included the Napari
    manifest and all 42 packaged knowledge assets.
  • The clean installed wheel with its MCP extra generated a synthetic plate,
    rendered the portable neurite preset, executed it through the packaged MCP
    and ZMQ runtime, and completed without importing the source checkout.
  • The final pushed release matrix passed all 35 executed checks with zero
    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

  • python-introspect 0.1.7
  • ObjectState 1.0.22
  • PyQT-reactive 0.1.28
  • PolyStore 0.1.26

OpenHCS pins compatible minimum versions so older published OpenHCS releases do not
silently adopt the new infrastructure contracts.