hrefna,
@hrefna@hachyderm.io avatar

I'm trying to make sense of how audience is supposed to work in #ActivityPub and it feels like something is missing in the specification here both for AP and #ActivityStreams.

The documentation from AP:

  1. Never uses audience targeting even in its audience targeting example.
  2. Uses it almost identically to "to" or "cc"

On the part of AS it gets somewhat alluded to in 5.1.1, but not in the main section actually titled "Audience Targeting" (5.1) and says very little about it, just one example

7.1.1 Outbox Delivery Requirements for Server to Server When objects are received in the outbox (for servers which support both Client to Server interactions and Server to Server Interactions), the server MUST target and deliver to: The to, bto, cc, bcc or audience fields if their values are individuals or Collections owned by the actor. These fields will have been populated appropriately by the client which posted the Activity to the outbox.
Activities are rarely isolated events. Often, multiple individual activities will be performed around a similar context or audience. For instance, a collaborators working on a shared project might perform multiple related activities in the process of achieving some goal. Such activities can be logically grouped together using the context property, and scoped to a particular audience using the audience property.
audience, Notes: Identifies one or more entities that represent the total population of entities for which the object can considered to be relevant.

jenniferplusplus,
@jenniferplusplus@hachyderm.io avatar

@hrefna Letterbook uses audience in the way I think you're expecting. We would generally expect it to be a set of Collections (or links to Collections) for which the activity and/or its transitive object could be visible. Most often as:public and/or the actor's Followers. And we'll produce messages that look like that. We would expect the specifically addressed recipients to be in one of the To or Cc fields.

hrefna,
@hrefna@hachyderm.io avatar

@steve let me know about https://github.com/w3c/activitystreams/issues/300 which shows me the feature I really want:

"The scope indicates that the audience for the note is only members of the Organization."

But it seems likely that something got lost in the shuffle, because the final #ActivityStreams says that it is the audience it might relevant to (which is not the same thing) and gives only a peripheral example contrasting its use with context, and not mentioning it otherwise, and in AP it is the same as to/cc.

steve,
@steve@social.technoetic.com avatar

@hrefna There's a bit more discussion about scope and targeting at https://chat.indieweb.org/social/2016-03-17#t1458229683066000 .
Snell makes it clear that scope/audience is not intended to be used for targeting (to/cc/bto/bcc). Somehow the AP recommendation (incorrectly?) included it as a targeting property. Also relevant: https://github.com/evanp/onepage.pub/issues/91#issuecomment-1656844202

hrefna,
@hrefna@hachyderm.io avatar

@steve It's interesting to me that there are essentially three different interpretations going on here.

  1. There's the original request, which is a scoped universe of who might see the message. This matches what I see in the chat log.

  2. There's targeting, which is how ActivityPub handles it.

  3. There's "who might be interested in it" or who it might be relevant to, which is what made it into ActivityStreams.

Three radically different meanings that would interact in surprising ways.

hrefna,
@hrefna@hachyderm.io avatar

This is irksome, because a) I already have to/cc b) I don't want the to/cc behavior when I specify an audience c) nothing specifies the behavior I do want, which is the behavior in the aforementioned ticket d) I can't tell how exactly audience is supposed to be used in #ActivityPub or how implementations may have interpreted all of the above.

But it seems like knowing this would be important

When people talk about the challenges of interoperability here, this is the sort of thing they mean

hrefna,
@hrefna@hachyderm.io avatar

In actuality, I'm not even sure how you would use it in the way that it looks in the one example in #ActivityStreams, where it exists without any sort of attached unique identifier.

The example is descriptive, but not usable as written to infer behavior or meaning. I don't even have a good way to talk about who might be in said group: which actors or objects might be members?

I could use a collection, maybe, but what if I want to scope it to members of a server?

There's no way to define this

hrefna,
@hrefna@hachyderm.io avatar

But since I want the functionality for my own purpose I have options.

  1. I can ignore AP's use entirely, be noncompliant there, use it per the documentation in the original bug and hope that no one tries to parse it incorrectly later as part of forwarding-from-the-inbox

  2. I can add a scope attribute which no one will read because they don't recognize it, so at least I don't get the incorrect behavior and can remain compliant

  3. I can attempt to modify the spec and get frustrated w/ everyone

hrefna,
@hrefna@hachyderm.io avatar

So to conclude my thinking-out-loud-rambling here, after reading the various docs:

I think that (2) is the best route forward overall. Basically define an extension or a standard around this, going back to the original "scope" language.

If I like it and can suitably define it I can publish it as a FEP, which I don't think would actually do anything but would make me feel better.

Then if the spec ever changes and a version handshake is introduced then I can modify accordingly.

hrefna,
@hrefna@hachyderm.io avatar

What I actually want is the following:

  • If audience is specified then the message MUST NOT be sent outside of the members of the audience.
  • A way to specify groups of users in a shorthand. Like a simple pattern match or even something like CEL.
  • A way to designate a collection of users such as "everyone belonging to a server" in an easy, canonical way.
  • Some belief that others would, if not respect this, at least not send it to everyone listed in the audience.

So (2) seems best.

  • All
  • Subscribed
  • Moderated
  • Favorites
  • fediverse
  • DreamBathrooms
  • ngwrru68w68
  • tester
  • magazineikmin
  • thenastyranch
  • rosin
  • khanakhh
  • InstantRegret
  • Youngstown
  • slotface
  • Durango
  • kavyap
  • mdbf
  • tacticalgear
  • JUstTest
  • osvaldo12
  • normalnudes
  • cubers
  • cisconetworking
  • everett
  • GTA5RPClips
  • ethstaker
  • Leos
  • provamag3
  • anitta
  • modclub
  • megavids
  • lostlight
  • All magazines