Thanks for writing this up! And generally appreciate your effort to get standards in place around this stuff ahead of Bluesky launching big features around it.
I sadly wonât be able to make the meeting (2am for me) but Iâll write some notes. I think generally this is pretty complete and well-considered. Itâs helpful to have the design surface articulated like this:
There are three main pieces to this:
I also generally agree with the design posture, but at the same time, I think preparing for iterating on this and extending it as needed is doable and makes sense. My hope would be that we donât need to have so much of a sense of locking down this standard forever now so much as a sense that we are creating a sensible v1 starting place: authz framework (roles + authorised actions evaluated with existing records as params) and some record lexicons.
My intuition is that keeping the focus on normal record writes rather than special methods as much as possible feels cleaner and more empowering for devs in some sense. The core of this seems like a neat composition of fairly simple rules around role configurations:
There are no deny-rules or caveats. So rolesâ authorization composes simply by unioning all authorized actions**.** There is no precedence, hierarchy or evaluation order.
It would be helpful to have clarity on what, if any, custom state and special computation the community host needs to do outside of record writes that are gated by role/action checks - to me, having XRPC methods implies something of this sort. (also N.B. Re âactionsâ I agree with Zick above - I need to mentally translate it to âpermissionsâ for it to make sense to me.)
The notion of having standardised spaces like about and members is helpful, seems to conceptually follow from standard.site in terms of having shared semantics around metadata/discovery and the social graph which are definitely the most impactful in terms of interop. But if found that we needed to add another standardised space at some point, that also seems fairly straightforward.
Beyond that main point, some other small notes:
Noting that assignable doesnât seem to be defined anywhere
On the invite space - I think as apps are responsible for surfacing invites to users, they also need to be responsible for filtering out spam in a sensible way, and I think making use of labels etc makes sense here.
On community governance Iâm just trying to imagine how this works in practice - maybe a long lasting OAuth credential that is granted to a third party community governance service, or maybe (the service as an account) membership and a special role? I.e. maybe just wanting confirmation that conceptually this would be a client to the community space host.
Generally I think this all looks really solid and exciting!