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>
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:
- Leser beskrivelse og kontekst
- Splitter til tasks om nødvendig
- Jobber gjennom tasks sekvensielt
- 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:
- Agent starter på oppdrag
- Støter på uklarhet
- Skriver spørsmål i oppdragets chat
- Setter oppdrag
status: "blocked" - Vegard får varsel (toast + evt. epost)
- Vegard svarer i chatten
- 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.