dynamisk-rettsstat/skills/forlop/SKILL.md
Kjell Tore Guttormsen 13f6c28dc0
fix: findings from the Cowork test, released as v0.1.1
The operator tested v0.1.0 in Cowork on 2026-11-11. README now says what
was measured there and what was not.

- miljo: no longer claims that kontroll compares "with tolerance, not bit
  for bit" when numpy or scipy differ from the note's versions. kontroll
  always compares byte for byte first, and numpy 2.5.3 gave bit for bit.
- kontroll --alt: show every differing line. The cut-off line now names
  the option instead of only counting the lines left out.
- skill simuler: the question before a run must be answerable with yes or
  no. In the test it became a choice between variants and the run stalled.
- skill forbedre: offer the working copy as a zip when the user cannot
  open the folder it was made in, as in Cowork.

263 tests pass; full kontroll: bit for bit with the note.

Co-Authored-By: Claude Fable 5.2 <noreply@anthropic.com>
2026-11-11 20:24:58 +01:00

10 KiB

name description
forlop Følger tiltaket for leddet som binder i straffesakskjeden måned for måned, og sjekker om styringen tåler sin egen forsinkelse, med modellen i notatet Den dynamiske rettsstaten: stabilitetssjekk, budsjettvedtak, kapasitet, restanse og saksbehandlingstid over tid, med og uten tiltak, og hva det betyr for resten av kjeden. Bruk etter flaskehalsdiagnosen, eller når noen spør hva som skjer over tid. Utløses av «følg tiltaket over tid», «vis forløpet», «hva skjer hvis vi følger anbefalingen», «når er restansen borte», «tåler styringen forsinkelsen», «stabilitetssjekk», «kjør forløpet», «show the time course», «is the control loop stable».

Følg tiltaket over tid

Ferdigheten viser hva som skjer måned for måned når anbefalingen fra diagnosen følges, og om styringen tåler sin egen forsinkelse. Den bruker simuleringen i notatet Den dynamiske rettsstaten (den koordinerte regelen i avsnitt 8.5, gjennomregnet i avsnitt 9.5) og leser samme fil som diagnosen. Den trenger Python 3 med numpy og scipy.

Brukeren arbeider ofte i straffesakskjeden og er ikke programmerer. Snakk vanlig norsk. Nevn ikke filnavn, kommandoer, feltnavn eller JSON med mindre brukeren spør etter dem.

Regler

  • Finn aldri på et tall. Mangler et tall, spør, eller si hvilken standardverdi verktøyet bruker og la brukeren velge.
  • Vis tallene slik du har forstått dem, og få et ja før du regner.
  • Årstall deles på 12, og du sier det. Restanser er antall saker og deles ikke.
  • Gjengi skriptets tall ordrett, i skriptets rekkefølge. Regn aldri om, avrund aldri annerledes og «forbedre» aldri et tall.
  • Si hva som er brukerens tall og hva som er modellens. Kapasitet, restanse og saksbehandlingstid følger tallene i fila. Kriminalitet, tillit og politiets innsats følger modellens stiliserte parametere, som ikke er kalibrert på norske data.
  • Installer aldri noe uten å spørre.

1. Tallene

Forløpet bruker samme fil som diagnosen. Er diagnosen kjørt i samtalen, bruk den fila. Ellers skaffer du tallene per ledd som ferdigheten diagnose beskriver (navn, saker inn og kapasitet per måned, restanse, mål), og kan tilby de to eksemplene i ${CLAUDE_PLUGIN_ROOT}/eksempler/: eksempel_domstol.json (stiliserte tall, gjenskaper avsnitt 9.5) og norge_2025.json (offentlige norske tall for 2025, flere av dem anslag). Formatet står i ${CLAUDE_PLUGIN_ROOT}/docs/inndata.md.

Forløpet kan bruke tre ting til. Spør om dem, men bare når brukeren har tallene:

Spør om Uten svar brukes
Hvor mange måneder går fra kriminalitetsbildet endrer seg til innsatsen er endret (statistikk, beslutning, iverksetting)? 3 måneder
Hvor kraftig reagerer innsatsen: hvor mange prosent mer innsats per prosent over målet? 3 (10 % over målet gir 30 % mer innsats)
Hvor mange saker kom inn per måned før strømmen begynte å øke? 95 % av kapasiteten

