Skip to content

v0.27.0

Choose a tag to compare

@haalfi haalfi released this 02 Jun 20:09
Immutable release. Only release title and notes can be modified.
fcc0289

What's Changed

Added

  • RemotePath.as_posix(): forward-slash key string for pathlib parity; RemotePath stays deliberately not os.PathLike.
  • Opt-in reject_write_under_file_ancestor flag on the flat-namespace backends (S3, S3-PyArrow, Azure non-HNS, SQLBlob, async Azure).

Changed

  • to_key() of a bare backend root returns the empty key "" on every backend, so the to_key(native_path(k)) == k round-trip now holds for the empty key.
  • The s3fs lanes (s3, s3-pyarrow) default to use_listings_cache=False: fresh listings by default, since s3fs's DirCache never expires and made cross-writer staleness permanent. Re-enable via client_options={"use_listings_cache": True}.
  • LocalBackend / SFTPBackend raise InvalidPath for a write/move/copy whose path descends through an existing file, instead of leaking native exceptions. Backed by a Dafny Valid() class invariant.

Fixed

  • S3 write_atomic no longer commits a truncated object when the content source fails mid-stream. Confirmed against real AWS for both S3 backends.
  • Azure HNS file-ancestor operations raise the correct cross-backend error class (InvalidPath / NotFound / empty-listing) instead of the raw Azure SDK mapping.
  • SFTP file-ancestor detection on chrooted / partial-permission servers: the parent-chain walk now starts at base_path, so a permission-denied ancestor above the chroot no longer masks the real case.

Documentation

  • custom-backend-guide.md conformance-suite references updated for the per-topic test layout.
  • Internal tracker IDs stripped from published docstrings and docs-src/, with a new check_no_tracker_refs lint gate to prevent regressions.

Internal

  • Spec-traceability gaps closed: five shipped-but-untested behaviours got conformance tests; HTTP LAZY_READ documented toward the code; duplicate STORE-015 renumbered.

Links: