Skip to content

fix: guard lock handoffs and ZIP read integrity - #189

Merged
clawsweeper[bot] merged 3 commits into
mainfrom
fix/0.7.1-live-consumer-regressions
Sep 1, 2026
Merged

fix: guard lock handoffs and ZIP read integrity#189
clawsweeper[bot] merged 3 commits into
mainfrom
fix/0.7.1-live-consumer-regressions

Conversation

@steipete

@steipete steipete commented Sep 1, 2026

Copy link
Copy Markdown
Contributor

Summary

Fix the four failures found by fresh installed-consumer testing of published 0.7.0: Root-backed async lock handoffs, synchronous stale classification, synchronous failed-release retries, and native selected ZIP entry size verification. Also fix the Windows sync-lock canonicalization and open-denial gaps exposed by the new real-process proof, and clarify the TAR error-code wording found during validation.

Production source is 342 lines added / 120 deleted / net +222 across src/ and native/src/. ZIP and sync fixes account for net +57; the remaining growth is the bounded async observation/ownership path. Most of the overall diff is deterministic regression coverage and a standalone cross-process proof. No new public API, dependency, version bump, or publication is included.

Ownership and safety

Create-only Root preflight no longer opens an existing file merely to inherit a mode it cannot use. Boundary, alias, hardlink and type checks remain. Failed opened-file observations during async acquisition may be discarded only with operation-specific provenance, an inspectable exact-identity unlinked descriptor, and rechecked canonical ancestry. Discarding is not proof of pathname absence and provides no release/reclaim authority; a fresh exclusive creation is still required, and retry/deadline budgets apply. Generic Root reads, moved-but-linked/unknown descriptors, changed ancestry and caller errors remain strict.

Post-create admission compares the original serialized bytes/token before registering a holder. Cleanup retains that creator receipt rather than adopting a replacement's stat. Sync staleness uses the validated snapshot mtime, and failed sync release keeps its final reference and cleanup receipt. Descriptor ownership is consumed before close, since a failed close can already have freed the number; retry cannot close an unrelated reused descriptor.

Windows sync parent canonicalization now agrees with Root, including 8.3 short-name expansion. Open-denial retries reuse the existing eight-denial cap, are scoped to actual lock-file opens, consume caller budgets, and preserve the original error on exhaustion. Missing or changed snapshots also consume retry budgets; parser/read/stat errors are not disguised as missing paths. Held verification, release and reclaim remain strict. The previous test expecting an ordinary valid Windows Root-sync acquisition to fail was replaced with successful default/explicit path and reentrant-identity checks, retaining outside-root/junction/error controls.

The native ZIP reader verifies decoded length after its existing bounded, CRC-checking read. Both short and long declared-size mismatches reject; valid data, CRC rejection and byte caps remain unchanged.

Executed before/after behavior

Published-package runs captured Root async path-mismatch/Windows resolver failures, false sync file_lock_stale, a sync release retry leaving its sidecar after EACCES, and native ZIP reads accepting 16 decoded bytes declared as 1 or 100. The first PR CI run exposed Windows Root-sync outside-workspace; a separate Windows VM also reproduced sync acquisition EPERM. These failures were corrected rather than skipped or hidden by longer timeouts.

The final candidate was built and packed, then installed into a fresh Linux consumer with its freshly built binding. Installed binding bytes were verified against the build; neither workspace links nor the old registry binding substituted for it. The unchanged public reproductions passed in separate off, auto, and require processes. Actual final output:

{"proof":"fixed-installed-consumer","scenarios":18,"passed":true,"node":"v24.20.0","platform":"linux","arch":"x64"}

This gate asserts all four pathname/Root × async/sync lock combinations with four processes and 100 acquisitions per case, actual permission-failure release retry, stored/deflated ZIPs declaring 1/16/100 bytes, valid payload contents, CRC rejection, and enforced byte caps. A second built-public-API proof keeps children alive until final sidecar absence is checked, so process-exit cleanup cannot hide a broken release. Together the two final Linux proofs completed 2,400 contended acquisitions across all three modes, plus release-retry controls.

The actual Windows short-path probe changed from:

{"proof":"windows-root-canonicalization","shortDiffersFromLong":true,"legacyMatchesRoot":false,"nativeMatchesRoot":true,"acquired":false,"error":"outside-workspace"}

To:

{"proof":"windows-root-canonicalization","shortDiffersFromLong":true,"legacyMatchesRoot":false,"nativeMatchesRoot":true,"defaultAndExplicitPassed":true,"reentrantAliasPassed":true}

