Den långa förklaringen.
För den som vill ha det tekniska djupet — här är vad varje fas faktiskt producerar, varför den finns, och hur den hänger ihop med nästa. Övergripande sett: pipelinen är en kedja av artefakter där varje fas tar in ett dokument från föregående fas och producerar ett nytt dokument som nästa fas kan läsa. Inga muntliga överlämningar. Inga "jag tror att vi pratade om det här på onsdagsmötet".
Allium — drift som datapunkt.
Allium är ett ifrågasättningsspråk: du skriver en specifikation, sedan körs en elicitering som hittar luckor, tvetydigheter och inkonsekvenser. Den producerar öppna frågor som måste besvaras innan vi går vidare. Senare körs en distillering som jämför den färdiga koden mot specen — drift visas som tre kategorier: specificerat-men-ej-implementerat, implementerat-men-ej-specificerat, och beteendedrift. Varje punkt får ett individuellt beslut: fixa nu, defer (spåra i spec) eller dismiss med skäl. Inga gruppbeslut om att "vi tar det senare" — varje finding har ett ägare och ett datum.
TLA+ — bevis, inte tester.
Ett test som passerar visar att en exekvering fungerade. Det säger ingenting om de exekveringar du inte testade. TLA+ modellerar systemet som ett tillståndsrum och kör en uttömmande genomgång — TLC-modellcheckern testar varje möjlig sekvens av händelser och hittar de tillstånd där invarianter bryts. För ärendehantering: kan ett ärende vara stängt och pågående samtidigt? För SSE: vad händer om klienten reconnectar mitt under en uppdatering? För idempotens: vad händer om samma idempotency-key ses i två requests samtidigt? TLC svarar matematiskt, inte sannolikhetsbaserat.
Destruktiva tester — sex kategorier.
Funktionella tester verifierar att lyckomönstret fungerar. Destruktiva tester verifierar att systemet inte rasar när någon försöker bryta det. Vi kör minst åtta destruktiva scenarier per yta, fördelade över sex kategorier.
Input-validering bombarderar fält med för långa strängar, ogiltiga tecken, null och tomma värden. Auktorisering försöker läsa och skriva resurser som användaren inte äger. Injection-kategorin matar in XSS i textfält och SQL-injection i sökparametrar. Race conditions tvingar två klienter att ändra samma resurs i samma sekund. Gränsvärden testar maxlängder, maxantal och paginering vid sista sidan. Tillståndskorruption skickar ändringar i fel ordning eller mot redan borttagna resurser.
Inget av detta är teoretiskt. Varje kategori har fångat verkliga buggar i produktionssystem vi byggt — innan de släpptes.
AI-augmenterad utveckling — utan AI-religion.
Claude Code används som verktyg, inte som ersättning. Pipelinen ovan är inte AI-genererad — den är dokumenterad, versionerad och enforced via deterministiska hooks. Hookarna blockerar feature-arbete utan spec, kräver klarifiering före plan, kör Allium-elicitering före implementation, och vägrar släppa ifrån sig en feature utan både Playwright- och TLA+-validering. AI:n följer metoden — den uppfinner den inte. Resultatet: AI-hastighet med människa-nivå granskning på arkitekturbeslut.
Den här metoden tar längre tid i den första veckan. Den sparar månader när systemet är ett år gammalt.