My concern is about the continued usage of target
in a way that is redundant with context
and also not matching the semantic meaning of “target”.
{
"@context": "https://www.w3.org/ns/activitystreams",
"id": "https://example.com/some-activity",
"actor": "https://example.com/some-actor",
"type": "Create",
"object": {
"content": "Hello world",
"context": {
"id": "https://example.com/some-conversation",
"type": "OrderedCollection",
"attributedTo": "https://example.com/some-moderators"
},
"target": {
"id": "https://example.com/some-conversation",
"type": "OrderedCollection",
"attributedTo": "https://example.com/some-moderators"
}
},
"to": "https://example.com/some-moderators"
}
From 400e:
Currently, there is no generic way to signify that an object was created as part of a collection and should only be considered in its context.
While [Activity Vocabulary] specifies target
as a field with similar semantics in activities, it’s important to include it in objects themselves so any software that only sees the object without its enclosing Create
activity, e.g. when following a link form another object or retrieving the object from a user-provided URI, unambiguously knows that it should only be considered in the context of its collection.
Emphasis mine, again. context
is valid on objects and target
is only valid on activities, plus target
means something different – it’s the grammatical indirect object, which is not defined for Create as a verb. It would honestly make more sense to use to
than to use target
. (And in fact, this is one way a self-managing collection-actor could work, where the actor can Add items into itself as a Collection.)
There is also a possibility that a producer might produce an activity or object where context
and target
point to different collections. This would be really bad. I think we should not open the door to that possibility.
As for reconciling 7888 with 1b12, you can put context
on the inner object (the “post” itself), and you can put audience
wherever you please. So it’s possible to conform to both… although I still think that 1b12 makes too many assumptions that don’t hold up, like that the actor must always be a Group, and that it always sends an Announce wrapping an activity instead of wrapping the “post” object, and that the “first post” is a Page, and that all Group actors behave like this, etc. These are all fragile assumptions to make and can easily be broken (particularly the last one). But those can be ironed out over time.
The main change that 1b12 implementers should make is to detect the presence of context
as representing a logically grouped “thread”, and to reduce reliance on inReplyTo chains.
I think the only change that 7888 implementations need to make is to consider the possibility of encountering objects that declare a local context without having been delivered to that context?
I guess when you put it like that, there’s not actually much of anything to “reconcile”, is there? The only practical implication of all this is that some actors will send out an Add (where the Add.target
is the Add.object.context
which indicates the thread, and the Add.object
indicates the post to add to that thread) and some actors will send out an Announce (where the Announce.object.object.context
indicates the thread, and the Announce.object.object
indicates the post to add to that thread). Obviously I prefer the Add because it’s more explicit, but I guess you could send both an Add and an Announce to your followers… perhaps the 1b12 Group sends the Announce, while the context owner sends the Add. This is somewhat duplicative, but it’s less duplicative than the context
/target
thing mentioned above. I suppose it could also depend on whether you follow the 1b12 community (which sends an Announce), or if you follow the thread itself (which sends an Add).