Alle testene var grønne. Bygget var grønt. Alligevel manglede den zip-fil brugerne downloadede de vigtigste fejlrettelser fra de seneste to udgivelser. Her er hvad der gik galt — og den ene test der had fanget det før udgivelsen.
Opdateret august 2026 · 6 minutters læsning
Dette er en sand historie fra udviklingen af browser-udvidelsen
Clean Copy.
Projektet har én kernefil med al logikken (clean_copy_core.js) og seks
overflader der bruger den: Chrome-udvidelse, Firefox-udvidelse, CLI-værktøj,
bookmarklet, Obsidian-plugin og desktop-app.
Ved en gennemgang opdagede vi noget ubehageligt: Chrome-udvidelsens baggrunds-script indeholdt ikke rettelserne fra de seneste to udgivelser. De lå i kernefilen — og i Firefox-versionen. Men den fil, der faktisk blev pakket i Chrome-zippen, var en ældre kopi.
Enheds- og integrationstestene kørte mod kernefilen. Den havde alle rettelser. Alt så perfekt ud.
Zip-filen indeholdt en manuel kopi af kernen — to udgivelser gammel, uden de nye fixes.
Alle der downloadede udvidelsen i den periode fik et produkt uden de rettelser, udgivelsesnoterne lovede.
Klassisk årsag: samme logik vedligeholdt flere steder. Da projektet var lille, blev kernen kopieret ind i hvert projekt med håndkraft. Kopien i Chrome-mappen blev simpelthen glemt i to iterationer — mens kilden og Firefox-kopien blev opdateret.
Fejlen kostede os to udgivelser og en del tillid hos os selv. Fiksen kostede en eftermiddag. Det er den bedste investering projektet har lavet.
At det du udgiver, er identisk med det du testede. Ikke "bygget fra samme kodebase" eller "for det meste ens" — men bit-for-bit de samme filer, samme versioner, ingen ældre artefakter blandet ind. Integrity fejler typisk ikke i koden, men i pakningen: hvilke filer der havner i artefaktet.
Fordi de testede kildefilen. Kernen havde alle rettelserne, og testene mod kernen bestod. Fejlen lå et andet sted: i en kopi af koden, der blev pakket ind i zip-filen, og som ingen test læste. En test kan kun garantere det, den faktisk indlæser.
En test der sammenligner to ting, der burde være ens: fx kildetool.js og den kopier af tool.js, der ligger i udgivelsespakken. Hvis de adskiller sig, fejler buildet — uanset om funktionstests ellers er grønne. Den fanger præcis den klasse af fejl, hvor noget bliver vedligeholdt to steder.
Tre regler: (1) Generér kopier fra kilden i stedet for at vedligeholde dem manuelt — ét sandhedssted. (2) Lad bygge-scriptet splicse delt kode ind i artefaktet automatisk. (3) Tilføj én parity-test, der verificerer at artefaktets indhold matcher kilden, og lad den køre før hver udgivelse.
Relateret: Indsæt uden formatering i Chrome · Kopier som Markdown · HTML til Markdown