Beslisrecords, acht van tien. Een architectuurbeslissing per stuk, uit een beheerst AI-agentplatform dat ik als prototype ontwierp en bouwde voor de Nederlandse lokale overheid.
De situatie
De goedkeuringsdienst is de component die een menselijk ja bindt aan een specifieke actie. Als die niet beschikbaar is, kan geen enkele actie met gevolgen worden goedgekeurd, en de regel van het platform is dat niet-goedgekeurde acties met gevolgen niet plaatsvinden. Tot zover correct.
Nu is het donderdagmiddag, de goedkeuringsdienst ligt eruit, en het werk stapelt zich op. Uitkeringsbesluiten die het akkoord van een casemedewerker nodig hebben. Brieven die voor een wettelijke termijn de deur uit moeten. De keuze lijkt: fail-closed en de wachtrij laten groeien, of beschikbaar blijven en iets doorlaten.
Wat er in de meeste organisaties daadwerkelijk gebeurt, is een derde ding. Iemand vindt een weg eromheen. Een databasevlag, een configwijziging, een directe aanroep naar de toolserver. Het wordt onder druk uitgevonden, het laat geen bewijs achter, en het wordt achteraf nooit verwijderd omdat het werkte. De niet-ontworpen override wordt de echte bypass, en de zorgvuldig gebouwde goedkeuringsdienst wordt het pad voor gewone dagen alleen.
Elke organisatie heeft een break-glass-procedure. De enige vraag is of die op een dinsdag met koffie is ontworpen of op een vrijdag om vijf uur met een databasevlag is ontdekt.
De beslissing
Standaard alles weigeren, met een break-glass-pad dat vooraf is ontworpen en bewust smal is.
Alles weigeren betekent: als goedkeuring niet beschikbaar is, worden runs die het nodig hebben duurzaam opgeschort. Ze worden met hun volledige toestand bewaard en hervatten als de dienst terug is. Autoriteit wordt nooit ruimer omdat een component uitligt. Een run die op een casemedewerker wachtte, wacht nog steeds op een casemedewerker.
Het break-glass-pad heeft vijf eigenschappen, en alle vijf zijn vereist.
Het wordt geactiveerd door een benoemde mens. Nooit door een dienst, nooit door een model, nooit automatisch. Iemand zet zijn naam eronder.
Het is tijdgebonden. Er is geen doorlopende activering. Het verloopt, en verlengen is een nieuwe activering door een benoemde mens.
Het wordt volledig vastgelegd en is luider dan normale werking. Elke actie onder break-glass wordt geregistreerd met de activering, de activator en de reden, en de records zijn gemarkeerd zodat ze in geen enkele latere review te missen zijn.
Het is beperkt tot lezen en compenseerbare handelingen. Dingen die achteraf ongedaan gemaakt of gecorrigeerd kunnen worden. Een zaak opzoeken, een brief opstellen, een besluit klaarzetten voor latere goedkeuring.
Onomkeerbare acties met gevolgen blijven geweigerd, zonder uitzondering. De brief versturen, het besluit definitief maken, het geld overmaken. Break-glass opent die niet. Niets doet dat, tot goedkeuring terug is.
Elke activering wordt achteraf beoordeeld. En herhaalde activering wordt behandeld als ontwerpsignaal: als mensen het glas blijven breken, deugt het normale pad niet en zit de fix in het normale pad, niet in dunner glas.
Wat ik afwees, en waarom
Puur alles weigeren zonder override. Eerlijk, simpel, en het overleeft de donderdagmiddag niet. De override wordt midden in het incident uitgevonden door wie het dichtst bij de database zit, en het platform is de controle over zijn eigen bypass kwijt. De override ontwerpen is hoe je het eigenaarschap ervan houdt.
Break-glass met volledige autoriteit. Activeer het en alles is toegestaan. Dat is een permanente intrekking van de niet-te-omzeilen regel, verkleed als noodmaatregel. De eerste keer dat het voor gemak in plaats van nood wordt gebruikt, en dat is snel, is de regel weg.
Automatisch goedkeuren na een termijn. Als de goedkeuringsdienst binnen een uur niet antwoordt, behandel de actie dan als goedgekeurd. Een timeout ziet er in het record precies zo uit als een weloverwogen ja, en niemand kan ze later uit elkaar houden. Dit is de optie die het redelijkst klinkt en het meest corrosief is.
Wat het kost
Een aparte, geversioneerde break-glass-beleidsbundel. Het is geen vlag op de normale bundel; het is een eigen artefact met eigen golden tests, zodat de smalle set van wat onder break-glass is toegestaan net zo gereviewd en testbaar is als het normale beleid. Duurzame opschorting van runs, wat betekent dat de runtoestand volledig serialiseerbaar en hervatbaar moet zijn, een eis die het runmodel meer heeft gevormd dan ik verwachtte.
En een benoemde rol vóór productie. Iemand moet de persoon zijn die het kan activeren, met een vervanger, en dat is een organisatorische beslissing die het prototype niet voor een gemeente kan nemen.
Wat het niet doet
Het houdt de wachtrij niet kort. Alles weigeren betekent dat werk wacht, en break-glass laat alleen het voorbereidende deel doorgaan. De inwoner wiens brief een termijn heeft, heeft nog steeds de goedkeuringsdienst nodig, of een mens die de goedkeuring handmatig doet via een pad dat zelf is vastgelegd.
De break-glass-bundel en het opschortingsmechanisme zijn ontworpen en de opschorting is deels gebouwd. De reviewworkflow voor activeringen is beschreven, niet geïmplementeerd. Of de vijf eigenschappen standhouden onder een echt incident, is niet getest.
Als je een ding meeneemt
Vraag je team wat ze zouden doen als je goedkeuringssysteem een dag uit zou liggen. Als het antwoord een vlag, een script of een directe aanroep bevat die nergens is opgeschreven, dan is dat je huidige break-glass, en die heeft geen van de vijf eigenschappen.
Een override met volledige bevoegdheid is de Black Knight van incident response: beide armen eraf, nog steeds volhoudend dat het maar een schrammetje is en dat het gevecht door kan.
Verwijzingen
De knipogen en citaten in dit stuk, met hun herkomst:
- Monty Python and the Holy Grail (1975): the Black Knight, “’tis but a scratch”, “it’s just a flesh wound”.
- #Beslisrecords
- #AI-governance
- #Architectuur

Rutger Hemrika
AI-strategie en -governance voor sectorsoftware. Schrijft vanuit bouwen, niet vanuit slides; elke claim draagt een bewijsniveau.