Windows focused source tests passed 103 tests, with one POSIX permission test skipped. The final built-source and fresh installed-consumer proofs passed 2,400 contended acquisitions across off, auto, and require, plus the actual short-path/default-path/explicit-path/reentrant checks above. This dedicated Windows lane uses the published binding only for the unchanged lock ABI; it is not proof of the Rust ZIP change. Hosted native CI builds the new Windows binding for that coverage. An initial source-proof setup omitted the binding from the workspace package; installing it in the normal resolution location and verifying its bytes corrected the harness without changing source.

Validation

  • pnpm check: 6,274 passed, 81 skipped; 178 test files passed, one skipped.
  • pnpm native:test: 63 passed on Linux x64.
  • pnpm test:security: 78 passed.
  • New regression selection with FS_SAFE_NATIVE_MODE=require: 150 passed.
  • node scripts/sidecar-contention-proof.mjs off, auto, and require: final Linux runs passed.
  • pnpm package:smoke: root-only npm 11.19.0 and pnpm 11.24.0 consumers passed native selection, missing-binary fallback and omitted-optionals cases. Foreign-platform filtering fixtures are explicitly synthetic; they are not foreign execution proof.
  • Source size/boundary checks, documentation checks, build, and git diff --check: passed.
  • Fresh complete-candidate Codex autoreview: scoped-clean at the configured P0 threshold, no accepted/actionable findings.

Production/package proof tree: 939dd9f6771449e6be7f60773a3b72580c612615. Final PR head: cce3a4059da04cdbc1c6e55f10fedec21e82da7c, tree 6e8f6bd58f43eb3d6684b2e0051385dd3481bbdf. The final commit changes only the test fixture: Windows inode numbers can round away ino + 1, so the regression now supplies explicit distinct nonzero identities. All production/package inputs remain byte-identical, verified by Git diff; the corrected Windows suite again passed 103 tests and fixture-only Codex autoreview is scoped-clean. The local host was heavily contended, so the authoritative combined gate ran on isolated Linux instead of raising test timeouts.

CI explicitly includes the ZIP integrity regression and Root admission tests in native selections, plus real contention proof on fallback Node 24 and native Linux/macOS/Windows/musl jobs. Hosted exact-head validation is required before merge; this body does not claim pending jobs have passed.

Packaged Windows authority-chain proof

The final installed Windows consumer also exercised the precise forbidden effect requested by review, in separate off, auto, and require processes. A wrapper around the public Root open() method schedules a real rename and exclusive replacement-file creation after creator publication but before admission. No filesystem error is injected in this replacement case. The acquisition returns path-mismatch, the opened descriptor is closed, the manager has zero held entries, and both replacement and displaced original remain byte-identical after acquisition cleanup and manager drain. An outside canary is preserved.

Separate synchronous controls explicitly inject one EPERM at the Node lock-file open call (controlled fault injection, not a claim of a naturally timed denial). They prove that success requires another real exclusive create. When a foreign replacement occupies the path, retries exhaust without a handle, a subsequent same-owner reentrant request still contends rather than inheriting hidden ownership, and replacement bytes survive. These runtime controls supplement—not replace—the naturally contended multi-process runs. The installed artifact integrity is checked before execution; the final head differs from its frozen production/package tree only in a nonpackaged test fixture.

Actual complete redacted terminal output:

