diff --git a/docs/validation/graph-roi-source-roundtrip-134.rst b/docs/validation/graph-roi-source-roundtrip-134.rst new file mode 100644 index 0000000000..d5a572446f --- /dev/null +++ b/docs/validation/graph-roi-source-roundtrip-134.rst @@ -0,0 +1,255 @@ +Graph ROI native-source roundtrip: receiving 134 +=============================================== + +Status and ownership +-------------------- + +Tristan's latest explicit correction on2026-10-02 restores Singer's ownership of +draft404 after the temporary handoff/stop. Root retains394 and shared production +ownership, including ``openhcs/processing/materialization/core.py``. Parent owns +actual installed/native graph reopening;404 retains that receiving acceptance. + +The graph writer repair integrated by Root at +``45f3a721e115b37ab662f362fa5ab4d5e58e1f6e`` remains present at current394 +``94ee1079d22540f9b5ed48b69481d7e7ab51095d``. No shared-hunk release remains +pending. Root owns production integration; Singer owns404 receiving acceptance; +parent owns installed/native qualification after the retinal11 slot yields. +404 is not merged wholesale. Its historical production base/proposal is not a +replacement for current394. Saved-directory publication at822 is not reapplied. + +Account-switch resume and current source +--------------------------------------- + +Tristan explicitly resumed work on2026-10-02. The preceding pause interrupted +no owned qualification operation: the last completed task was disposable-scratch +cleanup. On resume there is no active goal and no owned QA/ratchet process. +Original logs, failed fixtures, source proposals and uncertain dispositions +remain intact; no interrupted input is replayed. + +The existing persistent checkout is reused. The unpublished445 integration +receipt/archive is preserved on its local branch at1574ee396, without pushing +that branch.404 resumes from its existing published5f17851cd checkpoint; all +three untracked QA ledgers remain. No new WT, environment, dependency download, +package change, native launch, test rerun or cleanup is needed for this update. +Recorded submodule gitlinks differ from local dependency worktrees; none is +changed or represented as an installed qualification. + +Read the current394/404 claims and open468/469 rosters before this review. +468 owns tracking renderer correctness;469 owns MCP sampling presentation. +Neither claims the graph writer/binder or404 receipt. Root's shared production +files remain untouched. No competing404 implementation is started. + +At pinned94ee1079d, both graph test files and original ``SpatialGraph``, +``ROIArchiveSourceMetadata``, ``SourceImageProvenance``, ``SourceVoxelSpacing``, +``ImagePayloadMetadata`` and ``StreamingService`` modules are byte-identical to +the integrated45f3 checkpoint. Whole materialization/core.py has44 additions and +25 deletions since45f3 for retained-image role filename/context ownership; its +graph writer is unchanged. Function-runtime changes leave the graph context +strategy unchanged. Public plate streaming adds progress/typed failure receipts +and retains ``require_source_metadata=request.result_directory is not None``. +These differences do not justify copying the writer or weakening source admission. + +Current source still follows the original graph projection -> typed metadata -> +shared archive binder -> strict reader relationship. BOUND-2/BOUND-8 and +IMPL-12 remain resolved at that receiving boundary. The unchanged seven-case +fixture retains actual cooperative ``AuditedGraph(ProjectionAudit, SpatialGraph)`` +hooks and independent edge-feature roundtrip evidence; no generic consumer edit +is required for that new declaration. Historical executed source controls below +are reused, not presented as a new run at94ee1079d or a whole394 qualification. + +The finite remaining404 gate is a fresh correctly materialized source-bearing +graph ZIP through public ``kind=result`` inventory and the explicitly owned +native reopen route, with actual source/channel/plane/calibration, geometry and +subject/edge feature readbacks plus matched raw/result/combined placement review. +Parent owns that serial installed check. Original candidate6's broken archive +and failed job are historical evidence, not an input to repair/replay. Root's +optimization target, whole-branch R0 adjudication and separate saved-image parity +work do not require another404 source implementation. + +Verified integrated source checkpoint +------------------------------------- + +Root's commit45f3a721e has parent +``38067a4a5c348e0c7fcedd1d48f69bb99b7be19b``. Its production diff is exactly the +published narrow writer patch: one bare-content line replaced, nine lines added +for original typed metadata/spacing and binder reuse. Whole core.py and existing +``test_spatial_graph_materialization.py`` have zero differences from the qualified +proposal comparison3913c5008. The imported seven-case receiving fixture has the +same Git blob as f3e566485: +``83f0b9b4789a14a3d762d2f63d6599c7b939536f``. + +The original graph context hook still owns explicit source-plane selection; +the writer performs no second selection. ``ROIArchiveSourceMetadata`` retains +encoding, decoding and geometry projection. ``Output.metadata`` carries the same +declaration. The native reader and its missing/conflicting-source guard are not +changed by this integration. The geometry-test adaptation and cooperative +new-declaration/edge-feature behaviour are the exact receiving version. + +Root's committed integration receipt reports original current-source3RED/4PASS +and87 integrated controls PASS in2.28s, with original before/after logs retained +under RUNS.394's body reports the isolated original R0 graph delta passed with +zero positive deltas. These are Root's execution evidence, not a receiving rerun +or a waiver of394's separate whole-branch architecture/native/performance gates. +Receipt: +https://github.com/OpenHCSDev/openhcs/blob/45f3a721e115b37ab662f362fa5ab4d5e58e1f6e/docs/validation/shared_runtime_plumbing_384_20261001.rst. + +NRA/refactor-audit source review accepts the exact BOUND-2/BOUND-8 repair using +the existing projection/binder owners, without IMPL-12 duplication or another +consumer/registry. No test was repeated, source patch reapplied, foreign worktree +edited or live installation changed for this receiving checkpoint. + +Original receiving witness +-------------------------- + +Parent retained ``GRAPH-ROI-REOPEN-134-RECEIVING-20261002.rst`` under +``/home/ts/wt/openhcs-issue-batch-20260929``. The candidate6 saved +``A01_s001_w2_z001_t001_neurite_morphology_step0.graph.roi.zip`` resolves through +public result inventory but native reopening refuses missing embedded source +identity. Original request/error remains in the author's actual recorder: +``/home/ts/wt/openhcs-issue-batch-20260929/neurite-development-skill383-20261001/output/assisted-2-post426-1.stdout``. +Read-only verification locates ``plate_file_stream_failed`` at line7602 and the +``ValueError`` message requiring native ROI source metadata at line7605, naming +the exact candidate6 graph ZIP above. This corrects the recorder reference in +the ddbc1b197 receipt; historical receiving receipts and original archives remain +unchanged. The original broken archive was not opened, rewritten or backfilled. + +Required relation and original owners +------------------------------------- + +An authorised graph archive must preserve its already-declared source identity, +selected channel/plane, declared coordinate spacing, polyline geometry and +neuron subject/edge features through writing and loading. Native reopening must +still reject absent, unbound, partially bound or conflicting source declarations. + +``SpatialGraph.contextualized_source_provenance`` owns explicit source-plane +selection. ``SpatialGraphFunctionOutputContextStrategy`` consumes that hook and +attaches invocation provenance before materialisation. It already produces a +scalar selected-source graph, including when the original plane index is1. +Selecting that index again from the scalar graph would be incorrect. + +``MaterializationInputItem.metadata`` delegates to ``image_payload_metadata``; +``SpatialGraph`` is not an image-metadata carrier, so that value is empty for +graphs. The original graph carries ``source_provenance`` and +``coordinate_spacing``. The registered graph ROI writer projects those facts +into the existing ``ImagePayloadMetadata`` and ``SourceVoxelSpacing`` owners. +``ROIArchiveSourceMetadata.bind/decode/geometry`` retain the single encoding, +decoding and presentation procedures. ``Output.metadata`` carries the same +declaration into downstream materialisation. No new source schema is introduced. + +Historical exact source proposal +-------------------------------- + +``graph-roi-source-roundtrip-134.patch`` contains the narrow production hunk and +one geometry-test adaptation. Its historical822 admission used zero-context +``git apply --unidiff-zero``. Do not reapply it over Root's integrated45f3a721e. +The production change removes one bare-content +line and adds nine lines in the existing registered leaf writer/imports. The +unchanged binder performs archive encoding. The reader, source-plane projection, +writer registry, subject projection, capture and viewer implementations are +unchanged. Source voxel spacing requires an import from its existing owner; +the first coordination note's statement that core already imported it was +incorrect and is corrected here. + +Synthetic Git comparison commit +``3913c5008b606a51268b5aeb4a3c8a527b89f1b0`` has parent82243634c and only the +proposed core file plus the existing geometry-test adaptation. It is a ratchet +comparison object, not an applied production commit or release branch. + +``tests/unit/test_graph_roi_source_roundtrip_134.py`` exercises actual context +selection, registered materialisation, disk ZIP writing and original ZIP loading. +It asserts both explicit input planes0/1, exact source/channel/names/provenance, +declared1.3556 spacing, fractional Y/X coordinates, node/edge IDs, graph features, +neuron label and typed subject identity, and transport-field removal from geometry. +The misleading archive filename supplies no identity. + +An independent ``AuditedGraph(ProjectionAudit, SpatialGraph)`` declaration +exercises cooperative ``super().__init__`` and before/after +``contextualized_source_provenance`` hooks. Its newly declared +``engineering_confidence`` edge feature survives the same ZIP writer/reader; +no generic consumer or registry changes are needed. This is behavioural MRO +evidence, not an inheritance assertion or ornamental production hierarchy. + +The four rejection cases call the original ``StreamingService.stream_rois`` with +``require_source_metadata=True``. They fail before reaching transport; no native +viewer is instantiated. Successful native streaming remains the later parent gate. +The graph type does not declare cropped source-domain bounds. This checkpoint +does not infer or claim such bounds from coordinates or filenames. + +Bounded qualification and original failures +------------------------------------------- + +Every execution was serial, existing Python/ABI dependencies only, CPU affinity0, +``CPUQuota=100%``, kernel ``MemoryMax=512M``, ``MemorySwapMax=0``, shell deadline60s, +pytest external plugins/cache disabled and numerical thread counts1. Tests use +only explicitly constructed disk storage; a fixture fails optional storage +bootstrap. No native/MCP/UI launch, package/environment change, download, provider, +scientific execution or shared slot was used. + +The existing source-selection runner now loads changed OpenHCS Python modules +directly from pinned Git blobs when ``QA134_GIT_REF`` is supplied. Unchanged files +come from the existing branch, equal to that revision; only the proposed core +overrides a blob. This avoids another worktree/full source snapshot and preserves +the actual current dependency closure instead of monkeypatching product methods. + +Original logs, including harness failures, are retained in the paired archive: + +* ``original.log``: collection fails because a partial current-source selection + lacked ``DurableSourceMetadata``;1.74s/91656KiB. No product assertion executed. +* ``original2.log``: collection fails because mixing current source metadata with + old source bindings lacked ``SourceMetadataIdentityProjection``; + 2.22s/79076KiB. No product assertion executed. +* ``pinned-original.log``: exact pinned source, three native-source-loss REDs + and four rejection controls PASS;2.52s/177464KiB. +* ``proposed.log``: seven receiving cases plus five existing metadata cases, + 12PASS;3.05s/199284KiB. +* ``graph-regression.log``:15PASS/1RED. The existing test compared the bare ROI + feature mapping including transport metadata. This authentic first failure is + retained. The proposed adaptation uses original ``geometry`` before the same + exact feature/coordinate assertions; no assertion is removed or weakened. +* ``graph-regression-final.log``: the existing full graph family,16PASS; + 2.40s/172992KiB. No receiving cases were repeated for ceremony. +* ``r0.log``: original unmodified pinned agent-comms R0 at + ``3b03785f45df2ef5dc62ba6aed99294192ecbb01``, from the existing + ``/home/ts/wt/openhcs-s1-original-ratchet-20261001``. Exact822→3913c5008 + comparison includes the entire changed production core file: exit0, every + delta zero;33.81s/87660KiB. The old UI348 ratchet WT no longer exists; + no new WT or copied detector was created. + +Ownership/antipattern review +---------------------------- + +Refreshed full NRA skill and authoritative refactor-audit ZIP, catalog README, +boundaries, implementation, membership and surface-receipt guidance were read. +NRA skill SHA256: +``9f2f8b28bc82256eefa3e9d63248c50722dc3ffe7d77adba5793296df196b47e``. +Audit ZIP SHA256: +``ef0367d878cc57565f2b257a8e6647a234d4ba4298f61391709d9c3c82bec9f7``. + +BOUND-2/BOUND-8 classify the lost original source declaration at the writer +boundary. IMPL-12 is avoided by reusing the shared binder/decoder/geometry owner +rather than copying metadata encoding. IMPL-3/IMPL-5 and MEMB-1/MEMB-2 introduce +no new consumer type switch, repeated dispatch or roster. The registered writer +is the existing format leaf; shared algorithms remain on their original owners. +No forwarding facade, compatibility reader or parallel store is introduced. +This source review and original R0 pass are not a complete global NRA/R1 scan; +earlier bounded global-scan failures remain in the historical receiving receipts. + +Disposition and later acceptance +-------------------------------- + +Source integration is complete in394 at45f3a721e; no production-hunk dependency +remains for404.404 retains the receiving record and pending installed/native +acceptance, not another implementation to merge over394. Parent controls the +coherent package qualification, installed freeze release and later public +inventory→owned native reopen of a +new correctly written graph ZIP, with source/channel/calibration readbacks and +personally opened same-coordinate raw/result/combined placement. Existing failed +jobs/archives remain unchanged; no biological acceptance is claimed. + +Owned scratch is ``.qa134-graph-20261002`` in Singer's existing persistent WT. +Cleanup remains stopped; no completed disposable directories were deleted here. +The byte-exact original logs and synthetic engineering ZIP inputs/outputs are +archived, not reformatted to remove their authentic whitespace. +Archive: ``graph-roi-source-roundtrip-134-source-20261002.tar.gz``; SHA256 +``0b04936ffd6f54fb124f4c5ce27f300f72bd83af01922bc874e7e5014efbf375``. +Direct archive reads match the original negative and positive raw-log hashes. diff --git a/docs/validation/pr394-404-private-install-20261002.tar.gz b/docs/validation/pr394-404-private-install-20261002.tar.gz new file mode 100644 index 0000000000..d8caaa3ed2 Binary files /dev/null and b/docs/validation/pr394-404-private-install-20261002.tar.gz differ diff --git a/docs/validation/pr394-404-wheel-receiving-20261002.rst b/docs/validation/pr394-404-wheel-receiving-20261002.rst new file mode 100644 index 0000000000..76528bb8a1 --- /dev/null +++ b/docs/validation/pr394-404-wheel-receiving-20261002.rst @@ -0,0 +1,295 @@ +Ordinary wheel for394/404 public receiving acceptance +==================================================== + +Owner: Singer, wheel preparation only. Root retains394 production integration; +parent reviewed the wheel and authorized one private installation, and owns later public +inventory -> native graph reopening. Dalton retains the original assisted5 +journals and source closure. No scientific execution is authorized here. + +Pinned production:394 ``94ee1079d22540f9b5ed48b69481d7e7ab51095d``. +Pinned receiving receipt:404 ``dd3242d01fc74203ef077e88a7d18a4cc81f9e1d``. +This branch is based directly on394 and carries only that404 receipt. It does +not merge404's historical implementation or introduce another writer. +Both current PR heads and Root's shared claims were read before preparation. + +Existing checkout ``/home/ts/wt/openhcs-knowledge-lazy-conversion-20261001`` is +reused, including all retained untracked QA ledgers. The original ordinary +PEP517/setuptools build uses existing ``basicpy-live-candidate-20260930/.venv`` +tools with no isolation, dependency installation, download or environment creation. +``validation/build-394-404-receiving-wheel-20261002.sh`` records exact admission. + +Private artifacts live only under the existing parent qroot: +``/home/ts/wt/openhcs-issue-batch-20260929/carrier434-installed-20261002/engineering394404-wheel-94ee-dd324-20261002``. +The ordinary wheel is built and source/member verification passes. The subsequent +authorized private install and byte verification also pass, detailed below. +Initial parent resource helper reports home7.0GiB, RAM10.5GiB, swap12.8GiB: +critical advisory. Preparation remains serial, CPU0/one CPU, kernel512MiB, +no swap and60s; no heavy fleet, native viewer or scientific run is launched. + +Current394 already contains the accepted source publication and graph binder +repairs. Existing source qualification is reused; original failures and unknown +collision components remain unchanged. The remaining installed gate is actual +Site001 CYX/order/provenance plus ordinary public result inventory -> source-bearing +native graph reopen, exact source/channel/calibration/geometry/subject features +and matched raw/result/combined placement. A wheel alone does not establish that +gate, biological acceptance or Root's performance target. + +Terminal build and source-member qualification +--------------------------------------------- + +Build source checkpoint ``9d65d4b6cb6b6a66b4bf08cb1c3ef4b2e8e8d6ea`` adds only +receiving documentation and a build driver atop exact394. No production, +benchmark, packaging configuration or build-helper bytes differ from94ee1079d. +The carried graph receipt is byte-identical to404dd3242d01. Current394 remained +94ee1079d at final verification; later Root heads require separate review. + +Private wheel relative to the artifact root above: +``wheels/openhcs-0.8.7-cp311-abi3-linux_x86_64.whl``. +Size:4224047 bytes. SHA256: +``f236ccfb557c2c08f5ac8c174fd0e5350ad4c9f552fb02b1d302b46d52dd8c60``. +Its approved private target is identified in the install checkpoint below. + +The existing Python3.12.3/setuptools84.0.0/wheel0.45.1/build1.2.2.post1 +environment executed the original PEP517/setuptools owner without isolation or +dependency resolution. Both declared stable-ABI native extensions are in the +ordinary wheel. No extension is imported or exercised by this preparation. +No dependency, Fiji, scientific data or source-tree installation was created. + +* ``build-original.log``: exit127,0.01s; systemd's initial working directory + did not contain the relative driver. Builder never started; original failure + remains unchanged. This is a terminal harness failure, not UNKNOWN input. +* ``build-qualified.log``: explicit working directory and absolute driver, + exit0,17.21s wall; process max147004KiB, aggregate systemd peak224.6MiB, + zero swap. Successfully built the ordinary cp311-abi3 wheel. +* ``member-verification-original.log``: exit0,0.80s; max24680KiB, + aggregate peak33.5MiB, zero swap. Every wheel member has its byte count and + SHA256 in the original JSON output. All814 tracked wheel members match source; + all792 Python members derived from original setuptools include/exclude + declarations are covered. Every member's original RECORD hash/size passes. + +Both successful commands used ``systemd-run --user --wait --pipe`` with +``MemoryMax=512M``, ``MemorySwapMax=0`` and ``CPUQuota=100%``; ``timeout60s`` +and ``taskset -c0`` wrap the original build/verifier. Systemd units are terminal +and auto-unloaded; querying their defaults afterwards is not a new limit proof. +No operation is running or pending, and no failed/unknown author input is replayed. + +Source tree identities at the pinned production head: +``openhcs`` Git tree ``8767dfdcd5f5944fa961d11c7cafb05219502215``; +``benchmark`` Git tree ``69f043fbb08d382c42fa2cc0fcb3adc86d8c0cb0``. +The read-only verifier does not import OpenHCS. It derives package membership from +pyproject.toml and tracked Git paths, then consumes the wheel's original RECORD; +it introduces no product registry, schema, native reader or source authority. + +Byte-exact original logs and complete wheel-member/source-hash JSON are archived +in ``pr394-404-wheel-receiving-20261002.tar.gz``. SHA256: +``782ffa907f02b1759aa62b1a5135cae85116a22badf699f5e6725d62b8112ead``. +Raw logs retain authentic whitespace. No source tests or ratchets were repeated +for this unchanged production packaging checkpoint. Diff whitespace passes. + +Parent reviewed this pinned source/wheel and authorized the private install below. +Use only that private target beneath the existing artifact root for the actual +public inventory -> owned native graph receiving journey, plus Site001 CYX/order/ +provenance. Existing retinal QA viewer6006, native/author handoff, original sessions +and scientific outputs are not touched. Root394 production/performance and404 +installed acceptance remain their original owners, not a new parallel writer. + +Owned terminal scratch cleanup +------------------------------ + +After logs were archived and byte-exact matches checked, lsof found no handles +on this build's two newly created disposable directories. Removed only +``/home/ts/wt/openhcs-knowledge-lazy-conversion-20261001/build`` (20406272 allocated +bytes) and ``/home/ts/wt/openhcs-knowledge-lazy-conversion-20261001/openhcs.egg-info`` +(98304 bytes), releasing20504576 bytes. Neither existed before this build. +Removal is permanent; original setup/source and archived build log regenerate +them. The private wheel and original logs/member receipt remain unchanged. +All earlier untracked QA ledgers, source, failed fixtures, saved viewers and +UNKNOWN dispositions remain. No parent cache, environment, dependency/Fiji +installation, foreign WT or scientific artifact was removed. + +Authorized private install and byte verification +----------------------------------------------- + +Parent independently ran the existing verifier atc5722d937 and reviewed the full +source/build/member receipt, then explicitly authorized ONE offline/no-deps +installation into a new unused private target. That operation is terminal: + +``/home/ts/wt/openhcs-issue-batch-20260929/carrier434-installed-20261002/engineering394404-wheel-94ee-dd324-20261002/target-reviewed-f236ccfb-20261002``. + +The installer checks the approved wheel SHA256, refuses an existing target and +claims the directory with non-overwriting mkdir. Existing interpreter only: +``python -B -m pip install --no-deps --no-index --no-compile --no-cache-dir +--target ``. Exact driver is +``validation/install-394-404-private-wheel-20261002.sh``. No canonical/global +package, dependency, .pth, old target, environment or saved source is changed. + +Host advisory remained critical: resource helper reported home6.2GiB, available +RAM6.0GiB and swap13.3GiB. Immediate admission readback showed MemAvailable +8308252KiB and memory PSI some/full avg10=0.00. This small operation could fit +its unchanged512MiB bound; no heavy slot or fleet was admitted. + +* ``private-install-original.log``: exactly one install, exit0,0.90s wall, + max49280KiB RSS, aggregate79.3MiB, zero swap. +* ``installed-bytes-original.log``: exit0,0.41s wall, max25108KiB RSS, + aggregate20.4MiB, zero swap. All883 original non-RECORD wheel members are + byte-identical in the private target, including all Python, stable-ABI native + modules and original distribution metadata. All814 tracked source members + and792 declared Python members remain covered. Their installed RECORD + hash/size entries equal the original wheel's entries. + +Pip owns installed RECORD rewriting and generated scripts/INSTALLER/REQUESTED/ +direct_url metadata. The verifier does not mislabel that RECORD as byte-identical +to the wheel: it compares original payload entries and verifies direct_url's +exact wheel URL/SHA256. INSTALLER is pip; the target contains no .pth. No +OpenHCS, scientific or native module is imported. This extends the original +read-only verifier's existing member loop, not another product reader/store. +Both operations retain CPU0/CPUQuota100%, kernel MemoryMax512MiB, +MemorySwapMax0 and60s. No retry, UNKNOWN replay or broad source suite is run. + +Byte-exact install/member logs are archived separately; the original build archive +is unchanged. ``pr394-404-private-install-20261002.tar.gz`` SHA256: +``65a94c07d3fb705f463221486af24b7094d91d7c04a9e22973b83f9577da1adb``. +Direct archive reads match both original log hashes. Private target retained; +no application startup, source execution, native viewer or live readiness follows +from this installed-byte checkpoint. + +Existing public receiving owner and next ports +--------------------------------------------- + +Reuse ``PublicJourney`` from the existing +``/home/ts/wt/openhcs-prior-measurement-role-projection-20261001/validation/public_two_vector_388.py`` +with original ``McpDevClient(use_resident_server=False)``. It uses the existing +capability declarations, typed decoder, original10s client bound and exclusive +journal writes; each mutation is sent once and uncertain results stop. The +existing parent invocation example is +``/home/ts/wt/openhcs-issue-batch-20260929/paired397-388-installed-20261001/verify-reopen399-viewer.py``; +its historical candidate-image constants are not a new graph fixture. Reuse its +owner/session, not its old scientific input or top-level trial. + +For parent's next new engineering materialization, the original public calls are +``openhcs_query_plate_files`` with ``kind=result`` and the exact result directory, +then ``openhcs_stream_plate_files_to_viewer`` with the returned canonical graph +record path and an explicit owned TCP endpoint. The original typed contracts are +``PlateFileQueryRequest``/``PlateFileStreamRequest`` in +``openhcs/agent/dto/plate.py``. Follow with original window-state/payload and +render-complete snapshot controls, source/scale/geometry/subject readbacks and +personally opened matched raw/result/combined placement. Result graph archives +must carry native source metadata; an image source receipt is not fabricated to +bypass the separate explicit-result-image guard. No filename establishes source +identity, and old broken graph ZIPs/jobs are not backfilled or replayed. + +Parent owns the installed/native acceptance slot and endpoint incarnation. +Historical isolated pair is viewer5992/native5993 on DISPLAY91; the read-only TCP +check at this checkpoint found neither listening, not a reservation or proof of +IPC absence.6006 is occupied by parent's protected retinal QA viewer513495 and +must not be reused/stopped. Recheck actual ownership before any launch. Do not +default to foreign7777. From a directory outside source, admission for the fresh +MCP/native child must put this private target first on its import route while +reusing existing dependencies; no .pth/global change is needed. + +Root retains394 source/materialization/projection/performance, Singer retains +404/472 receiving records, parent retains live integration, Dalton retains +assisted5 journals/scientific custody, and Dewey retains H003 handoff repair. +No native or scientific run is started by this install. Site001 CYX/order/ +provenance and public inventory -> native graph receiving remain parent's gate. + +Parent independent receiving checkpoint +--------------------------------------- + +Parent independently reran the updated existing verifier and accepted all883 +non-RECORD installed payload/metadata bytes and the direct URL/wheel hash. Its +durable review is ``PARENT-PRIVATE-INSTALL-REVIEW.rst`` in the same engineering +artifact root. This confirms installed identity, not native ABI use or graph QA. +The ordinary wheel, target and original archives remain retained.472 stays draft; +it is not merged into Root without Root coordination. Parent retains actual +Site001/graph validation, prioritizing original H003 allowance restoration before +any new native/scientific fleet. No application is launched here. + +Only terminal install tmp was removed: the empty, handle-free owned +``engineering394404-wheel-94ee-dd324-20261002/scratch/tmp`` directory under the +artifact qroot (4096 allocated bytes). rmdir removed no files; this disposable +container is regenerable. All source, original logs, saved viewers, private target, +ordinary wheel, earlier evidence and UNKNOWN dispositions remain untouched. + +Receiving comparison with current394 eb2f23ef +-------------------------------------------- + +Parent requested this source-only review before its installed graph journey. +Compared immutable wheel production94ee1079d with live394 head +``eb2f23efdf6c9f7d4da0e5692567b3535f23f257``; the latter incorporates main +``a6c18f054457b7693fb0585ca2167b43325a0c01``. Neither source movement nor this +review authorizes another build/install. The approved wheel, target, byte +receipts,404dd324 graph receipt and original failed/UNKNOWN inputs stay unchanged. + +Read the complete Git delta (23 files, four production files), then the original +graph/provenance/projection/alignment/publication/role consumers, public inventory +and streaming contracts, strict native reader, Napari source/feature projection, +renderer inheritance and processing-preparation callers. The comparison includes +all production roots, not only the historical graph patch. Reproduce the complete +production/dependency difference with:: + + git diff --name-status 94ee1079d eb2f23ef -- openhcs benchmark external \ + packaging scripts tools pyproject.toml setup.py setup.cfg MANIFEST.in \ + .gitmodules requirements-omero.txt server.json + +Exactly four paths differ: + +* ``openhcs/mcp/dev_client_renderers/plate.py``: merged469 direct/selected sample + formatting now inherits ``McpDevTypedOutputRenderer``. Original typed decoding + and diagnostics replace raw outer-envelope reads and a manufactured nested + MCP response. Compact missing/error/omission presentation is changed. +* ``openhcs/mcp/dev_client_renderers/viewer.py``: only + ``ViewerImageSampleRenderer`` uses the inherited scalar-preview counter instead + of its deleted copy. Inventory, stream, state, payload, ROI summary, navigation + and snapshot renderer implementations are unchanged. +* ``openhcs/mcp/dev_client_rendering.py``: the existing typed ancestor gains + ``json_value_count`` shared by those three sample leaves. Its existing decoding, + diagnostics and nominal payload dispatch methods are unchanged. Public sample + producers, DTOs, serialization and generated commands are unchanged; compact + sample rendering cannot be represented as byte-identical current acceptance. +* ``openhcs/processing/backends/cellprofiler/illumination.py``: merged474 adds ten + lines to the declared ``_prepare_correct_illumination_calculate`` hook, preparing + canonical float64 contiguous images and bool masks in masked/unmasked and + writable/read-only combinations. Numerical processing bodies are unchanged; + the registered readiness lifecycle now performs additional JIT preparation. + The94ee target does not exercise that newer readiness behavior. + +Every other production/dependency path above has zero diff, including all core, +agent and runtime declarations/consumers, interop, IO, processing materialization, +graph leaf, benchmark, packaging and dependency/configuration sources. Complete +tree identities agree at both heads (not a selected-file equality assertion): + +* ``openhcs/core``: ``54ec18e75054af860534a40064cdc4c8760de89f``. +* ``openhcs/runtime``: ``2713fda4ec6185b465d0f28a1c2a41c73cea8770``. +* ``openhcs/agent``: ``62f607cb7486270fb4d2ca82b02af09b3aabd651``. +* ``openhcs/processing/materialization``: + ``3df1b7ce9f402014f14d17766cba33f3244f0dbc``. + +The graph writer still derives ``ImagePayloadMetadata`` from graph provenance +and coordinate spacing, then calls original ``ROIArchiveSourceMetadata.bind`` +for archive content and supplies the same metadata to ``Output``. Public result +inventory/selection stays under original inspection/streaming services. The +reader still rejects missing represented source identities before projecting +geometry; image source-receipt guards are not relaxed. ``SourceProjectionSet``, +``AlignedImageSliceContext``, selected-source axis/CYX normalization, role and +filename identity, materialization/publication and Napari feature/scale consumers +are unchanged across their complete core/runtime/agent families. No old writer +proposal is reapplied and no acquisition/scientific file is inspected. + +All eight external gitlinks and dependency declarations are identical. This is +Git source/declaration identity, not a fresh dependency installation or native ABI +test. Existing469 AST/new-capability evidence is reused, not rerun. Current NRA +and authoritative audit catalog were read: BOUND-1/2 concern the removed raw +sample reader, IMPL-12 the deleted preview counter copies, BOUND-8 the preserved +typed source/role boundaries, and AGENT-7 prohibits a ceremonial rebuild. No +structural implementation is performed here and no new R0/R1 pass is asserted. + +Root retains production integration and the two semantic deltas above. Direct +coordination on394 receives these exact pins/deltas; Dalton receives the same +source/publication boundary. Parent can qualify the immutable94ee graph/Site001/ +roles path at its actual installed strength. That does not qualify current394 +sampling presentation or merged474 readiness, and source identity alone is not +live reopening evidence. WholeRoot R0 remains RED (+1 switch/+3 arms), exactly as +its current public body records; neither472 readiness nor pinned receiving +acceptance waives it or queues a final-main merge. Parent's public inventory -> +native graph reopening and Site001 CYX/order/provenance gate remains outstanding. diff --git a/docs/validation/pr394-404-wheel-receiving-20261002.tar.gz b/docs/validation/pr394-404-wheel-receiving-20261002.tar.gz new file mode 100644 index 0000000000..f45d519493 Binary files /dev/null and b/docs/validation/pr394-404-wheel-receiving-20261002.tar.gz differ diff --git a/validation/build-394-404-receiving-wheel-20261002.sh b/validation/build-394-404-receiving-wheel-20261002.sh new file mode 100644 index 0000000000..72856bcc1e --- /dev/null +++ b/validation/build-394-404-receiving-wheel-20261002.sh @@ -0,0 +1,18 @@ +#!/bin/bash +set -euo pipefail +# Reuse the original ordinary setuptools/PEP517 owner and installed build tools. +# No installation, dependency resolution, isolation, package import or native UI. +unset PYTHONPATH +export PYTHONDONTWRITEBYTECODE=1 OPENHCS_CPU_ONLY=true CUDA_VISIBLE_DEVICES= +export OMP_NUM_THREADS=1 OPENBLAS_NUM_THREADS=1 MKL_NUM_THREADS=1 NUMBA_NUM_THREADS=1 +export MAX_JOBS=1 CARGO_BUILD_JOBS=1 +export PIP_NO_INDEX=1 PIP_DISABLE_PIP_VERSION_CHECK=1 UV_OFFLINE=1 +export POLYSTORE_IMAGEJ_ALLOW_DOWNLOAD=false +export XDG_CACHE_HOME=/home/ts/wt/openhcs-issue-batch-20260929/carrier434-installed-20261002/engineering394404-wheel-94ee-dd324-20261002/scratch/cache +export TMPDIR=/home/ts/wt/openhcs-issue-batch-20260929/carrier434-installed-20261002/engineering394404-wheel-94ee-dd324-20261002/scratch/tmp +cd /home/ts/wt/openhcs-knowledge-lazy-conversion-20261001 +git merge-base --is-ancestor 94ee1079d22540f9b5ed48b69481d7e7ab51095d HEAD +git diff --exit-code 94ee1079d22540f9b5ed48b69481d7e7ab51095d -- openhcs benchmark scripts pyproject.toml setup.py MANIFEST.in +exec /home/ts/wt/basicpy-live-candidate-20260930/.venv/bin/python -B -m build \ + --wheel --no-isolation \ + --outdir /home/ts/wt/openhcs-issue-batch-20260929/carrier434-installed-20261002/engineering394404-wheel-94ee-dd324-20261002/wheels diff --git a/validation/install-394-404-private-wheel-20261002.sh b/validation/install-394-404-private-wheel-20261002.sh new file mode 100644 index 0000000000..4cd554ba64 --- /dev/null +++ b/validation/install-394-404-private-wheel-20261002.sh @@ -0,0 +1,16 @@ +#!/bin/bash +set -euo pipefail +# Explicit parent authorization: one install into this new unused private target. +unset PYTHONPATH +export PYTHONDONTWRITEBYTECODE=1 PIP_NO_INDEX=1 PIP_DISABLE_PIP_VERSION_CHECK=1 +export UV_OFFLINE=1 POLYSTORE_IMAGEJ_ALLOW_DOWNLOAD=false +export OPENBLAS_NUM_THREADS=1 OMP_NUM_THREADS=1 MKL_NUM_THREADS=1 +export TMPDIR=/home/ts/wt/openhcs-issue-batch-20260929/carrier434-installed-20261002/engineering394404-wheel-94ee-dd324-20261002/scratch/tmp +wheel_path=/home/ts/wt/openhcs-issue-batch-20260929/carrier434-installed-20261002/engineering394404-wheel-94ee-dd324-20261002/wheels/openhcs-0.8.7-cp311-abi3-linux_x86_64.whl +target_path=/home/ts/wt/openhcs-issue-batch-20260929/carrier434-installed-20261002/engineering394404-wheel-94ee-dd324-20261002/target-reviewed-f236ccfb-20261002 +test "$(sha256sum "$wheel_path" | cut -d ' ' -f 1)" = f236ccfb557c2c08f5ac8c174fd0e5350ad4c9f552fb02b1d302b46d52dd8c60 +test ! -e "$target_path" +mkdir -- "$target_path" +exec /home/ts/wt/basicpy-live-candidate-20260930/.venv/bin/python -B -m pip install \ + --no-deps --no-index --no-compile --no-cache-dir \ + --target "$target_path" "$wheel_path" diff --git a/validation/verify-394-404-receiving-wheel-20261002.py b/validation/verify-394-404-receiving-wheel-20261002.py new file mode 100644 index 0000000000..0945bf469b --- /dev/null +++ b/validation/verify-394-404-receiving-wheel-20261002.py @@ -0,0 +1,126 @@ +"""Read-only ordinary wheel/source/RECORD receipt; does not import OpenHCS.""" + +import base64 +import csv +import fnmatch +import hashlib +import io +import json +from pathlib import Path +import subprocess +import sys +import tomllib +import zipfile + + +source = Path(__file__).resolve().parents[1] +source_ref = "94ee1079d22540f9b5ed48b69481d7e7ab51095d" +receipt_ref = "dd3242d01fc74203ef077e88a7d18a4cc81f9e1d" +artifact_root = Path(sys.argv[1]).resolve() +wheel, = (artifact_root / "wheels").glob("*.whl") +target = Path(sys.argv[2]).resolve() if len(sys.argv) == 3 else None +if target is not None: + assert target != artifact_root and target.is_relative_to(artifact_root) + assert target.is_dir() + assert not list(target.rglob("*.pth")), "Unexpected installed path injection" + +subprocess.run( + ["git", "diff", "--exit-code", source_ref, "--", "openhcs", "benchmark", + "scripts", "pyproject.toml", "setup.py", "MANIFEST.in"], + cwd=source, check=True, +) +receipt_path = "docs/validation/graph-roi-source-roundtrip-134.rst" +assert (source / receipt_path).read_bytes() == subprocess.check_output( + ["git", "show", f"{receipt_ref}:{receipt_path}"], cwd=source, +) +tracked = set(subprocess.check_output( + ["git", "ls-tree", "-r", "--name-only", "-z", source_ref], cwd=source, +).decode().rstrip("\0").split("\0")) +packaging = tomllib.loads((source / "pyproject.toml").read_text()) +discovery = packaging["tool"]["setuptools"]["packages"]["find"] +expected_python = set() +for name in tracked: + path = Path(name) + if path.suffix != ".py": + continue + package = ".".join(path.parent.parts) + if any(fnmatch.fnmatchcase(package, rule) for rule in discovery["include"]): + if not any(fnmatch.fnmatchcase(package, rule) for rule in discovery["exclude"]): + expected_python.add(name) + +members = [] +matched = set() +installed_members = 0 +with zipfile.ZipFile(wheel) as archive: + names = archive.namelist() + assert len(names) == len(set(names)), "Duplicate wheel members" + record_name, = [name for name in names if name.endswith(".dist-info/RECORD")] + record = { + name: (digest, size) + for name, digest, size in csv.reader(io.StringIO(archive.read(record_name).decode())) + } + installed_record = None + if target is not None: + installed_record = { + name: (digest, size) + for name, digest, size in csv.reader( + io.StringIO((target / record_name).read_text()) + ) + } + assert (target / Path(record_name).parent / "INSTALLER").read_text() == "pip\n" + assert set(record) == set(names), "Wheel RECORD/member mismatch" + for name in names: + data = archive.read(name) + digest = hashlib.sha256(data).hexdigest() + recorded_hash, recorded_size = record[name] + if name == record_name: + assert recorded_hash == recorded_size == "" + else: + record_hash = base64.urlsafe_b64encode(hashlib.sha256(data).digest()).decode().rstrip("=") + assert recorded_hash == f"sha256={record_hash}", name + assert recorded_size == str(len(data)), name + if target is not None: + assert (target / name).read_bytes() == data, name + assert installed_record[name] == record[name], name + installed_members += 1 + tracked_source = name in tracked + if tracked_source: + assert (source / name).read_bytes() == data, name + matched.add(name) + members.append({ + "path": name, "sha256": digest, "bytes": len(data), + "tracked_source_equal": tracked_source, + }) + assert expected_python <= matched, sorted(expected_python - matched) + generated_native = [name for name in names if name.endswith(".abi3.so")] + assert generated_native, "Ordinary wheel has no compiled declared native extensions" + +with wheel.open("rb") as stream: + wheel_sha256 = hashlib.file_digest(stream, "sha256").hexdigest() +if target is not None: + direct_url = json.loads((target / Path(record_name).parent / "direct_url.json").read_text()) + assert direct_url["url"] == wheel.as_uri() + assert direct_url["archive_info"]["hashes"]["sha256"] == wheel_sha256 +print(json.dumps({ + "source_ref": source_ref, + "receiving_ref": receipt_ref, + "build_checkpoint": subprocess.check_output(["git", "rev-parse", "HEAD"], cwd=source, text=True).strip(), + "production_unchanged": True, + "receiving_receipt_byte_equal": True, + "wheel": str(wheel), + "wheel_sha256": wheel_sha256, + "wheel_bytes": wheel.stat().st_size, + "tracked_source_members_equal": len(matched), + "declared_python_members_covered": len(expected_python), + "record_verified": True, + "generated_native_members": generated_native, + "members": members, + "installed": target is not None, + "installed_target": None if target is None else str(target), + "installed_original_members_equal": installed_members, + "installed_metadata_byte_equal": target is not None, + "installed_record_policy": ( + "Original payload hashes/sizes equal; pip rewrites RECORD and adds installer metadata/scripts" + if target is not None else None + ), +}, indent=2, sort_keys=True))