Skip to content

fs-safe 0.23.0

Choose a tag to compare

@github-actions github-actions released this 02 Oct 06:16
· 202 commits to main since this release
v0.23.0
223a305

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/off mode, 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 AsyncLocalStorage stores 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; use configureFsSafeNative, FsSafeNativeConfig, and FS_SAFE_NATIVE_MODE (or OPENCLAW_FS_SAFE_NATIVE_MODE). The Python variables are now ignored, so a deployment that still sets FS_SAFE_PYTHON_MODE=require or off runs in auto until it sets FS_SAFE_NATIVE_MODE. Remove secure-temp chmodSync, atomic adapter chmod/chmodSync, Root nonBlockingRead, and ACL principalSids; use descriptor-bound permission adapters (descriptor for secure-temp, FileHandle.chmod / fchmodSync for 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.