{"proof":"windows-packaged-lock-authority","head":"cce3a4059da04cdbc1c6e55f10fedec21e82da7c","productionTree":"939dd9f6771449e6be7f60773a3b72580c612615","mode":"off","case":"root-async-replacement-before-admission","scheduling":"public-Root-open-wrapper","filesystemMutation":"real-rename-and-exclusive-create","injectedFilesystemErrors":false,"rejected":"path-mismatch","heldRegistrations":0,"openedDescriptorClosed":true,"replacementPreservedAfterCleanup":true,"displacedOriginalPreserved":true}
{"proof":"windows-packaged-lock-authority","head":"cce3a4059da04cdbc1c6e55f10fedec21e82da7c","productionTree":"939dd9f6771449e6be7f60773a3b72580c612615","mode":"off","case":"pathname-sync-open-denial","injectedOpenDenials":1,"exclusiveCreateAttempts":2,"grantedOnlyAfterFreshExclusiveCreate":true,"verified":true,"released":true}
{"proof":"windows-packaged-lock-authority","head":"cce3a4059da04cdbc1c6e55f10fedec21e82da7c","productionTree":"939dd9f6771449e6be7f60773a3b72580c612615","mode":"off","case":"pathname-sync-denial-replacement-preservation","injectedSnapshotOpenDenials":1,"exclusiveCreateAttempts":2,"rejected":"file_lock_timeout","noReentrantHeldAuthority":true,"replacementBytesPreserved":true}
{"proof":"windows-packaged-lock-authority","head":"cce3a4059da04cdbc1c6e55f10fedec21e82da7c","productionTree":"939dd9f6771449e6be7f60773a3b72580c612615","mode":"off","case":"root-sync-open-denial","injectedOpenDenials":1,"exclusiveCreateAttempts":2,"grantedOnlyAfterFreshExclusiveCreate":true,"verified":true,"released":true}
{"proof":"windows-packaged-lock-authority","head":"cce3a4059da04cdbc1c6e55f10fedec21e82da7c","productionTree":"939dd9f6771449e6be7f60773a3b72580c612615","mode":"off","case":"root-sync-denial-replacement-preservation","injectedSnapshotOpenDenials":1,"exclusiveCreateAttempts":2,"rejected":"file_lock_timeout","noReentrantHeldAuthority":true,"replacementBytesPreserved":true}
{"proof":"windows-packaged-lock-authority","head":"cce3a4059da04cdbc1c6e55f10fedec21e82da7c","productionTree":"939dd9f6771449e6be7f60773a3b72580c612615","mode":"off","case":"summary","passed":true,"outsideCanaryPreserved":true,"packageIntegrity":"sha512-qhTAnHU8V9rmYphO3En5EwNgQJrh0jDysVRiaYkzN2uRgp4K2CtjhYKgWHCvOlXpU3NZVHhUMNTRvuOBf3ymVA==","nativeBindingScope":"published-0.7.0-lock-ABI-only"}
{"proof":"windows-packaged-lock-authority","head":"cce3a4059da04cdbc1c6e55f10fedec21e82da7c","productionTree":"939dd9f6771449e6be7f60773a3b72580c612615","mode":"auto","case":"root-async-replacement-before-admission","scheduling":"public-Root-open-wrapper","filesystemMutation":"real-rename-and-exclusive-create","injectedFilesystemErrors":false,"rejected":"path-mismatch","heldRegistrations":0,"openedDescriptorClosed":true,"replacementPreservedAfterCleanup":true,"displacedOriginalPreserved":true}
{"proof":"windows-packaged-lock-authority","head":"cce3a4059da04cdbc1c6e55f10fedec21e82da7c","productionTree":"939dd9f6771449e6be7f60773a3b72580c612615","mode":"auto","case":"pathname-sync-open-denial","injectedOpenDenials":1,"exclusiveCreateAttempts":2,"grantedOnlyAfterFreshExclusiveCreate":true,"verified":true,"released":true}
{"proof":"windows-packaged-lock-authority","head":"cce3a4059da04cdbc1c6e55f10fedec21e82da7c","productionTree":"939dd9f6771449e6be7f60773a3b72580c612615","mode":"auto","case":"pathname-sync-denial-replacement-preservation","injectedSnapshotOpenDenials":1,"exclusiveCreateAttempts":2,"rejected":"file_lock_timeout","noReentrantHeldAuthority":true,"replacementBytesPreserved":true}
{"proof":"windows-packaged-lock-authority","head":"cce3a4059da04cdbc1c6e55f10fedec21e82da7c","productionTree":"939dd9f6771449e6be7f60773a3b72580c612615","mode":"auto","case":"root-sync-open-denial","injectedOpenDenials":1,"exclusiveCreateAttempts":2,"grantedOnlyAfterFreshExclusiveCreate":true,"verified":true,"released":true}
{"proof":"windows-packaged-lock-authority","head":"cce3a4059da04cdbc1c6e55f10fedec21e82da7c","productionTree":"939dd9f6771449e6be7f60773a3b72580c612615","mode":"auto","case":"root-sync-denial-replacement-preservation","injectedSnapshotOpenDenials":1,"exclusiveCreateAttempts":2,"rejected":"file_lock_timeout","noReentrantHeldAuthority":true,"replacementBytesPreserved":true}
{"proof":"windows-packaged-lock-authority","head":"cce3a4059da04cdbc1c6e55f10fedec21e82da7c","productionTree":"939dd9f6771449e6be7f60773a3b72580c612615","mode":"auto","case":"summary","passed":true,"outsideCanaryPreserved":true,"packageIntegrity":"sha512-qhTAnHU8V9rmYphO3En5EwNgQJrh0jDysVRiaYkzN2uRgp4K2CtjhYKgWHCvOlXpU3NZVHhUMNTRvuOBf3ymVA==","nativeBindingScope":"published-0.7.0-lock-ABI-only"}
{"proof":"windows-packaged-lock-authority","head":"cce3a4059da04cdbc1c6e55f10fedec21e82da7c","productionTree":"939dd9f6771449e6be7f60773a3b72580c612615","mode":"require","case":"root-async-replacement-before-admission","scheduling":"public-Root-open-wrapper","filesystemMutation":"real-rename-and-exclusive-create","injectedFilesystemErrors":false,"rejected":"path-mismatch","heldRegistrations":0,"openedDescriptorClosed":true,"replacementPreservedAfterCleanup":true,"displacedOriginalPreserved":true}
{"proof":"windows-packaged-lock-authority","head":"cce3a4059da04cdbc1c6e55f10fedec21e82da7c","productionTree":"939dd9f6771449e6be7f60773a3b72580c612615","mode":"require","case":"pathname-sync-open-denial","injectedOpenDenials":1,"exclusiveCreateAttempts":2,"grantedOnlyAfterFreshExclusiveCreate":true,"verified":true,"released":true}
{"proof":"windows-packaged-lock-authority","head":"cce3a4059da04cdbc1c6e55f10fedec21e82da7c","productionTree":"939dd9f6771449e6be7f60773a3b72580c612615","mode":"require","case":"pathname-sync-denial-replacement-preservation","injectedSnapshotOpenDenials":1,"exclusiveCreateAttempts":2,"rejected":"file_lock_timeout","noReentrantHeldAuthority":true,"replacementBytesPreserved":true}
{"proof":"windows-packaged-lock-authority","head":"cce3a4059da04cdbc1c6e55f10fedec21e82da7c","productionTree":"939dd9f6771449e6be7f60773a3b72580c612615","mode":"require","case":"root-sync-open-denial","injectedOpenDenials":1,"exclusiveCreateAttempts":2,"grantedOnlyAfterFreshExclusiveCreate":true,"verified":true,"released":true}
{"proof":"windows-packaged-lock-authority","head":"cce3a4059da04cdbc1c6e55f10fedec21e82da7c","productionTree":"939dd9f6771449e6be7f60773a3b72580c612615","mode":"require","case":"root-sync-denial-replacement-preservation","injectedSnapshotOpenDenials":1,"exclusiveCreateAttempts":2,"rejected":"file_lock_timeout","noReentrantHeldAuthority":true,"replacementBytesPreserved":true}
{"proof":"windows-packaged-lock-authority","head":"cce3a4059da04cdbc1c6e55f10fedec21e82da7c","productionTree":"939dd9f6771449e6be7f60773a3b72580c612615","mode":"require","case":"summary","passed":true,"outsideCanaryPreserved":true,"packageIntegrity":"sha512-qhTAnHU8V9rmYphO3En5EwNgQJrh0jDysVRiaYkzN2uRgp4K2CtjhYKgWHCvOlXpU3NZVHhUMNTRvuOBf3ymVA==","nativeBindingScope":"published-0.7.0-lock-ABI-only"}

