Skip to content

OS3: callers of ObjectState 3.0.0 - #1223

Merged
trissim merged 8 commits into
mainfrom
refactor/OS3-objectstate-3
Oct 12, 2026
Merged

trissim merged 8 commits into
mainfrom
refactor/OS3-objectstate-3

Conversation

@trissim

@trissim trissim commented Oct 12, 2026 •

Copy link
Copy Markdown
Collaborator

Stacked on #1219 (refactor/U6-gui-integration), which rewrites source_bindings_editor.py and its tests and merges first. This branch is based on that branch's head 64e20ef50, not on main; until #1219 merges, the diff here also shows its commits. Own diff: git diff origin/refactor/U6-gui-integration...refactor/OS3-objectstate-3.

Updates every caller for ObjectState 3.0.0 (OpenHCSDev/ObjectState#50) so the libraries and the application release together. Receipt: docs/refactor/consolidation-20261009/OS3-callers.md.

Library PRs (not tagged, not released)

This repository

  • pyproject.toml: objectstate>=3.0,<4, formbridge>=0.1.2,<0.2, pyqt-reactive>=0.7.1,<0.8.
  • Submodules: ObjectState abe763c (release branch), formbridge 1e73e6c, pyqt-reactive 1fa382e.
  • Three test files stop assigning the removed _atomic_* and _deferred_invalidation_depth attributes.
  • No file under openhcs/, benchmark/ or scripts/ changes.

The flagged test

test_inline_source_bindings_dropdown_edit_flashes_only_changed_cell becomes ..._flashes_changed_cell_and_inheriting_cell and expects both source_bindings_config.source_filters[0].match_type and step_source_bindings_config.source_filters[0].match_type.

Checked on this branch, with and without a scope id: the step section's own (raw) value stays None; the value it resolves to goes from the TextEquals clause to the TextContains clause, supplied by SourceBindingsConfig of the same PipelineConfig (StepSourceBindingsConfig inherits it). An attribute read on the object returns the same value. A flash marks a field whose resolved value changed, so both cells flash. The test now asserts the raw value, the resolved value and the source of the step field as well.

Does the resolved-value change alter a pipeline's configuration?

Not in what was measured. ObjectState 2.1.1 (U6 base) against 3.0.0:

  • Default PipelineConfig (scoped and scope-less), GlobalPipelineConfig, a FunctionStep state: 534 paths, no value differs.
  • Setting each field name that several configs of PipelineConfig hold, one config at a time: scoped states agree on all 30 probes. Scope-less states under 2.1.1 missed 8 sibling inheritances that scoped states had (streaming_defaults.{enabled,host,listen_host,persistent}, path_planning_config.output_dir_suffix, napari_display_config.colormap, fiji_display_config.{auto_contrast,lut}); under 3.0.0 scope-less equals scoped.
  • Production code builds a scope-less state in two places, neither on a pipeline path (image_browser.NoDataset.config_state, the synthetic plate generator window).

Checks observed locally

Check Result
tests/unit/pyqt_gui -n 2 899 passed
108 unit files naming ObjectState, lazy configs or PipelineConfig, plus test_validate_local_release_floors.py, agent/test_mcp_tool_contract.py 2388 passed, 11 failed, 3 skipped. The same 11 fail in the same selection on the U6 base with ObjectState 2.1.1 (test_artifact_publication_journey.py 8, test_named_checkpoint_publication.py 2, test_bioformats_microscope_handler.py 1)
MCP tool contract passes, no schema file changed
guardrails_local.sh guardrails rc=0
SMOKE_SKIP_GUI=1 smoke_local.sh smoke rc=0 (5 passed)
official30 parity No clean 30/30 run. Run 1: 28/30; cp_tutorial_pixel_based_classification was compiled by another worktree's execution server (agent-a05d025a19446fcd4, an import error from that worktree's file) and cp_tutorial_translocation_final was skipped after it. Run 2: 29/30; ExampleYeastColonies ended with Execution was cancelled. Each of the three was equivalent in the other run, and neither run reported a value mismatch. Other agents' runs were active on the machine both times.

Library suites and lint are in the library PRs.

Release order

ObjectState 3.0.0, formbridge 0.1.2, pyqt-reactive 0.7.1 (each empties its requirements-ci.txt first), then this PR with the submodules moved to the release tags.

OS3 · PR #1223 · guards rc=0 · production −0 +0 · tests −12 +22

🤖 Generated with Claude Code

trissim and others added 4 commits October 12, 2026 03:12
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…probes

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Copilot AI balanced review requested due to automatic review settings October 12, 2026 08:05

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Copilot was unable to review this pull request because the user who requested the review has reached their quota limit.

trissim and others added 4 commits October 12, 2026 04:23
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…0.7.1

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>
@trissim
trissim merged commit ac19abb into main Oct 12, 2026
0 of 3 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants