Stages — uitwerking per fase
Stage 0 — Architectuur-commitment (DONE)
Doel: de keuze op schrift. Geen code, alleen ontwerp + acceptatie.
Wat gebeurde:
- ADR-0031 accepted (two-stack model definitief)
- ADR-0032 drafted (strangler-fig migration plan)
- Design doc 1.310 regels — gevalideerd tegen vijf worked legal examples (Eindhoven omgevingsplan, APV, Woonvisie, beleidsregel met rectificatie, ABRvS uitspraak die besluit vernietigt)
Stage 1 — Leeg schema op main (DONE 2026-05-02)
Doel: de tabellen bestaan, leeg, op main, zodat code ze kan beginnen vullen.
Wat gebeurde:
- PR #4121 — Phase 0 prerequisites (migs 145-149 + 151):
law_articles.toestand_date,law_article_citations,canonical.authorities,canonical.workspaces,taxonomy.terms(4-axis), bestuurslaag-enum uitbreiding'gerecht' - PR #4122 — Phase 1 schema (mig 150): 21 canonical en cold tabellen per design §4
- Totaal: 24 nieuwe tabellen op
main, alle leeg behalvecanonical.authorities(398 TOOI-backfill-rijen), allemaal FK-clean
Stage 1b — Fundering aanscherpen (DONE ~2026-05-03)
Doel: drift tussen documentatie en live schema corrigeren vóór data-vullen begint.
Drie correcties:
- PR #4127 — 10 orphan files committed (migs 142+143
research.*schema + 14 source-channel seeds, plus 6 productie-scripts) - PR #4128 — design-doc table-count drift correcties
- Authority-resolution-coverage methodologie gekozen — case-insensitive (66.6%), gegrond in live-DB-validatie
Wat aan het licht kwam:
- De originele "78% coverage" claim reproduceerde niet (actual 35.6 / 66.6 / 96.6 per matching strategie)
- Migraties 142+143 waren in dev maar niet in git voor ~3 dagen — silent divergence (zie postgres-migration-tracking-gap memory)
Stage 2 — Eerste canary, Rechtspraak end-to-end (DONE)
Doel: één bron volledig door de nieuwe shape om de pijplijn te testen.
Gekozen: Rechtspraak, omdat ECLI de cleanste identifier is en de bron de hoogste resolution-coverage heeft (89.3% exact-name match).
Sub-doelen voltooid:
- WI-FRBR-007 — Wetgeving instruments-side dual-write (canary in soak) — 14 BWBR → 14 instruments + 16 versions + 16 renderings
- Phase-2 canaries sequentieel: Wetgeving → WI-FRBR-010 (Rechtspraak decisions) → WI-FRBR-011 (DSO instruments)
Empirische uitkomst:
- 7.413 rechterlijke uitspraak-rijen in
canonical.decisions(catch-allrechterlijke_uitspraak) - Cross-stack bridge
canonical.publications.refers_to_instrument_version_idpopulated voor 3.011 publications (2.970 IMRO + 41 AKN)
Stage 3 — Alle andere bronnen (IN PROGRESS)
Doel: dual-write + backfill pattern uitrollen naar de overgebleven bronnen.
Open WIs:
- WI-FRBR-010 (Rechtspraak decisions-side)
- WI-FRBR-011 (DSO instruments) — gating op ADR-0027 bitemporal
- WI-FRBR-014 / -015 (OB decisions, twee pipelines) — gating op F5 rectificatie-fix
- WI-FRBR-017 (?), -018 (IMRO pre-Ow instruments), -019 (Phase 4 strangler view), -020/021/022/023, -025, -026
Dropped:
- WI-FRBR-016 (OP-XML legacy body parser) — niet-probleem; pre-2024 OB heeft alleen IMRO-regex nodig
Done:
- WI-FRBR-001..006: Phase 0 + Phase 1 substraat (in
docs/83-feature-done/) - WI-FRBR-007: Wetgeving canary in soak
- WI-FRBR-008: Mig 153 enum-extensies
- WI-FRBR-009:
corpus_qualityflag (mig 154) — 20.793 clean / 2.614 crawl-failed / 14.550 partial - WI-FRBR-013: TOOI authorities v2 backfill (442 rows, 94.9% structural coverage)
- WI-FRBR-027: Ministerie attribution voor de 14 BWBR instruments
OB-rebuild is de zwaarste taak — 11.263 rijen verdeeld over twee extractie-generaties (post-2024 STOP-IMOP en pre-2024 OP-XML across 4 CMS platforms). Plan: STOP-IMOP eerst; pre-2024 rows blijven HTML in full_text.
Stage 4 — Strangler view (NOT STARTED)
Doel: canonical.documents wordt een SQL-VIEW die uit FRBR-tabellen wordt opgebouwd. De legacy-tabel wordt canonical.documents_legacy. Hoog-leverage consumers (BOPA toetsing, library UI, retrieval-pijplijn, chunk-tag UI, jurisprudence cross-reference) krijgen rebound naar FRBR-natief lezen.
Drie gating-stappen:
- View-shape brainstorm (~1u) — semantiek voor edge-cases (rij zonder publicatie, meerdere publicaties)
- Build strangler view (~6u)
- 7-daagse productie-audit-log met view-uitkomst-equivalentie
Stage 5 — Drop legacy (NOT STARTED)
Doel: DROP TABLE canonical.documents_legacy CASCADE. FRBR is enige bron-van-waarheid.
Pre-flight: audit-log uit Stage 4 moet aantonen dat niets meer _legacy referenceert. Post-flight: een week productie-monitoring; latente consumers verschijnen daar.
Reversible alleen via backup-restore — daarom de 7-daagse audit-window vóór drop.
Onderliggende docs
docs/handoffs/2026-05-03-frbr-roadmap-handoff.md— origineel 5-stage roadmap met decision-tablesdocs/handoffs/2026-05-05-architecture-audit.md§7 — empirische status 2026-05-05docs/80-feature-backlog/EPIC-FRBR-MIGRATION.md— work-item-tracking