v0.24.0
What's Changed
Added
- WriteResult — every
write*()call returnsWriteResult(path, size, source, digest, etag, version_id, last_modified, metadata). Two new capabilities gate the rich fields:WRITE_RESULT_NATIVEandUSER_METADATA. IncludesStore.head(path),ext.writehash helpers, async parity (AsyncStore+AsyncBackend), and proxy forwarding acrossProxyStore/ObservedStore/CachedStore(ID-146, ID-148, ID-013b) AsyncBackendSyncAdapter— wraps anyAsyncBackendas a synchronousBackendvia a dedicated daemon-thread event loop; full spec coverage (ASYNC-080–093), unit + Azurite integration suites, decision guideguides/async-sync-bridges.md; unblocks Graph backend (ID-127) (ID-141–143c)
Fixed
AsyncMemoryBackend.deleteraisesInvalidPathfor directory paths instead of silently returning (BUG-184)- S3 lazy init
got multiple values for keyword argument 'config'whenconfig_kwargsandRetryPolicyare both supplied (BUG-178) SQLBlobBackend.globdrops zero-segment**/matches on SQLite (BUG-175)SQLBlobBackend.copy(src, src)silently destroyed data withoverwrite=True(BUG-176)AsyncAzureBackend.writestreaming — no longer buffersAsyncIterable[bytes]payload into memory (BUG-165)- Docs deployment on release tags —
pagesjob moved togh-pages-deploy.yml, eliminating environment-protection failures (BUG-164)
Changed
- pyarrow 24.x mypy compat —
follow_imports = "skip"forpyarrow.*; removed redundanttype: ignore[import-untyped]across four modules (BK-154)
Documentation
- Audit-011 gaps resolved — custom-backend guide,
async.md,extensions.md,s3.md,azure.md,local.mdupdated for WriteResult/metadata/capabilities (BK-162) - Backend-specifics visibility — three-tier admonition vocabulary across all API reference pages; closes all 20 audit-009 findings (BK-153)
- SFTPGo compatibility note in README and SFTP guide
- Docs spacing and typography — compact CSS for tables, headings, parameter blocks (BK-157)
- Formal layer: Dafny vs TLA+ principles, Observer.tla, informational
verify-tlaCI job (ID-147)
Links: