# 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