Skip to content

fs-safe 0.7.1

Choose a tag to compare

@github-actions github-actions released this 01 Sep 18:22
· 1 commit to main since this release
v0.7.1
754f920

Highlights

  • Make lock handoffs reliable: recover from disappearing ownership records within retry budgets, preserve callback errors, and safely retry failed synchronous release cleanup.
  • Reject corrupt native ZIP reads: verify decoded entry length against the declared size before returning bytes, while retaining byte caps and CRC checks.
  • Preserve long destination filenames: use independent private staging names for Root writes and copies, ZIP extraction, and synchronous JSON writes instead of lengthening the destination basename.

File locks

  • Recover Root-backed asynchronous handoffs from unlinked opened records with exact descriptor identity and unlink evidence, including Windows resolver EPERM/EBADF failures. Recheck canonical ancestors and charge discarded observations to retry/deadline budgets without granting release or reclaim authority. (#189)
  • Retry Root lock contention when a holder changes between pre-open inspection and opening the file. Discard only the verified stale observation, recheck canonical ancestors, and require fresh exclusive creation; generic reads, creator admission, and release/reclaim authority remain unchanged.
  • Verify reopened Root-created sidecars against the creator's exact serialized bytes and ownership token before admission. Reject replacements and unlinked descriptors, and retain the original creator receipt for failed-acquisition cleanup. (#189)
  • Align Windows synchronous lock-parent canonicalization with Root, including short-name expansion, and bound lock-file create/open denials and missing or changed snapshot retries. Preserve the original EPERM when a retry budget is exhausted. (#189)
  • Determine synchronous lock staleness from the captured payload timestamp or snapshot mtime, avoiding false stale decisions after unlink or replacement. (#189)
  • Retain failed synchronous release cleanup for safe retries without double-decrementing references, re-closing a consumed or reused descriptor, or deleting a replacement sidecar. (#189)
  • Propagate payload, JSON serialization, and parsing failures unchanged without retrying the failing callback. Scope Root failure evidence to each observation so historical errors cannot trigger retries in later, nested, or concurrent acquisitions. (#190)

File writes and archives

  • Keep private staging names independent of destination basenames across guarded Root writes and copies, native Windows writes, ZIP extraction, and writeJsonSync(). Preserve public producer filenames, custom tempPrefix, and literal JSON parent-path and drive-relative semantics. (#191)
  • Avoid opening an existing target merely to inherit its mode during create-only Root writes, while preserving boundary, alias, hardlink, and type checks. (#189)
  • Reject native readArchiveEntry() ZIP payloads whose decoded length differs from the declared uncompressed size with ArchiveFormatError("archive-header-invalid"), matching JavaScript behavior while preserving maxBytes and CRC checks. (#189)

Docs and validation

  • Clarify that invalid UTF-8 or nonzero bytes after NUL terminators in fixed TAR name, linkname, and USTAR prefix fields reject with ArchiveSecurityError("entry-path"); this documents existing behavior. (#189)
  • Add cross-process contention and release-retry proofs, plus focused lock-admission and ZIP-integrity coverage in JavaScript-fallback and required-native CI paths. Refresh the release checklist for eight-package trusted publishing.

Published packages

Package Registry tarball Verified integrity Provenance
@openclaw/fs-safe-linux-x64-gnu@0.7.1 tgz sha512-p2ydn5MxXHyGF0wwAUZTav3yA51cQvXOdSb6LUC66P4Z+JubMv4hQI5wkKo3d7vSuhbBN3d1XPih57QScOaZWg== verified attestation
@openclaw/fs-safe-linux-x64-musl@0.7.1 tgz sha512-dFnhbEhGZn7NkP0+7lSWVrqfUuM/A17aGD6dw967nzi0mFhCByoozPdo9x9daFhTPo/XiAOni/1WD/akpD2MsA== verified attestation
@openclaw/fs-safe-linux-arm64-gnu@0.7.1 tgz sha512-P9oq26c9ddSi1KlpR3XKyam6s9uV04yk8yYEEVdr/vxcWMwJ/V+Cc9Kb5onjmE/t9d2jnMM46+BaZKrwjCQkRg== verified attestation
@openclaw/fs-safe-linux-arm64-musl@0.7.1 tgz sha512-nKd308sLPs3fq60TKf5YAaNNOQoDUHBNwzAoaLq2/eClL7aLJDL8bGHur7nMbKfFmcbzvrzHx8ywG2TQLei+tg== verified attestation
@openclaw/fs-safe-darwin-x64@0.7.1 tgz sha512-LVRnRlh9xl02BG8W5K/R8tElOWPV3nuF5jhF1XsayV45zRfeF1LRmWol1f8hw98jy32VLKlVm/qG9zyZMx846w== verified attestation
@openclaw/fs-safe-darwin-arm64@0.7.1 tgz sha512-+7G03NKaOS75a5LSOY8gMdPMlpcImdRKajaAyxm1Jgd+fQzSYaaIFB/qtq+j+YBPpKvUTgYmqJrDmAqiVUtNBg== verified attestation
@openclaw/fs-safe-win32-x64-msvc@0.7.1 tgz sha512-OY4rn4h0F+uUC7IdmHlBJ5ka8ypFzV3nj5jOWrGk5dgGVG5qC9NidYSjK+MzGWQHgIrWQv1DZ2VPtK/22EThqQ== verified attestation
@openclaw/fs-safe@0.7.1 tgz sha512-wxvJNMygGEFnrYvnjsNA4UiFxRYQd839q/Ps5qeIYYxxcgI5sOR6ynH57uJQ2bOeIvsQCI3phpyelhaUs1Oy/Q== verified attestation

Release proof: GitHub Actions run.