Collectives P1: participation landing (ES/EN), group tree, room provisioning APIs

- 030: groups.parent_id tree + kind discriminator + group_rooms mapping
- /collectives module: create/tree/join APIs, MatrixProvisioner (open room
  public+federated, closed room E2EE-at-creation, onboarding room), NullProvisioner
  fail-soft when ARCHIVE_PROVISIONER_* unset
- web root becomes the public participation manual (ES-first + EN toggle,
  three paths: join by invite, start collective, solo account)
- participation manual content in core
This commit is contained in:
glass beadian 2026-10-12 13:53:40 +00:00
parent c31762b82d
commit 4a7e78b28d
23 changed files with 2892 additions and 8 deletions

View file

@ -1,5 +1,14 @@
# Collectives architecture — participation, rooms, subcollectives, diffusion
> **Status — P1 shipped (implementation note).** The three scope pillars of P1 are in:
> `groups.parent_id`/`groups.kind`/`group_rooms` (migration `030_collectives.sql`),
> the participation-manual landing page at the app root (`apps/web/src/app/page.tsx`, copy in
> `packages/core/src/participation-manual.ts`), and the provisioner port + Matrix implementation
> (`apps/api/src/collectives/`). Join-by-invite is unchanged: an invite token claims workspace
> membership exactly as before; `GET /collectives-public/for-invite/:token` adds names-only
> collective labelling to the join card. Room addresses in the UI, directory, and the UI/state
> re-parenting surface remain P2+.
Status: design for build (phase 1 dispatch in flight)
Date: 2026-10-12
Decides: landing flow, collective model, room matrix, provisioning, diffusion