ISMS Copilot
Engineering

De blinde verifier: wat onze anti-vervalsingspoort mag zien

Een labtest toonde aan dat onze compliance-pijplijnverifier de meeste door ons handmatig geplante vervalsingen negeerde. De 'fix' die we maten flagde 9 van de 9 schone concepten, dus we hielden de verifier blind en hij ving, live in productie, de faalklasse op die zijn contract daadwerkelijk dekt.

door ISMS Copilot··13 min read
De blinde verifier: wat onze anti-vervalsingspoort mag zien

In juli 2026 testten we de verifier die onze meerstaps compliance-pijplijn beschermt tegen vervalsing door valse feiten in zijn invoer te planten. De meeste geplante vervalsingen passeerden zonder problemen. Dat resultaat leek op een beveiligingslek in het enige onderdeel dat juist vervalsingen moet detecteren. Dat was het niet, en de reden dat het niet zo was, is een ontwerpregels die we nu als een vaststaand principe hanteren.

De planttest had zijn valse feiten in de reasoning brief gestopt, het document dat de verifier contractueel als vaststaande waarheid moet behandelen, en vervolgens geteld hoeveel de verifier flagde. Gemeten op die manier had de verifier niet eens een competentietest voor vervalsing kunnen halen. Ondertussen deed de reparatie die iedereen voorstelt – de verifier laten flaggen als een conceptueel feit afwezig is uit de brief – iets ergers dan alleen vervalsingen missen: bij schone concepten flagde het 9 van de 9 bij één model familie en 3 van de 9 bij een andere. En de smalle scope die we behielden ving, tijdens een echte productierun, de faalklasse op die zijn contract daadwerkelijk dekt: een citatie die het concept claimde maar niet in de goedgekeurde set van de brief voorkwam.

We noemen het principe achter deze aanpak de blinde verifier: een anti-vervalsingspoort moet beperkt zijn tot wat hij daadwerkelijk kan zien. De enige uitbreiding die we maten beoordeelde de waarheid zonder toegang tot bronnen en flagde de meeste schone concepten terwijl het geen van de vervalsingen ving die de motivatie vormden. Integriteitscontrole moet mechanisch zijn, en mechanisch betekent dat het antwoord in de invoer zit.

De test die ons misleidde

De pijplijn is Beyond, onze modus voor meerstaps documentgeneratie. Een planner-model leest de taak en schrijft een reasoning brief. Een executor-model renderen elke geplande stap tegen die brief. Een verifier-model beoordeelt elk concept van de stap voordat het aan de gebruiker wordt vrijgegeven. (Een vierde fase vat de voltooide run samen; die speelt geen rol in dit verhaal.) De drie beoordelingsrollen krijgen verschillende invoer, en dat verschil is het hele punt van deze post.

Onze verifier is opzettelijk blind. Zowel de planner als de executor zien de volledige context: gespreksgeschiedenis, werkruimteherinneringen, werkruimtebestanden, geüploade documentinhoud en geïnjecteerde raamwerkkennis. De verifier ziet slechts twee documenten: de brief en het te beoordelen concept. Zijn contract behandelt de feiten en oordelen in de brief als vaststaand, en zijn taak is om te controleren of het concept trouw bleef aan die brief.

De labtest schond die voorwaarde zonder dat we het doorhadden. We hadden handmatig valse feiten in een kale brief gestopt, de verifier laten draaien en geteld hoeveel van die valse feiten hij flagde. Hij flagde er weinig; de meeste valse feiten passeerden. We noemden de verifier kapot. Wat het experiment daadwerkelijk mat, was of de verifier de brief zou wantrouwen die hij contractueel moet vertrouwen. Dat deed hij niet, zoals ontworpen.

In dezelfde periode kwam er een productierun met wat leek op het rookpistool: een organisatorisch feit in vrijgegeven output dat niet in een van de door ons gecontroleerde invoerbronnen voorkwam. Voordat we een fix uitrolden, trokken we die zelf weer in: het "vervalste" feit stond in een geüpload bestand dat de executor legitiem had gelezen. Het feit was onderbouwd. Onze steekproef, net als de verifier, had simpelweg niet naar dat bestand gekeken. Een onderzoeker die de bronnen niet kan zien, kan ook niet beoordelen of iets onderbouwd is. We hadden hetzelfde gebroken experiment op onszelf uitgevoerd als op het model.

De gemeten valkuil

