Skip to content

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 behalve canonical.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-all rechterlijke_uitspraak)
  • Cross-stack bridge canonical.publications.refers_to_instrument_version_id populated 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_quality flag (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-tables
  • docs/handoffs/2026-05-05-architecture-audit.md §7 — empirische status 2026-05-05
  • docs/80-feature-backlog/EPIC-FRBR-MIGRATION.md — work-item-tracking

Intern handboek — niet voor externe publicatie