# Feature Feedback — Levende spesifikasjoner med brukertilbakemelding

## Konsept

Hver feature har to koblede noder:
1. **Spec-node** (`node_kind: 'content'`, `metadata.feature_spec: true`) —
   markdown-spesifikasjon synlig for brukerne
2. **Feedback-chat** (`node_kind: 'communication'`) — chattråd der brukere
   gir tilbakemelding, foreslår endringer, rapporterer bugs

Koblet via `discusses`-edge: `feedback-chat --discusses--> spec-node`.

Spec-noden vises som første/pinned melding i chatten (eller som eget panel
i arbeidsflaten ved siden av chatten).

## Prinsipp

**Alle features er gjenstand for tilbakemelding.** Ingen feature er "ferdig"
— den har bare en gjeldende spec som brukerne kan påvirke.

## Datamodell

```
spec-node (content, feature_spec: true)
  ├── belongs_to → samling (f.eks. "Synops Platform")
  └── <-- discusses -- feedback-chat (communication)
                         ├── owner → feature-eier (utvikler/admin)
                         └── member_of → relevante brukere/team
```

### Spec-noden
- `node_kind: 'content'`
- `metadata.feature_spec: true`
- `metadata.feature_key: 'lydstudio'` (unik nøkkel for kobling til kode)
- `content`: markdown-spesifikasjon (samme format som docs/features/*.md)
- `visibility: 'readable'` — alle innloggede brukere kan lese

### Feedback-chatten
- Standard kommunikasjonsnode
- Claude er `member_of` og kan delta i diskusjonen
- Brukerroller: alle med tilgang til samlingen kan delta

## Brukeropplevelse

### For brukere
1. I arbeidsflaten eller mottaket: se liste over features med "Gi feedback"-knapp
2. Klikk → åpner feedback-chatten med spec-noden synlig øverst
3. Skriv kommentar, forslag, bug-rapport — vanlig chat
4. Claude kan svare, oppsummere, og foreslå spec-endringer

### For utviklere/Claude
1. Les feedback-chatten for å forstå brukerbehov
2. Oppdater spec-noden basert på feedback
3. Commit oppdatert spec til disk (md-fil) for kodebruk

## Synk: database ↔ disk

Feature-specs lever to steder:
- **Database** (spec-node): autoritativ for brukere og feedback
- **Disk** (`docs/features/*.md`): autoritativ for kode og Claude Code

### DB → disk (eksport)
`GET /query/feature_specs` returnerer alle spec-noder som markdown.
Periodisk jobb eller manuell trigger: maskinrommet skriver spec-noder
til `docs/features/` med frontmatter:

```markdown
---
feature_key: lydstudio
node_id: 019cfda5-...
last_synced: 2026-03-18T12:00:00Z
---
# Lydstudio
...
```

### Disk → DB (import)
Ved oppstart eller manuell trigger: maskinrommet leser `docs/features/*.md`,
matcher på `feature_key`, og oppdaterer spec-noden hvis disk-versjonen er nyere
(basert på git commit-tidspunkt vs node updated_at).

### Konflikthåndtering
- Disk vinner ved kodeendringer (utvikler oppdaterer spec)
- DB vinner ved bruker-feedback som Claude har integrert
- Ved ekte konflikt: opprett merge-node med begge versjoner, flagg for manuell løsning

## Claude sin rolle

Claude er deltaker i feedback-chatten og kan:
1. **Oppsummere** tilbakemeldinger: "3 brukere har bedt om X"
2. **Foreslå** spec-endringer basert på feedback
3. **Integrere** godkjente endringer i spec-noden
4. **Synke** oppdatert spec til disk (md-fil) og committe

Trigger: `agent_respond`-jobben (eksisterende mekanisme) eller
dedikert `feature_feedback_digest`-jobb som kjører periodisk.

## Implementering

### Fase 1: Grunnlag
- Opprett spec-noder for eksisterende features (migrer fra docs/features/*.md)
- Opprett feedback-chat per feature
- Vis spec + chat i frontend

### Fase 2: Synk
- Eksport-endepunkt (`GET /query/feature_specs`)
- Import ved oppstart
- Periodisk synk-jobb

### Fase 3: Claude-integrasjon
- Claude som deltaker i feedback-chatter
- Digest-jobb som oppsummerer ny feedback
- Automatisk spec-oppdatering ved godkjenning

## Bygger på
- Kommunikasjonsnoder (fase 5)
- Claude som chat-deltaker (fase 8 / `docs/infra/claude_agent.md`)
- Arbeidsflaten (fase 19) — spec + chat som to paneler side om side
