# Definition of Done Een backlogtaak is alleen `done` wanneer alle toepasselijke punten hieronder zijn voldaan. “Code geschreven” of “werkt op mijn machine” is geen afronding. ## 1. Gedrag - De taak voldoet aantoonbaar aan ieder acceptatiecriterium uit `docs/ai/BACKLOG.yaml`. - Succes-, lege-input-, fout- en herhaalpad zijn bewust ontworpen. - Imports, schedulertaken en notificaties zijn idempotent waar at-least-once uitvoering mogelijk is. - De wijziging respecteert de product-nongoals: geen platformloginbot, blokkadeomzeiling of automatische sollicitatie. - Ontbrekende externe services hebben een bruikbare fallback of duidelijke gedegradeerde toestand. ## 2. Architectuur - Bedrijfslogica staat in een domeinservice; views/tasks blijven dun. - Adapters schrijven niet naar de database. - Modellen en querysets blijven user-scoped waar persoonsgegevens of gebruikersacties betrokken zijn. - Een nieuwe dependency heeft een concrete noodzaak, vaste versie, lockfilewijziging en operationele impactdocumentatie. - Een architectuurwijziging die een accepted ADR tegenspreekt krijgt eerst een nieuwe ADR. ## 3. Beveiliging en privacy - Externe data wordt als onbetrouwbaar behandeld, gesanitized en niet als instructie uitgevoerd. - Netwerktoegang passeert policy- en SSRF-controle op iedere redirect. - Geen secret, echt persoonlijk gegeven, volledige mailboxpayload of gevoelige header staat in code, fixture, testoutput of log. - Autorisatie, CSRF en objectscoping zijn getest voor muterende webflows. - Retentie, verwijdering en back-upimpact zijn beoordeeld bij nieuwe opgeslagen data. - `docs/quality/THREAT_MODEL.md` is bijgewerkt voor nieuwe trust boundaries of mitigaties. ## 4. Datamodel en migraties - `makemigrations --check --dry-run` is schoon. - Nieuwe migraties zijn handmatig beoordeeld en hebben een herstel-/rollbackstrategie. - Datamigraties zijn begrensd, herstartbaar of transactioneel waar passend. - Indexen en queryvormen zijn beoordeeld voor de verwachte schaal. - Historiek/provenance blijft behouden bij normalisatie- of dedupewijzigingen. ## 5. Tests - Unit-tests dekken pure regels en randgevallen. - Integratietests dekken database-, pipeline- en idempotentiegedrag. - Securitytests dekken negatieve inputs voor securitykritieke wijzigingen. - Externe formaten hebben gesaneerde fixtures; standaardtests doen geen internetcall. - Bugs krijgen een regressietest die vóór de fix faalt. - Totale branch-aware dekking blijft minstens 70%; securitykritieke services streven naar 90%+ relevante paden. ## 6. UX en toegankelijkheid - UI-copy is begrijpelijk Nederlands en maakt feit/inferentie/onbekend onderscheid. - Kernflow werkt met toetsenbord, zichtbare focus en zonder JavaScript. - Labels, foutmeldingen, headingstructuur en statusmeldingen zijn semantisch correct. - Layout blijft bruikbaar op 360 px breedte en gangbare desktopbreedte. - Reduced motion, contrast en niet-kleurgebonden statussignalen zijn behouden. ## 7. Documentatie en traceability - Publieke/internal contracts, runbooks en configuratievoorbeelden zijn bijgewerkt. - Requirement- en acceptatie-ID's zijn gekoppeld in `TRACEABILITY_MATRIX.md`. - Backlogtaak bevat een korte resultaatnotitie en exacte verificatie. - `PROJECT_STATE.md` noemt de afgeronde taak, impact, gate-uitkomst en volgende taak. - Geen document claimt functionaliteit die alleen gepland is. ## 8. Verificatie De volledige gate slaagt vanaf de repositoryroot: ```bash ./scripts/codex_verify.sh ``` Daarbij slagen minimaal: - Ruff; - Django system check; - migratiecheck; - volledige testset met dekkingsdrempel; - backlogvalidatie; - documentlink-/configuratievalidatie voor zover in het script opgenomen. ## 9. Extern geblokkeerd Een taak wordt niet `done` wanneer live verificatie noodzakelijk maar onmogelijk is. Het externe restpunt mag `blocked-external` worden nadat interface, mocks, tests, foutafhandeling, configuratie en een exact uitvoerchecklistje zijn afgemaakt. Onafhankelijke taken gaan daarna door.