v0.27.0
What's Changed
Added
RemotePath.as_posix(): forward-slash key string for pathlib parity;RemotePathstays deliberately notos.PathLike.- Opt-in
reject_write_under_file_ancestorflag 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 theto_key(native_path(k)) == kround-trip now holds for the empty key.- The s3fs lanes (
s3,s3-pyarrow) default touse_listings_cache=False: fresh listings by default, since s3fs'sDirCachenever expires and made cross-writer staleness permanent. Re-enable viaclient_options={"use_listings_cache": True}. LocalBackend/SFTPBackendraiseInvalidPathfor a write/move/copy whose path descends through an existing file, instead of leaking native exceptions. Backed by a DafnyValid()class invariant.
Fixed
- S3
write_atomicno 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.mdconformance-suite references updated for the per-topic test layout.- Internal tracker IDs stripped from published docstrings and
docs-src/, with a newcheck_no_tracker_refslint gate to prevent regressions.
Internal
- Spec-traceability gaps closed: five shipped-but-untested behaviours got conformance tests; HTTP
LAZY_READdocumented toward the code; duplicateSTORE-015renumbered.
Links: