# Autonomie-roadmap — Notary.AI als volledig autonome notariële motor

> **Herijkt einddoel (notaris, 2026-07-04):** Notary.AI voert *autonoom* de
> volledige dossierketen van een notariskantoor uit — van intake tot en met de
> formaliteiten en de archivering ná de akte — en reduceert de tussenkomst van
> de notaris tot het wettelijk **onherleidbare ambtelijke sluitstuk** en de
> eindverantwoordelijkheid die de wet hem persoonlijk oplegt.

Dit document is de overkoepelende architectuur en het stappenplan om daar te
raken. Het **vervangt niet** de bestaande `ARCHITECTURE.md` (gelaagdheid,
datalaag, gouden-paden-motor) en `STAPPENPLAN.md`, maar zet ze in een ruimer
kader: die beschrijven laag 4 (generatie/berekening) van de keten hieronder;
dit document opent de lagen ervóór en erná.

---

## 1. Wat "alle taken van een notaris" wél en niet kan betekenen

Eerlijk en met de nodige juridische nuance (zekerheid dat dit de correcte
afbakening is: ~90 %): een deel van het notariële ambt is **bij wet aan een
mens voorbehouden** en kan niet naar software. Dat is geen
engineeringbeperking maar een keuze van de wetgever:

- De notaris is **openbaar ambtenaar** (Ventôse-/Organieke Wet Notariaat).
  Enkel een benoemde, beëdigde notaris kan **authenticiteit verlenen**.
- Het **verlijden** van de akte — identiteits- en wilscontrole, nagaan van de
  bekwaamheid en de vrije, geïnformeerde toestemming, de voorlezing/toelichting,
  en de ondertekening als ambtenaar (sinds 2020 ook digitaal via
  videoconferentie, maar nog steeds *door* de notaris) — blijft menselijk.
- De **onpartijdige raadgevings- en onderzoeksplicht**, de **legaliteitscontrole
  met rechtsweigering**, en de **deontologische, tuchtrechtelijke en
  beroepsaansprakelijkheid** zijn persoonlijk aan de notaris.
- De **eindverantwoordelijkheid inzake antiwitwas** (de notaris is persoonlijk
  een onderworpen entiteit) blijft menselijk.

**Alles daarrond kan wél autonoom.** Het maximaal haalbare doel is dus: Notary.AI
doet zelfstandig *alles* wat aan het verlijden voorafgaat en erop volgt, en
levert bij het verlijden een volledig voorbereid, gecontroleerd en toelichtbaar
dossier op — zodat de notaris enkel nog het onherleidbare ambtelijke oordeel
en de handtekening bijdraagt. We noemen dit de **ambtelijke-voorbehoudgrens**.

---

## 2. Handelingsregime — van twee naar drie tiers

Het bestaande governend principe (AGENTS.md) blijft, maar wordt uitgebreid met
een derde tier voor de nieuwe, naar-buiten-handelende lagen:

| Tier | Soort actie | Regime |
|---|---|---|
| 1 | **Genereren / berekenen / opzoeken** (werkdocument, geen gedeelde data gewijzigd) | Vrij, autonoom, proactief (ongewijzigd). |
| 2 | **Muteren van de gedeelde kantoorbibliotheek** (modelclausules/-documenten) | Altijd via wijzigingsvoorstel ('Te valideren'); notaris keurt goed (ongewijzigd). |
| 3 | **Handelen naar buiten / onomkeerbaar** (een opzoeking effectief aanvragen, een mail versturen, een neerlegging/registratie doen, geld doorstorten) | Alleen autonoom bij **hoge, gemeten zekerheid binnen vooraf goedgekeurde grenzen**, met volledige audit-trail; anders **escaleren** naar de notaris. |
| — | **De ambtelijke handeling zelf** (verlijden, wilscontrole, voorlezing, rechtsweigering) | Nooit geautomatiseerd — de voorbehoudgrens. |

Tier 3 is de kern van "autonoom handelen" en vergt een expliciet
**zekerheids-/escalatiemodel** (zie laag 7) én een **verantwoordingslaag**
(elke autonome handeling herleidbaar — deontologisch vereist).

---

## 3. Capaciteitslagen-architectuur

De volledige keten, als lagen. Elke laag heeft een bewaakt contract naar de
volgende, zodat autonomie stap voor stap naar rechts opschuift.

