Anker-protocol
Het anker-protocol stelt: élke schema-claim — élke schema-naam, élke gesloten-vocab-rij — moet wijzen naar een corpus-geverifieerd wet-artikel. Geen "ik denk dat dit X betekent". Geen "in de praktijk noemen we dit Y". Anker-of-niet-bestaan.
Twee anker-bronnen
source_kind | Anker-shape | Verifieert tegen | Wettelijke basis |
|---|---|---|---|
bwb_artikel | (bwb_id, article_number, toestand_date) | wet.artikelen | BWBR-corpus (= directe wetgeving) |
stop_paragraaf | (stop_versie, stop_module, stop_section) | wet.stop_paragrafen | STOP-standaard, krachtens RSPO art. 2 aangewezen |
STOP-anker-bron is toegevoegd via ADR-0036, omdat sommige kernconcepten (rectificatie, renovatie, mutatie) wettelijk wel binden maar niet in een BWBR-artikel staan. Krachtens-de-wet-aangewezen normen zijn evengoed legitiem als wet-artikelen zelf.
De registry-tabel
catalogus.legal_anchors (
id UUID PRIMARY KEY,
anker_key TEXT NOT NULL UNIQUE,
source_kind TEXT NOT NULL CHECK (source_kind IN ('bwb_artikel','stop_paragraaf')),
bwb_id TEXT, -- voor source_kind='bwb_artikel'
article_number TEXT, -- idem
stop_versie TEXT, -- voor source_kind='stop_paragraaf'
stop_module TEXT, -- idem
stop_section TEXT, -- idem
corpus_hash TEXT NOT NULL,
verified_at TIMESTAMPTZ NOT NULL,
verified_by TEXT NOT NULL
)De corpus_hash is SHA256 over de gehoste wet-tekst op moment van verificatie. Drift-detectie:
- Bij elke validator-run wordt elke
legal_anchors-rij gecontroleerd tegen de actuele tekst inwet.artikelen/wet.stop_paragrafen. - Als de huidige hash anders is dan
corpus_hash, faalt de validator. Een PR die de catalogus uitbreidt zonder de ankers te hercertificeren wordt geblokkeerd.
De validator
scripts/validate-schema-anchors.ts walkt:
- Alle catalogus-tabellen waarvan rijen anker hebben (
catalogus.expression_aarden,catalogus.publicatie_handeling_soorten, etc.). - Per anker-key: lookup in
catalogus.legal_anchors. - Verifieer dat het anker bestaat, de bron-tekst nog matcht (
corpus_hash), en de catalogus-rij correct verwijst.
Faalt op:
- Missing
legal_anchors-rij voor een catalogus-rij-anker - Hash-drift (corpus is veranderd)
- Missing
verified_at(anker is nooit gevalideerd) bwb_id/article_numberresolveert niet naar een rij inwet.artikelen
In CI: als deze validator faalt, gaat de PR niet door.
Wat dit waarborgt
Het schema kan niet langzaam afdrijven van de wettelijke werkelijkheid. Elke uitbreiding moet zich verantwoorden. Een schema-claim als "deze catalogus-rij staat voor het concept X uit artikel Y" is toetsbaar — niet alleen wat we ervan geloven, maar wat de corpus-evidence schraagt.
Wanneer een TBD-anker?
Sommige wetten zitten (nog) niet in corpus — Bro, Woo. Catalogus-rijen die op deze wetten ankeren krijgen een source_ref = 'TBD-<wet-aanduiding>' met expliciete vermelding van welke ingest nog moet komen. De validator markeert TBD-ankers als "to be resolved" maar laat de PR door. Bij ingest van de ontbrekende wet worden de TBD-ankers verbonden.
Zie corpus-gaps.
Onderliggende ADRs
- ADR-0033 — Schema noun-families + legal-anchor registry (het protocol)
- ADR-0036 — STOP-standaard als anker-bron krachtens RSPO (uitbreiding met STOP-paragrafen)