[GH-ISSUE #4136] [Bug] Windows packaged verifier loses its result on transient install-root cleanup failure #1632

Closed
opened 2026-10-16 21:08:12 +00:00 by bsakaguchi · 1 comment
Owner

Originally created by @N0zoM1z0 on GitHub (Oct 15, 2026).
Original GitHub issue: https://github.com/morluto/rea/issues/4136

After getting past the independent Windows package-verifier blockers #4125, #4128, and #4134 in a test-only copy, the real ordinary-user scripts/verify-packaged-wasm-artifact.mjs lane installed the npm artifact but failed while closing its PrivateRuntimeRoot.

PrivateRuntimeRoot.close() received Win32 32 while opening an installed dependency file relative to its retained directory handle:

prefix\\node_modules\\rea-agents\\node_modules\\@babel\\parser\\CHANGELOG.md

The npm child had exited and the owning Windows Job settled at active-process count zero. The close failure replaced any earlier child result, left the owned package root on disk, and the verifier offers no retry/retention report to the caller.

Reproduced from PR #4117 head ecd04eea840385caeb7b595c827845b6ff8c6c88 on Windows 11 x64 with Node 24.18.0 and npm 11.16.0. The ordinary-user lane ran with two logical CPUs, BelowNormal priority, and a 2 GiB Job limit: 170.40-second Job wall, 95.30 sampled process-family CPU seconds, 492,584,960-byte peak Job commit, 489,078,784-byte sampled peak working set, 10,838,581,248-byte minimum host free memory, and Job0.

Expected behavior: the package verifier must retain cleanup ownership and retry transient sharing violations with a bounded policy after child settlement. If the operation also failed, report both causes rather than replacing the operation error. Inspect the installation-root ownership boundary and affected verifier consumers instead of weakening Windows native sharing.

Local receipts and the retained owned root are under /tmp/rea-windows-e2e-20261013/results/issue4109-fix/; no package or binary is published.

Originally created by @N0zoM1z0 on GitHub (Oct 15, 2026). Original GitHub issue: https://github.com/morluto/rea/issues/4136 After getting past the independent Windows package-verifier blockers #4125, #4128, and #4134 in a test-only copy, the real ordinary-user `scripts/verify-packaged-wasm-artifact.mjs` lane installed the npm artifact but failed while closing its `PrivateRuntimeRoot`. `PrivateRuntimeRoot.close()` received Win32 32 while opening an installed dependency file relative to its retained directory handle: `prefix\\node_modules\\rea-agents\\node_modules\\@babel\\parser\\CHANGELOG.md` The npm child had exited and the owning Windows Job settled at active-process count zero. The close failure replaced any earlier child result, left the owned package root on disk, and the verifier offers no retry/retention report to the caller. Reproduced from PR #4117 head `ecd04eea840385caeb7b595c827845b6ff8c6c88` on Windows 11 x64 with Node 24.18.0 and npm 11.16.0. The ordinary-user lane ran with two logical CPUs, BelowNormal priority, and a 2 GiB Job limit: 170.40-second Job wall, 95.30 sampled process-family CPU seconds, 492,584,960-byte peak Job commit, 489,078,784-byte sampled peak working set, 10,838,581,248-byte minimum host free memory, and Job0. Expected behavior: the package verifier must retain cleanup ownership and retry transient sharing violations with a bounded policy after child settlement. If the operation also failed, report both causes rather than replacing the operation error. Inspect the installation-root ownership boundary and affected verifier consumers instead of weakening Windows native sharing. Local receipts and the retained owned root are under `/tmp/rea-windows-e2e-20261013/results/issue4109-fix/`; no package or binary is published.
Author
Owner

@morluto commented on GitHub (Oct 15, 2026):

Addressed structurally on main in 0679a7972. Bounded Win32 32/33 close retries live at WindowsPrivateRuntime, which retains the same native owner through partial cleanup. Creation admission remains separate. Persistent conflicts preserve the exact final cause and registered owner for a later explicit close; permanent/unproven errors are not retried. Packaged-WASM, packet and signal verifiers now aggregate cleanup without losing their primary failure.

The old-source retry regressions failed; 9 source controls passed after the fix, including native code 5, missing/string codes, nested metadata and concurrent closes. Main CI passed all36 jobs (https://github.com/morluto/rea/actions/runs/38792163880); the Windows lane reports cleanupFailureRetainsOwnershipForRetry=true and cleanupTransientConflictRetries=true. The full WABT packaged lane was not run locally, and this does not promise removal while an external lock persists. Closing as addressed.

<!-- gh-comment-id:6200537383 --> @morluto commented on GitHub (Oct 15, 2026): Addressed structurally on main in 0679a7972. Bounded Win32 32/33 close retries live at WindowsPrivateRuntime, which retains the same native owner through partial cleanup. Creation admission remains separate. Persistent conflicts preserve the exact final cause and registered owner for a later explicit close; permanent/unproven errors are not retried. Packaged-WASM, packet and signal verifiers now aggregate cleanup without losing their primary failure. The old-source retry regressions failed; 9 source controls passed after the fix, including native code 5, missing/string codes, nested metadata and concurrent closes. Main CI passed all36 jobs (https://github.com/morluto/rea/actions/runs/38792163880); the Windows lane reports cleanupFailureRetainsOwnershipForRetry=true and cleanupTransientConflictRetries=true. The full WABT packaged lane was not run locally, and this does not promise removal while an external lock persists. Closing as addressed.
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
morluto/rea#1632
No description provided.