Files
VacatureRadar/docs/quality/DEFINITION_OF_DONE.md
Jens b8091e59bd
deploy / deploy (push) Canceled after 0s
Initial deploy setup
2026-07-21 14:00:00 +02:00

83 lines
3.9 KiB
Markdown

# 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.