v0.4.0 — remote parity & backend qualification
The remote-parity & backend-qualification release. Deletion and blobs — the two
gaps that kept the daemon substrate behind fs/s3 — close, so a daemon-backed
consumer now gets the full Store + BlobStore surface. Alongside them, an HA
soak harness doubles as a conditional-write qualifier for S3 backends, and its
first finding disqualifies Garage outright.
Added
Store::delete(#183) — OCC-aware record deletion across every substrate
and the daemon, propagated bySync. Local-only semantics; see ADR 0018.
(#185)- Blobs over the daemon (#184) — the content-addressed
BlobStoreis exposed
ongonzalo-server(HTTPGET|PUT|DELETE /v1/blobs/{hash},GET /v1/blobs,
plus gRPC), andServerStoreimplementsBlobStoreover both transports, so a
daemon-backed consumer gets the fullStore+BlobStoresurface. Blobs
previously worked only onfs/s3. Adds theGONZALO_MAX_BLOB_SIZEdaemon
knob (default 64 MiB). (#192)
Changed
- S3 backends are now qualified, and Garage is not among them (#52) — atomic
If-Matchis a hard requirement for any S3-compatible backend. Garage does not
provide it: gonzalo's conditional-write conformance case expects exactly 1 of 8
concurrent racers to commit, and Garage let 8/8 through on v1.0.1 and 3–8
through non-deterministically on v2.1.0 — the signature of a check-then-set,
not an atomic CAS. Deployments running gonzalo over Garage can silently lose
concurrent writes. RustFS (Apache-2.0) is the qualified backend; MinIO passes
the qualifier but is rejected on project sustainability. See ADR 0019. (#186,
#205)
Testing: an HA soak harness for stateless gonzalod replicas over an
S3-compatible store — backend-agnostic, doubling as the conditional-write
qualifier above (#52, #186); cross-crate integration tests extracted into
gonzalo-integration-tests (#190, #191).
Project: a crates.io publishing pipeline for the workspace, triggered on v*
tags (#187, #189).
Docs: competitor capability inventories and parity-gap matrices for mem0, Zep,
and Letta under docs/evaluation/ (#193); ADR 0019 recording the S3 backend
qualification (#205).