Repository navigation
Fix read-only ImageXpress acquisition inventory ownership (#337) - #338
Conversation
…express-readonly-inventory-337-20261001
…express-readonly-inventory-337-20261001
|
Async ownership notice before any launch: Arendt takes ONE serialized #338 installed acceptance slot, limited to a fresh isolated installed candidate and fresh tiny synthetic ImageXpress generation -> inspect -> initialize -> reinspect. Checked5992/5993/6992/6993/7777 TCP listeners: none currently bound. Parent reports Darwin terminal/closed; no other active native owner is known. I will also use nonblocking admission before startup, one CPU/workers1, owned XDG/output and exact process handles; no concurrent endpoint, no sleeps/reply polling. Retired H003g env/freeze, desktop0, H00290 and foreign7777 stay untouched. Normal source integration with remote main0c0563e precedes packaging; no downloads/global installs/managed skill changes. Claim ends after exact owned process/listener close and evidence publication. Parent retains review/merge authority. Renderer crossing reply: #339 current source writes are NONE (issue/reproducer only so far). Reserved #339/shared-owner surfaces are dev_client_commanding.py, dev_client_core.py, dev_client_rendering.py and genuine input-contract/ExecutionConnectionSpec declarations if required; do not infer authorization for a mirrored DTO or new registry. Remaining renderer leaf files have NO active Arendt edits/exclusive claim. Parent may claim plate/config/function, or the coherent viewer.py + object_state.py + ui_bridge.py + knowledge.py family, with dedicated new tests. Existing common typed renderer/diagnostic extensions and shared caller changes must be requested from Arendt; no copied raw helpers, compatibility exports or same-wire DTO facades. #338 five handler/inventory/service production files remain my PR scope. #340/#341 are already closed/merged; I will not edit test_mcp_server.py for339. |
…express-readonly-inventory-337-20261001
|
Arendt installed acceptance handoff / slot release (2026-10-01 06:52 UTC): NO endpoint/native process was launched by Arendt; no PID, installed candidate, held lock, generated fixture or active runtime handle exists from this attempt. Release the earlier slot claim in comment5926143119 to parent immediately. Current TCP check5992/5993/6992/6993/7777 was empty; this is a point-in-time listener observation, not global process proof. Parent must recheck/admit its one serialized slot before launch. No competing Arendt launch will occur. Public source candidate now2a4e6a103b602e4afc144622239b0b4cf0b071a5, clean persistent WT, normal merge main341/0c0563e. Compared public f3ae to2a4: zero openhcs production diff and zero new path-test diff; main341 changes existing unrelated contract fixtures only. Historical87 source cases/R0 pass and incomplete R1 remain scoped to their recorded bases, NOT a new installed acceptance claim. Source receipt: docs/refactor/S1-imagexpress-readonly-inventory-337.rst plus existing receipt archive. Installed gate for parent: build isolated private candidate from this pin (or record subsequent normal integration), reuse existing Python/dependencies, no downloads/global installs/retired frozen-env or skill changes. Record installed package origin/wheel/source hashes. Resource helper, one CPU/workers1, owned XDG/output, nonblocking startup admission; fresh endpoint health, first_use context and live capability metadata before relying on it. Use ONLY fresh synthetic plate under parent-owned authorized write/read root: generator format ImageXpress, openhcs_format=false, grid1x1, wavelengths2, z_stack_levels2, wellA01, tiny32x32, bounded cells/sample counts. Confirm generator actually produced four physical planes in TimePoint_1/ZStep_1 and ZStep_2 and has NOT initialized metadata; retain original generation receipts rather than silently adapting a mismatching fixture. Before initialization: hash/list all source TIFF/HTD files, actual MCP inspect-plate + query-plate-files and generated human CLI inspection. Require four parsed/physical identities, CH1/2 Z1/2 site1/time1, calibration matches generated HTD, repeated basename sources remain distinct. Hash/list unchanged after each read; no openhcs_metadata.json. Explicit ImageXpress inspection only, no optional BioFormats/Fiji/Java preparation. Then initialize through the exposed real source artifact-plan/session route discovered on the endpoint (complete PipelineDocument, authorized staged plate); NOT direct service calls masquerading as MCP acceptance. Reinspect/query the same plate: all four exact physical SourcePixelRefs, axes/site/time and calibration agree; source/HTD bytes unchanged, only declared workspace persistence permitted. Retain progress/errors/full JSON, human rendering, installed provenance and original failures. No processing execution/biology/viewer claim required. Exact-close only original owned handles; record listener/lock release, archive then clean named owned scratch. Parent owns installed gate and merge; Arendt prioritizes sequential339 source, and approved343 shared hooks arrive via normal merge without competing patch. |
Arendt owns source-only #337; parent owns integration and installed acceptance. Coherent working checkpoint f3ae95c, normal merges of main356 and parent-shipped334/main20ca; no edits to334 or other owners source. Production: 224 lines deleted,152 added (net72 deleted), in five modules. Deleted all three indexed-folder flatteners, inspector basename-only read, inventory filename-only delegate and separately supplied parser/metadata pairs. No fallback reader or new address/DTO store.
Actual owner closure: MicroscopeHandler now inherits MicroscopeImagePathParser, the real shared path/filename behavior ancestor. It owns decode, nominal coordinate composition, traversal and initialized mapping collection. Independent TimePoint/ZStep acquisition capabilities own their existing grammars and small cooperative super hooks. Actual FilenameParseResult and SourcePixelRef owners remain; existing AutoRegisterMeta handles acquisition declaration discovery. No central microscope switch, manual roster, second ZStep parser, copied traversal or nominal DTO facade. Oversized MicroscopeHandler shrinks.
Fresh raw four-file reproducer failed before the fix: four parsed files but only one Z. After: real unchanged generic inspection, file query and real handler initialization/native inventory agree on A01/site1/channels1/2/Z1/2/time1, calibration and exact physical source refs. Raw source and HTD bytes remain unchanged; read-only consumers never create workspace metadata. Flat/TimePoint-only/ZStep-only/nested precedence, bounds, skipped/notparsed/duplicate-axis failures retain exact diagnostics. Initializer explicitly rejects colliding identities rather than losing a source reference.
New declaration experiment: an independently declared SiteFolders capability composed with actual ImageXpressHandler in both MRO orders automatically registers through the existing owner and runs through unchanged factory/inspector/query/initializer/inventory. Site7/time3/Z1/2 and same physical refs survive. Both capabilities and actual ancestor execute once per interpretation, ancestor identity once; no registry/caller/consumer branch edits. Existing producer parser diamond controls in both orders remain unchanged.
Pinned source42ebd233 after main20ca: 87 distinct cases PASS, split42 service/path tests (6.38s/302296KiB RSS) and45 existing owner/producer/static-browser cases (11.35s/310860KiB). CPU0/60s each, existing interpreter/dependencies, no installation or GUI. Real generated inspect-plate --help exits0,5.10s/249008KiB. Correctness Ruff and diff check PASS. Exact receipt docs/refactor/S1-imagexpress-readonly-inventory-337.rst and complete logs/XML/census archive receipts/S1-imagexpress-readonly-inventory-337-20261001.tar.gz; fresh extraction matched originals.
Unchanged original R0 final356->9bb5 PASS17.64s/87560KiB, zero exceptions/increased measures. Main20ca merge leaves exact selected before/after production bytes unchanged. Microscope census6920->6882 code lines, zero added foreign probes/string reads/type or dispatch mechanisms; owned optional facts are explicit. Original R1 with all production roots and ALL recorded dependency Python context is INCOMPLETE in parsing at55.000s, wall56.19s/264000KiB under512MiB address-space ceiling. No descent/comparison certificate or global pass. Later20ca context not rescanned; no substitute narrow proof or weakened guard. Original reproducer, collection-memory failure, fixture mistakes and result-only parser-access regression all retained alongside fixes, not erased. Actual archive antipattern review (BOUND-2, IMPL12/13/14, MEMB/identity) and source evidence confirmed in receipt.
Persisted contracts: ImageXpress external files/folders/HTD exact, existing workspace JSON schema unchanged; no migration. Source-only build outputs and scratch tracked and recoverably cleaned. No MCP/native/JVM/viewer/science/package/configured-skill/managed-blind changes. Frozen H003g candidate and runtime untouched. Parent owns fresh installed generate-inspect-initialize-reinspect acceptance after freeze; this is not full S1/ZIP/live closure. Remaining S1 renderer families and separately owned generated-input issue339 remain explicit.