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).