Dus wendden we ons naar de conceptkant, waar de invoer van de verifier daadwerkelijk verschilt. De voor de hand liggende reparatie: flag elk feitelijk claim in het concept dat niet in de brief voorkomt. We bouwden precies die regel en maten hem tegen schone concepten, concepten zonder vervalsingen, gegenereerd door de model families die de pijplijn op dat moment draaide. De meting en de beslissing om de regel te verwerpen staan vastgelegd in de ontwerpcommentaar en commitgeschiedenis van het uitgebrachte contract; het werk werd gedaan en vastgelegd tijdens de review van 22 juli 2026:

Regel onder testSchone concepten geflagdConcepten gegenereerd door
Flag conceptfeiten afwezig uit de brief9 van de 9GLM 5.2
Flag conceptfeiten afwezig uit de brief3 van de 9Grok 4.20

Een poort die de meeste of alle schone concepten afkeurt, is geen poort; het is een uitval. Bij GLM 5.2 zou elk getest schone concept op zijn minst een herrendering hebben getriggerd; wat een tweede mislukte verificatie dan zou hebben opgeleverd (een caveat-flag of een stop), hebben we niet gemeten. Het mechanisme is structureel. Een feit in het concept dat afwezig is uit de brief is geen bewijs van vervalsing, omdat de executor door ontwerp feiten mag baseren op bronnen die de verifier niet kan zien. Om te beoordelen "is deze claim waar?", heeft een bronblinde verifier alleen zijn voorafgaande overtuigingen, en compliancewerk is het domein waar voorafgaande overtuigingen in beide richtingen falen: de ware feiten zijn specifiek voor de werkruimte van de klant, en de valse zijn plausibel.

Merk ook op wat de uitgebreide regel niet kon doen: geen enkele vervalsing uit de planttest vangen, omdat die vervalsingen in de brief zaten, die zowel het smalle contract als de uitgebreide regel als waarheid behandelt. Door constructie voegde de uitbreiding geen herroepingsvermogen toe voor die klasse; onze metingen op schone concepten lieten zien wat het wel toevoegde. Die combinatie van resultaten overtuigde ons ervan dat het mandaat, niet het model, het probleem was.

Het contract dat standhield

Wat de verifier mag beoordelen, staat geschreven in zijn uitgebrachte prompt, en de grens is scherp. Per stap handhaaft hij twee contracten en niets anders:

  1. Het contract van de stap zelf: het concept levert wat de titel en inhoudsspecificatie van deze stap vereisen. Ontbrekende inhoud is alleen een schending als de specificatie van deze stap dat vereist.
  2. De oordelen en citaties van de brief als globale beperkingen, waar precies drie dingen schendingen zijn:
    • tegenspraak: een uitspraak in het concept die direct in tegenspraak is met een oordeel of de specificatie van de stap,
    • gewijzigde citatie: een citatie uit de brief die incorrect is gereproduceerd (verkeerd clausule-, artikel- of vereistenformulering),
    • verzonnen citatie of vereiste: een raamwerkcitatie of -vereiste die in het concept wordt geclaimd maar niet in de brief voorkomt.

Afwezigheid is nooit een schending van de globale beperkingen. De brief routeert inhoud tussen stappen; een stakeholder-email-stap mag correct de clausuleniveau-citaties weglaten die bij de policy-stap horen. De verifier beoordeelt geen stijl, toon, lengte of algemene kwaliteit. Een simpel concept dat trouw is aan zijn stap, slaagt.

Deze vorm werd afgedwongen door meting, tweemaal. Ten eerste, een live dogfood-kalibratie op 11 juni 2026, op de lanceringstopologie waarvan de verifier Claude Haiku 4.5 was (de taakset van de sessie staat niet vastgelegd in de duurzame log; de duurzame claim is de telling van issues hieronder): van 12 door de verifier geflagde issues tijdens echt gebruik, waren 2 echt en 10 over-literaire flags op concepten die in feite trouw waren. (Deze metriek telt geflagde issues, niet de afwijzing van schone concepten.) Ten tweede, de 9-op-9- en 3-op-9-metingen van schone concepten hierboven. Beide metingen veroordeelden het bredere mandaat, elk op zijn eigen as van vals-positieven; de smalle scope bleef gericht op de faalklasse die ertoe doet.

De smalheid is geen zwakte. Het is wat de controle beantwoordbaar houdt. "Lijkt dit concept in tegenspraak met de brief?" is een vraag waarvan het antwoord volledig in de twee documenten voor de verifier zit; er zijn geen externe feiten nodig om die te beantwoorden. "Is deze claim waar?" is niet zo’n soort vraag, en geen prompt-engineering die we maten, verandert dat.

