stevebate:
there are different mental models of AS2 [...] If AS2 is considered to be plain JSON, then the meaning of “link” becomes relatively muddled for me
Yeah -- even for people who understand the difference between a direct link and an indirect/reified Link, there's still uncertainty about when you would want to use one or the other. "You can describe properties of the link/reference" is something that makes sense in the abstract but it depends on a processing model to make sense in practice. as:Link feels like it's largely unused in AS2 documents across the fediverse; most links are direct links by way of using AS2 properties with non-embedded objects. (For example, when "actor" and "object" are JSON strings instead of as:Link nodes.)
silverpill:
Every id value is expected to be an identifier of an ActivityPub object. When it resolves to something else, like an HTML document, we conclude that the identifier is not valid.
Do you expect every AS2 document to be an ActivityPub object?Do you dereference every id to make sure of what it resolves to?If some id doesn't have an AS2 representation, do you:...discard the entire activity?...discard that particular statement?...process the statement as-is without further information? silverpill:
Fediverse != Web
One can certainly claim this (and they might not be fully incorrect per se), but then it leads to asking if AP == AS2 == Fediverse, or if AP == Web != Fediverse != AS2. At least in theory, AP and AS2 are intended to be Web specifications published by the W3C under the Social Web WG.
silverpill:
By default, hrefs do not point to ActivityPub objects.
Would you then say something like this?
If an id is the "href" of a Link, then it can have representations not including AS2.Otherwise, an id (SHOULD? MUST? MAY? is expected to without being required to?) have an AS2 representation.
We currently don't require this, and there is no processing model defined for AS2 documents. AP implies a partial processing model that includes retrieving objects via their id, but this is only for AP, and it only applies when the id is an object id. So you could read it as applying to this:
{ "actor": {"id": "
https://alice.example/#alice", "type": "Person"}}
But maybe not this (unless you somehow infer this is an Object, which by default can't be done while the range of "actor" is Object | Link):
{ "actor": "
https://alice.example/#alice"}
And maybe not this either (unless you assume the "href" is an object):
{ "actor": { "url": { "href": "
https://alice.example/#alice" } }}