```
Laag 0  Governance & grenzen   twee/drie-regimes, GDPR, ambtelijk voorbehoud, audit
Laag 1  Perceptie / intake     bronstukken → gestructureerd dossier (nu extern → kern)
Laag 2  Dossierregie           toestandsmachine over de hele levenscyclus + termijnen
Laag 3  Compliance & opzoeking  AML/KYC/UBO/sancties + externe opzoekingen (connectoren)
Laag 4  Generatie & berekening  ontwerp + mails + afrekening  ← BESTAANDE motor (gouden paden)
Laag 5  Uitvoering & formaliteiten  registratie, overschrijving, databanken, aangiften
Laag 6  Financieel             derdengelden, afrekening, doorstorting, kantoorboekhouding
Laag 7  Autonomie-besturing    het brein: zekerheidsmeting, escalatie, self-check
Laag 8  Ambtelijk sluitstuk    de notaris (voorbehouden)
```

**Kernverschuiving t.o.v. vandaag:** laag 1 (documentbegrip, akteType-detectie,
parameter-extractie) staat vandaag *buiten scope* — een externe agent doet dat.
Voor autonomie wordt ze **kern van Notary.AI**. En de lagen 2/3/5/6/7 bestaan
vandaag grotendeels nog niet; laag 4 is het rijpst.

**Privacy/GDPR blijft leidend:** hoe meer lagen naar binnen komen, hoe strenger
de scheiding tussen de lokale (persoonsgebonden) verwerking en wat ooit een
externe dienst raakt. De bestaande placeholder-/lokale-invulaanpak
(`handoff.ts`, `vulPlaceholdersLokaalIn.ts`) is het model voor élke nieuwe laag.

---

## 4. Gefaseerd stappenplan

Elke fase verschuift de autonomiegrens één stap verder in de keten. Fasen zijn
grotendeels serieel in *afhankelijkheid* maar de werven binnen een fase lopen
parallel.

- **Fase I — Zelfstandige intake (laag 1).** Notary.AI leest de bronstukken
  zelf en vult het `DossierIntake`-contract autonoom. Dit haalt het huidige
  externe stuk naar binnen en is de sleutel tot alles erna.
- **Fase II — Dossierregie (laag 2).** Een dossier wordt een expliciete
  toestandsmachine met termijnbewaking en een "volgende stap"-motor over de
  hele levenscyclus (niet enkel het ontwerp).