Release boundary

Only 0.7.1 - Unreleased notes change. Package versions remain 0.7.0, the dated 0.7.0 changelog remains byte-identical, and existing tag/npm/GitHub Release artifacts are untouched. These fixes are not a new npm release.

@steipete
steipete requested a review from a team as a code owner September 1, 2026 05:37
@clawsweeper

clawsweeper Bot commented Sep 1, 2026

Copy link
Copy Markdown
Contributor

🦞👀
ClawSweeper picked this up.

Pull request received. I will update this pull request when review starts.

@clawsweeper clawsweeper Bot added P2 Normal priority bug or improvement with limited blast radius. proof: sufficient Contributor real behavior proof is sufficient. rating: 🐚 platinum hermit Good normal PR readiness with ordinary maintainer review expected. status: 👀 ready for maintainer look ClawSweeper has no concrete contributor-facing blocker left for this PR. labels Sep 1, 2026
@clawsweeper

clawsweeper Bot commented Sep 1, 2026

Copy link
Copy Markdown
Contributor

Codex review: passed. Reviewed September 1, 2026, 2:47 AM ET / 06:47 UTC.

ClawSweeper review

What this changes

The branch hardens sidecar-lock handoffs and synchronous lock recovery, verifies native ZIP entry lengths, and adds focused tests, documentation, and CI coverage.

Regression provenance

Possible regression — probable (reproduction; reviewed change). No predecessor PR is attributed.

Merge readiness

⚠️ Ready for maintainer review - 1 item remains

