"The inbox stream contains all activities received by the actor." (#ActivityPub Rec). However, AP/AS2 collections (including "special" ones like Inbox, Outbox, Followers, etc.) do not contain Objects or Activities. They contain URI *references*. That's why one Create/Note can be referenced by many inboxes. It may look like Collections contain Objects because of typical server JSON-LD serialization, but don't be fooled. It makes a difference for data lifecycle management and storage models.
@steve so, I think you have a broken idea of the primacy of RDF in Activity Streams 2.0. We literally never talked about that lens on the format when creating it. The origin in AS1 is pure JSON. Whatever the Turtle representation of a Collection is, it is entirely accidental and unintended.
@evan How does work in RDF? Again, I'm talking about the underlying model, not the way it is serialized to JSON-LD for network communication. I'm also not discussing local caching/copying of remote AP/AS2 Objects (a different, but interesting topic).
@jonny@evan Very true for RDF, in general. However, in an ActivityPub context (at least, as specified) identity and location are somewhat tightly coupled. Although not AP per se, some aspects of the typical authorization implementations also rely on it. There are grassroots efforts with the goal of separating identity and location in AP, but it's still in the early stages.
@steve “That's why one Create/Note can be referenced by many inboxes” Theoretically, I agree with you. But that's up to the implementation. I'm not yet sure how I'm going to solve this. But at the moment, each actor has its own RDF “database”. That gives me a more secure feeling with SPARQL queries and export or migration are much easier to implement. At the moment I also have a memory for the public actor. How I solve this with the shared inbox remains to be seen.
@steve but there is no update for me either. An object is always an ordered collection and the subject points to the latest entry. I will document this when I get the chance. Because if, for example, “CC” is changed, then I see inconsistencies. Version1 : Max and John are in CC Version 2 : Max is in CC ...
@steve If there is exactly one object, then John no longer has access to the object after the update, or how else should I solve the access management. It is also possible that the object has changes after the update that John should not see.
@naturzukunft@mastodon.socia Yes, I think the Update part of ActivityPub is effectively broken and should be fixed someday. That said, I understand why it wasn't covered well back then. It's a very complicated topic and they seemed to want to downplay the AP/AS2 RDF foundations. Fortunately, there are ways implementations can "work around" the issues.
@evan I see *numerous* discussions about RDF in the transcripts from AS2 SocialWG meetings c. 2014-2015 and I see at least one tracked issue that references the discussions. Yes, AS1 used JSON. However, AS2 uses JSON-LD. Per the JSON-LD spec, "a JSON-LD document is both an RDF document and a JSON document and correspondingly represents an instance of an RDF data model." Based on that, isn't AS2 (and therefore AP) data literally an RDF data model? 🤔 https://www.w3.org/Social/track/issues/21
@evan Yes, I acknowledged there are ways to work around it, some more "elegant" than others. Some servers, like Mastodon, don't have an inbox collection and don't store Activities (like old Update activities that would be effectively mutated by new ones when an Object is modified). They effectively just store the Objects and overwrite the data when the Objects are updated (and then synthesize new Create Activities on-demand for the pseudo-outbox).
@steve the faction that was insistent on using as2 as rdf split off and became solid.
you can use as2 as rdf, and there are many advantages, but the format was designed to work as json first, jsonld second, and rdf last. not the other way around.
if you enjoy spec archaeology, you might like looking at the original draft rfcs that @jasnell did in 2014 before as2 came to w3c as part of the opensocial merger. you can see as the revisions progress how the problem of extensibility was handled. james started with urls as properties, then used a subset of jsonld to make it work.
@evan To be clear, I'm not saying Mastodon per se is broken wrt Updates. I'm saying change tracking is problematic in the AP recommendation. An Object URI will always reference the latest state of the Object, not the previous states for previous Updates (all referring to the same `object` URI). The Update could have had the changes as the Activity `object` and the target URI to update as, well, the `target`. Then the history of changes could have been preserved.
@evan@jonny@steve 'ap' URLs in FEP-ef61 are dereferenceable. Just like 'https' URLs, they are locations, but of a different kind. Instead of domain name system the naming authority is a cryptographic key.
@evan@jonny@steve I can't think of a better name. This is a protocol for retrieving self-authenticating ActivityPub objects, 'ap' seems very appropriate.
@steve i think a better path would be to define a new activity type in an extension, like `Patch`. it could use the semantics you describe, and perhaps also support versioning (apply these changes to this version of an object, resulting in this next version). if it becomes popular, it can be added to as2.
@evan@steve I take a very critical view of this! 1. John writes a note “Russia has started the war” 2. mike likes john's note 3. John changes the note “Ukraine has started the war” 4. now Mike likes a note that he may never see and that he even thinks is wrong.
This is my understanding of the AP update process at the moment
'ap' URLs are used by at least two projects, so we can't change the URL scheme easily, but I can add a note to the FEP saying that recommended scheme may change in the future.
@evan@jonny@steve Well, no, 'ap' stands for Activity Pub. FEP-ef61 is not a different protocol, it only adds new features to the existing one. Furthermore, these features can be implemented in backward compatible way (@nomad can confirm).
The URI scheme is not set in stone, however. I agree that this is not a standard way to retrieve objects, and there might be other practical reasons to use a different scheme. I think it can be changed to 'nomad' as @django suggested, or perhaps to 'ap+nomad' or something like that.