- **Fase III — Compliance & opzoekingen (laag 3).** AML/KYC/UBO als
  gestructureerde, bewaakte stap; externe opzoekingen via een connector-laag
  (met mock-adapters zolang de overheids-API's niet aangesloten zijn).
- **Fase IV — Volledige generatie-dekking (laag 4).** De bestaande
  gouden-paden-roadmap (zie `ARCHITECTURE.md`) uitbreiden tot alle courante
  aktetypes, sub-paden, mails en afrekeningen. Loopt al.
- **Fase V — Formaliteiten na de akte (laag 5).** Registratie, hypothecaire
  overschrijving, neerleggingen in de notariële databanken (CRT/CRH/DGL/NABAN),
  UBO, fiscale aangiften (o.m. aangifte van nalatenschap) — via de
  connector-laag, tier-3-geregeld.
- **Fase VI — Financiële afhandeling (laag 6).** Derdengeldenrekening,
  cliëntafrekening, doorstortingen en de koppeling naar de kantoorboekhouding.
  Al gereserveerd (bewust nog niet uitgewerkt): de module-tegel "Boekhouding"
  (`lib/modules.ts`, `beschikbaar: false`) + scopepagina `app/boekhouding/`;
  dossiers zijn onderling koppelbaar (`lib/dossier/koppeling.ts`) zodat de
  module later per dossierketen kan groeperen. Uitwerking = AUT-S8.
- **Fase VII — Autonome besturing (laag 7).** Het zekerheids-/escalatiemodel en
  de verantwoordingslaag die de tiers 1-3 over alle lagen heen bestuurt, zodat
  het kantoor de autonomiegrens per handelingstype kan instellen.

De **ambtelijke-voorbehoudgrens (laag 8)** blijft in elke fase het eindpunt: het
resultaat is telkens "klaar voor het verlijden", nooit het verlijden zelf.

---

## 5. Werven, gegroepeerd per Claude-model

Naamruimte `AUT-##` (los van de bestaande genummerde backlog 1-34 in
`ARCHITECTURE.md`, die de motor van laag 4 blijft sturen). Claim elke werf in
`WERVEN.md` vóór de start. Modeltoewijzing volgt de vaste logica: **Fable 5** =
mechanisch/scherp afgebakend; **Sonnet 5** = feature-/integratiewerk met matige
ontwerpruimte; **Opus 4.8** = architecturale ontwerpkeuzes met veel onderlinge
afwegingen of een juridisch-oordeel-raakvlak (komen telkens éérst per laag).

### Opus 4.8 — de dragende ontwerpkeuzes (eerst per laag)

- **AUT-O1 · Zekerheids- & escalatiemodel (laag 7, tier 3).** ✅ Gedaan
  (ontwerp + bewaakte kern): `lib/dossier/autonomie.ts` beslist per handeling
  `autonoom` / `escaleren` / `verboden`. Dragende keuzes: (1) zekerheid is
  AFGELEID uit controleerbare gronden (`bepaalZekerheid`), niet los geasserteerd
  — een modelinschatting is hoogstens één grond; `grondenUitOnzekerheden`
  koppelt de bestaande onzekerhedenlus rechtstreeks aan; (2) DEFAULT-DENY voor
  tier 3 (`veiligeStandaardregel`: autonomie uit tenzij het kantoor ze per
  handelingstype aanzet, met een minimumniveau per impact); (3) het ambtelijk
  voorbehoud is ABSOLUUT (`tier: "ambtelijk"` → altijd `verboden`). Elk besluit
  draagt zijn reden + niveau mee, klaar voor de audit-trail (AUT-O2). Bewaakt
  in `autonomie.test.ts`. Resterend: aansluiten van echte tier-3-handelingen
  (AUT-S4/S5/S7/S8) via `beslisEscalatie`, en het kantoorbeleid persistent
  maken.
- **AUT-O2 · Verantwoordings-/audit-model (laag 0).** ✅ Gedaan (ontwerp +
  bewaakte kern): `lib/dossier/audit.ts` is een append-only logboek met een
  integriteits-hashketen (elke regel hasht haar inhoud + de vorige hash;
  `verifieerAuditKetting` detecteert elke wijziging/verwijdering/herschikking).
  Dragende keuzes: (1) append-only + hashketen zodat integriteit sluitend
  aantoonbaar is zonder externe infrastructuur; (2) GDPR-scheiding ingebouwd —
  een regel bevat nooit persoonsgegevens (dossier via pseudoniem `dossierRef`,
  gronden/reden niet-persoonsgebonden zoals de AUT-O1-gronden al zijn);
  (3) puur/deterministisch — tijdstip wordt meegegeven, geen `Date.now()`. Sluit
  rechtstreeks aan op het AUT-O1-`Escalatiebesluit`. Bewaakt in `audit.test.ts`.
  Resterend: persistente opslag (Supabase, zoals gebruikslog/voorstellen) en het
  effectief loggen bij elke tier-3-handeling (AUT-S4/S5/S7/S8).
- **AUT-O3 · Perceptielaag-contract (laag 1).** ✅ Gedaan (contract + bewaakte
  kern): `lib/dossier/perceptie.ts` legt de pijplijn Brondocument[] →
  (extractor per bronType) → `GeextraheerdeWaarneming[]` →
  `naarIntakeWaarnemingen` → de BESTAANDE merge (`tegenstrijdigheden.ts`, met
  bronprioriteit + conflictdetectie) vast — géén tweede merge. Dragende keuzes:
  (1) waarneming, niet waarheid (de perceptie beslecht nooit zelf een conflict —
  dat blijft de gezaghebbende bronprioriteitslaag); (2) geen extractor → geen
  gok (`onbekendeBronnen`, default-deny); (3) GDPR — perceptie is strikt lokaal
  (`Brondocument.tekst` bevat PII en verlaat het milieu niet; enkel de
  geanonimiseerde structuur stroomt verder). `perceptieGronden` voedt AUT-O1
  (ontbrekend/tegenstrijdig vereist veld → blokkerende negatieve grond). Het
  register is nog leeg; de extractors per brondocumenttype zijn AUT-S1. Bewaakt
  in `perceptie.test.ts`.
- **AUT-O4 · Dossier-levenscyclus-toestandsmachine (laag 2).** ✅ Gedaan
  (ontwerp + bewaakte kern): `lib/dossier/levenscyclus.ts` definieert de negen
  fasen (intake → compliance → opzoekingen → ontwerp → nazicht → ondertekening →
  formaliteiten → financiële afhandeling → afgesloten), de bewaakte
  overgangstabel (`magOvergaan` verbiedt sprongen die compliance/ondertekening
  overslaan) en de termijnbewaking (`termijnStatus`/`vervaldatumNaMaanden`,
  puur, tegen een referentiedatum). Dragende keuzes: (1) nieuw model NAAST de
  bestaande `DossierStatus` (die blijft ongemoeid; `faseVanStatus` mapt),
  vervangen is AUT-S3; (2) de ondertekening (het verlijden) is een
  `ambtelijke fase` — in de keten, maar door de notaris, niet geautomatiseerd;
  (3) puur/deterministisch. Bewaakt in `levenscyclus.test.ts`. Resterend
  (AUT-S3): de motor die de fase van een dossier voortstuwt en de "volgende
  stap" bepaalt.
- **AUT-O5 · Connector-architectuur (laag 3/5).** ✅ Gedaan (ontwerp + bewaakte
  kern): `lib/connectoren/connector.ts` levert de adapter-/poort-laag naar externe
  systemen (overheids-opzoekingen, registratie, hypothecaire overschrijving,
  databanken) — de envelop rond de AUT-F3-fixtures. Dragende keuzes: (1) MOCK-EERST,
  ÉÉN CONTRACT: elke dienst is een `Connector` met dezelfde `voerUit`;
  `maakMockConnector` antwoordt uit de AUT-F3-fixtures, een echte HTTP-adapter
  implementeert later exact hetzelfde contract; (2) UNIFORM RESULTAATMODEL, NOOIT
  WERPEN (`ConnectorAntwoord` = "ok"|"fout" — geen exceptions over de laaggrens);
  (3) IDEMPOTENTIE voor onomkeerbare handelingen (elke aanvraag draagt een
  `idempotentiesleutel`; een herhaling geeft `herhaald: true` zonder de formaliteit
  opnieuw te doen); (4) de TIER-3-POORT is verplicht: `voerUitMetPoort` laat elke
  externe handeling eerst door `beslisEscalatie` (AUT-O1) en logt zowel de
  autonome uitvoering als de escalatie in de audit-ketting (AUT-O2) — enkel bij
  "autonoom" wordt de connector effectief aangeroepen, nooit stilzwijgend. Bewaakt
  in `connector.test.ts` (bewijst dat O1+O2+O5 samen sluiten). Resterend (AUT-S6/
  S7/S8): de echte adapters per dienst achter hetzelfde contract.
- **AUT-O6 · AML/KYC-risicomodel (laag 3).** ✅ Gedaan (ontwerp + bewaakte
  kern): `lib/dossier/aml.ts` (`beoordeelAmlRisico`) weegt de risicokenmerken
  (identiteit, UBO, PEP, sanctie, herkomst der gelden, ongebruikelijke
  verrichting, niet-fysieke aanwezigheid) tot een niveau (laag/midden/hoog/
  onaanvaardbaar) + verplichte maatregelen. Dragende keuzes: (1) vrijgeven is
  NOOIT autonoom (`autonoomVrijgevenMogelijk: false`, altijd — de go/no-go en de
  CFI-CTIF-melding zijn persoonlijk aan de notaris); (2) ontbrekende
  identiteit/UBO is blokkerend; (3) een sanctie-hit is hard onaanvaardbaar
  (overschrijft de rest); (4) puur + verantwoordbaar (draagt de bijdragende
  factoren mee, geen PII). Bewaakt in `aml.test.ts`. Resterend (AUT-S5): de flow
  die de kenmerken verzamelt en de notaris de beslissing voorlegt.
- **AUT-O7 · Financiële-integriteitsmodel (laag 6).** ✅ Gedaan (ontwerp +
  bewaakte kern): `lib/dossier/derdengelden.ts` modelleert de derdenrekening met
  harde waarborgen. Dragende keuzes: (1) het dossiersaldo wordt NOOIT negatief
  (`magUitbetalen`/`saldoBlijftPositief`/`beoordeelDoorstorting` weigeren elke
  uitbetaling boven het saldo); (2) sluitende afrekening (`controleerAfrekening`:
  saldo nul); (3) een doorstorting is NOOIT autonoom (`autonoomMogelijk: false`,
  altijd — voorbereiden + escaleren naar de notaris); (4) geld in gehele
  eurocent (nooit floats), puur + verantwoordbaar. Bewaakt in
  `derdengelden.test.ts`. Resterend (AUT-S8): de afrekening/derdengelden-flow +
  de bankconnector die door deze poort gaat.
- **AUT-O8 · Autonome verbeteringslus — het zelfverbeteringscontract
  (evolutiviteit, laag 8).** ✅ Opgeleverd (`lib/dossier/verbeterlus.ts` +
  test). *Door de notaris uitdrukkelijk gevraagd: de app verbetert zichzelf op
  basis van de opgebouwde ervaring van Notary.AI.* De bouwstenen bestaan al los (gebruikslog `AUT-F5`, audit-trail
  `AUT-O2`, escalatiegronden `AUT-O1`, de wijzigingsvoorstel-pijplijn naar 'Te
  valideren', `bibliotheek-audit.ts`) maar zijn nergens tot één lus gekoppeld.
  Ontwerp het contract: welke geaggregeerde, PII-vrije signalen ze consumeert,
  welke getypeerde `VerbetervoorstelKandidaat` ze produceert, de rangschikking
  (frequentie × impact × recentheid) en de **anti-terugkoppeling** (een
  herhaald afgewezen voorstel wordt onderdrukt). Dragende invariant: **álles
  landt als voorstel in 'Te valideren' — nooit een automatische mutatie van de
  gedeelde bibliotheek** (tier 2 uit §2). Volledige omschrijving:
  `ARCHITECTURE.md` punt 49. Opbouw: `AUT-S9`.
- **AUT-O9 · Kantoor-abstractie / multi-tenant (schaalbaarheid, laag 7/8).**
  ✅ Opgeleverd (`data/kantoorprofiel.ts` + test). Scheidt het kantoorgebonden deel (branding, sjablonen,
  briefhoofden, bankrekeningen derdengelden, ereloon-particulariteiten,
  gebruikersbeheer) van het universele deel (Belgisch recht: barema's,
  belastingtarieven, termijnen, modelclausules) in een `Kantoorprofiel`, en
  beslis de tenant-isolatie + GDPR-consequenties, zodat een tweede kantoor kan
  aansluiten zonder de code te forken. Volledige omschrijving: `ARCHITECTURE.md`
  punt 50 (voorbereiding: punt 58 — `KANTOOR`-constanten centraliseren;
  opbouw: punt 56).
- **AUT-O10 · Akte sui generis — graceful-degradation-contract (flexibiliteit,
  laag 4).** ✅ Opgeleverd (`lib/dossier/suiGeneris.ts` + test). Definieert wat er met de typegebonden lagen
  (akteType-detectie, checklist, afrekening, opvolging, gouden-pad) gebeurt bij
  een vrije-vorm-akte zonder vast model: welke blijven werken, welke degraderen
  elegant, welke escaleren (`AUT-O1`). Invariant: de verplichte
  `beschrijving-onroerend-goed`-clausule en de voorbehoudgrens blijven
  onaantastbaar. Volledige omschrijving: `ARCHITECTURE.md` punt 51 (opbouw:
  punt 54).
- **AUT-O11 · End-to-end dossier-orkestratie — de "dirigent" (autonomie, alle
  lagen).** ✅ Opgeleverd (`lib/dossier/orkestratie.ts` + test). Koppelt de afzonderlijke laag-motoren (`AUT-S1…S8`)
  tot één autonome doorloop per dossier, aangestuurd door de
  levenscyclus-toestandsmachine (`AUT-O4`), met de escalatiebeslissing
  (`AUT-O1`) bij elke tier-3-poort en verankering in de audit-trail (`AUT-O2`).
  Dragende keuze: hoever de doorloop autonoom gaat vóór verplichte
  notaris-tussenkomst, en hoe hij idempotent hervat na een escalatie (`AUT-O5`).
  Volledige omschrijving: `ARCHITECTURE.md` punt 52 (zichtbaarheid: punt 55,
  het autonomie-dashboard).

### Sonnet 5 — de opbouw per laag (ná het bijhorende Opus-ontwerp)

- **AUT-S1 · Intake-extractors per brondocument (laag 1).** ✅ Gedaan: alle tien
  documentaire brontypes hebben een extractor in `lib/dossier/extractors/`
  (compromis, eigendomstitel, hypotheekattest, kadastraal uittreksel, stedenbouw,
  bodem, EPC, kredietofferte, identiteitsstuk, syndicusafrekening), op het
  AUT-O3-perceptiecontract: elk levert `GeextraheerdeWaarneming[]` (veldpad,
  waarde, bron/ref, zekerheid) die via `naarIntakeWaarnemingen` in de bestaande
  merge (bronPrioriteit + tegenstrijdigheden) stromen. Gedeelde pure parsing-hulp
  in `extractie-hulp.ts` (Belgische bedragen/datums). Dragende keuzes: (1) NOOIT
  GOKKEN — een niet-betrouwbaar veld blijft weg (→ escaleert via
  `perceptieGronden`); (2) zekerheidsgradatie per veld (gelabeld feit = zeker,
  vrije tekst/naam = onzeker); (3) de eigendomstitel schrijft naar de
  *Titel-velden zodat titel- en actueel-kadaster niet vermengen; (4) juridische
  besluiten (royement, betwisting lasten) worden nooit geraden. De AUT-F1
  fundament-ratchet (`lib/fundament-ratchet.test.ts`) staat op nul extractorgaten.
  Resterend: rijkere veldbedekking en een LLM-extractor naast de regex-laag.
- **AUT-S2 · Tegenstrijdigheden- & volledigheidsrapport (laag 1/2).** ✅ Gedaan:
  `lib/dossier/volledigheidsrapport.ts` (`stelVolledigheidsrapportSamen`)
  consolideert de bestaande berekeningen — `berekenOntbrekendeStukken`
  (afleiding.ts) en `berekenTegenstrijdigheden` (bronPrioriteit +
  `Veld.alternatieven`) — plus, optioneel, de AUT-O3-perceptiesignalen
  (`onbekendeBronnen`) tot één gestructureerd rapport. Dragende keuzes: (1) GEEN
  NIEUWE WAARHEID, enkel consolidatie; (2) twee soorten openpunten — een
  ontbrekend stuk is "nog te verzamelen" (aandachtspunten), een tegenstrijdigheid/
  onleesbare bron is een integriteitsprobleem (geblokkeerd); beide blokkeren
  autonoom handelen (default-deny); (3) het rapport levert PII-vrije
  AUT-O1-gronden zodat een onvolledig/tegenstrijdig dossier nooit blind autonoom
  naar buiten handelt. Bewaakt in `volledigheidsrapport.test.ts`. Resterend: het
  rapport in de UI/MCP tonen.
- **AUT-S3 · Levenscyclus-motor implementeren (laag 2).** ✅ Gedaan:
  `lib/dossier/levenscyclus-motor.ts` (`bepaalVolgendeStap`) stuwt een dossier
  door de AUT-O4-toestandsmachine — het bepaalt de aanbevolen volgende fase, of
  Notary.AI die autonoom mag voorbereiden, de openstaande actie en de blokkades,
  plus de termijnbewaking (compromis→akte, vier maanden). Dragende keuzes: (1)
  DEFAULT-DENY OP DE POORT — elke fase draagt een poortsoort (`FASE_POORT`):
  "data" (motor beoordeelt uit de gegevens), "notaris" (AML-go, validatie,
  doorstorting — nooit autonoom) of "ambtelijk" (het verlijden, de
  voorbehoudgrens); enkel "data"-fasen kunnen `klaarVoorOvergang`; (2)
  FASE-SPECIFIEKE RIJPHEID (ontbrekende opzoekingsstukken blokkeren intake niet
  maar wél opzoekingen→ontwerp; een kritieke tegenstrijdigheid blokkeert altijd);
  (3) geen nieuwe waarheid — hergebruikt faseVanStatus/volgendeFasen (AUT-O4) en
  het volledigheidsrapport (AUT-S2). Bewaakt in `levenscyclus-motor.test.ts`.
  Resterend: de motor de `DossierStatus` effectief laten voortstuwen en de
  rijkere termijnen (opschortende voorwaarden) uit opvolging.ts integreren.
- **AUT-S4 · Opzoekingen-connectoren (laag 3), mock-eerst.** ✅ Mock-eerst
  gedaan: de mock-adapters per opzoeking bestaan (AUT-F4, `adapters/mock.ts`) én
  de dossier-gedreven ORCHESTRATIE is er nu — `lib/connectoren/opzoekingen-flow.ts`
  (`vereisteOpzoekingen`, `voerOpzoekingenUit`) bepaalt welke opzoekingen een
  dossier nodig heeft en stuurt ze één voor één door de AUT-O5-poort
  (`voerUitMetPoort` → escalatie AUT-O1 + audit AUT-O2). Dragende keuzes: (1)
  ALLES DOOR DE POORT (default-deny: zonder aangezette autonomie wordt elke
  opzoeking geëscaleerd, niet uitgevoerd); (2) idempotent per dossier
  (`${dossierRef}/${dienst}`); (3) een niet-aangesloten dienst komt zichtbaar in
  `nietAangesloten`, nooit geraden. Zo werkt intake→opzoekingen end-to-end vóór
  er één echte API is. Bewaakt in `opzoekingen-flow.test.ts`. Resterend (vereist
  externe API-toegang): de ECHTE overheids-adapters per dienst, die via het
  register (`connectorVoorDienst`, echt primeert op mock) naadloos overnemen —
  dan stijgt `MINIMUM_ECHTE_ADAPTERS` in de fundament-ratchet.
- **AUT-S5 · AML/KYC-flow implementeren (laag 3).** ✅ Gedaan:
  `lib/dossier/aml-flow.ts` bouwt op het AUT-O6-risicomodel de flow —
  `bepaalOpenstaandeStappen` (KYC-controlelijst per partij),
  `beoordeelPartijAml` en `beoordeelDossierAml` (aggregatie tot het hoogste
  niveau + escalatie). Dragende keuzes: (1) SCREENING-STATUS ≠ RESULTAAT — een
  nog niet uitgevoerde screening (`undefined`) is een openstaande stap, geen
  stilzwijgend "ok"; (2) harde (identiteit/UBO/sanctie) vs. aandacht-stappen
  (PEP/herkomst); (3) ALTIJD ESCALEREN — `besluit: "voorleggen-notaris"` en
  `autonoomVrijgevenMogelijk: false`, met PII-vrije AUT-O1-gronden zodat een
  blokkerend/onaanvaardbaar AML-beeld ook elders het autonome handelen
  tegenhoudt. Bewaakt in `aml-flow.test.ts`. Resterend: de UI/MCP-flow die de
  kenmerken bij de notaris opvraagt en het besluit registreert.
- **AUT-S6 · Generatie-dekking uitbreiden (laag 4).** De lopende
  gouden-paden-backlog: alle courante aktetypes/sub-paden, FR-spiegels, mails en
  afrekeningen — zie `ARCHITECTURE.md`. (Reeds actief.)
- **AUT-S7 · Formaliteiten-connectoren (laag 5).** ✅ Mock-eerst gedaan: de
  mock-adapters bestaan (AUT-F4) én de geordende ORCHESTRATIE is er nu —
  `lib/connectoren/formaliteiten-flow.ts` (`vereisteFormaliteiten`,
  `voerFormaliteitenUit`) stuurt registratie → overschrijving in de wettelijke
  volgorde door de AUT-O5-poort. Dragende keuzes (t.o.v. de opzoekingen-flow
  AUT-S4): (1) HOGE IMPACT — formaliteit is onomkeerbaar, dus een
  hoge-impact-regel en default-deny; (2) STRIKTE VOLGORDE + STOP-BIJ-FALEN — gaat
  één schakel niet door (geëscaleerd/verboden/fout/niet-aangesloten), dan stoppen
  de volgende (nooit een overschrijving vóór de registratie); (3) idempotent +
  zichtbaar (`nietAangesloten`/`overgeslagen`). Bewaakt in
  `formaliteiten-flow.test.ts`. Resterend (vereist externe API-toegang): de echte
  adapters (registratie/overschrijving + CRT/CRH/DGL, NABAN/e-Depot, UBO,
  aangifte van nalatenschap), die via het register naadloos overnemen.
- **AUT-S8 · Afrekening & derdengelden implementeren (laag 6).** ✅ Eerste
  uitwerking gedaan (vrijgegeven door de notaris, 2026-07-07): de
  boekhoudmodule (/boekhouding) levert per verkoopdossier het décompte van de
  koper, het décompte van de verkoper en het betalingsoverzicht van het
  kantoor, uit de pure motor `lib/dossier/verkoopdecompte.ts` (zelfde
  kosten/heffing als de afrekeningspijler; dekking per betaling via de
  AUT-O7-primitieven — het dossiersaldo wordt nooit negatief). Kernregel van
  de notaris: een makelaarsfactuur die het agentschap al op het voorschot
  inhield, VERVALT in het betalingsoverzicht (nooit tweemaal betalen) en de
  verwachte doorstorting daalt met het factuurbedrag; het nettosaldo van de
  verkoper is in beide gevallen identiek. Ontvangsten op de derdenrekening
  worden in de module geëncodeerd (`DerdengeldOntvangst` op het
  verkoopdossier, IndexedDB). Resterend: dezelfde flow voor de overige
  dossiertypes (schenking/nalatenschap), de export naar het boekhoudpakket en
  de bankconnector (tier 3, via AUT-O5).
- **AUT-S9 · Autonome verbeteringslus — implementatie (laag 8).** ⏳ Bouwt op
  het `AUT-O8`-contract een pure analysemotor `lib/dossier/verbeterlus.ts`
  (`analyseerGebruikspatronen(events, auditsamenvatting) →
  VerbetervoorstelKandidaat[]`) met de rangschikking + anti-terugkoppeling,
  gekoppeld aan (a) een MCP-tool die de kandidaten ophaalt en na goedkeuring
  via de bestaande `voeg…VoorstelToe`-functies als échte voorstellen indient,
  en (b) een paneel in 'Te valideren' met de PII-vrije onderbouwing.
  Guard-test: geen enkel pad muteert de gedeelde bibliotheek rechtstreeks —
  alles via een voorstel. Volledige omschrijving: `ARCHITECTURE.md` punt 53.

### Fable 5 — het mechanische fundament (parallel inzetbaar)

- **AUT-F1 · Ratchet-tests per nieuwe laag.** ✅ Gedaan:
  `lib/fundament-ratchet.test.ts` — laag 1: extractorgaten per documentair
  brontype (gat gedicht = schrappen in dezelfde commit; verdwenen extractor
  faalt hard) + geen extractors op niet-documentaire brontypes; laag 3/5: elke
  dienst aangesloten (mock telt, AUT-O5) + enkel-stijgend minimum voor echte
  adapters. De meetlat "tier-3-handelingen met audit" volgt zodra AUT-S4/S7
  echte handelingen door `voerUitMetPoort` sturen (vandaag niets te tellen).
- **AUT-F2 · Schema-/typevelden & guards.** ✅ Gedaan — opgeleverd sámen met de
  Opus-ontwerpen (de typevelden ontstonden mee met elk ontwerp): `Zekerheid`/
  `Zekerheidsniveau`/`Escalatiebesluit` (autonomie.ts), `AuditRegel` (audit.ts),
  `Dossierfase`/`DOSSIERFASEN` (levenscyclus.ts), `DossierKoppeling`/
  `DossierRelatie` (types.ts) en onder AUT-F4 `ExtractorRegistratie`,
  `ConnectorRegistratie` en de exhaustieve `DIENST_IMPACT`-guard. Elk bewaakt
  in de test van zijn module.
- **AUT-F3 · Mock-fixtures voor de connectoren.** ✅ Gedaan:
  `lib/connectoren/fixtures/` — per dienst uit het `ConnectorDienst`-contract
  (zes AUT-S4-opzoekingen + registratie en hypothecaire overschrijving uit
  AUT-S7) realistische maar volledig fictieve aanvraag/resultaat-scenario's
  ("schoon" + "belast"), gedeelde fictieve entiteiten, register met
  opzoekfuncties en een bewakende test (volledigheid per dienst, unieke ids,
  GDPR-invarianten: fictief-marker, proefnamen, herkenbaar ongeldig
  RRN-patroon). Bewust enkel INHOUDS-fixtures — de adapter-envelop volgt uit
  AUT-O5 en kan deze payloads ongewijzigd overnemen.
- **AUT-F4 · Codegen & registers.** ✅ Gedaan: `scripts/genereer-barrels.mjs`
  veralgemeend (wortel/typeimport/achtervoegsel per register) en uitgebreid
  naar `lib/dossier/extractors/` (→ `seedExtractors` → `perceptieRegister`,
  met duplicaatguard `maakPerceptieRegister`) en `lib/connectoren/adapters/`
  (→ `seedAdapters`; mock-adapters voor alle acht diensten;
  `connectorVoorDienst` laat een echte adapter primeren op de mock). Een
  nieuwe laag-instantie = één bestand. Dossiertoestanden blijven bewust een
  hand-onderhouden enum (`DOSSIERFASEN`) — een vaste keten, geen register.
- **AUT-F5 · Observability-uitbreiding.** ✅ Gedaan: zes nieuwe
  `GebruikslogType`-signalen + pure mappers bij de laag zelf
  (`gebruikslogEventsUitPerceptie`, `gebruikslogEventUitPoort`); GDPR bewaakt
  in `lib/fundament-observability.test.ts` (enkel bronTYPE/veldpad/dienst,
  nooit refs/payloads/waarden).

---

## 6. Verhouding tot de bestaande roadmap

- `ARCHITECTURE.md` (genummerde backlog 1-34 + gouden-paden-roadmap) = **laag 4**
  van dit kader; blijft de motor en loopt gewoon door onder **AUT-S6**.
- `STAPPENPLAN.md` (noordster-metriek) = de kwaliteitsmeter van laag 4; wordt
  onder autonomie de meter *per laag* (AUT-F1).
- `integratie/PARALLELLE-CLAUSULES.md` (parallelclausule-mechanisme) = een
  bouwsteen van de bibliotheekintegriteit binnen laag 4.
- De **twee-regimes** uit `AGENTS.md` blijven gelden en worden **drie tiers**
  (§2 hierboven); de ambtelijke-voorbehoudgrens (§1) is de nieuwe, bovenste
  invariant die élke werf respecteert.

## 7. Status

- [x] Herijkt einddoel + architectuur + stappenplan + werven vastgelegd
      (dit document; einddoel-verwijzing toegevoegd in AGENTS.md/ARCHITECTURE.md)
- [x] Opus-ontwerpen AUT-O1…O7 opgeleverd (AUT-O1 ✅, AUT-O2 ✅, AUT-O3 ✅, AUT-O4 ✅, AUT-O5 ✅, AUT-O6 ✅, AUT-O7 ✅)
- [x] Opus-ontwerpen AUT-O8…O11 opgeleverd — AUT-O8 ✅ (verbeteringslus, `lib/dossier/verbeterlus.ts`), AUT-O9 ✅ (multi-tenant, `data/kantoorprofiel.ts`), AUT-O10 ✅ (sui generis, `lib/dossier/suiGeneris.ts`), AUT-O11 ✅ (dirigent, `lib/dossier/orkestratie.ts`)
- [ ] Sonnet-opbouw AUT-S1…S9 (S9 = de verbeteringslus, ná AUT-O8)
- [x] Fable-fundament AUT-F1…F5 (F1 ✅, F2 ✅, F3 ✅, F4 ✅, F5 ✅)

> **Volgende logische stap:** alle Opus-ontwerpen (AUT-O1…O7) én het
> Fable-fundament (AUT-F1…F5) zijn opgeleverd. Alles staat klaar voor de
> Sonnet-opbouw: begin bij AUT-S1 (intake-extractors — één bestand per
> brontype in `lib/dossier/extractors/`, de ratchet-gatenlijst in
> `lib/fundament-ratchet.test.ts` is de werklijst) en AUT-S4/S7 (echte
> adapters — één bestand per dienst in `lib/connectoren/adapters/`, verhoog
> `MINIMUM_ECHTE_ADAPTERS` mee), want die deblokkeren de meeste vervolgwerven.
