jobbsok/skills/sak/SKILL.md

5.4 KiB

name description triggers
sak Oppretter og vedlikeholder saksmapper i arbeidsmappa: sak-id, saksfila fra malen, en tom kontakter.md og den append-only hendelsesloggen. Delegerer hvert statusspoersmaal til statusmaskinen og utleder aldri status i prosa. Utloeses av opprett en sak, lag sak for denne stillingen, hva er status på saken, hva er status pa saken, legg til en hendelse i saken og oppdater saksmappa.
opprett en sak
lag sak for denne stillingen
hva er status på saken
hva er status pa saken
legg til en hendelse i saken
oppdater saksmappa

sak

Eier saker/<sak-id>/ i arbeidsmappa. Skriver saksfila, den tomme kontakter.md og hendelsesloggen — og utleder aldri status selv. Statusmaskinen er et script, ikke en vurdering.

All operatørrettet tekst er norsk bokmål.

Løs opp arbeidsmappa først

Samme rekkefølge som overalt ellers: --workspace, så JOBBSOK_WORKSPACE, så en workspace:-linje i jobbsok.conf under plugin-datamappa. Svarer ingen av de tre, si det og be om stien. Ingen hjemmekatalog gjettes.

Sak-id

Formatet er YYYY-MM-<arbeidsgiver-slug>-<rolle-slug>, og året og måneden er den måneden saken opprettes. Bygg den aldri for hånd — kall sak_id(...) fra ${CLAUDE_PLUGIN_ROOT}/scripts/jobbsok_lib/paths.py. Den folder æ, ø og å til ASCII og normaliserer først, slik at et navn skrevet dekomponert på macOS ikke blir en annen mappe enn det samme navnet skrevet komponert.

Finnes id-en fra før, er det samme sak. En sak som starter på nytt er en ny sak med ny id — statusmaskinen nekter å åpne en avsluttet sak igjen.

Opprett saken

  1. Lag saker/<sak-id>/.
  2. Skriv sak.md fra ${CLAUDE_PLUGIN_ROOT}/templates/sak.md. Bytt ut hver {{...}}-plassholder. Det som ikke er kjent, skrives null — aldri et gjett, og aldri en tom verdi.
  3. Lag en tom kontakter.md. Den er tom med vilje: den fylles av korrespondanse og tømmes av datahygiene.
  4. Lag logg.jsonl og legg til opprettet som første hendelse.
  5. Kjør oppdateringen under.

Frontmatteren er kontrakten fra build-brief 5.2 og har alle tretten nøklene, også de som er null. status og ventende_part står som vurderer og meg i malen fordi det er nøyaktig det en sak med bare opprettet utleder — ikke fordi de er skrevet av skjønn.

Kroppen er operatørens. Fyll «Hvorfor denne» fra beslutningens begrunnelse, ikke fra annonsens egen selvbeskrivelse.

Hendelsesloggen

logg.jsonl er append-only. En retting er en ny linje, aldri en redigering av en gammel.

Én hendelse er én linje:

{"ts": "2026-09-03T12:00:00+02:00", "hendelse": "soknad_sendt", "kilde": "e-post", "ref": "soknad-v1.md", "notat": null}

ts bærer alltid UTC-forskyvning. Norsk lokaltid gjentar 02:30 den siste søndagen i oktober, og uten forskyvningen er to hendelser en time fra hverandre umulige å sortere i etterkant.

Vokabularet er lukket på elleve hendelser. Hele lista, tilstandene og de tre stillhetsreglene står i ${CLAUDE_PLUGIN_ROOT}/skills/sak/references/status.md. Les den før du skriver en hendelse du ikke har skrevet før. En hendelse utenfor lista blir avvist ved navn når loggen leses — den blir ikke stille droppet.

Beslutningen ja speiles inn i saksloggen av beslutning som en beslutnings-post, ikke som en hendelse. Uten den kommer saken aldri videre fra vurderer.

Etter hver tilføyde hendelse: oppdater hurtigbufferen

Dette steget hoppes aldri over:

python3 ${CLAUDE_PLUGIN_ROOT}/scripts/sak_status.py \
  --workspace <arbeidsmappa> --sak <sak-id> --oppdater

Den skriver tilbake nøyaktig fire nøkler i frontmatteren — status, ventende_part, sist_aktivitet og neste_frist — og rører ingenting annet. Frontmatteren er en hurtigbuffer over loggen; en hurtigbuffer ingen oppdaterer er bare permanent avvik med bedre manerer.

En utledning som er tom overskriver ikke det som står der. neste_frist i vurderer og soker er søknadsfristen, som er operatørens egne data og som ingen maskin kan regne ut på nytt.

Statusspørsmål besvares av scriptet

Spør operatøren om status, ventende part, frist eller stillhet, så kjør scriptet og gjengi det. Ikke les loggen og resonner deg fram til et svar:

python3 ${CLAUDE_PLUGIN_ROOT}/scripts/sak_status.py \
  --workspace <arbeidsmappa> --today <YYYY-MM-DD> --format json

På Windows heter tolken python, ikke python3; alt annet i kommandoen er likt.

--check svarer på et annet spørsmål: den avslutter med kode 1 hvis en hurtigbuffer er uenig med loggen, og navngir saken. Er svaret 1, kjør --oppdater og si hva som flyttet seg — ikke rett i sak.md for hånd.

Står det ingen innkommende hendelse er registrert, gjengi det som det er. Det betyr ikke at ingen har svart; e-postserveren er utsatt, og fraværet av en registrering er ikke et fravær i verden.

Grenser

  • Ingen overgang utledes av tonen i en e-post. En tilstand endrer seg på en eksplisitt bekreftelse fra operatøren eller på et entydig strukturelt signal.
  • Ingenting eskalerer, sendes eller lukkes av seg selv.
  • Ingenting skrives utenfor arbeidsmappa.

Uten verktøyserveren

Er jobbsok-tools ikke tilgjengelig, degraderer skillen i stedet for å stoppe: be operatøren kjøre kommandoene over fra kommandolinja, og les svaret som ble skrevet ut. Ikke regn ut status selv som en mellomløsning — da er den ikke lenger reproduserbar, og hele poenget med å ha en statusmaskin er borte.