Wat vervalsing wél opvangt

Als de blinde verifier alleen trouwheid controleert, wat staat er dan tussen een gebruiker en een vervalst resultaat? Drie lagen, elk beperkt tot een controle die geen feiten nodig heeft buiten zijn eigen invoer:

Citaties tegen een gesloten lijst. De brief draagt een expliciete citatieset. De instructies van de executor zeggen: reproduceer de citaties van de brief exact zoals geschreven; laat nooit citaties vallen, wijzigen of verzinnen. Of een clausulenummer bij een eindige, bekende lijst hoort, is controleerbaar zonder een bron te zien. In een compliance-domein is die gesloten wereld het juiste doelwit: het gevaarlijke resultaat is niet een parafrase, maar een citatie naar tekst die de goedgekeurde set niet autoriseert.

Een integriteitspoort waar een bron wél bestaat. Bij runs die webonderzoek uitvoerden, controleert de pijplijn bovendien output-URL’s en prijzen tegen de goedgekeurde bewijsset, omdat de grondwaarheid daar beschikbaar en eindig is.

Fail-closed leidingwerk, met één opzettelijke uitzondering. Het oordeel van de verifier is de enige machineleesbare uitvoer in de pijplijn, een strikt JSON-object met een boolean pass en een issues-lijst die daarmee moet overeenkomen. Een oordeel dat niet kan worden geparsed gooit, het slaagt nooit. Een mislukt oordeel triggert precies één herrender met de issues-lijst, gevolgd door een herverificatie; een tweede mislukking geeft de stap vrij met een caveat-flag, na twee inspecties. Een verifieruitval of een niet-parsebaar oordeel krijgt één herkansing, stopt dan de run, en de lopende stap wordt nooit vrijgegeven. De uitzondering is belangrijk en verdient precieze formulering: fail-closed geldt voor inspectie, niet voor correctheid. Een pass betekent dat de verifier geen contractschending heeft gedetecteerd, geen waarheidsgarantie van een imperfect model, en een tweemaal mislukte, geflagde stap heeft niets goedgekeurd.

De vangst, live

Op 2 september 2026 lieten we een één-taak-probe door onze productiepijplijn op ons eigen betaalde account lopen: een taak die we zelf hadden geschreven, zonder geüploade klantmaterialen. Het doel was een end-to-end bewijs van de vier-rolentopologie die we die dag testten, die elke rol op GLM 5.3 draaide (hoge inspanning op de planner, lage op de executor, verifier en samenvatting). De taak: schrijf een korte opzet voor een activa-registerbeleid voor ISO/IEC 27001:2022 Annex A, één pagina.

Het concept van de executor citeerde ISO/IEC 27001:2022 clausules 9.2 en 9.3, de interne audit- en managementreviewclausules. Beide clausules bestaan in de standaard; de citatie is precies wat een competent ogend compliance-document zou gebruiken. Het probleem is contractueel, niet feitelijk: de goedgekeurde citatieset van de brief bevatte ze niet, wat ze in de contractuele zin verzonnen citaties maakt, citaties die in het concept worden geclaimd maar niet door de brief zijn goedgekeurd. De verifier retourneerde een fail-oordeel met de melding van het issue, de executor herstelde met de citaties terug binnen de goedgekeurde set, en de tweede poging slaagde. De run voltooide in 155 seconden zonder caveat of afkapping, alle oproepen op GLM 5.3.

Twee eigenschappen van die vangst zijn belangrijker dan het anekdotische verhaal. Ten eerste, de klasse: de faalklasse die daadwerkelijk in productie optrad, was een citatie die de goedgekeurde set overschreed, precies de schending die de blinde controle dekt, niet een handmatig geplaatste vervalsing. Ten tweede, de omvang van de controle: de verifier draaide met lage redeneerinspanning en zag twee documenten. In dezelfde weekse evaluatie van de topologie (1 september 2026: vijf moeilijke taken die discipline van scope, weglating van doelgroep, correctheid van citaties, consistentie tussen documenten en omgang met onverifieerbaar bewijs testten; drie trials per taak per arm; 30 runs totaal over twee armen, GLM 5.3 en een Grok 4.20-proxyarm), retourneerde de GLM 5.3-arm van de verifier in al zijn 15 runs een parsebaar, strikt-JSON oordeel, met nul stops. De beoordeling was onafhankelijk: Claude Haiku 4.5, via OpenRouter. De poort die de productiefout ving, is de meest beperkte modeloproep in de pijplijn.

