FWIW hereās my personal takes, at least for now:
Revive the Multibox endpoint, or some similar mechanism for specifying exact inboxes to deliver to.
The sharedInbox we ended up with has some pretty egregious shortcomings with respect to the receiving server having to interpret how it should handle delivery, and the popular use of followers collections in the addressing properties introduces a dependency on state synchronization that would otherwise be completely avoidable. For example, you may think you know who the local followers are for any given remote actor, but you actually donāt! The local actor may have been silently removed from the followers collection, or you might have gotten a removal activity that you didnāt understand for some reason and therefore didnāt process the correct side-effects for it. The problem only gets worse when you start to consider things like bto/bcc, or addressing arbitrary collections of actors a la āCirclesā or āAspectsā.
Make Groups make sense
Looking at other vocabularies, you have things like foaf:Group which is a subclass of foaf:Agent that can have foaf:member statements. In VCard, you have vcard:Group which also uses vcard:hasMembership to point to constituent VCards. There is no such mechanism for AS2 Groups. It could make sense to use the Join/Leave activities to manage membership, where membership is denoted by an additional special collection. It could also make sense to extend this mechanism to Organization, although I imagine some hierarchy-related vocabulary might make more sense there.
Resolve the as:Public
issue
The JSON-LD context defines Public
as as:Public
which in theory should expand to https://www.w3.org/ns/activitystreams#Public
, and in theory, all three should be equivalent ā but in reality, because the JSON-LD context also defines as:
as a prefix mapping to https://www.w3.org/ns/activitystreams#
, compaction will always generate as:Public
and never generate anything else. Further compounding this issue is the fact that the properties youād use such a Public
term inā¦ are not defined to take advantage of vocabulary mappings. Properties like to
, cc
, and so on are defined as @type: @id
and not as @type: @vocab
. Not that they necessarily should be defined as @type: @vocab
, but if the intent is to be able to refer to Public
, then this reference should be within a term that is defined as @type: @vocab
. This means defining a new property dedicated specifically to denoting that an object is addressed to or intended for a specific class instead of specific actors. This is similar to how Web Access Control has predicates for both agent
and also agentClass
, the latter of which allows you to specify Agent
or AuthenticatedAgent
(while the former allows you to specify other peopleās WebIDs). Thereās also agentGroup
for denoting instances of vcard:Group
whose members are allowed to access the resource.
Better support for access control and not just delivery
Continuing from the above point, properties like to
, cc
, audience
are intended to trigger ActivityPub delivery. But there are cases where you might want to allow an actor to fetch a resource without necessarily delivering to them. It might be possible to just use WAC for this, Iām not entirely sure. But there are going to be undefined interactions with the existing audience addressing properties, which seem to imply a limited form of access control already.
Redefine Mention
in a way that doesnāt depend on microsyntax?
Right now, a Mention is a special type of Link thatā¦ ārepresents an @mention
ā? Even though it doesnāt even require an @
character? Basically, the definition of Mention doesnāt line up with anything useful in reality. Thereās an aspect of linking to something that maps to a āuserā, but this is artificial because ActivityPub doesnāt really have a concept of āusersā or āaccountsā, only āactorsā. Itās not meant to generate a notification either, because thatās what to
and cc
are for. So what is it really for? What should it be for? Referring to an actor without generating a notification? It seems to be entangled with the more general issue of microsyntax, but surely thereās some semantic meaning we can extract out of it. Otherwise, we might as well just tag
a Link
instead of subclassing it as a Mention
. For prior art or related concepts, we can look at Webmentions, where it is possible to mention pages or resources and not just people.