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

2.8 KiB

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

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

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.