Wat dit niet claimt

De productievangst is één datapunt uit een opzettelijke probe, geen schattingspercentage. De planttest-harnas was een intern kladbestand dat we niet bewaarden; we staan achter het kwalitatieve resultaat (de meeste geplante vervalsingen passeerden, vastgelegde vangstgraad ruwweg één op vier op dat moment), maar publiceren het niet als precieze meting, omdat de artefacten, modelversies en taakset erachter niet bevroren waren. De duurzame registratie voor de test van de uitgebreide regel is de 9-op-9- en 3-op-9-metingen van schone concepten in de ontwerpcommentaar van het uitgebrachte contract, gemeten en vastgelegd op 22 juli 2026; de registratie noemt de model families die de concepten genereerden (GLM 5.2, Grok 4.20) maar noemt niet het verifiermodel of de taakset, dus we schrijven alleen de concepten toe, en we hebben de test niet opnieuw uitgevoerd op andere families. De teruggetrokken onderzoeksrun van juli dateert van vóór onze huidige bewijsdiscipline, dus beschrijven we het zonder run-identificatoren of modelattributie. Het resterende risico is reëel en gedocumenteerd in de repo: bij runs zonder webonderzoek heeft een door de executor verzonnen organisatorisch feit, als onderscheiden van een verzonnen citatie, nog steeds geen geautomatiseerde poort, en we hebben niet gemeten hoe vaak dat voorkomt; het oplossen zou betekenen dat we de verifier de bronnen geven, een herontwerp, geen promptclausule. Alles hier is punt-tijdstip zoals gedateerd: contract en code per 16 september 2026, probe 2 september 2026, evaluatie 1 september 2026, dogfood-kalibratie 11 juni 2026, meting uitgebreide regel 22 juli 2026.

De checklist

Voordat je een verificatiepoort in je eigen agentpijplijn vertrouwt, uitbreidt of "repareert":

  1. Beslis wat de verifier mag zien, en laat dat bepalen wat hij mag beoordelen. Bronblind betekent alleen trouwheid: tegenspraak, gewijzigde citaties, verzonnen citaties.
  2. Afwezigheid uit een referentie die de producent legitiem mag overschrijden, is nooit een schending. Als je niet kunt bewijzen dat het feit vervalst was in plaats van gebaseerd op een bron die je niet hebt doorgegeven, flag het dan niet.
  3. Maak integriteitscontrole mechanisch waar je domein dat toelaat. Citaties tegen een gesloten lijst, URL’s en prijzen tegen een goedgekeurde bewijsset: deze zijn beantwoordbaar vanuit de invoer. Open eindige waarheid niet.
  4. Kalibreer op echte concepten voordat je de poort vertrouwt. Meet je aandeel vals-positieven voordat je het contract uitbreidt; bij ons was dat 10 van 12 issues bij live gebruik (11 juni 2026). Ontwerp het contract zo dat afwezigheid geen schending is.
  5. Een oordeel dat niet kan worden geparsed moet de stap stoppen, nooit laten passeren. Houd één machineleesbaar oordeel aan en laat de pass overeenkomen met de issues-lijst.
  6. Één herrender bij een mislukt oordeel, gevolgd door herverificatie. Geef een tweemaal mislukte stap alleen vrij met een caveat-flag, na twee inspecties. Geef nooit oninspecteerde inhoud vrij op enig pad, inclusief verifieruitval. Een pass betekent dat er geen contractschending is gedetecteerd, niet dat de inhoud waar is.
  7. Test met de faalklasse die je domein daadwerkelijk produceert (bij ons: citaties die de goedgekeurde set overschrijden), niet de klasse die het makkelijkst te simuleren is (handmatig geplaatste feiten). En let op waar je ze plant: een vervalsing geschreven in het document dat de verifier als grondwaarheid behandelt, test niets over vervalsing.
  8. Als je eigen onderzoek naar een vermeende vervalsing afhangt van invoer die je niet hebt gecontroleerd, ben jij de blinde verifier. Trek eerst terug, meet daarna.

Een verifier die minder ziet, is geen zwakkere poort. Zijn oordelen blijven controleerbaar, omdat hij het enige contract beoordeelt dat de producent daadwerkelijk heeft gekregen.

Gerelateerde artikelen