I would like opinions on how large “vocab extensions” (this as yet ill-defined concept) should be, so we may find best-practices for it. My take is they should be “as small as possible” to increase their versatility and reuse potential as building blocks (lego bricks) in interoperable solutions.
I tooted about the subject, where I mention the FEP about "Groups federation. This document has an optional part “Groups moderation”.
Now, I don’t want to go into the specific mechanics of Group federation. But say a dilligent developer implements the FEP to the letter to be as compatible as possible. But in their app Groups have moderation as a requirement (i.e. a group must have moderators or it can’t exist). By doing so they are arguably no longer compatible with Groups federation, as they implemented a restricted subset of the broader concept. They implemented “Moderated Groups”.
Which is something very different. In real life I am in many groups and most of them aren’t moderated. Or, if they are, the moderation is different. It is more accurate in those cases to say that the group has a form or governance.
So wouldn’t it be better if there were a Groups vocab extension and a Moderation vocab extension? So that combining these two ‘lego bricks’ allows me to model “Moderated Groups”. Any app that doesn’t support Moderation can still deal with the Group extension in compatible ways.
In my toots I give a further example where I might model “Community with Governance” from vocab extension building blocks.
I feel this discussion is very relevant. For example ForgeFed (ping @fr33domlover) is modeling interoperability between code forges. But forges have a ton of functionality, and arguably the resulting model consist of numerous reusable building blocks. Tasks, Revisions, Labels, Organization structure, etc. There are many ways to slice.
In the FEP about Valueflows support (ping @lynnfoster) there are also many concepts. This includes functionality related to Tasks. Valueflows might be just as foundational a vocabulary as ActivityStreams, providing basic primitives to build on top of, as Lynn suggests.
But we should be wary that the larger the vocabulary the more likely we get incompatible flavours implemented in fediverse apps.
(One might say that ActivityStreams is too large a vocabulary as well. It has very generic “CRUD of Objects” and then things like “Like” that are more relevant to a subset of social apps. Though here this doesn’t pose a problem)