Status: V1 geïmplementeerd · Auteur: open-source projectteam · Datum: 2026-05-12 (status bijgewerkt 2026-05-13) Type: Frontend-uitbreiding · Module-impact: M4 (AI Governance) volledig Beslissing nodig vóór: demo aan organisaties met AI-systemen die EU AI Act-compliance moeten aantonen
Implementatie-stand (2026-05-13)
/beheer/ai-systemen— CRUD met classifier-advies inline, badge per EU AI Act-risico, filter op risico-categorie en deployment-status./beheer/hitl-checkpoints— audit-log-lijst met review-telling + laatste decision, review-paneel met verplichte motivatie, append-only historie, filter "alleen niet-gereviewd"./admin/agent-tokens— scope-multi-select uit 8 presets, two-step confirm, eenmalige JWT-display, optionele koppeling aan AI-systeem voor traceability.- Audit-logs-endpoint
/ai-hitl-checkpoints/audit-logsmet review-telling + last_decision per log voedt de werklijst.- Tests: 5 vitest-tests per AI-systemen, HITL, agent-tokens; e2e
m4-ai-systemen,admin-agent-tokens,beheer-hitl-reviewmet directe DB-verificatie.- V2-werk in
[Unreleased]van CHANGELOG: detail-pagina per AI-systeem, edit-flow,classification_override_note-veld, HITLparent_checkpoint_idvoor genest review.
M4 (AI Governance) is in docs/modules.md als operationeel gemarkeerd op backend-niveau: AI-systemenregister, EU AI Act-classifier, NIST AI RMF als normenkader, AI conformity assessment, HITL-checkpoints, NHI agent-tokens — alle zes bouwstenen werken via API, met 43 backend-tests.
Wat er niet is: één frontend-route voor M4. Geen pagina onder /beheer/ai-systemen, geen HITL-review-UI, geen NHI-token-beheer voor admins. Eindgebruikers moeten vandaag via curl, Postman of het OpenAPI-/docs-endpoint werken om M4-functionaliteit te raken.
Gevolg: M4 is demo-incompleet. Een CISO of compliance-officer kan vandaag niet:
- Een AI-systeem registreren via UI
- EU AI Act-classificatie-advies inline opvragen
- HITL-checkpoints reviewen die door agents geschreven zijn
- NHI-token uitgeven aan een agent met scope-beperking
Voor een open-source platform met "AI-ready"-positionering in de README is dit een gat dat eerst gevuld moet voordat M4 als feature aan klanten verkocht kan worden.
Dit RFC behandelt niet:
- Agent-conversaties UI (chatten met agent vanuit een platform-pagina). Apart RFC; raakt M3-AI-laag, niet M4-governance.
- NIST AI RMF-controls-UI specifiek. NIST AI RMF zit in M1 (normenkader-tabel) — bestaande
/beheer/controls-flow toont al NIST-controls dankzij Rosetta Stone-mapping. Geen aparte route nodig. - AI-conformiteitsbeoordeling UI. Bestaande assessment-flow (
/beheer/assessments) wordt uitgebreid metassessment_type='ai_conformity'-filter en AI-systeem-koppeling — niet als nieuwe route, maar als variant. Apart issue. - EU AI Act-classifier batch-mode (meerdere systemen tegelijk classificeren). API ondersteunt het, UI alleen één-voor-één in V1.
- Drift-monitoring / continue assessment. Buiten scope.
Doel: CRUD op ims_ai_systems met inline EU AI Act-classifier-advies.
Pagina-componenten:
| Component | Functie |
|---|---|
AISystemList |
Lijst-view: naam, leverancier, type, classificatie-badge, eigenaar, status |
AISystemFilters |
Filter op classificatie (verboden / hoog / beperkt / minimaal), op leverancier, op zoektekst |
AISystemForm |
Create/edit-formulier met inline classifier-knop |
AISystemClassifierAdvice |
Toont uitlegregels van /api/v1/ai-systems/classify-suggestion naast invoer-velden |
AISystemDetail |
Detail-pagina met velden, gekoppelde assessments (filter op ai_conformity), HITL-checkpoints |
Form-flow met classifier:
- Gebruiker vult kenmerken (sector, doel-doelgroep, beslissingsimpact, biometrie, ...) — komt overeen met classifier-input-schema
- Knop "Classificatie-advies opvragen" →
POST /api/v1/ai-systems/classify-suggestion - Response toont voorgestelde classificatie (
verboden | hoog | beperkt | minimaal) + uitlegregels - Gebruiker accepteert advies (vult
eu_ai_act_risk-veld) of overschrijft handmatig met motivatie - Submit →
POST /api/v1/ai-systems
Belangrijk: classifier-advies is advies. UI maakt duidelijk dat de mens de classificatie beslist, niet de regel-engine. Toont audit-trail wanneer mens-overschrijft-advies via verplicht classification_override_note-veld (nieuw veld op ims_ai_systems — Alembic-migratie nodig, klein).
Doel: EU AI Act art. 14 ("menselijk toezicht") operationeel maken via UI. Agents schrijven HITL-checkpoints via API; mens reviewt via deze pagina.
Pagina-componenten:
| Component | Functie |
|---|---|
HitlList |
Lijst van openstaande checkpoints (filter: reviewed=false) |
HitlDetail |
Detail: agent-naam, AI-systeem-koppeling, agent-output, beslismoment, geadviseerde-actie |
HitlReviewForm |
Reviewer kiest: approve / reject / escalate + verplichte motivatie |
HitlHistory |
Per AI-systeem: tijdlijn van checkpoints met reviewer-actie |
Backend-aanpassing: ai_hitl_checkpoints-tabel is vandaag append-only (UPDATE/DELETE ingetrokken). Review-actie wordt gemodelleerd als nieuwe row met parent_checkpoint_id-FK naar originele checkpoint. Behoudt append-only-invariant; review wordt onderdeel van keten, niet mutatie. Alembic-migratie voegt parent_checkpoint_id toe.
RBAC: tactisch_lid of discipline_eigenaar mag reviewen; lijnmanager ziet read-only.
Default-view: "Openstaande checkpoints in mijn scope" — niet de hele tenant. Voorkomt dat reviewer in een organisatie met veel AI-systemen verdrinkt.
Doel: admin geeft een AI-agent een token uit met beperkte scope en TTL.
Pagina-componenten:
| Component | Functie |
|---|---|
AgentTokenForm |
Velden: agent-naam, AI-systeem (optioneel FK), scope-lijst (multi-select uit vooraf-gedefinieerde capabilities), TTL (max 24h) |
AgentTokenIssued |
One-time-display van JWT na uitgifte (waarschuwing: "kopieer nu, wordt niet opnieuw getoond") |
AgentTokenAuditList |
Lijst van uitgegeven tokens (zonder JWT-inhoud — alleen metadata) uit ai_audit_logs |
RBAC: alleen admin van tenant.
Backend-aanpassing: POST /api/v1/auth/agent-token bestaat al. Audit-logging registreert uitgifte. UI voegt geen nieuwe endpoints toe.
Vooraf-gedefinieerde scopes (lijst in code, niet config):
risks:read,risks:writecontrols:read,controls:writeassessments:read,assessments:writehitl:write(agent mag checkpoints schrijven, niet reviewen)documents:read
Uitbreiden alleen met expliciete RFC — voorkomt scope-creep waar agents te veel rechten krijgen.
AppShell / Sidebar krijgt nieuwe sectie "AI-governance" met drie items:
- AI-systemen (
/beheer/ai-systemen) — zichtbaar voor alle rollen met assessment-toegang - HITL-checkpoints (
/beheer/hitl-checkpoints) — zichtbaar vanafdiscipline_eigenaar - Agent-tokens (
/admin/agent-tokens) — alleenadmin
Sectie is conditioneel zichtbaar: alleen tonen als tenant minstens één AI-systeem heeft geregistreerd OF tenant heeft feature_ai_governance=true in ims_tenant_settings. Niet-AI-tenants zien de sectie niet — voorkomt onnodige cognitive load.
Bestaande pagina's gebruiken useSWR voor server-state, useState voor form-state, useState/useReducer voor lokale UI-state. Geen Zustand, geen Redux. Dit RFC houdt zich aan dat patroon. M4-UI introduceert geen nieuwe globale state.
| Alternatief | Status |
|---|---|
| HITL-review als modal binnen AI-systeem-detail | Afgewezen. Reviewer wil overzicht over alle openstaande checkpoints — modal-only-flow verbergt dat. |
AI-systemenregister als subroute van assessments (/beheer/assessments/ai-systemen) |
Afgewezen. AI-systeem leeft langer dan een assessment; eigen route. |
| Agent-token-UI in tenant-instellingen | Afgewezen. Tenant-instellingen is voor tenant-admin-config; agent-token-uitgifte is operationele actie. Aparte route maakt audit-flow duidelijker. |
| Inline classifier in lijst-view (klik op rij → advies) | Geparkeerd. UX-verbetering voor V2. V1 doet classifier in form. |
| Drift-monitoring en re-classify-alerts | Geparkeerd. Aparte module. |
| Nieuw component-framework (bv. Radix/shadcn naast bestaande UI) | Afgewezen. Bestaande components/ui/* (Card, Button, Badge, Input, Select) is voldoende. |
| Risico | Mitigatie |
|---|---|
| Classifier-advies wordt als "beslissing" gezien i.p.v. advies | UI-tekst expliciet "advies, niet beslissing". classification_override_note verplicht bij overschrijven. Tooltip met uitleg per regel uit eu_ai_act_classifier.py. |
| NHI-token-JWT lekt via screenshots / logs | One-time-display met expliciete waarschuwing. JWT staat niet in URL. Token-detail-pagina toont alleen metadata. |
| Reviewer overweldigd door HITL-volume | Default-filter op "mijn scope". Bulk-actie ("approve geselecteerde 5") parkeren voor V2 met eerst gebruiksdata om te zien hoeveel checkpoints werkelijk binnenkomen. |
| AI-governance-sectie zichtbaar voor tenants zonder AI | Conditioneel renderen (sectie 3.4). Tenant-admin kan handmatig aanzetten via instelling. |
parent_checkpoint_id-keten te diep (eindeloze review-op-review) |
Soft-cap: na 3 niveaus geen verdere review meer. Backend valideert. |
| Bestaand RBAC kent geen "review"-rol — wie mag reviewen? | Mapping: discipline_eigenaar of hoger. Geen nieuwe rol toevoegen. Bij vraag uit klant: vervolg-RFC. |
| Frontend-build groter door extra routes | Verwaarloosbaar (~30kB). Routes zijn server-rendered Next.js — code-splitting automatisch. |
Dit RFC is "geïmplementeerd" wanneer:
- Routes
/beheer/ai-systemen,/beheer/ai-systemen/[id],/beheer/hitl-checkpoints,/admin/agent-tokenswerken end-to-end - Alembic-migratie voegt
classification_override_notetoe aanims_ai_systemsenparent_checkpoint_idaanai_hitl_checkpoints - Conditional navigation: AI-governance-sectie verschijnt alleen bij relevante tenant
- Backend-tests blijven groen; nieuwe tests dekken
parent_checkpoint_id-validatie (geen cyclus, max diepte 3) enclassification_override_note-verplicht-bij-overschrijven - Frontend e2e Playwright-spec: AI-systeem registreren → classifier raadplegen → opslaan → assessment koppelen → HITL-checkpoint reviewen → agent-token uitgeven (admin-rol)
-
docs/modules.mdM4-sectie bijgewerkt: Frontend-status van ❌ naar ✅ -
docs/gebruik.md(of nieuwdocs/ai-governance-gebruik.md) beschrijft de drie flows voor eindgebruikers - Screenshots van drie routes in
README.mdofdocs/platform-overzicht.html
- Wie mag
classification_override_noteschrijven: enkel admin, of ooktactisch_lid? Voorstel:tactisch_lidof hoger, want classificatie raakt assessment-scope. - Conditionele AI-governance-sectie: zichtbaar op basis van AI-systeem-aantal (>0) of expliciete tenant-setting? Voorstel: tenant-setting voorrang; tellen alleen als fallback.
- HITL-default-filter "mijn scope": hoe definiëren we "mijn scope" voor reviewer? Voorstel: HITL-checkpoints aan AI-systemen waarvan
owner_user_id= current user, plus checkpoints zonder eigenaar (algemene pool). Discussiepunt. - NHI-token uitgifte-confirmation: extra confirmation-dialog ("weet u zeker?") vóór genereren? Voorstel: ja, want JWT is moeilijk in te trekken vóór TTL (geen revocation-lijst in V1).
- Audit-trail in UI: tonen we agent-token-uitgifte in
/admin/agent-tokens/audit-tab, of alleen viaai_audit_logs-export? Voorstel: aparte audit-tab voor zichtbaarheid. - Scope-lijst uitbreiding: hoe voegen we later scopes toe zonder UI-redeploy? Voorstel: scope-lijst in
ims_tenant_settings(per tenant of platform-wide). V1: hardcoded; V2: configurable.
- Goedkeuring RFC vóór frontend-routes worden geïmplementeerd
- Per-tenant beslissing: AI-governance-sectie aan/uit (sectie 3.4)
- Mapping HITL-rol naar RBAC: bevestiging dat
discipline_eigenaarvoldoende is, of nieuwe rol nodig - Acceptatie van scope-creep-grens: hardcoded scope-lijst in V1, geen tenant-configurable scopes
docs/ai-governance-uitbreiding.md— oorspronkelijke voorstel-doc voor M4docs/eu-ai-act-classification.md— classifier-regels en criteriaROADMAP.mdSpoor 2 — alle zes M4-bouwstenenbackend/app/api/v1/endpoints/ai_systems.py,ai_hitl.py,auth.py(/agent-token) — bestaande endpoints- EU AI Act art. 14 (menselijk toezicht), art. 16 (technische documentatie), art. 17 (kwaliteitsbeheersysteem)
| Datum | Wijziging | Door |
|---|---|---|
| 2026-05-12 | Initieel concept | open-source projectteam |