FEP-0391: Special collection proofs

Ahh, attributedTo, my behated…

We started with the author property from AS1.0. Somewhere along the way that got lost, then reintroduced as attributedTo, and the scope got widened so now anything can be attributedTo anything. attributedTo in what sense? Well right now everyone means what AS1.0 called “author” - what we started with - though they probably mean “publisher”,

(What did AS1 implementations mean? That’s actually simultaneously more and less clear. What we today call Create(Note), AS1 would call post(note); there, publisher as the actor of the post activity as distinct from the author of the note makes more sense than it does with Create’s actor vs the note’s attributedTo)

Anyway, what I’m trying to get at is that in the road to the creation of AS2.0, there was an awful lot of semantic generalisation. Create is the result of squishing create, post and author together (yes there was also an author activity! no I don’t think anyone had a concrete use case for it or ever used it!). attributedTo is a generalisation of author

Some of this makes sense: if we’re using attributedTo to strictly mean author, we’re probably using it wrong (if you imagine a properly rich implementation of AP by a news site, probably people would want to stuff the publication’s name into the attributedTo property for backwards compatibility, and add a new author property for the actual authors of the article); but you have to wonder how this useful generalisation got extended further to the point the Range of the property is now Link | Object.

The result of this applied to the entirety of AS2 is a deeply, deeply unhelpful and implementer hostile situation where nearly every property applies to any object and can point at any object.

(If I were placed in the position of AS2 spec editor, I think I would look at what variants are used by real world implementations and ruthlessly deprecate every other option)

So while AS2 as written permits this use case, I deeply dislike the use of it (I also dislike the use of the Add activity here, though not as much; as an implementer concern, it results in a proliferation of URI indexes which are annoying to scale in a way that supports tiered storage on long-running instances with growing databases if you have to track the URI of every special collection - especially exacerbated if you have to do so for every post to track the replies collection)

Broadly though, I like the implementation; I just think:

  • We shouldn’t use attributedTo. Yeah, I know AS2 says we can, but that way lies implementer madness; and
  • If we’re using the Add activity, we add some required property to signal the relationship the container has to its’ parent)
1 Like