fedify icon indicating copy to clipboard operation
fedify copied to clipboard

GoToSocial interaction policy vocabulary

Open dahlia opened this issue 2 months ago • 2 comments

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

  • interactionPolicy property 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

dahlia avatar Oct 03 '25 07:10 dahlia

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.

jfietkau avatar Oct 03 '25 08:10 jfietkau

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.

dahlia avatar Oct 03 '25 09:10 dahlia