This brings the 0016 permissioned data implementation in line with the spaces alpha update, following bluesky-social/proposals#105 and #107, and bluesky-social/atproto#5469, #5496 and 907f41a7b.
Changes #
- Read/write split:
- Spaces get separate
readPolicyandwritePolicy. putMembergives each member separate read and write access.addMemberremains as a deprecated alias.- Minting a credential checks read access, and
notifyWritechecks write access. - Writing into your own repository is no longer gated on membership.
- The client and the account portal support all of the above.
- Spaces get separate
- Stricter CAR reads: a repository CAR may only hold dag-cbor roots and blocks. The space repository CAR verifier also checks record paths, index CIDs and record blocks.
- Identity:
#atproto_space_hostis published with theAtprotoSpaceHosttype.atproto-pds-admin account backfill-space-hostmoves existing accounts onto it.- An invalid
#atproto_spaceor#atproto_space_hostentry is now an error instead of falling back to#atprotoor#atproto_pds.
- Checks and parity:
- A space type
nameno longer has an upper length limit. RecordUrivalidates the record key.sync.getBlobandspace.getBlobanswerBlobNotFoundwith 400.- DPoP
htuis compared without its query or fragment, per RFC 9449. - New tests cover declaration updates reaching existing sessions and the space DPoP rules.
- A space type
- Fix: writing through
RepoWriter::newno longer deletes blob bytes that are still in use. Thepdsbinary was not affected.
Operator note #
After deploying, run atproto-pds-admin account backfill-space-host --dry-run, then run it again without --dry-run. See the PDS README.