De to første er regime A i notatet. Si det når du bruker dem. De legges i styring i fila (forsinkelse og reaktivitet); det tredje er innstromning_for_okning i leddet. Feltnavnene skrives nøyaktig som i docs/inndata.md: et navn verktøyet ikke kjenner, stopper kjøringen med et forslag til det riktige.

Hvilket ledd. Uten valg følger forløpet leddet diagnosen peker på. Vil brukeren se et annet ledd, oppgis navnet nøyaktig slik det står i fila.

Vis tallene som en liten tabell, med styringen under, si hva som er regnet om, og få et ja før du kjører.

2. Kjør forløpet

python3 "${CLAUDE_PLUGIN_ROOT}/modell/kjor.py" --data "${CLAUDE_PLUGIN_DATA}" forlop <fil>
python3 "${CLAUDE_PLUGIN_ROOT}/modell/kjor.py" --data "${CLAUDE_PLUGIN_DATA}" forlop <fil> "<navn på ledd>"
  • På Windows heter tolken python.
  • <fil> er hele stien til inndatafila.
  • Bruk pluginens modell, med mindre brukeren har valgt en egen versjon (se under).
  • En kjøring tar noen sekunder.

En egen versjon av modellen. Har brukerens arbeidsmappe en mappe rettsstat-modell/ med modell/kjor.py inni, bruk den ikke uten å spørre: «Jeg ser en egen versjon av modellen i rettsstat-modell. Skal jeg bruke den, eller pluginens?» Velger brukeren den egne, kjør kontrollen på den først:

python3 "${CLAUDE_PLUGIN_ROOT}/modell/kjor.py" --data "${CLAUDE_PLUGIN_DATA}" --modell <hele stien til rettsstat-modell/modell> kontroll --rask

Si nivået til brukeren før du legger fram noe tall: linja som begynner med «Nivå» («bit for bit som notatet» eller «endret: …»). Kjør så forløpet med --modell <hele stien til rettsstat-modell/modell> før forlop. Er versjonen endret, si sammen med svaret at tallene kommer fra brukerens egen versjon av modellen, ikke fra notatets.

Exit-koder:

  • 0: skriptet har svart. Det kan også bety at forløpet ikke ble regnet; se trinn 3.

  • 3: numpy eller scipy mangler. Si i én setning: «Forløpet trenger to vanlige regnebiblioteker for Python, numpy og scipy. Skal jeg installere dem i en egen mappe for denne pluginen?» Installer bare hvis svaret er ja:

    python3 "${CLAUDE_PLUGIN_ROOT}/modell/kjor.py" --data "${CLAUDE_PLUGIN_DATA}" miljo --opprett
    

    Gjengi det kommandoen sier (blant annet om versjonene av numpy og scipy er notatets), og kjør forløpet på nytt. Feiler installasjonen, gjengi meldingen og si at diagnosen fortsatt kan brukes uten tilleggene.

  • 2: skriptet har stoppet med en melding. Les den:

    • Feil i inndata, Fant ikke fila, ikke gyldig JSON eller Fant ikke leddet: gjengi meldingen med vanlige ord, rett sammen med brukeren og kjør på nytt. Et feltnavn verktøyet ikke kjenner, i et ledd eller i styring, gir Feil i inndata med et forslag til riktig navn («Mente du …?»).
    • Meldingen begynner med Forløpet … (for eksempel at leddet ikke var i balanse før økningen, at prognosen ikke er høyere enn strømmen før økningen, eller at den er for høy): tallene ligger utenfor det modellen dekker. Si det med vanlige ord. Spør om tallet for saker inn før økningen er kjent (uten det brukes 95 % av kapasiteten), og si at diagnosen gjelder uansett. Endre aldri et tall bare for at forløpet skal gå.
    • Intern kontroll feilet eller Kjenner ikke igjen vedtaket: modellens kode er endret slik at forløpet ikke lenger stemmer med simuleringen. Si det, og regn ikke noe selv. Bruker brukeren en egen arbeidskopi, er det der endringen ligger.
    • Uventet feil i …: en feil i koden, ikke i tallene. Gjengi meldingen og si at forløpet ikke ble regnet.
  • Annen kode, eller python3 finnes ikke: gjengi meldingen og si at forløpet ikke ble regnet.

