92 lines
7.7 KiB
Markdown
92 lines
7.7 KiB
Markdown
# Traceabilitymatrix
|
||
|
||
Legenda: **I** = geïmplementeerd en getest in de huidige MVP; **P** = gedeeltelijk/volgende backlogtaak; **E** = alleen externe productieconfiguratie of bronreview ontbreekt. Bestandsnamen verwijzen naar de primaire implementatie; aanvullende tests kunnen in dezelfde testdirectory staan.
|
||
|
||
## Functionele requirements
|
||
|
||
| ID | Status | Primaire implementatie | Bewijs/tests | Vervolgtaak |
|
||
|---|---|---|---|---|
|
||
| PR-001 | I | `profiles/models.py`, forms/views | `test_profiles.py`, `test_views.py` | — |
|
||
| PR-002 | I | `SearchProfile`, defaults/form, geocodeparser | `tests/unit/test_geocoding.py`, `tests/integration/test_import_geodata.py`, profiel- en viewtests | VR-105 verfijnt afstand |
|
||
| PR-003 | I | `ProfileRevision`, profile services | `test_profiles.py` | — |
|
||
| PR-004 | I | begrensde feedbackservice/velden | `tests/unit/test_feedback_learning.py`, `test_profiles.py` | VR-110 uitgevoerd |
|
||
| PR-005 | I | `bootstrap_instance`, defaults | task/viewtests | — |
|
||
| PR-010 | I | `sources/models.py` | `test_source_models.py` | VR-112 breidt health uit |
|
||
| PR-011 | I | policy + fetch task | policy/fetch/tasktests | — |
|
||
| PR-012 | I | denylist, e-mailadapter | policy/e-mailtests | — |
|
||
| PR-013 | I | `url_security.py`, redirectfetcher | security URL/fetchtests | VR-115 transporthardening |
|
||
| PR-014 | I | `fetcher.py` | `test_fetcher.py` | — |
|
||
| PR-015 | I | `SourceLease`, `SourceOriginState`, `apps/sources/services/scheduling.py`, `apps/sources/tasks.py` | `test_scheduling.py`, `test_fetcher.py`, `test_tasks_and_more_views.py` | `VR-103` afgerond |
|
||
| PR-016 | I | `email_import.py`, recordmodel | e-mailintegratietests | — |
|
||
| PR-017 | I | candidate/status + basisdiscovery | `apps/sources/services/discovery.py`, `tests/unit/test_discovery_rss.py`, `tests/integration/test_discovery_command.py`, `tests/integration/test_tasks_and_more_views.py` | VR-101/102 |
|
||
| PR-018 | I | `apps/sources/services/health.py`, `apps/sources/tasks.py` | `tests/integration/test_source_health.py` | VR-112 |
|
||
| PR-020 | I | `JsonLdJobPostingAdapter` | JSON-LD-tests/fixtures | — |
|
||
| PR-021 | I | HTML/RSS/e-mailadapters + apps/sources/adapters/ats.py + tests/unit/test_ats_adapters.py | adaptertests + tests/unit/test_ats_adapters.py | VR-106 afgerond |
|
||
| PR-022 | I | `adapters/base.py` | contract via alle adaptertests | — |
|
||
| PR-023 | I | `sanitize.py` | security sanitizationtests | — |
|
||
| PR-024 | I | `ExtractedJob`, `CanonicalJobDraft`, models | pipeline/normalisatietests | — |
|
||
| PR-025 | I | `JobVersion` in pipeline | dedupe/lifecycle-integratietest | — |
|
||
| PR-026 | I | `RawDocument`, `apps/sources/tasks.py`, `config/settings.py` | `tests/integration/test_source_health.py` | VR-112/115 operationaliseert |
|
||
| PR-027 | I | `FieldProvenance` | pipeline-integratietests | — |
|
||
| PR-030 | I | `dedupe.py` | dedupetests | — |
|
||
| PR-031 | I | conservatieve fuzzy dedupe | `tests/unit/test_dedupe_lifecycle_feedback.py`, `scripts/benchmark.py`, `tests/benchmark/test_benchmark.py` | VR-116 benchmark |
|
||
| PR-032 | I | direct-sourcepreferentie/alias | pipeline- en dedupetests | VR-108 resolver |
|
||
| PR-033 | I | canonical constraints/transacties | replaytests | — |
|
||
| PR-040 | I | features/scoring | scoringtests | — |
|
||
| PR-041 | I | scorecomponenten | `tests/unit/test_features_distance.py`, `tests/unit/test_scoring.py` | VR-105 afgerond |
|
||
| PR-042 | I | unknown/confidencegedrag | `tests/unit/test_features_distance.py`, `tests/unit/test_scoring.py` | VR-105 |
|
||
| PR-043 | I | `ScoreRun` | pipeline/scoringtests | — |
|
||
| PR-044 | I | profiel/modelversievelden | scoring/profiletests | VR-109 promptversie |
|
||
| PR-045 | I | optionele Ollamaservice/fallback | `test_ai.py` | VR-109 |
|
||
| PR-046 | I | geen tools + guardrails | AI/securitytests | VR-109/115 evaluaties |
|
||
| PR-050 | I | dashboard view/template | viewtests | VR-114 e2e/a11y |
|
||
| PR-051 | I | detailview/template/provenance | viewtests | VR-114 |
|
||
| PR-052 | I | feedbackendpoint/UI | feedback/viewtests | — |
|
||
| PR-053 | I | applicationmodel/serviceflow | `tests/integration/test_dedupe_lifecycle_feedback.py`, `tests/integration/test_applications.py` | VR-113 uitgebreid dossier |
|
||
| PR-054 | I | `notifications/models.py`, outbox/services/tasks | `tests/integration/test_email_import_notifications.py`, `tests/integration/test_reminders.py` | VR-111 |
|
||
| PR-055 | I | lifecycle service/task | lifecycletests | — |
|
||
| PR-056 | I | expliciete non-goal; geen submitcontract | AC-043 code review, ADR-0006 | — |
|
||
| PR-060 | I | health views/service | view/healthtests | — |
|
||
| PR-061 | I | `apps/sources/services/health.py`, `apps/sources/tasks.py` | `tests/integration/test_source_health.py` | VR-112 dashboard/metrics |
|
||
| PR-062 | I | `scripts/release_verify.sh`, `scripts/release_smoke.py`, `docker-compose*.yml` | `release-verificatie-smoke`, `configdiff` en upgrade/rollbackartefacten | VR-117 afgerond |
|
||
| PR-063 | I | AI standaard uit/fallback | volledige testset zonder Ollama | — |
|
||
| PR-064 | I | settings/env-example/gitignore | configreview en CI | VR-115 secretscan |
|
||
|
||
## Niet-functionele requirements
|
||
|
||
| ID | Status | Bewijs | Vervolgtaak |
|
||
|---|---|---|---|
|
||
| NFR-001 | I | policy-, URL- en fetchersecuritytests + settings/rate-limit tests | `tests/unit/test_fetcher.py`, `tests/unit/test_rate_limit.py`, `tests/unit/test_settings_security.py`, `tests/integration/test_views.py`, `tests/integration/test_sources_manual_import.py` |
|
||
| NFR-002 | P | raw-retentie, minimale modellen, privacyrunbooks | VR-113/115 |
|
||
| NFR-003 | I/P | replay-, mail- en outboxtests; per-bronfouten | VR-103/112 |
|
||
| NFR-004 | I | ScoreRun, provenance, UI-copy | VR-109 uitgebreid evidence |
|
||
| NFR-005 | I | domeinapps/services/adapters/ADRs | continue review |
|
||
| NFR-006 | I | offline pytest + coveragegate | VR-114 verbreedt e2e |
|
||
| NFR-007 | P | `scripts/benchmark.py`, `tests/benchmark/test_benchmark.py` | VR-116 |
|
||
| NFR-008 | I | semantische templates/designspec | `tests/e2e/test_vr114_browser_and_accessibility.py` |
|
||
| NFR-009 | I | lokale SQLite en Docker/Unraidconfig, release-smoke en restore | VR-117 afgerond |
|
||
| NFR-010 | I | `apps/sources/services/health.py`, `apps/sources/tasks.py`, `apps/core/views.py`, `config/settings.py` | `tests/integration/test_source_health.py` | VR-112 observability |
|
||
|
||
## Systeemacceptatie
|
||
|
||
| Criteria | Status | Primair bewijs |
|
||
|---|---|---|
|
||
| AC-001–004 | I | bootstrap, auth/UI, e-mailingress zonder platformlogin |
|
||
| AC-010–015 | I | integration/security/adaptertests |
|
||
| AC-020–025 | I | normalisatie-, dedupe-, scoring- en AI-fallbacktests |
|
||
| AC-030–034 | I | notificatie- en lifecycletests |
|
||
| AC-040–043 | I | application/feedback/user-scopingtests en ADR-0006 |
|
||
| AC-050–054 | I | health/viewtests, verify-script, offline fixtures, coverage en ledger-validator |
|
||
| AC-055 | I | `scripts/release_verify.sh` met release-smoke en restore-compare | VR-117 afgerond |
|
||
|
||
## Onderhoudsregel
|
||
|
||
Iedere backlogtaak die een requirement wijzigt, werkt in dezelfde commit deze matrix, relevante acceptatiecriteria en tests bij. Een status wordt alleen naar **I** gezet wanneer de code én het genoemde bewijs bestaan.
|
||
|
||
## Aanvullende traceability-opmerking
|
||
- VR-102 is gerealiseerd met auditbare policyreviews (`SourcePolicyReview`), robotscache met TTL/size/SSRF-controles en fail-closed policy-gating op verlopen of conflicterende reviews.
|
||
- VR-107 is gerealiseerd met `apps/sources/views.py`, `apps/sources/services/manual_import.py`, `templates/sources/list.html`, `static/js/manual_import.js` en bijhorende unit/integration-tests.
|
||
- VR-115 is afgerond met productie-hardening voor `config/settings.py`, DNS-rebindmitigatie in `apps/sources/services/fetcher.py`, rate limiting op login en handmatige import, CI-secret- en kwetsbaarheidsscans, non-root/read-only containerhardening en bijbehorende security/unit/integration-tests.
|
||
|
||
|