Files
VacatureRadar/docs/quality/TRACEABILITY_MATRIX.md
T

93 lines
8.1 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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 + Stitch-cockpitshell | viewtests, VR-118 browsermatrix | VR-114/118 e2e/a11y |
| PR-051 | I | detailview/template/provenance + intelligence-layout | viewtests, VR-118 screenshots | VR-114/118 |
| 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, zes viewports, dark/light en toetsenbordmenu | `tests/e2e/test_vr114_browser_and_accessibility.py`, `docs/design/validation/`, VR-118 |
| 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-001004 | I | bootstrap, auth/UI, e-mailingress zonder platformlogin |
| AC-010015 | I | integration/security/adaptertests |
| AC-020025 | I | normalisatie-, dedupe-, scoring- en AI-fallbacktests |
| AC-030034 | I | notificatie- en lifecycletests |
| AC-040043 | I | application/feedback/user-scopingtests en ADR-0006 |
| AC-050054 | 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.
- VR-118 vertaalt de aangeleverde Stitch Intelligence Cockpit naar de bestaande server-rendered routes. Bewijs staat in `docs/design/STITCH_INTEGRATION_PLAN.md`, `docs/design/validation/`, de view/a11ytests en de gedeelde lokale shell/assets.