GoToSocial interaction policy vocabulary
Summary
GoToSocial has developed a comprehensive interaction policy system that allows actors to specify who can interact with their posts and how. This system is now being adopted by other implementations, most notably as the foundation for FEP-044f (Mastodon-style quote posts). Adding support for GoToSocial's interaction policy vocabulary would improve Fedify's interoperability with GoToSocial and prepare the groundwork for FEP-044f support.
Problem
Currently, Fedify cannot:
- Express interaction policies on outgoing posts (who can like, reply, announce)
- Understand interaction policies on incoming posts from GoToSocial instances
- Handle the approval/rejection flow for interactions that require manual approval
- Generate or validate approval objects for authorized interactions
This limits interoperability with GoToSocial instances and will become more important as other implementations adopt these patterns (e.g., Mastodon for quote posts).
Proposed solution
Add the GoToSocial interaction policy vocabulary to Fedify:
Core vocabulary
interactionPolicyproperty for post objects- Sub-policies:
canLike,canReply,canAnnounce - Policy fields:
automaticApproval,manualApproval - Approval types:
LikeApproval,ReplyApproval,AnnounceApproval - Related properties:
interactingObject,interactionTarget,approvedBy
Implementation notes
The approval objects (LikeApproval, ReplyApproval, AnnounceApproval) can be implemented as regular ActivityStreams objects that are dereferenceable through Fedify's existing object dispatcher mechanism. No special infrastructure should be needed.
Context
GoToSocial's interaction policy specification is documented at: https://docs.gotosocial.org/en/latest/federation/interaction_policy/
This vocabulary is being extended by FEP-044f for quote posts (see #452), making it increasingly important for fediverse interoperability.
Scope
This issue covers only the GoToSocial interaction policy vocabulary itself. FEP-044f extensions (quote posts) would be handled separately in #452.
References
- GoToSocial interaction policy documentation
- GoToSocial namespace context
- Related: #452 (FEP-044f quote posts)
It is worth noting that the version of GoToSocial's interaction policies described in the current documentation (linked above) has been revamped recently and would require GoToSocial version 0.20 or higher for interoperability testing. The last stable versioned release is still 0.19.x at time of writing and uses different property names and types.
But yes, even besides just GTS interoperability and Mastodon quote posts, this permission framework will likely be used for more things in the future. The first confirmed feature, for which Mastodon is currently drafting a preliminary FEP, is starter packs. The current design uses an interaction policy to allow actors to accept or decline being added to starter packs, and actors without a matching policy will not be able to be added to Mastodon starter packs. Although this proposal could still change significantly, a strict application of the interaction policy appears to be the plan.
Thank you for the heads up about the version differences! That's really helpful context. Since we likely won't implement this immediately, we'll probably target the 0.20+ schema when we do get to it, as that should be more widely deployed by then.
It's also interesting to hear about the starter packs use case—it seems like interaction policies are becoming a foundational pattern for various consent-based features across the fediverse. This makes the vocabulary even more valuable to support.