"As a group admin, I want to create sub-groups within my group, so members can organize discussions by topic."
Besides linking related groups (see #31), we implemented a tree structure where:
- Groups can contain child groups (channels/topics)
- Channels inherit properties from parent groups
- Members can browse by channel or see all group content
Existing approaches:
- Schema.org:
hasPart/isPartOf for parent-child relationships
- Nodebb: Nested categories
Suggested representation for a parent group:
{
"type": "Group",
"id": "https://example.org/groups/programming",
"name": "Programming",
"attributedTo": ["https://example.org/actors/alice"],
"hasPart": [
{"type": "Group", "id": "https://example.org/groups/programming/rust", "name": "Rust"},
{"type": "Group", "id": "https://example.org/groups/programming/python", "name": "Python"},
{"type": "Group", "id": "https://example.org/groups/programming/elixir", "name": "Elixir"}
]
Suggested representation for a child group:
{
"type": "Group",
"id": "https://example.org/groups/programming/rust",
"name": "Rust",
"isPartOf": "https://example.org/groups/programming",
"attributedTo": ["https://example.org/groups/programming/attributedTo"],
"interactionPolicy": {
"canJoin": { "automaticApproval": ["https://example.org/groups/programming/followers"] },
"canModerate": { "automaticApproval": ["https://example.org/groups/programming/attributedTo"] }
Key patterns:
isPartOf links to parent group (we could also use context but this makes more sense if also using hasPart for child groups)
- Child can reference parent's collections in
interactionPolicy for permission inheritance
- Child can have its own
attributedTo or reference parent's
"As a group admin, I want to create sub-groups within my group, so members can organize discussions by topic."
Besides linking related groups (see #31), we implemented a tree structure where:
Existing approaches:
hasPart/isPartOffor parent-child relationshipsSuggested representation for a parent group:
{ "type": "Group", "id": "https://example.org/groups/programming", "name": "Programming", "attributedTo": ["https://example.org/actors/alice"], "hasPart": [ {"type": "Group", "id": "https://example.org/groups/programming/rust", "name": "Rust"}, {"type": "Group", "id": "https://example.org/groups/programming/python", "name": "Python"}, {"type": "Group", "id": "https://example.org/groups/programming/elixir", "name": "Elixir"} ]Suggested representation for a child group:
{ "type": "Group", "id": "https://example.org/groups/programming/rust", "name": "Rust", "isPartOf": "https://example.org/groups/programming", "attributedTo": ["https://example.org/groups/programming/attributedTo"], "interactionPolicy": { "canJoin": { "automaticApproval": ["https://example.org/groups/programming/followers"] }, "canModerate": { "automaticApproval": ["https://example.org/groups/programming/attributedTo"] }Key patterns:
isPartOflinks to parent group (we could also usecontextbut this makes more sense if also usinghasPartfor child groups)interactionPolicyfor permission inheritanceattributedToor reference parent's