Repository navigation
fs-safe 0.26.1
Highlights
- Windows identity checks: reject rounded file IDs; callers supplying identity stats must use bigint values. (#949)
- Listings and copies: measured listings are 38–54% faster on Linux and Windows; direct synchronous file copies are 11–31% faster, with Windows batches up to 48% faster. (#934, #932)
- Windows private creation: the portable helper is about 5× faster, and private creation works beyond MAX_PATH. (#930, #924)
- Native overhead: reduce dispatch and repeated admission for direct-child mkdir, removal, moves, existing-file opens, buffered publication, and async temp creation; measured eligible cases reach or improve on fallback performance while retaining native checks. (#927, #928, #929, #948, #953)
Fixes
- Windows file identity: stop accepting rounded Number file IDs as matches. Callers supplying identity stats must now pass bigint stats; unsafe Number identities fail with
path-mismatch. (#949) - Windows long paths: support private directory and file creation beyond MAX_PATH, including internal staging and pathname verification, while preserving ACL, alias, identity, and cleanup checks. (#924)
Performance
- Listings and traversal: avoid per-entry filename buffers for losslessly decoded names, making measured Linux and Windows listings 38–54% faster; halve per-entry promise allocation in complete sorted
Root.walk()scans, improving measured 50,000-entry Linux walks by 3–4%. (#934, #937) - File copies and moves: reuse canonical admission in
copyRootFileSync, improving measured direct copies by 11–31% on Linux and Windows and batches by up to 47–48% on Windows; reduce ordinaryRoot.copyIn()and same-parent move promise allocation without claiming a reproduced latency gain. (#932, #941, #936) - Reads and hashing: trim file-admission and bounded-read metadata work for 2–9% faster measured Linux reads; reuse privately owned Windows handles for 42% faster native async SHA-256 on small pathname inputs, retaining borrowed-handle positions. (#931, #938)
- Locks and directories: reduce uncontended sidecar-lock acquisition overhead by up to 34% with native; remove ordinary mkdir dispatch hops for 37% faster native direct-child creation, 17–22% faster existing-directory admission, and 81% faster native
ensureRootin the combined Linux benchmark. (#939, #944, #927) - Temporary workspaces and removal: make measured empty-workspace cleanup 13–32% faster on Linux, create async workspaces through retained parents, and reduce recursive-removal stat allocation for 2–6% faster measured Linux recursive removal; retain identity-bound cleanup. (#942, #953, #933)
- Private and exclusive creation: run portable Windows security checks in a prebuilt helper for about 5× faster private creation; streamline exclusive-creation metadata and skip redundant Windows write-mode changes without removing flushes or permission checks. (#930, #935, #940)
- Native operations: reuse retained roots for removal and moves, defer parent creation until an opened file is missing, and streamline buffered creation and replacement-write publication; preserve descriptor-relative mutation and exact identity checks. Native non-durable publication reaches fallback parity in the measured cases; durable creation remains slower. (#928, #929, #948)
Docs and Tooling
- Raw Node baseline: add
pnpm benchmark:nodewith alternating raw/safe/control samples and documented operation semantics; raw Node is a performance reference, not a security-equivalent implementation. (#925) - Native API reference: enumerate APIs that require native bindings and their fallback availability. (#926)
Published packages
| Package | Registry tarball | Verified integrity | Provenance |
|---|---|---|---|
| @openclaw/fs-safe-win32-arm64-msvc@0.26.1 | tgz | sha512-GeLgeNeN/qE5AipT40B5hYr33/DLPhjRIRLb72TJTt8BqmqA3HLaUIb4H2MkkmMmBjLha3xTFKADbmYCQOgz5w== |
verified attestation |
| @openclaw/fs-safe-linux-x64-gnu@0.26.1 | tgz | sha512-grWDiusbMG4LUTDYv1ibg5YBWLGyApDZBu19uL/H/aK/HfWGXiI4FLkHvhMGL/6ldIo6E3nIl9sa7e7bDCcAtQ== |
verified attestation |
| @openclaw/fs-safe-linux-x64-musl@0.26.1 | tgz | sha512-wmNnUp+l1UYbAuQAFAY0T4a5fAqc7OIeXtxkw3PdQzi9V5ZrpstTTzJCF2z6jN3uKwIRckR1cpQC+yoNyO3iJQ== |
verified attestation |
| @openclaw/fs-safe-linux-arm64-gnu@0.26.1 | tgz | sha512-e5q6hjIxSECqSnZt/LW9xDh1FSVoNlDoGojuvrdiK9g8SNwqeBW6gxwgh0FuMEXzuWFZlIzr1IArcpxa/ereHQ== |
verified attestation |
| @openclaw/fs-safe-linux-arm64-musl@0.26.1 | tgz | sha512-Jv5IHmjm28quzK5wkoIBqND/u+lM9IkGbgF3ZSiT8VBCaMIJmYspHGmzXAKKnwqnXtNPNKS+n1q/9VdYnApIcQ== |
verified attestation |
| @openclaw/fs-safe-darwin-x64@0.26.1 | tgz | sha512-3oi5t5C5x0904zA4e3NgKw2yPsmKMqp7yguxikCMTprje7KpRPrLvByl0VZ7h+EixH+84o7Z0Ab/5aScAdnZGQ== |
verified attestation |
| @openclaw/fs-safe-darwin-arm64@0.26.1 | tgz | sha512-Ja6KVqTAka8/woUP7jmR/CvEGCfhNXn/NwyaeYZGGlOniOFAVeMO1KXk4nqx0i0Q5Tg+eR9vZWKRQJXuzZi1sQ== |
verified attestation |
| @openclaw/fs-safe-win32-x64-msvc@0.26.1 | tgz | sha512-LT5vbSnnrxz+Y63jHKW7+gEDeek9HeJK/NwKU6gq/+90bq1ymxzZbJ3t2kDr293QpDdjLD4uImW9xErKYeVIEA== |
verified attestation |
| @openclaw/fs-safe-freebsd-x64@0.26.1 | tgz | sha512-wM7szI/MCh7Q9Oqbzh6o0foAEPd3XgvK5NhTSbczphdeld4gVOQzz3c5I60n0Hk+e/kw02LrYBuq9pj+0GPl+g== |
verified attestation |
| @openclaw/fs-safe-freebsd-arm64@0.26.1 | tgz | sha512-kIzEU4/bdv0SPgOMgzgXMBMWji2qVUJcEmlOCJp8RMD1lVV+y0yV85BWQasbyGUha+oj7nUkIgp+4Zmox1cWjA== |
verified attestation |
| @openclaw/fs-safe@0.26.1 | tgz | sha512-TIHuaP7TzRaG57Wn3o9JUKwUP8kVVl4htF4gV6lcuE+cs71Ru9OmCEoxT73Fq+sEqoSWoDAX3XutRXhv7Sr2Dw== |
verified attestation |
Release proof: GitHub Actions run.