De EDD Grondwet
Een levend contract dat alleen omhooggaat
In 2026 bouwde een ondernemingsteam een agent die incidentbeheertickets uitleest, er post-mortems van maakte en automatisch reparatie-items aanmaakte. Een tweede agent in hetzelfde team keek naar nieuwe werkitems en opende concept-PR's voor elk werkitem om ontwikkelaars op weg te helpen. Een ontwikkelaar heeft een van die PR's beoordeeld, vond deze redelijk, keurde deze goed en voegde deze samen met de hoofdtak.
**Het probleem was dat de wijziging volledig verzonnen was.**
De agent had een plausibel ogende oplossing bedacht voor een probleem dat niet bestond op de manier die het beschreef. De verandering heeft een reëel productiescenario teniet gedaan. Een echte klant merkte het op. Er was een storing.
Dit is de reden waarom de EDD-grondwet bestaat.
De grondwet is een enkel bestand dat elke niet-triviale wijziging aan de codebase regelt. Het definieert hoe een voltooide verandering eruit ziet, welk bewijsmateriaal deze moet bevatten, wat een uitgebreide audit moet omvatten en hoe de regels zelf kunnen evolueren. Elke agent en elk mens die de repository aanraakt, laadt deze bij elke sessie. De balk gaat alleen maar omhoog.
Dit bericht doorloopt stap voor stap de grondwet: het incident dat de grondwet motiveerde, de ontwerpvraag die het beantwoordt, hoe het is gestructureerd, hoe het is geschreven (en wat we in het begin verkeerd hebben gedaan), hoe amendementen werken en hoe het volledige pakket zich ontvouwt in een nieuwe repository.
Stap 1 - Wat het is
Het incident is de duidelijkst mogelijke illustratie van de faalwijze die EDD wil voorkomen. De agent hallucineerde niet willekeurig. Het leverde een samenhangend, leesbaar en professioneel opgemaakt PR op. De ontwikkelaar die het beoordeelde, deed wat ontwikkelaars doen: ze lazen de bedoeling, vonden de bedoeling plausibel en keurden het goed. De kloof was niet de aandacht. Het gat was het ontbreken van bewijs. Niets in het beoordelingsproces vereiste dat de agent aantoonde dat het probleem dat hij beweerde op te lossen daadwerkelijk bestond, dat de oplossing echt gedrag aanpakte, of dat de verandering niets teweegbracht.
EDD beantwoordt die leemte met één enkele harde eis: als de agent het niet kan bewijzen, is de taak niet voltooid. Bewijs is geen samenvatting. Bewijs is geen bewering van vertrouwen. Bewijs is een artefact dat onafhankelijk kan worden geverifieerd: een mislukte test, een scanneruitvoer, een voor/na-screenshot, een planverschil. De PR draagt het artefact of de PR is onvolledig.
De grondwet staat op `docs/methodology/CONSTITUTION.md`. Elke AI-agent die in het project is geconfigureerd, laadt deze bij elke sessie via zijn eigen laadbestand. De body is agent-neutraal: geen toolnamen, geen platformspecifieke syntaxis. Het definieert negen fundamentele principes, harde beperkingen met stabiele slug-ID’s, de 10-stappen implementatielus, auditdimensies, acceptatiecriteria voor bewijsmateriaal per wijzigingstype, trivialiteits-carve-outs voor werk met een laag risico, en de wijzigingsclausule.
Elke harde beperking heeft een slug zoals `[HC-EVIDENCE-BEFORE]` en verklaart drie dingen: de balk (wat waar moet zijn), de verificatie (hoe naleving wordt gecontroleerd) en de patroonbron (welk instructiebestand de implementatierichtlijnen uitwerkt).
| HC | Bar | Geverifieerd door |
|---|---|---|
| `[HC-BEWIJS-VOOR]` | Vóór bewijs verplicht voorafgaand aan implementatiebewerkingen voor niet-triviaal werk | Lusstap 4; menselijke beoordeling |
| `[HC-SECURITY-LINT]` | Beveiligingslintregels blijven op fouternst; schakel `eslint-plugin-security` of `@microsoft/eslint-plugin-sdl` niet uit | `pnpm lint` |
| `[HC-ASCII-PUNCT]` | Geen em dash-tekens in blogartikelen; gebruik ASCII-interpunctie-alternatieven | `/auditdocumentatie` |
| `[HC-A11Y-GATE]` | Nieuwe interactieve UI-oppervlakken vereisen e2e a11y-dekking voor alle ondersteunde thema's | `e2e/a11y.spec.js` |
De lus van 10 stappen is het operationele hart: definieer wat er is gedaan, schrijf een test die de kloof bewijst, zie hoe deze mislukt, leg vóór-bewijs vast, implementeer, kijk of de test slaagt, leg bewijs achteraf vast, verifieer documenten, audit over de aangegeven dimensies heen, en vervolgens menselijke beoordeling. Stappen 1 tot en met 4 vinden plaats vóór elke implementatiewijziging. Het bevel is constitutioneel omdat dit incident precies laat zien wat er gebeurt als dat niet het geval is.
Als extra waarborg ontleent EDD een kernprincipe van TDD: het scenario moet bewezen mislukken voordat het werk begint. Een bewijs dat aan het einde van een wijziging slaagt, is op zichzelf niet voldoende bewijs. Als de test ook vóór de wijziging is geslaagd, heeft de agent mogelijk iets gerepareerd dat nooit kapot is gegaan. Dit is een specifieke foutmodus in AI-ondersteunde workflows: een agent genereert een plausibel klinkende oplossing, de verificatie wordt uitgevoerd en de wijziging wordt verzonden alsof deze een echt probleem oplost. Door een gedocumenteerde falende toestand te vereisen voordat de implementatie begint, wordt deze kloof gedicht. De stap vóór het bewijs is niet slechts een basis voor vergelijking; het is een bewijs dat het probleem dat werd opgelost reëel was.
Van alle harde beperkingen die door de grondwet zijn doorgevoerd, hebben er twee meer gebreken geconstateerd dan alle andere samen, en ze zijn misschien wel de belangrijkste upgrade die EDD maakt voor elke AI-ondersteunde workflow: `[HC-EVIDENCE]` en `[HC-EVIDENCE-INTEGRITY]`. Beide worden gedeclareerd in `.github/copilot-instructions.md` - het gretig geladen bestand dat zich bij elke sessie in de context van de agent bevindt.
'[HC-EVIDENCE]' vereist dat elke PR feitelijke voor- en na-artefacten bevat - geen beschrijvingen van wat de artefacten zouden laten zien, geen samenvattingen van wat de agent denkt dat er is gebeurd, maar de ruwe output. `[HC-EVIDENCE-INTEGRITY]` gaat verder: het vereist dat het bewijsmateriaal in de PR kan worden herleid tot het werk dat feitelijk is verricht. Het valideert dat de PR bevat wat het zegt te bevatten.
Samen hebben deze twee beperkingen honderden door AI gegenereerde bugs onderschept voordat ze werden beoordeeld. De faalwijze waartegen zij waken is geen hallucinatie in de voor de hand liggende zin. Het is subtieler gedrag: de agent markeert een taak als voltooid, schrijft een zelfverzekerde PR-beschrijving en neemt op wat als bewijsmateriaal leest - maar het bewijsmateriaal is samengesteld en niet vastgelegd. De agent beschreef hoe de uitvoer eruit zou moeten zien in plaats van de opdracht uit te voeren en de daadwerkelijke uitvoer op te nemen.
`[HC-EVIDENCE-INTEGRITY]` is specifiek effectief bij het onderkennen van wat het 'Ik kon dat niet'-patroon zou kunnen worden genoemd. Een agent die voor een moeilijke of onbekende taak staat, zal soms beweren dat de taak onmogelijk is of buiten de reikwijdte valt, in plaats van deze te proberen. De claim wordt vaak opgevat als een beperking: een instrument dat niet bestaat, een beperking die de aanpak verhindert, een omgeving die de operatie niet ondersteunt. '[HC-EVIDENCE-INTEGRITY]' brengt dit naar voren: als de agent beweert dat een taak niet kan worden uitgevoerd, moet de PR bewijzen tonen dat de taak daadwerkelijk is geprobeerd en dat het obstakel reëel is. "Ik kon de testsuite niet uitvoeren" vereist een terminaluitvoer die de fout aangeeft, en niet een verklaring dat de fout is opgetreden. Zonder die vereiste is het vermijden van moeilijk werk door de agent tijdens de beoordeling onzichtbaar en wordt de taak onvolledig verzonden alsof deze is voltooid.
Stap 2 - Hoe we hier zijn gekomen
De grondwet is geen opeenstapeling van geleerde lessen. Het is het antwoord op één ontwerpvraag die aan het begin werd gesteld: hoe dwing je een AI-agent om zijn werk elke keer opnieuw te bewijzen, op een manier die niet te omzeilen is en niet afhankelijk is van een mens die zich herinnert om te vragen?
Het beantwoorden van die vraag dwong een ontbinding af. Voor bewijs is het nodig dat u weet hoe de uitvoering eruit ziet voordat de implementatie begint - dat leverde de documentatiestap op. Bewijs vereist een test die vóór de verandering faalt en daarna slaagt - wat de testdiscipline voor het falen/slaagden opleverde. Bewijs vereist een voor-toestand die werd vastgelegd voordat de implementatie iets aanraakte - wat de vereiste voor bewijs opleverde. Bewijs vereist een onafhankelijke audit die vastlegt wat bewijs per verandering niet kan: dat heeft de auditdimensies opgeleverd. En bewijs moet het beoordelingsproces overleven zonder te worden verzacht – dat bracht de harde beperking met zich mee dat de menselijke recensent de laatste poort is en de enige poort die niet kan worden geautomatiseerd.
Het resultaat is de lus van 10 stappen. Elke stap bestaat omdat het verwijderen ervan een gat creëert waar onbewezen werk doorheen kan. De lus is geen checklist. Het is een causale keten.
Van daaruit werd de vraag: welke categorieën van mislukkingen kan een agent produceren die de lus niet standaard ondervindt? Dat leverde de harde beperkingen op. Beveiligingslint zwijgde terwijl de regels werden gedegradeerd en produceerde "[HC-SECURITY-LINT]". Een karaktercoderingsfout in een ingezet artefact produceerde `[HC-ASCII-PUNCT]`. Elke HC sluit een specifieke faalklasse af met een specifieke geautomatiseerde verificatie. Regels die geen verificatie konden benoemen, werden afgewezen: als een controle niet kan worden geautomatiseerd, is de regel ambitieus en niet grondwettelijk.
De uiteindelijke ontwerpvraag was: wie bestuurt de grondwet zelf? Het antwoord is de ratel. De grondwet kan alleen maar strenger worden. Amendementen moeten het bewijs bevatten dat het gedrag van agenten verbetert of standhoudt. De vloer beweegt nooit naar beneden. Dit betekent dat de grondwet in de loop van de tijd kan worden vertrouwd op een manier die een levensstijlgids niet kan: elke versie is strikt genomen sterker dan de vorige.
Stap 3 - Hoe het is gestructureerd
De grondwet volgt een drielaagse architectuur.
**Laag 1: De canonieke hoofdtekst.** Eén bestand, `docs/methodology/CONSTITUTION.md`. Dit is de bron van de waarheid. Het is agent-neutraal: er worden geen aannames gedaan over welke AI-tool in gebruik is. Het definieert principes, harde beperkingen, de loop, auditdimensies, acceptatiecriteria voor bewijsmateriaal, uitzonderingen op trivialiteiten en de zelfverbeteringsclausule. Wanneer de hoofdtekst ongeveer 250 regels overschrijdt, worden de regels die van toepassing zijn op een specifiek padpatroon verwerkt in bestanden met een padbereik, met een aanwijzer van één regel in de hoofdtekst.
**Laag 2: Agent-laders.** Elke geconfigureerde agent krijgt precies één laadbestand op de locatie die de agent gretig laadt. Voor GitHub Copilot is dat `.github/copilot-instructions.md`. Voor Claude is dat `CLAUDE.md`. De lader importeert of lijnt het grondwetsorgaan uit, afhankelijk van wat het platform momenteel ondersteunt. De lader wordt mechanisch weergegeven vanuit het canonieke lichaam; het is niet met de hand bewerkt. Als een project drie AI-tools gebruikt, zijn er drie laadbestanden, die allemaal dezelfde constitutionele inhoud weergeven.
**Laag 3: Regels met padbereik.** Sommige regels zijn alleen van toepassing op specifieke bestandstypen. Toegankelijkheids- en lokalisatieregels zijn van toepassing op JSX- en CSS-bestanden, niet op infrastructuursjablonen. Deze regels leven in instructiebestanden met een frontmatter-glob:
De agent laadt deze bestanden alleen wanneer deze een overeenkomend pad raakt. Hierdoor blijft het contextbudget voor gretige belasting beperkt (kernregels zijn altijd aanwezig, gespecialiseerde regels worden op verzoek geladen) en wordt voorkomen dat toegankelijkheidsrichtlijnen verschijnen bij een Bicep-sjabloonbewerking.
Ondersteunende bestanden vervolledigen de structuur: `/constitute` opdrachtteksten in `.github/prompts/`, mappen per functie op `docs/methodology/features/`, eval scenario's op `docs/methodology/eval/scenarios/`, en `verify-sequence.yaml` op de repo-root die de CI-poortvolgorde definieert.
Stap 4 - Hoe we het hebben geschreven
**Context is alles. Wat niet in de context staat, is dood voor de agent.**
Dit is het allerbelangrijkste inzicht bij het schrijven van een grondwet voor door AI bestuurde ontwikkeling. Een regel die bestaat in een bestand dat de agent nooit laadt, bestaat niet. Een harde beperking die verborgen zit in een document en alleen wordt geladen als een specifiek bestandspad wordt aangeraakt, is voor geen enkel ander pad een harde beperking. De grondwet moet altijd in zijn context staan, en alles wat altijd van toepassing moet zijn, moet daarin leven.
Dit leidt tot drie auteursbeslissingen:
**Tokenoptimalisatie is niet onderhandelbaar.** De canonieke hoofdtekst richt zich op minder dan 300 lijnen en 8k tokens. Elk amendement moet de symbolische efficiëntie behouden of verbeteren; uitgebreide regels die bereiken wat beknopte regels kunnen, worden alleen al op die gronden verworpen. Dit is geen stijlvoorkeur. Het is een lastbeperking. Als de grondwet het budget overschrijdt, beginnen agenten in kleinere contextvensters deze in te korten, en ingekorte regels zijn geen regels.
**Voorwaardelijk laden via frontmatter.** Regels die alleen van toepassing zijn op specifieke bestandstypen worden buiten de canonieke hoofdtekst verwerkt en in padgerichte instructiebestanden met een frontmatter glob-declaratie. Begeleiding voor toegankelijkheid en lokalisatie wordt alleen geladen wanneer de agent JSX of CSS aanraakt. Infrastructuurbegeleiding wordt alleen geladen wanneer de agent Biceps aanraakt. Het canonieke lichaam houdt een aanwijzer van één lijn bij. De agent laadt het padgerichte bestand alleen als dit relevant is. Dit is niet alleen efficiëntie: het voorkomt dat toegankelijkheidsrichtlijnen opduiken als een afleiding bij een infrastructuurbewerking, waardoor de agent wordt getraind om deze te negeren.
Dit project maakt geen gebruik van door frontmatter gescheiden regelbestanden, omdat de constitutie klein genoeg is om volledig in de context te worden geladen: een enkele ontwikkelaar, een gefocust bereik, een gestroomlijnde regelset. Voor grotere teams verandert de calculus. Een project op ondernemingsschaal dat momenteel EDD uitvoert, heeft 75 harde beperkingen op het gebied van beveiliging, compliance, toegankelijkheid en platformspecifieke vereisten. Het samenbrengen van alle 75 in één enkel gretig bestand zou de grondwet voor de meeste agenten ruimschoots buiten het contextbudget duwen. Frontmatter-splitsing houdt de canonieke hoofdtekst onder de 250 regels (een samenvattende aanwijzer per domein) en laadt het volledige regeldetail alleen wanneer de agent overeenkomende paden aanraakt. De grondwet blijft snel en mager. De regels blijven compleet. De tokenkosten blijven beperkt.
**Amendementen als eenheden van verandering.** Een grondwetswijziging is geen woordwijziging in een afwaarderingsbestand. Het is een bundel met drie artefacten: de exacte regeldelta, het verificatiemechanisme dat toekomstige overtredingen zal opmerken, en een gedragsevaluatiescenario dat bewijst dat het gedrag van agenten verbetert. Alle drie verzenden ze samen in hetzelfde PR. Het amendement is atomair. Gedeeltelijke amendementen die beloven de verificatie later toe te voegen, worden afgewezen - later komt niet, en een niet-verifieerbare regel is decoratie.
**Schrijf de evaluaties en rubrieken op voordat je denkt dat je ze nodig hebt.** De evaluatie is de ratel. Als dit niet gebeurt, worden amendementen te goeder trouw aanvaard en verandert de grondwet. De rubriek beoordeelt het gedrag van agenten op basis van realistische scenario's. Elke nieuwe regel levert minstens één scenario op. De rubriek levert een numerieke score op. Het amendement wordt alleen aangenomen als de score in de werkboom gelijk is aan of hoger is dan de basislijn.
**Documenteer wat u wel en niet kunt dekken. Lieg niet tegen jezelf over de dekking.**
Al vroeg verklaarde de harde beperking van de toegankelijkheid dat nieuwe interactieve UI-oppervlakken volledige dekking vereisten met behulp van axe-core. Dit voelde veelomvattend. In de praktijk was het naïef. axe-core verwerkt een betekenisvolle subset van WCAG - het vangt ontbrekende labels, oriëntatiepuntenstructuur, focusvolgorde en contrast op in gevallen waarin de DOM volledig wordt weergegeven en kleuren worden opgelost. Het houdt geen rekening met de aankondigingslogica van de schermlezer, cognitieve laadpatronen, complexe widgettoetsenbordcontracten of contrastproblemen met gradiënten en SVG-afbeeldingsknooppunten waarbij de berekende kleur niet kan worden opgelost.
Het hebben van `[HC-A11Y-GATE]` met axe-core in de verificatie betekent niet dat alle bugs nul zijn. Het betekent dat de specifieke axe-core-regelset tegen de weergegeven DOM ingaat. Het verschil is enorm van belang bij claims voor PR-dekking.
De oplossing was ontbinding. In plaats van 'axe-core clean' werd de verificatie herschreven om op te sommen welke WCAG-succescriteria de axe-core regelset deterministisch dekt (1.1.1 voor niet-tekstuele inhoud, 1.3.1 voor informatie en relaties, 1.4.3 voor contrast waar oplosbaar, 4.1.2 voor naam/rol/waarde) en die geen geautomatiseerde dekking hebben (1.3.3 zintuiglijke kenmerken, 2.4.6 semantiek van koppen en labels, alle 3.x Begrijpelijke criteria). In het gedeelte met bekende hiaten van de auditdimensie wordt nu expliciet vermeld: axe-core hanteert deze criteria; Hiervoor is handmatig scannen vereist. PR-recensenten zien de daadwerkelijke berichtgeving, en niet een samenvatting van vals vertrouwen.
Het bredere principe: documenteer voor elke verificatie wat er wordt opgemerkt en wat niet. "Beveiligingslint gaat door" betekent niet dat de codebase veilig is. "bijl-kern schoon" betekent niet WCAG 2.2 AA-conform. Benoem de kloof. Log het in de auditdimensie in. Vereist handmatig scannen voor het spleetoppervlak. Laat de geautomatiseerde controle niet in de plaats komen van het menselijke oordeel dat zij niet kan vervangen.
Stap 5 - Hoe we amendementen schrijven
Amendementen beginnen bijna nooit als amendementsvoorstellen. Ze beginnen als insecten.
Er komt een bug naar boven. De oplossing wordt toegepast. Vóór verzending is de vraag altijd dezelfde: is deze oplossing eenmalig, of ontbreekt er iets in de grondwet dat deze klasse van mislukkingen zou hebben opgemerkt? Dit is precies waar [`/reflect`](https://github.com/dleblond312/core-loop/blob/main/apps/web/src/posts/edd-constitution/reflect.md) voor is.
**Wat /reflect doet.** [`/reflect`](https://github.com/dleblond312/core-loop/blob/main/apps/web/src/posts/edd-constitution/reflect.md) is een diagnostische vaardigheid die na elke oplossing wordt uitgevoerd - niet om de samenvoeging te blokkeren, maar om het oordeel expliciet te maken. Het leest de diff, de grondwet en het actieve verificatieoppervlak en produceert vervolgens een van de drie uitspraken:
- **Grondwetskloof.** Er is geen regel met de naam van de lat waaraan deze oplossing voldoet. Geen enkele verificatie had dit kunnen achterhalen, omdat de regel niet bestond. Route naar `/constitute` voor een nieuwe HC met een nieuwe verificatie en een nieuw evaluatiescenario.
- **Verificatiekloof.** Een regel geeft de maat een naam, maar geen enkele geautomatiseerde controle dwingt deze af. De regel leeft als proza, de audit of linter begrijpt de klas niet. Route naar `/constitute` om de verificatie van de regel aan te scherpen, meestal door een auditdimensie of lintregel toe te voegen.
- **Eenmalig.** Echt gelokaliseerd. Geen enkele andere site heeft dezelfde vorm, geen klasse om uit te pakken, geen regel om toe te voegen. Verzend het in stilte.
`/reflect` blokkeert nooit de samenvoeging. Het produceert de diagnose; bevestigt de mens. Maar het onderbreekt het standaardinstinct – fixeer de ene locatie en ga verder – met een gestructureerd oordeel. Die onderbreking is waar de ratel wordt geboren.
**Wanneer moet je het aanroepen.** `/reflect` is ook de landingsplaats voor "we moeten waarschijnlijk..."-voorstellen waaraan nog geen concreet falen is verbonden. Deze worden geweigerd door '/constitute' (waarvoor een bug, incident, post-mortem of contractuele standaard als trigger vereist is). '/reflect' neemt ze in plaats daarvan, onderzoekt of er een echte klassenvorm verborgen ligt in de intuïtie, en brengt ofwel een leemte in de grondwet aan het licht die de moeite waard is om te formaliseren, ofwel bevestigt dat het instinct eerder ambitieus is dan door bewijzen wordt ondersteund.
**Het /reflect -> gap -> wijzigingspad.** Wanneer `/reflect` een hiaat vindt, stelt het de regeldelta, het verificatiemechanisme en de opsomming van `affects:` op, en gaat vervolgens over naar `/constitute` voor de formele poort met drie artefacten. Een constitutionele kloof levert een nieuwe HC op. Een verificatiekloof verscherpt de verificatie op een bestaande HC.
**De drie vereiste artefacten.** [`/constitute`](https://github.com/dleblond312/core-loop/blob/main/apps/web/src/posts/edd-constitution/constitute.md) weigert verder te gaan zonder alle drie in dezelfde PR:
- **Regeldelta.** De exacte tekstwijziging, geclassificeerd: nieuwe regel, gewijzigde bewoording, verplaatsing (vervang en verwijder het oude), vervanging (leg de lat hoger met het oude als vloer) of verplaatsing. Duplicaten worden op zicht afgewezen.
- **Verificatiemechanisme.** De specifieke poort die een toekomstige overtreding zal opmerken: een testnaam, lintregel-ID, subsectie van de auditdimensie, controle van de scanneruitgangscode of een scenario voor gedragsevaluatie. Het moet bestaan tijdens de commit-tijd. Regels zonder waarneembare overtredingen zijn decoratief.
- **Eval-scenario.** Opgeslagen in `docs/methodology/eval/scenarios/<id>.md`. Beschrijft een realistische situatie waarin de oude regel verkeerd agentgedrag veroorzaakt en de nieuwe regel het te scoren juiste antwoord oplevert.
**De ratel.** Nadat alle drie de artefacten zijn goedgekeurd, wordt de wijziging toegepast op een tak. De evaluatie druist in tegen de regels van de hoofdtak en de regels van de werkboom. De rubriek scoort beide. Pass vereist een werkboom >= main voor elk scenario. Regressie blokkeert het amendement totdat de formulering is vastgesteld.
**De retroactieve sweep.** Een amendement legt de regel voor nieuwe code onmiddellijk vast: de diff-scope van `/audit` betekent dat nieuw werk aan de nieuwe lat voldoet vanaf het moment dat het amendement binnenkomt. Reeds bestaande overtredingen worden afgehandeld door een aparte sweep PR die in de wachtrij staat via `/rollout` - niet inline vereist. Nieuwe code voldoet meteen aan de nieuwe lat; oude code staat in de wachtrij voor uitrol; de sweep PR heeft zijn eigen bewijsmateriaal.
Wanneer `/reflect` een klassenvormige kloof vindt, bestaat de volledige reeks uit drie PR's, niet één. De eerste PR repareert de specifieke bug en bevat het amendement. De tweede PR - de sweep - past de oplossing met terugwerkende kracht toe op elke reeds bestaande site die '/rollout' heeft ontdekt. De derde PR werkt, indien nodig, de evaluatiesuite bij om regressiedekking voor de nieuwe regel toe te voegen. Elke PR is klein, controleerbaar en onafhankelijk bewezen. De sweep is nooit optioneel: als het amendement zonder de sweep wordt verzonden, blijven bekende schendingen open onder een regel die nu grondwettelijk is.
Stap 6 - Hoe we het ontvouwen
De Portable Methodology Kit (`EDD - Portable Methodology Kit.md`) is een op zichzelf staand document dat u aan elke AI-agent kunt overhandigen met de instructie om `/begin` uit te voeren. De agent inspecteert de opslagplaats, voert een ontdekkingspas uit, bevestigt de gedetecteerde waarden samen met u in één enkele tabel, vraagt alleen wat Discovery niet kan beantwoorden, en zendt de minimaal haalbare basis voor uw project uit. Eén sessie om de volledige EDD-infrastructuur op te zetten.
Hoe je het ontvouwt, hangt volledig af van of je nieuw begint of het in een bestaande codebase brengt. De twee paden zijn verschillend genoeg om afzonderlijk te behandelen.
**Greenfield.** Zet bij een nieuw project vanaf de eerste dag elke regel die je maar kunt bedenken in de grondwet. Je hebt geen bestaande code die je moet controleren, geen teampraktijken die je moet beschermen, geen bestaande PR’s naar grootvader. De kosten van striktheid zijn op de eerste dag vrijwel nul. Voeg alle harde beperkingen, alle auditdimensies en alle padgerichte regels toe. Voer vervolgens de lus uit. Wat je snel zult ontdekken, is waar de grondwet voor wrijving zorgt: bouw tijden die ballon omdat elke verandering een volledige audit teweegbrengt, testsuites die traag zijn omdat de dekkingsbalk te hoog is ingesteld voor de huidige complexiteit, symbolische budgetten die krap zijn omdat het canonieke lichaam te uitgebreid is. Dag één striktheid brengt deze problemen bij de ontwikkeling aan het licht, niet bij de productie. Dan optimaliseer je: verscherp de bouwpoorten, pas de dekkingsregels aan, trim het constitutionele orgaan tot het minimum. Je stabiliseert alles in één keer, zonder dat klanten worden getroffen en geen team wordt verstoord. De kosten op de korte termijn zijn een iets langzamere eerste sprint. De langetermijnwinst is een constitutie die vanaf de eerste commit aan een stresstest is onderworpen.
**Brownfield.** Een bestaande codebase heeft een bestaand team, bestaande praktijken en bestaande PR's die EDD niet volgden. De ontplooiing is hier stapsgewijs en moet additief zijn en niet ontwrichtend. Het doel van de eerste maand is niet om elke eerdere beslissing terug te draaien; het is om te beginnen met het genereren van het onderpand dat EDD betrouwbaar maakt: één auditdimensie die iets reëel vastlegt, één harde beperking die een beoordeling automatiseert die het team al handmatig deed, één wijzigingscyclus van begin tot eind. Gebruik de bestaande kwaliteitssignalen van het team als grondstof. Als het team al een lintregel voor beveiliging heeft, voeg dan `[HC-SECURITY-LINT]` toe en wijs deze naar de bestaande poort. Er verandert niets voor ontwikkelaars, maar nu weerspiegelt het grondwettelijke record wat de poort feitelijk afdwingt.
De hoofdregel in brownfield is: win bondgenoten voordat je argumenten wint. Dring in de eerste week niet aan op een volledige grondwet die elk gebied van de codebase raakt. Begin met de dimensie waar het team al het meest om geeft: meestal beveiliging of betrouwbaarheid. Laten zien dat het wijzigingsproces een echte kloof dicht die ze eerder hebben gezien. Laat de ratel vanaf daar compounderen. Een team dat EDD een echte bug heeft zien ontdekken die door hun bestaande proces is geglipt, zal ruimte maken voor de volgende regel. Een team dat EDD tegenkomt als een document dat hen vertelt dat ze alles verkeerd hebben gedaan, zal er omheen gaan.
**Wat het ontsluit.** De reden om de ontplooiing door te voeren, of het nu greenfield of brownfield is, is niet het grondwetsdocument. Het is wat de grondwet mogelijk maakt zodra het verificatiemechanisme draait.
De kwaliteit van de productiecode en de leveringssnelheid komen samen op een manier die echt contra-intuïtief is als je het nog niet hebt gezien. Ingenieurs stoppen met het wisselen van context om regressies te debuggen die de lus zou hebben opgevangen. Beoordelingscycli worden korter omdat PR’s bewijs bevatten in plaats van uitleg. De audit wordt automatisch uitgevoerd en markeert de problemen die door de meest ervaren reviewer zouden zijn opgemerkt, waardoor die reviewer zich kan concentreren op de architectonische beslissingen die daadwerkelijk hun oordeel vereisen.
Het duidelijkste bewijs hiervan: een nieuwe ingenieur die zich bij het team voegt, met volledige toegang tot de grondwet, de featurespecificaties en de loop, kan binnen 48 uur na de eerste dag een featurebijdrage van productiekwaliteit leveren die in de main wordt ingecheckt. Geen speelgoedwissel. Geen documentatie-update. Een echt kenmerk, met bewijsmateriaal, dat de volledige audit doorstaat. Het is geen toevalstreffer en het is geen bijzonder ongebruikelijke ingenieur. De vangrails maken het voor elke bekwame ontwikkelaar mogelijk om vanaf dag één te werken volgens de kwaliteitsnorm van het team, omdat de kwaliteitsnorm automatisch wordt opgeschreven, verifieerbaar en gehandhaafd, in plaats van als institutionele kennis te worden meegedragen in de hoofden van degene die er het langst mee bezig is.
Dat is de vorm die het bereikt: een team waar de AI het verificatiewerk doet, de vangrails de foutklassen opvangen die anders door de codebeoordeling zouden glippen, en de ingenieurs hun denktijd besteden aan de problemen die feitelijk technisch inzicht vereisen.
Dit is op verschillende schaalniveaus geverifieerd: eerst bij soloprojecten, daarna bij middelgrote teams en vervolgens bij organisaties op ondernemingsniveau. De mechanica houdt stand bij alle drie. De kosten voor het ontvouwen zijn anders (een solo-ontwikkelaar kan vereistenregisters en vijandige beoordelingen door verschillende leveranciers overslaan; een ondernemingsteam heeft ze nodig). Het tempo van de wijzigingen is anders (bij een soloproject kan het weken duren tussen '/constitute'-aanroepen; een ondernemingsteam met meerdere bijdragende agenten voert ze wekelijks uit). Maar de kernlus, de ratel en de bewijsvereiste gedragen zich op dezelfde manier, ongeacht de teamgrootte. De kwaliteitsvloer gaat alleen maar omhoog, en het verificatieapparaat houdt dat zo, zonder afhankelijk te zijn van degene die die week de meest ervaren recensent in de zaal is.
AI-haken
De grondwet regelt het gedrag van agenten via geladen context. Hooks handhaaft het op het moment van actie, voordat het werk al gedaan is en er al een PR openstaat. Zonder haken wordt een overtreding betrapt bij beoordeling: de agent heeft de code al geschreven, de PR bestaat, en het repareren ervan betekent dat het werk opnieuw moet worden gedaan. Bij hooks gebeurt de onderschepping vóór elke toetsaanslag.
**Zowel Claude Code als GitHub Copilot voeren een hook uit bij prompt submission.** Wanneer er een nieuwe taak arriveert, wordt de hook geactiveerd voordat de agent iets doet. Zijn taak: controleren of de taak niet triviaal is, en vervolgens de takenlijst herbedraden in de `/wow`-lus - de 10-staps EDD-reeks die de agent moet volgen voordat hij iets verzendt.
| Stap | Beschrijving |
|---|---|
| 1 | Documenten voor de taak bijwerken |
| 2 | Tests schrijven of bijwerken (E2E of eenheid) |
| 3 | Voer gerichte tests uit - bevestig FOUT |
| 4 | Leg VÓÓR bewijsmateriaal vast |
| 5 | Implementeer de taak |
| 6 | Voer gerichte tests uit - bevestig PASS + volledige suite groen |
| 7 | Vastleggen NA bewijsmateriaal |
| 8 | Controleer of de documenten overeenkomen met de implementatie |
| 9 | Voer `/audit` uit - herstel kritieke/hoge bevindingen |
| 10 | Vat samen en wacht op menselijke beoordeling |
Een agent die stap 5 bereikt zonder de stappen 1-4 te voltooien, heeft de lus geschonden. De hook bepaalt de volgorde bij het begin van de sessie, en niet achteraf.
**Claude Code** vuurt bovendien een pre-tool-call hook af vóór het schrijven van bestanden, terminalopdrachten of git-bewerkingen. Er kan niet worden geprobeerd een commit uit te voeren als niet aan de lusstappen is voldaan.
**GitHub Copilot** vuurt bovendien een PR-creatiehook af. Voordat de PR-beschrijving definitief is, draait de hook [`/audit`](https://github.com/dleblond312/core-loop/blob/main/apps/web/src/posts/edd-constitution/audit.md) in zelfbeoordelingsmodus - waarbij dimensieschendingen, ontbrekend bewijsmateriaal en lege testplannen worden opgemerkt voordat een menselijke recensent het concept ooit ziet. Wat de recensent bereikt, is al vooraf gescreend.
**Codex en andere agenten** hebben op het moment van schrijven geen native hook-oppervlak. De fallback is een CI-watcher-bot die direct na het aanmaken commentaar geeft op PR's en overtredingen signaleert. Het is een backstop, geen poort aan de eerste oppervlakte - het werk is al gedaan tegen de tijd dat het vuurt, dus het verhindert niet dat de haken worden geëlimineerd.
Bij een project met actieve hooks worden overtredingen tijdens de sessie inline gecorrigeerd. De agent vangt het gat op, produceert het bewijsmateriaal en neemt het vanaf het begin op. Bekijk de tijddalingen. Nabewerking verdwijnt. De constitutie gaat van een document dat de agent leest naar een beperking waarbinnen de agent in realtime opereert.
Bijlage - De volledige grondwet
Wat volgt is de daadwerkelijke `CONSTITUTION.md` van dit project - een volledig autonoom, door AI ondersteund ontwikkelproject met één ontwikkelaar. Het regelt elke niet-triviale wijziging die in deze codebase wordt aangebracht. Dit is geen sjabloon of illustratie. Dit is het livedocument dat door elke agent bij elke sessie wordt geladen.
Bronnen
- EDD Toolkit (2026) /reflect skill (generic template)
- EDD Toolkit (2026) /audit skill (generic template)
- EDD Toolkit (2026) /constitute skill (generic template)
- EDD Toolkit (2026) copilot-instructions.md loader template
- EDD Toolkit (2026) EDD Portable Methodology Kit