synops/docs/infra/oppgaver.md
vegard 5b6876093e Oppgaver som noder: erstatter tasks.md med graf-basert modell
Fjernet fil-basert oppgaveliste (tasks.md, tasks-arkiv.md, tasks/).
Oppgaver er nå noder (node_kind: 'task') med prioritet, status,
agent-tildeling og krasj-deteksjon via PG. Atomisk plukking med
FOR UPDATE SKIP LOCKED. Dokumentert i docs/infra/oppgaver.md.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-19 17:29:50 +00:00

110 lines
2.8 KiB
Markdown

# 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.