Repository navigation
fs-safe 0.23.0
Highlights
- BREAKING: Python bridge removed: remove the Python bridge and its compatibility options; migrate to
configureFsSafeNative/FS_SAFE_NATIVE_MODE. (#815) - Watch overflow: fold busy hints so unselected sibling churn beside a missing tree no longer overflows the watch. (#813)
- Windows exclusive creation: no longer follows unchanged dangling file symlinks, including standalone creators, unrooted locks and cross-volume copy publication. (#823, #824)
- Faster metadata listings: reduce path normalization and per-entry allocation when listing Root directory metadata. (#818, #819)
Fixes
- Windows directory preparation: retain exact file identities in
ensureAbsoluteDirectory()so a replaced directory cannot compare equal after large Windows file IDs are rounded to JavaScript numbers. (#825) - Windows writable creation: in native
auto/offmode,openWritable(),append(), and create-only writes could create a dangling file symlink's missing in-Root target before rejecting the link. Check final leaves before fallback creation; outside-Root targets were already rejected. (#823) - Windows symlink creation escape: unchanged dangling file symlinks could redirect standalone exclusive creation outside the caller-selected directory, including source contents during cross-volume copy publication and records from unrooted fallback locks. Check final leaves before creation, including internal staging files; concurrent replacement remains best-effort. (#824)
- Atomic writes: preserve both parent-directory preparation and descriptor-close failures, in operation-first order, for synchronous and asynchronous replacements. (#820)
- Watch overflow: fold busy pending hints into guarded subtree reconciliation so unselected sibling churn beside a missing tree no longer exhausts the hint budget. (#813)
- Native initialization: lazily load the addon in fs-safe's import context so its housekeeping does not retain the first operation's
AsyncLocalStoragestores when fs-safe is imported outside caller scopes. (#797)
Performance
- Root metadata path assembly: avoid renormalizing each literal child beneath its canonical directory, cutting 1,000-entry listing time by a further 19–23% and sampled allocations by 33–34% on Linux x64. (#819)
- Root metadata listings: construct named metadata once per entry, reducing 1,000-entry listing time by 16% and sampled allocations by 27–28% on Linux x64, with all filesystem and identity checks retained. (#818)
Compatibility
- Removed compatibility options: remove
configureFsSafePython,FsSafePythonConfig,pythonPath, and the six Python environment variables; useconfigureFsSafeNative,FsSafeNativeConfig, andFS_SAFE_NATIVE_MODE(orOPENCLAW_FS_SAFE_NATIVE_MODE). The Python variables are now ignored, so a deployment that still setsFS_SAFE_PYTHON_MODE=requireoroffruns inautountil it setsFS_SAFE_NATIVE_MODE. Remove secure-tempchmodSync, atomic adapterchmod/chmodSync, RootnonBlockingRead, and ACLprincipalSids; use descriptor-bound permission adapters (descriptorfor secure-temp,FileHandle.chmod/fchmodSyncfor atomic writes), automatic nonblocking read admission, and direct SID classification. Callers passing removed options get TypeScript errors. (#815)
Published packages
| Package | Registry tarball | Verified integrity | Provenance |
|---|---|---|---|
| @openclaw/fs-safe-linux-x64-gnu@0.23.0 | tgz | sha512-1jAzULyvK1+30Bg780Uyx/wZQ7GX1AuRxtniUh5QRjw568TTo/S1MC5tVlZqdZPAz2EPFHQRYb/fquPh1kIUeg== |
verified attestation |
| @openclaw/fs-safe-linux-x64-musl@0.23.0 | tgz | sha512-NIQarT20KCPJkzbjbte3bC5JT6yNi8TqfHWFGvdKu1piU+lvQbzVeUlQupvAGsrlyCAumRjlUdZfi0MPOxNxmQ== |
verified attestation |
| @openclaw/fs-safe-linux-arm64-gnu@0.23.0 | tgz | sha512-2Lh8UiQSE4F3AgMTMeC8WaXoyQeH3kErtI/7bv/N6JsJVI52LyKXlIXVAoOhWT/ZFUmc2m4qxAzJ/94vWv2VhQ== |
verified attestation |
| @openclaw/fs-safe-linux-arm64-musl@0.23.0 | tgz | sha512-V1Ql6caV7WRXpyn3cbqtxTMXR1J1fP56DSkA/dAFPn0SejixRH3yo3mM9h+iL3Ng7QR7cFy8LkIK/JXbi0Tbbg== |
verified attestation |
| @openclaw/fs-safe-darwin-x64@0.23.0 | tgz | sha512-vpH76FbxexkwDYxIGXd7nQlhehUPOrMP6bdXuOKnXaHqBIL3MpBrf8GT7VAqTTjGWsEXHbGr135Jr3H8Ir4RdA== |
verified attestation |
| @openclaw/fs-safe-darwin-arm64@0.23.0 | tgz | sha512-Apna2HUA6q2r6OBs+MqU6dEWCECeIgLVdpvncS+lvTIvOlOGbDlIzQO+IWlmKhNMJhwljGt493fgI66pylOxxA== |
verified attestation |
| @openclaw/fs-safe-win32-x64-msvc@0.23.0 | tgz | sha512-eT8FvQu2Lr7vV4hhakGVHAXOICV1+Hgno1QgJuJ5XvEZa4aRy67HNKKlfWZK2m1X+lfWQIgeDKxEtSG1ajsRxQ== |
verified attestation |
| @openclaw/fs-safe@0.23.0 | tgz | sha512-4AQjaT2KF3Kmt+DYabyJpWIJcm0CXaEIvDRbR4g4PmkG5dc8KtNf5kahMhQ7F/n1DzMztmSLWilt07m01fDI1Q== |
verified attestation |
Release proof: GitHub Actions run.