synops/docs/infra/oppgaver.md
vegard 945e5a90dc Oppgaver: tre nivåer (proposal → oppdrag → task) med chat
Proposals = halvtenkte ideer, diskuteres i tilknyttet chat.
Oppdrag = godkjente konsepter, splittes til tasks av agent.
Tasks = konkrete steg, plukkes atomisk.
Prioritering, pause, blokkering, eskalering.
Tilbakemelding og spørsmål direkte i oppdragets chat.

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

4.9 KiB

Oppgaver, oppdrag og proposals som noder

Alt er noder. Tre typer arbeid med ulik modenhet:

Tre node-typer

Proposal (node_kind: 'proposal')

Halvtenkte konsepter, ideer, ønsker. Ikke klare for implementering.

metadata: {
  status: "draft" | "discussed" | "approved" | "rejected" | "parked",
  category: "ui" | "platform" | "infra" | "feature" | "content",
}

Opprettet via: vaktmester-chat (/proposal ...), admin-panel, epost. Kan diskuteres i en tilknyttet chat (kommunikasjonsnode med belongs_to-edge). Når den er moden nok → godkjennes → blir oppdrag.

Oppdrag (node_kind: 'assignment')

Konkret arbeid som skal gjøres. Kan splittes i tasks av agenten.

metadata: {
  status: "open" | "planning" | "active" | "paused" | "done" | "blocked",
  priority: 100,        // lavere = viktigere
  category: "ui" | "platform" | "infra" | "feature" | "bug",
  assigned_to: null,    // agent eller person node_id
  source_proposal: null, // proposal-node som dette kom fra
}

Når en agent mottar et oppdrag:

  1. Leser beskrivelse og kontekst
  2. Splitter til tasks om nødvendig
  3. Jobber gjennom tasks sekvensielt
  4. Rapporterer tilbake i oppdragets chat

Task (node_kind: 'task')

Konkret, avgrenset steg. En agent kan plukke og fullføre dette i én sesjon.

metadata: {
  status: "open" | "active" | "done" | "failed" | "skipped",
  priority: 100,
  agent_id: null,       // hvem jobber på den
  started_at: null,
  completed_at: null,
  result: null,         // "success" | "failed" | "escalated"
}

Hierarki

Proposal ("Støtte for LaTeX i editoren")
  └── approved → Oppdrag ("Implementer LaTeX-støtte")
                    ├── Task: "Legg til KaTeX-avhengighet"
                    ├── Task: "Utvid TipTap med LaTeX-node"
                    ├── Task: "Legg til markup-toggle i UniversalInput"
                    └── Task: "Test med matematiske formler"

Edges:

proposal --[promoted_to]--> assignment
assignment --[split_into]--> task
assignment --[split_into]--> task
task --[depends_on]--> task (rekkefølge)

Statuser og overganger

Proposal

draft → discussed → approved → (oppdrag opprettes)
                  → rejected
                  → parked (god idé, ikke nå)

Oppdrag

open → planning (agent planlegger, splitter til tasks)
     → active (under arbeid)
     → paused (satt på vent av Vegard)
     → done
     → blocked (trenger avklaring)

Task

open → active (agent jobber)
     → done
     → failed (agent klarte ikke)
     → skipped (ikke lenger relevant)

Prioritering

Vegard kan omprioritere når som helst:

  • Endre priority-verdi (lavere = viktigere)
  • Sette status: "paused" for å fryse et oppdrag
  • Flytte tasks mellom oppdrag

Agenten respekterer prioritet ved plukking:

SELECT * FROM nodes
WHERE node_kind = 'task'
AND metadata->>'status' = 'open'
ORDER BY (metadata->>'priority')::int ASC
LIMIT 1
FOR UPDATE SKIP LOCKED

Tilbakemelding og spørsmål

Hvert oppdrag og proposal har en tilknyttet kommunikasjonsnode (chat). Agenten stiller spørsmål der. Vegard svarer der.

assignment --[has_discussion]--> communication

Flyten:

  1. Agent starter på oppdrag
  2. Støter på uklarhet
  3. Skriver spørsmål i oppdragets chat
  4. Setter oppdrag status: "blocked"
  5. Vegard får varsel (toast + evt. epost)
  6. Vegard svarer i chatten
  7. Agent leser svaret, fortsetter, setter status: "active"

Samme chat brukes for fremdriftsrapportering:

  • "Task 1/4 fullført. Commitet: abc123"
  • "Støtte på problem med X, eskalerer til Claude Code"
  • "Ferdig. 4/4 tasks fullført. Se diff: ..."

Visning

Admin-panel (Vegard)

  • Alle oppgaver gruppert: proposals | oppdrag | tasks
  • Filtrer på status, kategori, prioritet
  • Drag-and-drop for prioritetsendring
  • Klikk → se detaljer + chat
  • "Godkjenn proposal" → opprett oppdrag
  • "Pause" / "Gjenoppta" knapper

Mine ting (alle brukere)

  • Tasks tildelt deg
  • Oppdrag du eier

Vaktmester-chat

Vegard: Hva jobbes det med?
Agent: Oppdrag #3 "LaTeX-støtte" — task 2/4 aktiv (TipTap-node)

Vegard: Pause LaTeX, ta fargevelger-buggen først
Agent: Pauset oppdrag #3. Plukker bug #7 "Fargevelger..."

Vegard: /proposal Kanskje vi bør ha dark/light toggle
Agent: Opprettet proposal "Dark/light toggle". Diskuter videre?

Krasj-deteksjon

-- Tasks som har stått active >60 min uten oppdatering
UPDATE nodes SET metadata = jsonb_set(
  jsonb_set(metadata, '{status}', '"open"'),
  '{agent_id}', 'null'
)
WHERE node_kind = 'task'
AND metadata->>'status' = 'active'
AND (metadata->>'started_at')::timestamptz < now() - interval '60 minutes';

Migrering

Eksisterende proposals i docs/proposals/*.md kan opprettes som proposal-noder. Innholdet i markdown-filene flyttes til content- feltet. Filene beholdes som referanse men er ikke lenger den autoritative kilden.