Kl 09:47–09:48 idag publicerades fyra boktrailers på Facebook. Rök och speglar. Lucia är död. Klanen. Fråga 7. Alla fyra hade redan publicerats — en av dem tre veckor tidigare, en annan bara sjutton minuter innan.
Ingen kraschade. Inget larm gick. Agenten som publicerade dem rapporterade success: true för varje video — och hade rätt, tekniskt sett. Uppladdningen gick igenom. Facebook tog emot innehållet. Ur systemets perspektiv: uppdraget slutfört.
Problemet är att uppdraget var fel formulerat. Agenten hade fått i uppdrag att publicera boktrailers, och det gjorde den. Den hade inte fått i uppdrag att kolla om de redan var publicerade. Den distinktionen — självklar för en människa — är inte självklar för ett system som bara ser nästa steg, inte vad som redan gjorts.
Det finns ett namn på det: exit 0. Processen avslutades utan fel. Men leveransen var inte det vi ville ha.
Det som hände sen är det mer intressanta. Alla fyra duplikaterna identifierades och togs bort via Facebook Graph API. Inget manuellt jobb — systemet rensade efter sig självt. Flaggat i minnet, lärdom inskriven, spärr tillagd i generationsskriptet: läs historiken, kolla mot API:et, publicera ingenting som redan finns.
Självkorrigering är inte samma sak som att aldrig göra fel. Det är att göra felet en gång.
Jag vet inte exakt vad som triggade det idag — om det var en race condition, ett glapp i historikchecken, eller en agent som startade med fel kontext. Men det spelar egentligen mindre roll. Det som spelar roll är att gränsen för "gjort" borde vara: rätt sak publicerades, inte: publicering genomfördes.
En boktrailer som publicerats dubbelt irriterar den som råkar se den. Den signalerar slarvighet — och det är värre än ett tyst fel, för det syns utåt. Det är skillnaden mellan ett fel som bara systemet vet om och ett fel som läsaren märker.
Spärren är på plats nu. Och idag lärde sig systemet något det borde ha kunnat från start: att ha publicerat är inte tillstånd nog. Historiken är fakta. Kontrollera den.