3. Presenter svaret

Vis utskriften slik skriptet skrev den, i en kodeblokk, i samme rekkefølge. Ikke avrund, regn om eller formater tallene på nytt. Les den så for brukeren, del for del.

Stabilitetssjekken. Den kritiske forsinkelsen er den lengste forsinkelsen styringen tåler før den selv skaper svingninger, der satsinger og kutt avløser hverandre. Er forsinkelsen kortere, er styringen stabil, og marginen står i utskriften. Er den lengre, sier skriptet hvilke to veier som finnes: dempe reaksjonen eller korte ned forsinkelsen. Sjekken bruker modellens stiliserte tall for hvor fort innsatsen virker.

Forløpet.

  • Slik er tallene lagt inn: gjengi punktene. De sier hva som er tatt fra fila, hva som er antatt, hvor forløpet starter, og eventuelle avvik og forbehold. «Nå» er første budsjettvedtak etter økningen; raden «-3» er tidspunktet tallene i fila gjelder.
  • Vedtak: budsjettet vedtar én gang i året, og bestilt kapasitet virker gradvis fra 6 til 24 måneder etter vedtak. Si om første vedtak er det samme som diagnosen regnet ut (skriptet sier det).
  • Tabellen: kapasitet i saker per måned, andel ledet utenom, restanse i saker, saksbehandlingstid i måneder (restanse delt på kapasitet, ikke målt). Politiinnsats og kriminalitet er relative: 1 er nivået før økningen. Tillit var 0,80 før økningen.
  • Med og uten tiltak: hva det koster i kapasitet, og hva det gir i saksbehandlingstid, tillit og kriminalitet.
  • Faller til ro eller ikke: faller forløpet ikke til ro, er sluttallene ikke en ny balanse.

Resten av kjeden. Politiets innsats, saker ledet utenom (hvor de havner, er ikke regnet), hvor mange flere saker leddet avgjør, og hva det betyr for leddene som står etter i fila: tar de det unna, eller flytter skranken seg dit?

Når skriptet skriver «Forløp: ikke regnet». Stabilitetssjekken står fortsatt. Forklar grunnen skriptet gir:

  • Styringen er ustabil: det finnes ingen ny balanse å dimensjonere etter. Styringen må rettes først, ved svakere reaksjon eller kortere forsinkelse. Tilby å kjøre på nytt med andre tall for styringen hvis brukeren har dem.
  • Prognosen faller ikke til ro: styringen er for nær grensen eller for treg, så det finnes ikke ett tall å dimensjonere etter. Skriptet foreslår kortere forsinkelse.
  • Kriminaliteten eller innsatsen faller for lavt mens restansen avvikles: restansen er mange ganger større enn strømmen, og modellen holder ikke da. Diagnosen gjelder alene.

Står det «Forløp: ingen ledd binder», er det ikke noe tiltak å følge over tid.

Forbehold som alltid tas med:

  • Kapasitet, restanse og saksbehandlingstid følger brukerens tall. Kriminalitet, tillit og politiets innsats følger modellens stiliserte parametere, ikke kalibrert på norske data. Rekkefølgen og retningen er poenget, ikke tallene. Forløpet er ikke en prognose.
  • Bare leddet som binder, har kø i modellen. Det regnes som leddet som tar imot sakene politiets innsats gir (domstolen i notatet).
  • Verktøyet erstatter ikke budsjettarbeidet og sier ingenting om enkeltsaker.

Ta i tillegg med forbeholdene som gjelder dette svaret, fra ${CLAUDE_PLUGIN_ROOT}/docs/forbehold.md (avsnittet om forløpet): for eksempel at en restanse som har vokst lenge, virker i modellen først etter start, at kriminaliteten i modellen faller under nivået før økningen når en stor restanse avvikles, og at kapasitet bestilt for å avvikle restansen kan bli stående.

4. Neste steg

Tilby det som passer:

  • kjøre på nytt med en annen forsinkelse eller reaktivitet («hva om forsinkelsen er 6 måneder?»);
  • følge et annet ledd, for eksempel det skranken flytter seg til;
  • kjøre diagnosen, hvis den ikke er kjørt.

Ved «hva om …»: lag en kopi av fila med det ene tallet endret, vis endringen, kjør på nytt og vis de to svarene ved siden av hverandre, med skriptets tall.