Require of a space host what 0016 asks of one #641

Merged ngerakines.me
targeting main from 0016-permissioned-uris
Merged opened by and assigned to ngerakines.me
targeting main from 0016-permissioned-uris

REQUIRED_SPACE_METHODS is documented as "every method a host must advertise to be usable as a space host" -- the list a capability probe compares a host against. It required com.atproto.space.getRepoState, which appears in no version of proposal 0016 and in no draft lexicon. It is a pre-lexicon name for what the draft settled on calling getLatestCommit, and this workspace's own PDS routes it as a compatibility alias it deliberately does not advertise. A probe therefore failed a conformant host for lacking a method that does not exist.

It also omitted listRepoOps, which the draft calls the primary sync mechanism, along with getBlob and listBlobs. So the list was wrong in both directions at once: it turned down hosts that could serve a space and passed hosts that could not be synced from, which is the failure a conformance list exists to prevent.

The list is now the draft's XRPC table, grouped by the role each row is assigned to -- space host, repo host, PDS -- less notifySpaceDeleted. That one is delivered to the services registered for a space rather than served by a host, so a host that does not answer it is not thereby unable to serve spaces. notifyWrite stays: a space host receives one from each repo host and forwards it.

GET_REPO_STATE remains as a constant, documented as not being a 0016 method, because servers still answer it and a client still has to name it. Breaking for anything binding the constant as [&str; 17].

Commits 0