# Oppgaver som noder Oppgaver er noder i grafen. Ingen separat tabell, ingen filer. Samme primitiver som alt annet i Synops. ## Node-type ``` node_kind: 'task' title: "Fiks resize på mobil" content: "Beskrivelse, akseptkriterier, kontekst..." visibility: 'hidden' metadata: { priority: 100, // lavere = viktigere status: "open", // open | active | done | blocked | question category: "ui", // ui | platform | infra | feature | bug agent_id: null, // node_id til agenten som jobber på den started_at: null, // timestamp completed_at: null, // timestamp result: null, // "success" | "failed" | "escalated" refs: ["docs/proposals/mine_ting.md"] // referanser } ``` ## Edges ``` task --[created_by]--> person (hvem opprettet) task --[assigned_to]--> agent/person (hvem jobber på den) task --[belongs_to]--> collection (tilhører et prosjekt, valgfritt) task --[related_to]--> task (avhengigheter mellom oppgaver) ``` ## Prioriteter | Verdi | Kategori | |-------|----------| | 100 | UI-forbedringer (pågående arbeid) | | 200 | Høy prioritet (grunnleggende plattform) | | 300 | Middels prioritet (produksjon og samarbeid) | | 400 | Infrastruktur | | 500 | Lavthengende frukt | | 600 | Fremtidige features | ## Arbeidsflyt ### Opprette oppgaver - Vegard i vaktmester-chat: `/task Fiks resize på mobil` - Admin-panel: oppgaveliste med "ny oppgave"-knapp - Epost: `vaktmester@synops.no` med `/task ...` - Programmatisk: `synops-agent` eller maskinrommet ### Agent plukker oppgave ```sql SELECT * FROM nodes WHERE node_kind = 'task' AND metadata->>'status' = 'open' ORDER BY (metadata->>'priority')::int ASC LIMIT 1 FOR UPDATE SKIP LOCKED ``` `FOR UPDATE SKIP LOCKED` gir atomisk plukking — flere agenter kan kjøre parallelt uten konflikter. ### Agent jobber 1. Sett `status: "active"`, `agent_id`, `started_at` 2. Les `content` og `refs` for kontekst 3. Utfør oppgaven (implementer, skriv, commit) 4. Sett `status: "done"`, `completed_at`, `result` ### Krasj-deteksjon ```sql SELECT * FROM nodes WHERE node_kind = 'task' AND metadata->>'status' = 'active' AND (metadata->>'started_at')::timestamptz < now() - interval '60 minutes' ``` Oppgaver som har stått "active" i >60 min uten oppdatering → sett tilbake til `status: "open"`, nullstill `agent_id`. ## Visning ### Admin-panel Oppgaveliste med: - Filtrer på status, kategori, prioritet - Drag-and-drop for prioritetsendring - Klikk for å åpne/redigere - Vis hvem som jobber på hva ### Mine ting Oppgaver du er tildelt vises under "Mine oppgaver". ### Vaktmester-chat Vegard kan spørre: "Hva jobbes det med nå?" → agent lister aktive oppgaver med status. ## Migrering fra tasks.md Eksisterende oppgaver fra den gamle tasks.md-listen bør opprettes som task-noder. Kan gjøres manuelt (admin-panel) eller via et migreringsscript.