This PR remains necessary because its fixes are not on current main. The exact reviewed head has no actionable correctness or security finding and has sufficient real-behavior proof, so it should proceed through its normal merge gates.

Priority: P2
Reviewed head: cce3a4059da04cdbc1c6e55f10fedec21e82da7c

Review scores

Measure Result What it means
Overall readiness 🐚 platinum hermit (4/6) Strong production-path proof and focused regression coverage support a mergeable security hardening patch.
Proof confidence 🦞 diamond lobster (5/6) Sufficient (terminal): The changed production owners are the Root-backed sidecar admission path and native ZIP entry reader; supplied redacted terminal traces exercise installed public APIs under contention, replacement-before-admission, release recovery, and declared-size mismatch scenarios, with successful after-fix results.
Patch quality 🐚 platinum hermit (4/6) No actionable review findings were identified.

Verification

Check Result Evidence
Real behavior Verified Sufficient (terminal): The changed production owners are the Root-backed sidecar admission path and native ZIP entry reader; supplied redacted terminal traces exercise installed public APIs under contention, replacement-before-admission, release recovery, and declared-size mismatch scenarios, with successful after-fix results.
Evidence reviewed 7 items Root lock admission: The Root-backed acquirer creates the sidecar through the existing Root capability, reopens it through guarded admission, compares the exact serialized payload, and rejects an unlinked descriptor before registering a held lock.
Bounded discard authority: The new helper captures canonical parent identities and permits a failed opened-file observation to be discarded only after proven unlink evidence and unchanged confinement/ancestry checks.
Native ZIP integrity: The native selected-entry reader now compares bounded decoded output length with the ZIP entry's declared uncompressed size before returning bytes.
Findings None None.
Security None None.

How this fits together

This package provides capability-style filesystem roots and guarded helpers for Node.js applications handling untrusted paths. The changed lock and archive readers validate filesystem or archive inputs before returning a lock handle or decoded bytes to callers.

flowchart LR
  A[Application lock request] --> B[Root capability]
  B --> C[Sidecar lock admission]
  C --> D[Identity and ancestry checks]
  D --> E[Held lock or safe retry]
  F[ZIP archive input] --> G[Native ZIP reader]
  G --> H[Size and CRC validation]
  H --> I[Returned entry bytes]
Loading

Before merge

  • Complete next step (P2) - No concrete repair finding remains; the automerge-opted PR can continue through its normal merge gates.
Agent review details

Security

None.

Review metrics

Metric Value Why it matters
Production versus regression delta production +342/-120; tests +1,797/-27 The sizable production hardening is accompanied by substantially larger focused regression coverage.
Patch scope 30 files affected The change consistently updates implementation, documentation, runtime proof, tests, CI, and the Unreleased changelog.

Technical review

Best possible solution:

Land the exact reviewed hardening through normal merge gates, preserving the guarded Root APIs and the focused cross-platform regressions.

Do we have a high-confidence way to reproduce the issue?

Yes. The supplied installed-consumer traces exercise the public lock and ZIP paths after the fix, including cross-process contention and Windows replacement rejection.

Is this the best way to solve the issue?

Yes. The patch strengthens the existing Root and sidecar-lock safety boundaries rather than adding a parallel filesystem mechanism, and the native ZIP check aligns the backend with the established JavaScript contract.

AGENTS.md: found and applied where relevant.

Codex review notes: model internal, reasoning high; reviewed against abad7c213615.

Labels

Label changes:

  • add rating: 🐚 platinum hermit: Overall readiness is 🐚 platinum hermit; proof is 🦞 diamond lobster and patch quality is 🐚 platinum hermit.
  • add status: 🚀 automerge armed: This PR is in ClawSweeper's automerge lane. Sufficient (terminal): The changed production owners are the Root-backed sidecar admission path and native ZIP entry reader; supplied redacted terminal traces exercise installed public APIs under contention, replacement-before-admission, release recovery, and declared-size mismatch scenarios, with successful after-fix results.
  • remove rating: 🦞 diamond lobster: Current PR rating is rating: 🐚 platinum hermit, so this older rating label is no longer current.
  • remove status: 👀 ready for maintainer look: Current PR status label is status: 🚀 automerge armed.

