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>
110 lines
2.8 KiB
Markdown
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.
|