Identities for entities did.bot

fix(spaces): keep space data reachable while the flag is off #2620

targeting main from erasure
Closed opened by and assigned to borel-balisong.test.pds.did.bot
targeting main from erasure

A disabled deployment now opens an existing spaces/ store even though it serves no space route. Account erasure and blob collection still see the records held there; a fresh deployment with the flag off still creates no store.

Without this, turning spaces off made account deletion a no-op for space data and let the blob collector treat space-referenced blobs as unreferenced.

🤖 Generated with Claude Code

Commits 42

fix(spaces): keep space data reachable while the flag is off
feat(spaces): admit agent records under bot.did.agent
fix(spaces): pin notification delivery and forward authority writes
docs(spaces): fix the intra-doc links the doc build refuses
style(spaces): apply rustfmt to the stacked work
docs(spaces): bring the guide and epic up to the shipped surface
feat(oauth): resolve space type declarations over the network
feat(spaces): meter space writes and enforce the record ceiling
test(spaces): cover a remote group DID hosted elsewhere
feat(spaces): expose credential revocation in the dashboard and CLI
feat(spaces): verify client attestations and consult managing apps
feat(spaces): announce the KEM backfill on the identity stream
fix(spaces): serialize space blob writes against the collector
feat(spaces): sync blobs with access control and GC safety
feat(identity): answer getRecommendedDidCredentials with the KEM key
feat(spaces): make remote-authority participation first class
feat(operator): add the didbot space command group
test(spaces): add adversarial parser, store and HTTP suites
fix(spaces): bound the credential lifetime subtraction
feat(oauth): accept space permissions and space type declarations
docs(spaces): document remote group authorities and the swarm boundary
docs(spaces): document the flag, write safety, scopes and usage
test(spaces): exercise private spaces end to end
feat(spaces): report space usage on the dashboard
feat(spaces): judge space writes through the policy gate
feat(spaces): refuse operator records in space writes
feat(spaces): gate spaces behind a deployment flag
feat(spaces): detect upstream support and request space scopes
feat(spaces): add the operator spaces dashboard
fix(spaces): keep the alpha lexicons through a refresh and require a usable key
feat(spaces): issue credentials and deliver notifications
feat(spaces): add simplespace mutation and sync endpoints
test(spaces): prove space data stays off the public surface
feat(spaces): serve the core space XRPC surface
feat(spaces): add the durable space store
test(spaces): cross-check the protocol crate against the TypeScript reference
feat(spaces): give every account a P-256 KEM key
test(agentd): use a genuinely unread scope in the audit test
feat(spaces): add the space OAuth scope grammar
feat(spaces): vendor the space and simplespace lexicons
fix(spaces): apply the protocol crate's security review
feat(spaces): add the protocol primitives crate