WinHelp qualified DLL path integration review — 2026-10-20

Independent source review passes for candidate 02d53c85c0c956f784bb2d82da94f75ca9fca2e7 from task/winhelp-native-failure-retry-oct20, applied to fetched main ee139a0947c82e3a8eba4920508cb760d99882f5 in a fresh sparse worktree. The three candidate files are byte-identical to that commit. No additional production correction was needed. Army, callback census and JS COM changes are retained through the main parent; the only additional file is this report.

The prior worker terminated with exit 143 after its verified push. Its saved events contain the successful push and matching remote ref. Its final receipt is absent: neither result.json nor the receipt.json mentioned prospectively in its note exists in its evidence directory. The reason for termination is unknown. This review does not manufacture a prior receipt or modify that worker's evidence or worktree.

Ownership review

On this exact main, qualified lookup uses find_dll_by_path_locked; it does not fall back to an export basename. The resolver's separate help_dup_cstring allocation is published as next_dll_path while the loader lock is held. Successful load_dll stores it in DLL_PATH_TABLE and lifecycle offset 60, clears the pending pointer and publishes last_loaded_dll_index. Generation retirement clears the table and frees that saved allocation. The document's registration string therefore remains independent.

On rejected mapping, the loader leaves last_loaded_dll_index negative, clears next_dll_path, releases the lock and does not take ownership. The new branch frees the copy and both temporary read allocations without initializing a failed row. Copy allocation failure frees the read temporaries. A zero DllMain entry is not confused with failed mapping: the resolver checks the published row index. Missing exports still return zero. Review is scoped to this change; the source model is not a full VFS, allocator or loader test.

Independent checks

Run from the repository:

node scratch/runs/20261020-winhelp-path-review-integrate/replay.js

The self-contained replay needs Node only:

The initial review harness used an extra parser filename and exceeded the parser's 128-file location table during the full census. Reusing the actual source filename corrected the harness; the complete replay then passed. No production change was involved.

Evidence and limits

scratch/runs/20261020-winhelp-path-review-integrate/ contains source identities, compressed full-source input, snapshots, original evidence copy, original push events, baseline, replay, logs, validation, hashes and this review's final receipt. result.json records the exact tested integration commit and verified remote refs after publication; it is this review's receipt only.

No runtime, Boat, browser or full build was used. Source checks do not establish native success. The three native WinHelp scenarios remain pending requalification: build the exact integrated candidate under the canonical gates, then run help-ordinary, help-nested and help-timeout once each with the original fixture and unchanged oracle, retaining the module hash and source manifest. Require actual DLL entry/arguments/results, register and ESP restoration, nested or timeout evidence as appropriate, and 70 successful siblings; stop on failure. The prior native observations were failures, not post-fix results.