From a7d95682879bb647b3958e1fce84a4eddfe00f54 Mon Sep 17 00:00:00 2001 From: zzstoatzz Date: Tue, 18 Aug 2026 03:21:35 -0500 Subject: [PATCH] docs: tidy stray root docs, refresh the downstream list MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Moves the MST inversion report out of the repo root into docs/, updating the 0.3.19 changelog entry that references it by path. Rewrites "used by" around what zat actually runs now. The list had grown by accretion and led with small consumers while omitting the ones that make the case: a PDS, a relay, and a Jetstream V2 service with the whole network archived behind it. Splits protocol infrastructure from applications, drops the weaker entries rather than appending to them, and fixes zlay's link — it lives at zat.dev/zlay, not zzstoatzz.io/zlay. Every URL and live endpoint in the new list was checked. Co-Authored-By: Claude Opus 5 (1M context) --- CHANGELOG.md | 2 +- README.md | 25 +++++++------------ .../mst-inversion-prevdata.md | 0 3 files changed, 10 insertions(+), 17 deletions(-) rename REPORT-mst-inversion-prevdata.md => docs/mst-inversion-prevdata.md (100%) diff --git a/CHANGELOG.md b/CHANGELOG.md index 50ab8d2..95f34f0 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -282,7 +282,7 @@ Still absent, and deliberately so until something downstream demands them: dial ## 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`. +- **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 `docs/mst-inversion-prevdata.md`. ## 0.3.18 diff --git a/README.md b/README.md index 1099d9e..0a5d211 100644 --- a/README.md +++ b/README.md @@ -312,31 +312,24 @@ const post = try zat.json.extractAt(FeedPost, allocator, value, .{"post"});
downstream projects — what's building on zat -### firehose consumers (Jetstream) +### protocol infrastructure | project | what it does | |---|---| -| [labelz](https://tangled.org/zzstoatzz.io/labelz) | AT Protocol labeler — keyword-matched, secp256k1-signed, served over XRPC. exists to pressure-test zat as an SDK ([live](https://labelz.fly.dev/health)) | -| [coral](https://tangled.org/zzstoatzz.io/coral) | named-entity recognition over the firehose ([live](https://coral.waow.tech)) | -| [pollz](https://tangled.org/zzstoatzz.io/pollz) | polls on AT Protocol ([live](https://pollz.waow.tech)) | -| [typeahead](https://tangled.org/zzstoatzz.io/typeahead) | community actor search ([live](https://typeahead.waow.tech)) | -| [find-bufo](https://tangled.org/zzstoatzz.io/find-bufo) | bsky bot that quote-posts matching bufo images for opt-in followers | +| [zds](https://tangled.org/zat.dev/zds) | AT Protocol PDS — repos, blobs, OAuth, passkeys, firehose, permissioned spaces ([live](https://pds.zat.dev/xrpc/_health)) | +| [zlay](https://tangled.org/zat.dev/zlay) | AT Protocol relay — crawls every PDS directly, verifies commit signatures, serves the merged event stream ([live](https://zlay.waow.tech/_health)) | +| [stream](https://tangled.org/zat.dev/stream) | Jetstream V2 service with the whole network archived behind it — 16.3M repos, sealed segments back to seq 1 ([live](https://stream.waow.tech)) | +| [jetstream](https://tangled.org/zat.dev/jetstream) | the zig SDK for Jetstream v2 services — subscribe, archive backfill, failover | -### CBOR / CAR / MST users +### applications | project | what it does | |---|---| -| [zlay](https://tangled.org/zzstoatzz.io/zlay) | AT Protocol relay — direct PDS crawl, signature validation, inline collection index ([live](https://zlay.waow.tech/_health)) | -| [atproto-bench](https://tangled.org/zzstoatzz.io/atproto-bench) | cross-SDK relay benchmarks (zig vs go vs rust vs python) | +| [weir](https://tangled.org/zzstoatzz.io/weir) | orchestration server whose database *is* an atproto repo — every run and state transition a record under signed commits, exportable as one CAR | +| [coral](https://tangled.org/zzstoatzz.io/coral) | named-entity recognition over the firehose ([live](https://coral.waow.tech)) | +| [pensieve](https://tangled.org/zzstoatzz.io/pensieve) | public memory search over a repo — semantic artifacts extracted from arbitrary record shapes | | [ken](https://tangled.org/zzstoatzz.io/ken) | semantic search over your atproto repo — vector index of records, search by meaning ([live](https://ken.waow.tech)) | -### identity + XRPC users - -| project | what it does | -|---|---| -| [music-atmosphere-feed](https://tangled.org/zzstoatzz.io/music-atmosphere-feed) | bsky feed generator for music links — JWT auth for personalized feed | -| [leaflet-search](https://tangled.org/zzstoatzz.io/leaflet-search) | search across leaflet, pckt, offprint, and other standard.site publishers | -
## benchmarks diff --git a/REPORT-mst-inversion-prevdata.md b/docs/mst-inversion-prevdata.md similarity index 100% rename from REPORT-mst-inversion-prevdata.md rename to docs/mst-inversion-prevdata.md -- 2.51.2