3.9 KiB
3.9 KiB
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.mdis bijgewerkt voor nieuwe trust boundaries of mitigaties.
4. Datamodel en migraties
makemigrations --check --dry-runis 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.mdnoemt 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:
./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.