##  [Testene bestod. Bare ikke for den kode, du står med nu.](/da/node/285)

    *Indsendt af Lennart den tor, 17 sep 2026 - 11:51*

  [ ![Testene bestod. Bare ikke for den kode, du står med nu.](/sites/default/files/styles/max_1300x1300/public/2026-09/composite_11.png.avif?itok=bC4Ky11U)](/sites/default/files/2026-09/composite_11.png)

*Om forskellen på en instruktion, en AI kan følge, og en regel, den ikke kan tale sig udenom.*

En AI-agent skrev noget kode for mig. Den kørte testene, og de bestod. Så rettede den en linje mere. Derefter meldte den opgaven færdig.

Begge dele passer. Testene bestod, og linjen blev rettet. Men de bestod for en udgave af koden, der ikke findes længere.

Det her er ikke en hallucination. Der er ikke noget opdigtet. Modellen husker et resultat, som var sandt, da det skete. Problemet er, at den hukommelse ikke har en udløbsdato.

## Et bevis hører til en tilstand, ikke til et tidspunkt

Da jeg byggede et stillads omkring agenten, blev det den eneste mekanik, der viste sig at bære: Beviset skal kunne udløbe.

Konkret tager stilladset et fingeraftryk af koden — et hash af den seneste commit, af alle ændringer oven på den, og af de filer, der endnu ikke er lagt i versionsstyring. Når testene kører, gemmes ikke bare "de bestod", men *hvilket fingeraftryk de bestod for*.

Retter agenten så en linje bagefter, flytter aftrykket sig. Beviset beskriver ikke længere den kode, der ligger på disken. Og kommandoen, der markerer opgaven som færdig, nægter:

> the tree changed since the last verification — the passing run describes code that no longer exists

Jeg kan ikke tale mig uden om et hash. Det kan modellen heller ikke. Det er hele idéen.

## Tre nej'er og én nødudgang

Stilladset siger fra tre steder, og alle tre er steder, hvor en agent ellers plejer at komme igennem: Man kan ikke melde noget færdigt uden en frisk, grøn kørsel. Man kan ikke starte på opgave nummer to, mens nummer et er i gang — for en påbegyndt opgave nummer to betyder, at den første blev forladt. Og man kan ikke skrive en pæn afslutning på arbejdsdagen, mens der stadig ligger ændringer uden for det, opgaven handlede om.

Men der er en nødudgang, og den er vigtigere, end den lyder. Man *kan* tvinge noget igennem — mod en skreven begrundelse. Så står der `UNVERIFIED` i journalen sammen med grunden, for altid.

En regel uden undtagelse bliver omgået i stilhed. En undtagelse, der koster én sætning og efterlader et permanent spor, bliver brugt, når den skal.

## Men gør værktøjet ikke allerede det her?

Jo. En hel del af det.

Claude Code læser i forvejen en instruktionsfil i projektet. Den har en indbygget opgaveliste. Den kører gerne testene. Den kan sætte flere underagenter i gang parallelt. Meget af det, jeg byggede, ligger oven på noget, der allerede virker — og det skal man sige højt, for et stillads, der dublerer værktøjet, er vedligehold uden gevinst.

Det, der *ikke* var der i forvejen, er én ting: Der er ikke noget, der binder "testene bestod" til "præcis denne kode". Modellen husker sit eget værktøjsresultat, og den hukommelse bliver ikke ugyldig, fordi den bagefter retter en fil.

Og så er der forskellen, hele sagen står på:

**En instruktion er noget, modellen læser og for det meste følger. En regel, der fejler med en exit-kode, er noget andet.** Det første er en anbefaling. Det andet er et stillads. Forskellen lyder lille. Den er hele forskellen.

Det gælder i øvrigt ikke kun for maskiner. En procesbeskrivelse i en mappe er en anbefaling. En godkendelse, der ikke kan gives, før noget er dokumenteret, er en kontrol.

## Da stilladset fangede mig selv

To ting fra samme dag, som jeg ikke havde opdaget ved at læse efter.

Stilladset tegner sit eget arbejdsflow som et diagram. Første gang det gjorde det, stod der en arbejdsgang i tabellen, som slet ikke var forbundet i tegningen. Nøjagtig den slags uoverensstemmelse mellem beskrivelse og virkelighed, som et håndtegnet diagram lever fint med i årevis.

Og den vejledning, stilladset selv skriver til agenten, indeholdt en kommando, der ikke virkede. Den så rigtig ud. Den var plausibel. Den fejlede først, når nogen faktisk kørte den.

Begge dele blev fundet af mekanik. Ingen af delene ville være blevet fundet ved at læse.

## Hvad en leder kan tage med

1. **Spørg, hvad påstanden hænger fast i.** Når nogen — en medarbejder, en leverandør, en agent — siger "det er testet", så er det interessante ikke, *om* det blev testet. Det er, om det blev testet i den udgave, I står med nu.
2. **En regel, der kun advarer, er ikke en regel.** Den bliver læst første gang og sprunget over resten af tiden. Skal noget holde, skal det kunne sige nej.
3. **Giv undtagelsen en pris i stedet for at forbyde den.** Én skreven sætning og et permanent spor er nok. Forbud uden ventil bliver omgået, hvor ingen kan se det.

Det, jeg byggede, er små to hundrede linjer i et scriptsprog. Der er ingen ny model i det og ingen platform. Langt størstedelen af et AI-system, der kan bruges til noget, er ikke AI — det er regler, validering og kontrol af, hvornår noget må kaldes færdigt.

Det er også derfor, det her sjældent er et teknisk problem. Det er et spørgsmål om, hvad man i organisationen accepterer som bevis.

Jeg skrev tidligere om, at [løkken hængte sig selv, og at kampen nu står mellem grafen og loggen](https://docujai.com/da/node/280). Det her er den samme pointe set fra en anden vinkel: Strukturen er ikke det svære. Det svære er, hvad strukturen kan nægte at gøre.

En agent, der siger "færdig", fortæller dig, hvad den tror. Et stillads fortæller dig, hvad der er efterprøvet. De to ting er ikke det samme, og forskellen bliver først dyr, når nogen har handlet på den første.