Label justifications:

  • P2: This is a bounded hardening of filesystem lock and archive integrity behavior with a limited but security-sensitive blast radius.
  • rating: 🐚 platinum hermit: Overall readiness is 🐚 platinum hermit; proof is 🦞 diamond lobster and patch quality is 🐚 platinum hermit.
  • status: 🚀 automerge armed: This PR is in ClawSweeper's automerge lane. Sufficient (terminal): The changed production owners are the Root-backed sidecar admission path and native ZIP entry reader; supplied redacted terminal traces exercise installed public APIs under contention, replacement-before-admission, release recovery, and declared-size mismatch scenarios, with successful after-fix results.
  • proof: sufficient: Contributor real behavior proof is sufficient. The changed production owners are the Root-backed sidecar admission path and native ZIP entry reader; supplied redacted terminal traces exercise installed public APIs under contention, replacement-before-admission, release recovery, and declared-size mismatch scenarios, with successful after-fix results.

Evidence

What I checked:

  • Root lock admission: The Root-backed acquirer creates the sidecar through the existing Root capability, reopens it through guarded admission, compares the exact serialized payload, and rejects an unlinked descriptor before registering a held lock. (src/sidecar-lock-acquire.ts:161, cce3a4059da0)
  • Bounded discard authority: The new helper captures canonical parent identities and permits a failed opened-file observation to be discarded only after proven unlink evidence and unchanged confinement/ancestry checks. (src/sidecar-lock-root.ts:25, cce3a4059da0)
  • Native ZIP integrity: The native selected-entry reader now compares bounded decoded output length with the ZIP entry's declared uncompressed size before returning bytes. (native/src/archive.rs:801, cce3a4059da0)
  • Focused regression coverage: New ZIP tests cover both stored and deflated entries with short and long declared-size mismatches, byte caps, valid data, and CRC rejection. (test/archive-zip-integrity.test.ts:98, cce3a4059da0)
  • Real behavior proof: The supplied PR-body terminal traces show installed-consumer contention, release recovery, ZIP checks, and Windows replacement-before-admission rejection across off, auto, and require native modes. (cce3a4059da0)
  • Relevant feature history: Recent first-parent history includes prior merged lock handoff work and archive hardening by the same current-main contributor. (src/sidecar-lock-acquire.ts, a80d8f64d939)

Likely related people:

  • steipete: Suggested for follow-up; no historical authorship or introduction is verified. (role: unverified routing candidate; confidence: low)

Rating scale

Score Internal tier Crab rank Meaning
6/6 S 🦀 challenger crab Exceptional readiness
5/6 A 🦞 diamond lobster Very strong readiness
4/6 B 🐚 platinum hermit Good normal PR; ordinary maintainer review
3/6 C 🦐 gold shrimp Useful, but confidence is limited
2/6 D 🦪 silver shellfish Proof or implementation needs work
1/6 F 🧂 unranked krab Not merge-ready
N/A NA 🌊 off-meta tidepool Rating does not apply

Overall follows the weaker of proof and patch quality.
Shiny media proof means a screenshot, video, or linked artifact directly shows the changed behavior. Runtime, network, CSP, and security claims still need visible diagnostics.

Workflow

  • ClawSweeper keeps one durable marker-backed review comment per issue or PR.
  • Re-runs edit this comment so the latest verdict, findings, and automation markers stay together instead of adding duplicate bot comments.
  • A fresh review can be triggered by eligible @clawsweeper re-review comments, exact-item GitHub events, scheduled/background review runs, or manual workflow dispatch.
  • PR/issue authors and users with repository write access can comment @clawsweeper re-review or @clawsweeper re-run on an open PR or issue to request a fresh review only.
  • Maintainers can also comment @clawsweeper review to request a fresh review only.
  • Fresh-review commands do not start repair, autofix, rebase, CI repair, or automerge.
  • Maintainer-only repair and merge flows require explicit commands such as @clawsweeper autofix, @clawsweeper automerge, @clawsweeper fix ci, or @clawsweeper address review.
  • Maintainers can comment @clawsweeper explain to ask for more context, or @clawsweeper stop to stop active automation.

History

Review history (4 earlier review cycles)
  • reviewed 2026-09-01T05:40:04.607Z sha 4f06320 :: needs maintainer review before merge. :: none
  • reviewed 2026-09-01T06:18:57.600Z sha 3cf5f9e :: needs real behavior proof before merge. :: none
  • reviewed 2026-09-01T06:23:59.486Z sha 3cf5f9e :: needs real behavior proof before merge. :: none
  • reviewed 2026-09-01T06:40:08.503Z sha cce3a40 :: needs maintainer review before merge. :: none

@steipete

steipete commented Sep 1, 2026

Copy link
Copy Markdown
Contributor Author

@clawsweeper re-review

