Files
VacatureRadar/docs/ai/PROJECT_STATE.md
T

184 lines
11 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.
# Projectstatus
- Laatst bijgewerkt: 2026-07-21
- Repositoryversie: 0.2.1 Stitch Intelligence Cockpit
- Uitvoeringsmodus: autonome backlog
- Eerste uitvoerbare taak: controleer met `python scripts/backlog.py next`
## Werkende basis
De repository bevat een uitvoerbare Django-MVP met:
- profielen, revisies en begrensde feedbackconfiguratie;
- source registry, policy/denylist, veilige fetcher en source runs;
- JSON-LD-, HTML-, RSS/Atom- en e-mailadapters;
- normalisatie, sanitization, werkgeverresolutie, dedupe, aliassen, provenance en versies;
- deterministische features, harde exclusions, scores en optionele uitgeschakelde Ollama-boundary;
- responsive dark/light cockpitdashboard, vacaturelijst/detail, sollicitatiepipeline, profiel-, bron- en systeemschermen;
- feedbackacties, applicationdossiers, lifecycle en dagelijkse digest-outbox;
- Celeryworker/scheduler, healthchecks, Docker/Unraidconfiguratie en back-up-/herstelscripts;
- offline unit-, integratie- en securitytests.
## Laatste geverifieerde baseline
Release-audit op 2026-07-21:
- 146 geslaagde tests en 2 lokaal overgeslagen Playwright-varianten; de HTML/a11y-fallback is geslaagd;
- 81,98% branch-aware codedekking over `apps` en `config`;
- Ruff en Django system checks geslaagd;
- geen ontbrekende migraties;
- backlog- en repositoryvalidatie geslaagd;
- de lockfile gebruikt publieke PyPI-bronnen in plaats van een niet-overdraagbare interne registry;
- releaseblokkers hersteld in template-rendering, JSON/BOM-verwerking, leases, feedback, dossierautorisatie, ATS-provenance, employer-resolutie en DNS-rebindcontrole;
- een echte Dockerimagebuild op de Unraid-server, migratiecontrole en live LAN-smoke voor liveness, readiness, login en static assets zijn geslaagd;
- deploymenthardening voorkomt gelijktijdige migraties door worker/scheduler, schakelt de Gunicorn-controlsocket uit voor de read-only container en houdt de lokale healthcheckhost toegestaan.
VR-118-herverificatie op 2026-07-21:
- 146 geslaagde tests en 2 optioneel overgeslagen pytest-Playwrightvarianten; HTML/a11y-fallback geslaagd;
- 82,00% branch-aware codedekking;
- Ruff, Django system check en migratiecontrole geslaagd;
- taakledger geldig met 36 taken: 28 done, 5 blocked-external, 3 deferred en 0 ready;
- geïntegreerde browservalidatie op zes viewports en beide thema's geslaagd.
## Deploymentstatus
- `main` is via de bestaande Gitea-SSH-sleutel naar `NuklearRabbit/VacatureRadar` gepusht.
- De applicatie draait op de Unraid-server via `http://192.168.10.150:1226/` met PostgreSQL, Redis, web, worker en scheduler.
- De server-side `.env` heeft rechten `0600`; gegenereerde secrets zijn niet naar Git of logs gekopieerd.
- De self-hosted Gitea Actions-runner is niet actief. Deze sessie gebruikte daarom een directe, commitgebonden SSH-deploy; push-to-deploy vereist nog runnerherstel/registratie.
- De huidige uitrol is alleen geschikt voor het beheerde LAN. Publieke productie vereist eerst een gekozen domein, reverse proxy/TLS en `DJANGO_DEBUG=0` met secure cookies.
## Laatste uitgevoerde backlogtaak
- 2026-07-21: `VR-118` voltooid.
- Alle kernroutes delen nu één responsive Intelligence Cockpit-shell met lokale SVG-iconen en CSP-veilige assets.
- Stitch-dark en een volwaardige light variant zijn gekoppeld aan echte Django-data; externe quick apply, nepmetrics en onbewezen intelligence zijn bewust geweerd.
- Browserflow valideerde vacature → sollicitatiedossier → pipeline, bron-disclosures, themawissel en viewports 1440×900, 1280×800, 1024×768, 768×1024, 390×844 en 360×800 zonder horizontale overflow.
- Stitch-bronnen, integratieplan en screenshots staan onder `docs/design/` en zijn uit de productiecontainer gesloten.
- Volgende taak: `VR-201` (`blocked-external`).
- 2026-07-21: `VR-117` voltooid.
- Productiereleasecontrole toegevoegd met `scripts/release_verify.sh`, inclusief smoke, backup/restore-smoke en artifactbundel.
- Changelog, traceability en Unraid-runbook samengekoppeld aan het releasepad.
- Volgende taak: `VR-201` (blocked-external).
- 2026-07-21: `VR-116` voltooid.
- Synthetische testset (`fixtures/benchmark/quality_benchmark.json`) en benchmarkspec (`docs/quality/BENCHMARKS.md`) toegevoegd.
- `tests/benchmark/test_benchmark.py` bevat smokecontrole voor dataset load, helperlogica en rapportschema.
- Geen UI/UITA-aanpassingen uitgevoerd (expliciet buiten scope, extern met Stitch).
- 2026-07-21: `VR-108` voltooid.
- Resolutie naar oorspronkelijke werkgever geïmplementeerd met deterministische matcher voor recruiter/ATS-bronnen.
- Titel, locatie, employer-naam, domein en canonical metadata leveren evidence-rijke beslissingen op; conflicten leiden naar review i.p.v. auto-merge.
- Bij directe resolutie wordt `canonical_url` naar de directe bron gekopieerd terwijl alias/provenance behouden blijft.
- Unittests en integratietest toegevoegd voor resolvergedrag en pipeline-resolutie.
- 2026-07-21: `VR-109` voltooid.
- AI-analyse geïntegreerd als optionele scorecomponent met caching op `content_hash + model + prompt + schema`.
- Uitgebreide JSON-schema validatie, evidencecontrole en foutstatussen met deterministische fallback.
- Golden evaluatieset met validatiescenario's (disabled, valid, malformed, timeout, prompt-injection) toegevoegd in `fixtures/ai/evaluation_set.json`.
- Scoringsmetadata uitgebreid met AI-status, errorcategorie en weging voor uitlegbaarheid.
- 2026-07-21: `VR-110` voltooid.
- Feedbackleren standaard uit met opt-in, per-feature sampledrempel en metadata logging.
- Verbergreasons worden geclassificeerd als niet-learn (titel/afstand/werkvorm) of leerrijp.
- Positieve feedback groeit alleen na minimale herhaling per feature; negatieve feedback past gewichten terug indien leerrijp.
- Offline evaluatiescript toegevoegd: `scripts/feedback_learning_report.py`.
- UI-presentatie/reset weergave staat open voor externe afhandeling (Stitch).
- Volgende taak: `VR-111`.
- 2026-07-21: `VR-111` voltooid.
- Reminder-outbox toegevoegd voor sluitingsdatum, opvolgdatum en uitzonderlijk sterke nieuwe matches.
- Topmatchherinnering is per profiel in- of uit te schakelen en vereist score/confidence/drempel.
- Herinneringen hebben stabiele event keys, respecteren quiet hours en gebruiken profielweekdagen.
- Integratietests toegevoegd voor idempotentie, stille ontvangers, follow-up werkdagen, DST en rustige uren.
- Volgende taak: `VR-112`.
- 2026-07-21: `VR-112` voltooid.
- Bronhealth en observability toegevoegd met rolling metrics, parserdriftdetectie en automatische quarantaine.
- Raw cleanup bewaart gequarantaineerde documenten en kanaryherstel verloopt via trialpad.
- Dagelijkse taken gepland voor source-health evaluatie, canaryherstel en geautomatiseerde raw cleanup.
- Integratietests toegevoegd voor tijdelijke fouten, policyfouten, parserdrift, canaryherstel en raw cleanup.
- Volgende taak: `VR-113`.
- 2026-07-21: `VR-113` voltooid.
- Sollicitatiedossiers bevriezen nu een gesanitiseerde snapshot met bronlinks, status/contact/notities en timeline-events.
- Export bevat dossier JSON, timeline CSV en printbare HTML zonder externe assets.
- Dossierexport en dossierverwijdering zijn gebruiker-scoped en idempotent.
- Integratietests toegevoegd voor snapshot, export, print, timeline en cross-user-afscherming.
- Volgende taak: `VR-114`.
- 2026-07-21: `VR-114` voltooid.
- Browser-e2e toegevoegd voor login, dashboard, lijst/detailfilter, profielbewerkingen,
vier feedbackacties, sollicitatiedossierbewerking en handmatige tekstimport.
- Accessibilitycontrole toegevoegd met Playwrightpad (desktop + 360px viewport) en fallback HTML-a11yprobe
wanneer browser niet beschikbaar is.
- Screenshots worden vastgelegd bij falen binnen e2e-run.
- Volgende taak: `VR-115`.
- 2026-07-21: `VR-115` voltooid.
- Productie-hardening toegevoegd met non-root/read-only containerinstellingen, CI-secret- en kwetsbaarheidsscans,
production settings validatie, DNS-rebindcontrole in fetcher en rate limiting op login/manual import.
- Nieuwe tests toegevoegd voor `settings`-validatie, rate limiteren, login-manual-import blokkades
en DNS-rebinddetectie.
- Geen UI-wijzigingen toegevoegd (manueel afhandelen bevestigd).
- Volgende taak: `VR-116`.
- 2026-07-21: `VR-107` voltooid.
- Handmatige URL- en tekstimport toegevoegd met CSRF-beveiligde POST-flow en GET-prefill.
- URL-import hergebruikt bestaande policy/SSRF-checks en fetchpad; paste-import gebruikt een lokale synthetische HTML-payload zonder extern fetch.
- Bronlijst bevat bookmarklet, resultaatpanel met created/duplicate/warnings en links naar vacaturedetail.
- Unit- en integrationtests toegevoegd voor URL-flow, paste-flow, denylist en paste-limiet.
- 2026-07-21: `VR-105` voltooid.
- Haversine-afstand berekent nu op basis van geocoderingscoördinaten met confidencegedrag voor exacte afstand.
- Reistijdschatting toegevoegd als expliciete, conservatieve offline-schatting en gelabeld als inferentie.
- Harde afstandsuitsluiting blijft strikt, met optionele harde reistijdbeperking via `hard_rules["max_commute_minutes"]`.
- Bij geocodecache-import worden getroffen actieve vacatures opnieuw gescoord.
- Score-evidence verrijkt met afstands- en reistijdmetadata.
- 2026-07-21: `VR-103` voltooid.
- Geïmplementeerd: databaseleaseclaim (`SourceLease` + `SourceOriginState`) voor concurrency- en crash-veiligheid.
- Per-origin intervalcoördinatie, backoff inclusief 429/Retry-After en jitter op successen.
- Fetcher stuurt expliciete foutcategorieën voor 429, timeout en andere netwerkfouten.
- 2026-07-21: `VR-101` voltooid.
- Inrichting van bronontdekking vanuit HTML/sitemap/feed/e-mail, inclusief JSON-LD en feedlinkdetectie.
- Persistente kandidaatservice met provenance in `Source.metadata["discovery"]` en idempotent gedrag.
- Bulk-safe kandidaatacties `approve_to_trial` en `dismiss` in bronlijst-UI.
- Management command `discover_sources`.
- Fixtures toegevoegd voor HTML, sitemap index/urlset, feed en e-mail.
Een toekomstige agent moet altijd de actuele waarheid opnieuw bepalen met:
```bash
./scripts/codex_verify.sh
```
## Nog te bouwen
Momenteel staan er geen `ready` taken meer over; de volgende te behandelen item is `VR-201` als `blocked-external` (bronreview).
## Externe blokkades
Deze blokkeren onafhankelijke code niet:
- concrete werkgevers-/bronnenkeuze en actuele menselijke bronreview;
- live IMAP/SMTP-account en app-password;
- Unraid-domein, DNS, TLS en reverse proxy;
- containerregistry en credentials;
- actieve/voor deze repository geregistreerde Gitea Actions-runner;
- keuze/verkrijging van een gelicenseerde actuele Belgische postcode-/gemeentedataset.
## Bekende verificatiebeperking van de aangeleverde basis
De Pythonapplicatie, Dockerimage en PostgreSQL/Redis/Unraid-stack zijn geverifieerd. De optionele pytest-Playwrightvarianten vallen lokaal terug op de HTML/a11y-probe; VR-118 is aanvullend handmatig met de geïntegreerde browser op zes viewports uitgevoerd. Een publieke HTTPS-smoke blijft afhankelijk van domein-, DNS- en reverse-proxyconfiguratie.
## Hervatten
```bash
./scripts/codex_verify.sh
python scripts/backlog.py next
```
Werk daarna exact volgens `docs/ai/AUTONOMOUS_EXECUTION_PROTOCOL.md`.