Solid Groups App

Well i’m not sure i’will stay in “pure” holacracy, because first the new constitution 5 is very différent from the actual 4.0. And the core principe in holacracy is " things gonna change" :wink:

So i’m travelling between holacracy, sociocracy (but the 3.0 version seems to be really hard to implement, with lot of different concepts…)

I’m also interested in the “Shared Gouvernance” (Gouvernance partagée) proposed by “The university of Us” (l’université du nous) that mix the best of holacracy & sociocraty, but sorry it’s in french https://vimeo.com/399650847
http://universite-du-nous.org/a-propos-udn/ses-outils/

By the way, for all three I need Circles & Sub-circles (Groups, sub-groups), where one circle could be also a sub-circle of another big circle…
This way Organization can also be considered as a Group and a Rôle can be a group with one member,

I’m projecting to use a specific vocab based on activitystreams, something like GouvernanceStreams, where we could reuse something like

{
  "@context": "https://www.w3.org/ns/gouvernancestreams",
  "summary": "Sally created a circle",
  "type": "Create",
  "actor": {
    "type": "Person",
    "name": "Sally"
  },
  "object": {
    "type": "Circle",
    "name": "A Simple Circle",
    "purpose": "This is a simple circle to represent the Solid Community"
  }
}

the same way we could have such_webid join one_group

This way we could keep an immutable trace (on ipfs ? -> @pukkamustard) of the happening actions, and the state of any organization or group would be the sum of those actions…

Could we consider a sub-circle is a member of a circle ? And a circle hasMember a sub-circle ?

The nice thing of Sociocracy is that it is a pattern library and specifically encourages only adopting those patterns you need, and extend from there. In sociocracy you don’t technically have sub-circles. A circle can be linked to other circles and delegate influence to it, so then conceptually you could see it as a sub-circle but I would not model them as such (you were probably not planning to, but I would avoid using the name of sub-circle entirely). On the other hand maybe you want to have domain logic that says: “You can only participate in a sub-circle if you are already member of the circle”.

Regarding using ActivityStreams, I’d strive to remain compatible with the spec. In AS your Circle is just a Group, so you could have:

{
  "@context": [
    "https://www.w3.org/ns/activitystreams",
    {
      "hc": "https://smag0.solid.community/holacracy/ns#",
      "purpose": {
        "@id": "hc:purpose",
        "@type": "@id"
      }
    }
  ],
  "summary": "Sally created a circle",
  "type": "Create",
  "actor": {
    "type": "Person",
    "name": "Sally"
  },
  "object": {
    "type": ["Group", "hc:Circle"],
    "name": "A Simple Circle",
    "purpose": "This is a simple circle to represent the Solid Community"
  }
}

Now you have defined an extension of AS. Having the type property as an array with the AS type coming first is a valid use according to the spec. I don’t know if ActivityPub implementations will honour that if you ever decide to integrate with the Fediverse, but that is another matter.

PS. Might be nice to have some documentation online about the spec you are creating. Similar to what ForgeFed is doing.