# Proposal: Rollebasert arv i samlinger

## Konsept

Når en bruker kobles til en samling (podcast, prosjekt, møterom)
med en rolle-edge, arver de tilgang til ressurser basert på rollen.
Forskjellige roller ser forskjellige traits/paneler.

## Problemstilling

I dag gir `member_of`-edge full tilgang til samlingen. En "lytter"
på en podcast ser det samme som en "deltaker" — mikser, opptak,
innstillinger, alt. Det er feil. Roller bør styre hva du ser.

## Modell

```
Edge-typer med rolle-semantikk:
  owner        → full tilgang, kan endre alt
  admin        → full tilgang, kan ikke slette samlingen
  deltaker     → ser og bruker verktøy, kan ikke endre innstillinger
  redaksjon    → som deltaker + publiseringskontroll
  lytter       → ser chat og publisert innhold, ikke verktøy
  gjest        → midlertidig, begrenset tidstilgang
```

## Trait-synlighet per rolle

Samlingens metadata utvides med en matrise:

```json
{
  "traits": {
    "chat": { "roles": ["owner", "admin", "deltaker", "redaksjon", "lytter"] },
    "mixer": { "roles": ["owner", "admin", "deltaker"] },
    "recording": { "roles": ["owner", "admin", "deltaker"] },
    "publishing": { "roles": ["owner", "admin", "redaksjon"] },
    "podcast": { "roles": ["owner", "admin", "deltaker", "redaksjon"] },
    "kanban": { "roles": ["owner", "admin", "deltaker", "redaksjon"] }
  }
}
```

Hvis `roles` ikke er satt, defaulter til alle roller (bakoverkompatibelt).

## Automatisk arv ved tilkobling

Når en bruker kobles til en samling:

1. `member_of`-edge opprettes med `metadata.role`
2. `recompute_access` oppdaterer `node_access`-matrisen
3. Frontend filtrerer synlige traits basert på rollen
4. Chat og andre kommunikasjonsnoder med `belongs_to`-edge til
   samlingen arves automatisk (bruker ser dem i "Mine ting")

## Eksempel: Podcast

```
Vegard --[owner]--> Sidelinja
  → ser alt: mixer, opptak, publisering, chat, kanban, innstillinger

Trond --[deltaker]--> Sidelinja
  → ser: mixer, opptak, chat, kanban
  → ser ikke: publisering, innstillinger

Lise --[lytter]--> Sidelinja
  → ser: chat, publiserte episoder
  → ser ikke: mixer, opptak, kanban, publisering
```

## Implementering

1. Legg til `metadata.role` i `member_of`-edges
2. Utvid trait-konfig med `roles`-array per trait
3. Frontend filtrerer verktøymeny og paneler basert på rolle
4. ContextHeader viser kun relevante traits
5. API-endepunkter validerer rolle ved sensitive operasjoner

## Hva som eksisterer allerede

- Edge-typer med metadata (✓)
- node_access-matrise (✓)
- Trait-system med konfig (✓)
- recompute_access (✓)

Hovedsakelig frontend-filtrering + metadata-utvidelse. Liten backend-endring.
