What’s very interesting to me in this discussion is that both Solid and fediverse are investigating how to implement Groups (see Groups implementation on SocialHub) and both based on ActivityStreams for that. This is a great opportunity to combine Solid vs. ActivityPub and, at least, stay as compatible as possible to each other.
How cool would it be if the Solid Groups App would be fediverse-compliant, integrated with the federated web, and showing Solid goodness to the AP audience over there?
The discussion on SocialHub was started by @ngerakines
creator of Tavern, a minimalistic Mastodon-compliant AP server implemented in Go. Rather than creating formal descriptions the fediverse recently adopted the practice to have FEDERATION.md
documents that describe server-to-server federated communication. Tavern has one too, that describes Group messaging.
@aveltens what I find unintuitive is the Offer{Join}
semantics. To me that says “I, Angelo offer to join the group” . I see Offer
more in terms of “I offer this Product or Service”. Also the Join
in this case refers to an activity that has not happened yet, hence it is not a real activity. Creation of the Join
should be left to the group after it happened, hence making it a real activity.
Some highlights of SocialHub discussion and FEDERATION.md
(highly recommended reads):
- As per ActivityStreams spec a
Group
is an Actor-type (in ActivityPub this means it has its ownldp:inbox
) - As such the
Group
is the single-source-of-truth of group membership - Joining a
Group
entails sending aFollow
activity to its inbox, which is responded with eitherAccept
orReject
- This can be automatic
Accept
for public groups, or a pending operation for private groups, manual approval. - A
Reject
includes the reason for rejection e.g. “Private group, invitation only”.
- This can be automatic
- The
Group
notifies its members (including the new member) about membership change with aJoin{Person}
message. - An
Undo{Follow}
to theGroup
triggers aLeave
membership change message from the group. - An
Invite{Person}
to bothGroup
andPerson
from an existing member means that a subsequentFollow
to that group from the person is automatically accepted.