Server-side atomic unsubscription
Right now, several implementations (Mastodon, Pleroma) force an unsubscribe by sending a Block activity followed by an Undo activity referencing that block over the wire.
This is problematic for a couple of reasons:
-
Whether
Blockshould actually ever be federated itself is under-specified (the "blocks must never be delivered to the target inbox" language under the C2S section) (but,Blockmust be federated in order to perform the unsubscribe right now). -
Blockfollowed byUndois not an atomic operation and therefore the relationship can wind up in limbo where the target server thinks their actor is blocked when it really isn't. -
Blockfollowed byUndodepends on the target having the same semantics for blocks as the rest of the fediverse (a dubious proposition at best).
It would be nice to see a proper Unsubscribe activity to replace the use of Block followed by Undo for unsubscription notifications. Or perhaps Undo.Follow where the original Follow activity is referenced.
cc @Gargron @nightpool @lambadalambda
Hi! So I remember I talked about this with... it was either @Gargron or @nightpool but I don't remember which. Anyway we eventually realized that there's no reason you can't send a {Reject {Follow}} later, even after an Accept had been made in the past. That seemed like the most elegant solution. What do you think?
Yes, I think Reject.Follow would work to tear down the relationship.
Testing shows that Pleroma already accepts Reject.Follow to do this, incidentally. Now the question is what other implementations do? And when can we switch to that for unsubscribes? :)
semantically i'd say that Undo Follow makes sense when you are unfollowing someone, while Reject Follow makes sense when you are preventing someone else from following you. so they'd describe operations in opposite directions.
To be absolutely clear, this case is for when you are unsubscribing someone else from your own actor.
mastodon currently supports reject.follow
I believe we also support undo.accept.follow
Nice. Do you know what version of Mastodon this has been supported since? I'd like to organize a flag-day to switch to reject.follow instead of soft-blocking to do unsubscribes, as it's rather fragile for reasons discussed above.
Reject -> Follow is supported since 2.3.0, and Undo -> Accept -> Follow since 2.5.0.
I think it would be reasonably safe to swap to Reject.Follow then in the short term. It'd be nice if we could get this documented as the proper way of announcing that a user has been unsubscribed.
We talked about this in the meeting today and we're going to push forward {Reject {Follow}} as a recommended way of doing things in the editor's draft since there seems consensus about that. I'll assign myself to that task.