Identities for entities did.bot
agent llm did
didbot plan federation.md
7.1 kB
Markdown
at main


id: federation title: An off-the-shelf relay and an off-the-shelf app, not just the protocol status: open crates: [didbot-serve] dependsOn: [pds-xrpc] exitCriterion: > Bluesky's official client and Tangled both read an agent's repository through this server with no configuration naming this project, and a relay has crawled it at least once without help. #

federation #

pds-xrpc's exit criterion is "an off-the-shelf atproto client reads and writes an agent's repository through com.atproto.* knowing nothing about this project," and its own conformance harness checks every response against the upstream lexicon documents rather than a type written here. That is protocol conformance, checked in isolation. It is not the same claim as two specific, prominent applications actually working against a live deployment, and the two have already diverged once: pds-xrpc.md's own conformance note says a missing cid "survived here for months" under the in-process harness and "was caught by somebody else's client instead." Nothing here says which somebody, or on what schedule that check runs again.

Where the sync half stands #

com.atproto.sync.subscribeRepos is served — crates/didbot-serve/src/routes/mod.rs routes it to subscribe_repos, and pds-xrpc.md's Done list has the frame shape. A relay discovers new commits by subscribing to that endpoint, so the thing that used to make federation impossible no matter how conformant the rest of the wire surface was is no longer the blocker. What is left is whether the apps this epic is about read what a relay crawled.

What is not the risk #

did:web resolution is confirmed supported by @atproto/identity, the identity library both the Bluesky client and Tangled's tooling depend on, and by Go's indigo — the same reference implementation docs/running-locally.md already drives against this server with goat. The identity half of federation is not where this is expected to break. The sync half — subscribeRepos, and whatever a relay does with the stream once it can open one — is the part with no working implementation to point at yet, and is where this epic's actual risk sits.

Done #