Repository navigation
G2: kernel modules spell no microscopy axis member - #1185
Merged
Merged
Conversation
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Every remaining kernel spelling of a microscopy axis (name, collection key, multi-letter label) as a string literal, attribute or class field is now asked of the family, declared by its external owner, or renamed for what it is: - MCP/kernel plate file filter well -> partition; synthetic plate and compile request wells -> partition_values; runtime-tree partition node. - NGFF axis types derive from the axis name in PolyStore 0.5.0 (lockstep); the Zarr projection leaves are named by role. - Fiji hyperstack coordinates use ImageJ's c/z/t; slice labels derive from the dimension name. - Progress streams declare progress_channel; ColorToGray fixed planes are fixed_channels; ImagePlaneSource.colour_sample; SaveImages TIME/SLICE; CellProfiler's Plate/Well metadata tags are declared once in interop. - The MetaXpress experimental-analysis format modules move into their domain package; the domain allowlist loses formats/. Guard: test_axis_family_guards finds zero kernel spellings besides the Fiji slot's ImageJ "channel". 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>
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 G2 (receipt): kernel modules no longer spell a microscopy axis member.
Census. At
66a0b30a0, kernel modules had 134 spellings of a microscopy axis name, collection key or multi-letter label in 22 files, as string literals, attributes or class fields. After this PR there is one: the Fiji slot's ImageJ"channel", which saved configs persist asFijiDimensionMode.CHANNEL. The guard pins it exactly.What changed
wellis nowpartition(kernel query, MCP DTOs, services, dev client--partition). Synthetic-plate and compile-requestwellsare nowpartition_values(--partition-value). The runtime tree's partition node isPartitionProgressTreeNode(node_kind="partition").polystore>=0.5.0,<0.6. The Zarr projection leaves are named by role.c/z/t, iterated through oneaxes()helper. Progress declarations useprogress_channel. Other renames: ColorToGrayfixed_channelsandnumbered_channels, InvertForPrintingrgb_channels,ImagePlaneSource.colour_sample, SaveImagesTIME/SLICE,PlatemapData.well_name. CellProfiler'sPlate/Welltags are declared once in interop.openhcs/formats/intoprocessing/backends/experimental_analysis/. The domain allowlist loses one entry.Guard.
tests/unit/test_axis_family_guards.py::test_kernel_modules_spell_no_microscopy_memberscans every module outside the domain allowlist andinterop/(the CellProfiler domain). The set of found spellings must equal the single pinned Fiji declaration.test_domain_allowlist_names_existing_domain_moduleschecks that every allowlist entry exists.Witness. A new
test_zarr_layout_follows_roles_and_ngff_typeschecks that the remote-sensing family's Zarr layout follows its roles. The end-to-end subprocess witness (no domain module loaded) still passes.Minimal edits outside the kernel (coordination with U1). In
openhcs/agent, onlydto/plate.py,services/plate_inspection_service.py,services/plate_streaming_service.pyandservices/synthetic_plate_service.pychanged: the field renames thatPlateFileInventoryQuery.partitionandSyntheticPlateGenerationParameters.partition_valuesforce. Nothing inopenhcs/pyqt_guichanged.Durable state. Saved pipelines that set
ImagePlaneSource(channel=…)or a non-defaultSaveImagesSeriesAxisno longer load. Both parameters were never read. Decision G2-Q1 in the index defaults to no cutover tool.Handoffs (recorded in the receipt):
well_filter/WellFilterConfig/owned_wells/total_wellsidentifiers.coord_to_well, andcomponent_filters.domains/.Verified locally: guards 10/10 (axis-family + dataset-source), witness 11/11, official30 parity 29/30 (baseline;
cp_tutorial_3d_monolayer.pkl),test_maindisk+zarr direct 6/6. Touched tests: 724 passed; the 18 failures also fail on origin/main in the same environment, apart from one flaky progress-tree test that passed on 3 reruns.G2 · PR #1185 · guards 5/5 · production −294 +264 · tests −68 +198🤖 Generated with Claude Code