Please review exact head 3cf5f9e79700114f2bf007dcab197ebc8d0cdc33. The Windows follow-up fixes the short/long canonical-path mismatch and adds operation-scoped bounded sync open-denial retries, without weakening confinement or release/reclaim authority. The main PR body now contains the final frozen-tree Linux gate, actual Windows short-path before/after output, 103 Windows regression passes, and 1,200 all-mode Windows source-proof acquisitions. Fresh complete-candidate Codex autoreview is scoped-clean. Exact-head hosted CI is running; this is a review request only, not authorization to bypass pending checks or change source.

@clawsweeper clawsweeper Bot added merge-risk: 🚨 security-boundary 🚨 Merging this PR could weaken sandboxing, authorization, credentials, or sensitive data. rating: 🦐 gold shrimp Decent PR readiness signal, but merge confidence is limited. status: 📣 needs proof The PR needs real behavior proof before ClawSweeper can clear the contributor ask. and removed proof: sufficient Contributor real behavior proof is sufficient. status: 👀 ready for maintainer look ClawSweeper has no concrete contributor-facing blocker left for this PR. rating: 🐚 platinum hermit Good normal PR readiness with ordinary maintainer review expected. labels Sep 1, 2026
@clawsweeper

clawsweeper Bot commented Sep 1, 2026

Copy link
Copy Markdown
Contributor

🦞🧹
ClawSweeper re-review requested.

I asked ClawSweeper to review this item again.
Action: item re-review queued (workflow sweep.yml, event exact_review_queue).
Result: when the review finishes, ClawSweeper will create the durable review comment if needed or update the existing comment in place.

Re-review progress:

@steipete

steipete commented Sep 1, 2026

Copy link
Copy Markdown
Contributor Author

@clawsweeper re-review

Exact head: cce3a4059da04cdbc1c6e55f10fedec21e82da7c.

The main PR body now includes all 18 actual packaged-Windows authority trace rows across off/auto/require: real replacement before Root admission is rejected with zero held registrations, a closed descriptor, preserved replacement/original bytes after cleanup and drain, and an intact outside canary. Separate explicitly labeled open-denial fault controls prove fresh exclusive creation is required and a foreign replacement cannot yield reentrant ownership or deletion authority. Fresh installed Windows contention also passed all 1,200 acquisitions; combined Linux/Windows source+installed proofs total 4,800.

The failed Windows checks were confined to a test fixture assuming ino + 1 changes a large numeric inode. This head replaces that assumption with explicit distinct known identities; 103 Windows tests passed after the correction, and Codex review is clean. All production/package bytes are unchanged from the fully proved candidate. Exact-head CI is rerunning; no merge or gate bypass is requested by this comment.

@clawsweeper

clawsweeper Bot commented Sep 1, 2026

Copy link
Copy Markdown
Contributor

🦞🧹
ClawSweeper re-review requested.

I asked ClawSweeper to review this item again.
Action: item re-review queued (workflow sweep.yml, event exact_review_queue).
Result: when the review finishes, ClawSweeper will create the durable review comment if needed or update the existing comment in place.

Re-review progress:

@clawsweeper clawsweeper Bot added proof: sufficient Contributor real behavior proof is sufficient. rating: 🦞 diamond lobster Very strong PR readiness with only minor maintainer review expected. status: 👀 ready for maintainer look ClawSweeper has no concrete contributor-facing blocker left for this PR. and removed rating: 🦐 gold shrimp Decent PR readiness signal, but merge confidence is limited. status: 📣 needs proof The PR needs real behavior proof before ClawSweeper can clear the contributor ask. merge-risk: 🚨 security-boundary 🚨 Merging this PR could weaken sandboxing, authorization, credentials, or sensitive data. labels Sep 1, 2026
@steipete

steipete commented Sep 1, 2026

Copy link
Copy Markdown
Contributor Author

@clawsweeper automerge

Special instructions:
Land only PR 189 at exact reviewed head cce3a4059da04cdbc1c6e55f10fedec21e82da7c through the normal merge gates. Maintainer review is complete: the durable exact-head review has sufficient proof and no actionable code/security finding, and the final CI matrix is green, including native Windows/Linux/macOS/musl, Node 22/24, coverage, package smoke, audit, and CodeQL.

The main body contains the complete packaged Windows authority trace, actual short-path before/after proof, Linux installed-consumer ZIP/lock/release controls, and 4,800 Linux/Windows source+installed contended acquisitions. Full Linux validation passed 6,274 tests, 63 Rust tests, 78 security tests, and 150 selected native regressions. The final test-only inode-fixture correction passed 103 Windows tests and scoped-clean Codex autoreview; all production/package inputs are unchanged from the fully reviewed and proved candidate.

