diff --git a/CHANGELOG.md b/CHANGELOG.md index 1efd5d3..135b0ef 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,9 @@ # changelog +## 0.3.19 + +- **fix**: `Mst` delete now prunes subtree nodes it empties. `deleteFromNode` recursed into a child and marked the parent dirty but never dropped the child when the delete emptied it; MST nodes are content-addressed, so the emptied node serialized as a real block and changed every ancestor CID. The tree therefore no longer equalled the tree that never contained the key — the equality commit-proof inversion depends on. `verifyCommitDiff` consequently returned `PrevDataMismatch` for valid second commits from a real PDS; any repo with two records whose keys differ in height hits it, since the lower key lives alone in a subtree. We only trimmed at the root; the TS reference and atmos both prune here (atmos cites indigo's `removeChild`/`IsEmpty` invariant). Found downstream in zlay via the atmoq relay-conformance corpus, where the `sync11/commit2-valid` control was being dropped. Post-delete roots now match atmos byte-for-byte over 25,000 deletes in atproto-bench; costs ~3% on a pure-delete microbenchmark. New coverage: a pure-MST prune test, a golden `@atproto/repo` partial-proof fixture through `verifyCommitDiff`, plus canonicality and lazy-stub guards ported from atmos. See `REPORT-mst-inversion-prevdata.md`. + ## 0.3.18 - **fix**: bump websocket.zig to `73429df` — the client set socket timeouts through `std.posix.setsockopt`, which maps `BADF`/`NOTSOCK`/`INVAL` to `unreachable` ("always a race condition"). those are reachable on a *connection* socket: an upstream that resets around the handshake aborted the whole process from inside `FirehoseClient.connectAndRead`, and `unreachable` cannot be caught by the reconnect loop. found downstream in stream, where a full test suite aborted roughly one run in seven; clean across 27 runs after. client-side counterpart of the same fix websocket.zig already applied server-side. diff --git a/build.zig.zon b/build.zig.zon index b3c87e9..32a284b 100644 --- a/build.zig.zon +++ b/build.zig.zon @@ -1,6 +1,6 @@ .{ .name = .zat, - .version = "0.3.18", + .version = "0.3.19", .fingerprint = 0x8da9db57ee82fbe4, .minimum_zig_version = "0.16.0-dev.3070+b22eb176b", .dependencies = .{