Versie 71abaa3
Triage-programma: leerlus (few‑shot opt‑in), replay/gouden set, run‑historie, compacter triage‑scherm en dashboard‑inzichten; 26 fixes
- Leerlus als opt‑in per loket: few‑shot voorbeelden uit recente correcties (met NAW‑stripping), transparant in de output en met beheersbare kosten. - Objectieve meting: gouden set + replay‑scorekaart per prompt/config; dashboard met agreement‑trends, top‑verwarringen en recente afwijkingen; export JSONL/CSV (admin‑only). - Run‑historie: elke AI‑triage‑run bewaard met runId, promptVersion en configHash; correcties gelinkt aan de uitlokkende run. - Compacter triage‑scherm met herkomst‑indicator (regels/model/beide) en samengevatte FunderMaps‑payload; waarschuwingen klappen nooit in. - 26 fixes: o.a. export‑limit, golden‑set lees/schrijf, leave‑one‑out, StageCard‑gedrag, UI‑teksten, reply‑skip, en toegangscontrole. - Efficiëntie: fors minder DB‑/JSON‑loads bij few‑shot/golden set/replay; lichtere API‑responses. - Navigatie: nieuwe /admin/triage‑hub met redirects; oude /admin/incidents verwijderd (redirect naar /admin/loketten).
Leerlus en evaluatie
- Few‑shot per loket (AiTriageConfig.fewShot { enabled, maxExamples 1‑20 }, default UIT): gebruikt alleen recente outcome=edited‑correcties binnen hetzelfde loket, gededupliceerd per verwarringspaar; NAW wordt gestript; voorbeelden zichtbaar in result.fewShotExamples; meetbare token‑kosten alleen bij ingeschakelde loketten.
- Gouden set: expliciete cases met bekend menselijk eindoordeel, opgebouwd uit correctielog + bestaande overrides; idempotent (cases bijgewerkt, niet verwijderd).
- Replay API (POST/GET /api/admin/feedback-triage/replay, admin‑only): draait zonder persist (geen statuswijzigingen), met limiet (default 25, max 250); scorekaart met accuracy per soort, top‑verwarringen, confidence‑kalibratie en documenttype‑accuracy; resultaten in TriageReplayRun met promptVersion + configHash.
- Dashboard (/admin/triage/dashboard): agreement per week (8 weken), top‑verwarringen (AI → mens), recente afwijkingen (doorklikbaar), en afstand tot promotiedrempel; kanttekening dat reply‑meting pas sinds #1684 betrouwbaar is.
- Export leerdata (GET /api/admin/triage/export, admin‑only): JSONL (default) of CSV met AI‑voorstel, menselijke keuze, confidence, promptVersion, configHash en model; variant‑scoped; PII‑beleid: geen NAW/bijlagen; teksten alleen met ?includeTexts=1.
Run‑historie en logging
- Nieuwe TriageRun (append‑only): per échte run o.a. runId, submission/variant/organisatie, modellen, promptVersion, configHash, categorie/confidence, rulesDecisive/llmInvoked, tokens en duur; geen PII; defensief bij DB‑issues.
- TriageActionLog uitgebreid: classify.category en classify.documentType leggen AI‑voorstel vs. menselijke keuze vast (incl. attachment‑sleutel en previousWasManual); verzonden reacties loggen voorstel én verstuurde tekst; elke correctie gelinkt aan de uitlokkende runId.
UI/UX triage
- StageCards compact: kop + samenvatting blijven zichtbaar; stappen standaard dicht behalve bij degraded/error; Execute blijft open; per gebruiker/stap onthouden; waarschuwing wint altijd van een opgeslagen ‘dicht’.
- Kopblok: toont soort + herkomst (regels/model/beide of ‘handmatig’), model‑zekerheid en FunderMaps‑status.
- Rustige herkomst‑pill bij elk classificatielabel met tooltip.
- FunderMaps: samenvatting van fundermapsDraft direct zichtbaar; waarschuwing bij gewijzigde stroom; bewerkvelden eronder; volledige payload achter uitklap.
- Replay‑paneel: laadfouten zichtbaar; confidence leegmaken behoudt vorige waarde; verwarringsnotatie eenduidig ‘AI → mens’; TriageTabs toegevoegd op hub‑pagina’s.
Correctheid en betrouwbaarheid
- Export zonder ?limit gaf 1 rij: alleen een aanwezige positieve limit telt nu.
- Golden set: schrijver zet attachmentRef; lezer valt terug op proposed.attachmentRef en daarna op index; accepted‑rijen tellen mee (laatste menselijke oordeel wint); few‑shot slaat cases met recente accepted over.
- Replay/few‑shot: leave‑one‑out — eigen correctie van een case komt niet in de prompt; live hertriage echoot niet.
- StageCard opent alsnog bij degradatie na mount (in‑page hertriage).
- Uitgevinkte reply in LLM‑modus telt als skipped wanneer er een concept lag.
Efficiëntie en API‑omvang
- Few‑shot: gepagineerde log‑lezing + goedkope membership‑check; alleen ≤maxExamples computed geladen (i.p.v. ~200 JSON’s per run).
- Golden set: raw query haalt alleen override‑strings op; batch‑writes (createMany + gerichte updates).
- Dashboard‑leerlus: gescheiden queries; alleen menselijke beslissingen tellen; auto‑uitgevoerde systeemrijen tellen niet meer mee.
- Replay‑GET: levert enkel de scorekaart (geen per‑case‑outcomes).
- ±25 dode exports uit LokettenAdminPanel verwijderd.
Toegang en veiligheid
- Export‑ en replay‑routes hangen nu aan requireAdminAccess; exportlinks en replay‑paneel verborgen voor superuser; API’s weigeren superuser‑rol expliciet.
Navigatie en beheer (intern, met zichtbaar effect)
- Acht admin‑triagepagina’s samengebracht onder /admin/triage‑hub (clusters Werk, Inzicht, Configuratie); /admin/triage redirect naar werklijst; per‑pagina‑guards behouden; oude URL’s redirecten met query‑params intact; admin‑shortcut ‘Triage’ bijgewerkt.
- Oude beheerpagina /admin/incidents verwijderd; redirect naar /admin/loketten met query‑passthrough; niet‑gebruikte risicovolle admin‑routes verwijderd.