Do not change source, rebase, bypass checks, start unrelated work, create tags, bump versions, publish packages, or modify existing 0.7.0 release artifacts. If the head changes or a gate regresses, stop rather than merging another candidate. This authorizes landing the existing reviewed fixes only; a future 0.7.1 release is separate.

@clawsweeper

clawsweeper Bot commented Sep 1, 2026

Copy link
Copy Markdown
Contributor

🦞✅
ClawSweeper merged this PR after the passing review.

Source: clawsweeper[bot]
Feedback: structured ClawSweeper verdict: pass (sha=cce3a4059da04cdbc1c6e55f10fedec21e82da7c)
Merge status: merged by ClawSweeper automerge
Merged at: 2026-09-01T06:50:24Z
Merge commit: 59b9cc4ea1b1

What merged:

  • The branch hardens sidecar-lock handoffs and synchronous lock recovery, verifies native ZIP entry lengths, and adds focused tests, documentation, and CI coverage.

Automerge notes:

  • PR branch already contained follow-up commit before automerge: fix(lock): normalize and retry Windows sync admission
  • PR branch already contained follow-up commit before automerge: test(lock): use distinct portable snapshot identities

The automerge loop is complete.

Automerge progress:

  • 2026-09-01 06:44:36 UTC review queued cce3a4059da0 (queued)
  • 2026-09-01 06:49:18 UTC review passed cce3a4059da0 (structured ClawSweeper verdict: pass (sha=cce3a4059da04cdbc1c6e55f10fedec21e82d...)
  • 2026-09-01 06:50:25 UTC merged cce3a4059da0 (merged by ClawSweeper automerge)

@clawsweeper clawsweeper Bot added clawsweeper:automerge Maintainer opted this ClawSweeper PR into bounded ClawSweeper-reviewed automerge and removed rating: 🦞 diamond lobster Very strong PR readiness with only minor maintainer review expected. labels Sep 1, 2026
@clawsweeper clawsweeper Bot added rating: 🐚 platinum hermit Good normal PR readiness with ordinary maintainer review expected. status: 🚀 automerge armed This PR is in ClawSweeper's automerge lane. and removed status: 👀 ready for maintainer look ClawSweeper has no concrete contributor-facing blocker left for this PR. labels Sep 1, 2026
@clawsweeper
clawsweeper Bot merged commit 59b9cc4 into main Sep 1, 2026
35 checks passed
@steipete

steipete commented Sep 1, 2026

Copy link
Copy Markdown
Contributor Author

Landed as 59b9cc4ea1b12defd7e693aa3af8d56581d52e9f. The merged tree exactly matches the reviewed final candidate (6e8f6bd58f43eb3d6684b2e0051385dd3481bbdf), and the maintainer worktree is synchronized to clean main.

Validation included pnpm check (6,274 passed / 81 skipped), pnpm native:test (63 passed), pnpm test:security (78 passed), the required-native regression selection (150 passed), pnpm package:smoke, and git diff --check. Fresh Linux and Windows source/installed consumers completed 4,800 contended lock acquisitions across off/auto/require. The packaged Windows authority trace in the main body additionally proves replacement rejection before held registration and cleanup, preserved foreign bytes, and bounded sync denial recovery. Windows focused tests passed 103 cases, with the POSIX permission probe explicitly skipped there. Complete-candidate and final fixture-only Codex autoreviews were scoped-clean; final exact-head ClawSweeper review found no actionable code/security issue.

Final CI, coverage, and CodeQL passed, including native Windows/Linux/macOS/musl and the Node 22/24 OS matrix. Earlier failures exposed the Windows short-name mismatch and a test fixture whose numeric inode increment could round away; both were corrected, not skipped. A local focused attempt later hit host-load command timeout; the isolated Windows rerun and final hosted checks passed without changing test timeouts. A remote binding-setup omission was also corrected without source changes.

Production delta is net +222 lines (+342/-120). Task-owned proof VMs are released. Package versions, dated 0.7.0 notes, and published artifacts are unchanged: this merges fixes under 0.7.1 Unreleased, but does not publish a release.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

clawsweeper:automerge Maintainer opted this ClawSweeper PR into bounded ClawSweeper-reviewed automerge P2 Normal priority bug or improvement with limited blast radius. proof: sufficient Contributor real behavior proof is sufficient. rating: 🐚 platinum hermit Good normal PR readiness with ordinary maintainer review expected. status: 🚀 automerge armed This PR is in ClawSweeper's automerge lane.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant