337 lines
26 KiB
Markdown
337 lines
26 KiB
Markdown
# Projectstatus
|
||
|
||
- Laatst bijgewerkt: 2026-07-22
|
||
- Repositoryversie: 0.2.10 Kempen-werkgeversradar en GeoNames
|
||
- 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.
|
||
|
||
VR-119-herverificatie op 2026-07-21:
|
||
|
||
- 146 geslaagde tests en 2 optioneel overgeslagen pytest-Playwrightvarianten; uitgebreide HTML/a11y-fallback geslaagd;
|
||
- 82,02% branch-aware codedekking;
|
||
- Ruff, Django system check, migratiecontrole, taakledger en repositoryvalidatie geslaagd;
|
||
- geïntegreerde browsercontrole op alle kernroutes, zes doelviewports, dark/light en mobiele drawer geslaagd zonder pagina-overflow of consolefouten;
|
||
- taakledger geldig met 37 taken: 29 done, 5 blocked-external, 3 deferred en 0 ready.
|
||
|
||
VR-120-herverificatie op 2026-07-21:
|
||
|
||
- 155 geslaagde tests en 2 optioneel overgeslagen pytest-Playwrightvarianten; HTML/a11y-fallback en in-app-browsercontrole geslaagd;
|
||
- 82,94% branch-aware codedekking;
|
||
- Ruff, Django system check, migratiecontrole, taakledger en repositoryvalidatie geslaagd via de volledige `scripts/codex_verify.sh`-gate;
|
||
- VITO leverde 37 vacatures in twee geslaagde cycli; Deliverect leverde 26 vacatures en verwerkte de tweede cyclus correct als HTTP 304;
|
||
- taakledger geldig met 38 taken: 30 done, 5 blocked-external, 3 deferred en 0 ready.
|
||
|
||
VR-121-herverificatie op 2026-07-22:
|
||
|
||
- 159 geslaagde tests en 2 optioneel overgeslagen pytest-Playwrightvarianten; HTML/a11y-fallback geslaagd;
|
||
- 82,91% branch-aware codedekking;
|
||
- Ruff, Django system check, migratiecontrole en repositoryvalidatie geslaagd via `scripts/codex_verify.sh`;
|
||
- acht nieuwe bronnen passeerden elk twee livecycli zonder parserwarnings; de lokale inventaris telt 10 actieve bronnen en 145 actieve vacatures;
|
||
- in-app-browsercontrole bevestigde 10 bronkaarten, de VDAB/Indeed-alertingress, geen horizontale overflow en geen consolefouten;
|
||
- taakledger bevat 39 taken; na afronding van VR-121 blijven alleen 5 `blocked-external` en 3 `deferred` taken over.
|
||
|
||
VR-122-herverificatie op 2026-07-22:
|
||
|
||
- 164 geslaagde tests en 2 optioneel overgeslagen pytest-Playwrightvarianten; HTML/a11y-fallback geslaagd;
|
||
- 83,55% branch-aware codedekking;
|
||
- Ruff, Django system check, migratiecontrole, taakledger en repositoryvalidatie geslaagd via `scripts/codex_verify.sh`;
|
||
- de dagelijkse mailboxingang is configureerbaar, idempotent en begrensd; VDAB-mails krijgen expliciete provenance zonder platformlinks automatisch te volgen;
|
||
- Codex-browsercontrole bevestigde de VDAB-/API-uitleg, desktop en 390 px zonder horizontale overflow en zonder consolefouten;
|
||
- taakledger bevat 40 taken; na afronding van VR-122 blijven alleen 5 `blocked-external` en 3 `deferred` taken over.
|
||
|
||
VR-123-herverificatie op 2026-07-22:
|
||
|
||
- 178 geslaagde tests en 2 optioneel overgeslagen pytest-Playwrightvarianten; HTML/a11y-fallback geslaagd;
|
||
- 83,56% branch-aware codedekking;
|
||
- Ruff, Django system check, migratiecontrole, taakledger en repositoryvalidatie geslaagd via `scripts/codex_verify.sh`;
|
||
- VDAB en Indeed hebben afzonderlijke gebruikersgescopeerde mailboxkoppelingen met eigen provider, account, app-wachtwoord en interval van 5 tot 360 minuten;
|
||
- app-wachtwoorden zijn versleuteld met roteerbare MultiFernet-sleutels; schedulerleases, per-mailbox-idempotentie, SSRF-validatie en foutisolatie zijn regressiegedekt;
|
||
- Codex-browsercontrole bevestigde de platformmailboxformulieren, desktop en 390 px zonder horizontale overflow en zonder consolefouten;
|
||
- taakledger bevat 41 taken; na afronding van VR-123 blijven alleen 5 `blocked-external` en 3 `deferred` taken over.
|
||
|
||
VR-124-herverificatie op 2026-07-22:
|
||
|
||
- 192 geslaagde tests en 2 optioneel overgeslagen pytest-Playwrightvarianten; HTML/a11y-fallback geslaagd;
|
||
- 83,61% branch-aware codedekking;
|
||
- Ruff, Django system check, migratiecontrole, taakledger en repositoryvalidatie geslaagd via `scripts/codex_verify.sh`;
|
||
- platformmailboxen ondersteunen naast VDAB en Indeed ook LinkedIn, ictjob.be, Jobat, StepStone, EuroBrussels en BrusselsJobs met afzonderlijke accounts, intervallen en status;
|
||
- zes gesaneerde jobboardfixtures bewijzen platformprovenance en de afwijzing van externe, HTTP-, tracking-, account-, help-, privacy- en uitschrijflinks;
|
||
- alle acht jobboardgroepen staan op de directe-fetchdenylist; platformlogin en scraping blijven uitgesloten;
|
||
- Codex-browsercontrole bevestigde acht keuzelijstopties en alertkaarten, desktop en 390 px zonder horizontale overflow en zonder consolefouten;
|
||
- taakledger bevat 42 taken; na afronding van VR-124 blijven alleen 5 `blocked-external` en 3 `deferred` taken over.
|
||
|
||
VR-125-herverificatie op 2026-07-22:
|
||
|
||
- 200 geslaagde tests en 2 optioneel overgeslagen pytest-Playwrightvarianten; HTML/a11y-fallback geslaagd;
|
||
- 83,90% branch-aware codedekking;
|
||
- Ruff, Django system check, migratiecontrole, taakledger en repositoryvalidatie geslaagd via `scripts/codex_verify.sh`;
|
||
- EuroBrussels en BrusselsJobs zijn uit de configureerbare mailboxcatalogus verwijderd; Careerjet, Randstad en Robert Half gebruiken dezelfde versleutelde platformmailboxflow;
|
||
- Deliverect, YPTO, adesso, Monizze, Qover, SFEIR en ARHS zijn buiten de regionale scope uitgeschakeld en verborgen zonder vacaturehistoriek of provenance te wissen;
|
||
- ACA Group, Xplore Group, UHasselt, PXL en ZOL passeerden ieder twee livecycli zonder parserwarnings; de acht zichtbare actieve bronnen bevatten 162 vacature-aliassen;
|
||
- Codex-browsercontrole bevestigde exact acht regionale bronkaarten, negen platformkeuzes, geen Brusselse kaarten, desktop en 390 px zonder horizontale overflow en zonder consolefouten;
|
||
- taakledger bevat 43 taken; na afronding van VR-125 blijven alleen 5 `blocked-external` en 3 `deferred` taken over.
|
||
|
||
VR-126-herverificatie op 2026-07-22:
|
||
|
||
- 206 geslaagde tests en 2 optioneel overgeslagen pytest-Playwrightvarianten; HTML/a11y-fallback geslaagd;
|
||
- 84,12% branch-aware codedekking;
|
||
- Ruff, Django system check, migratiecontrole, taakledger en repositoryvalidatie geslaagd via `scripts/codex_verify.sh`;
|
||
- het actieve profiel bewaart postcode 2400 en 40 km; ontbrekende gelicenseerde coördinatendata blijft zichtbaar en wordt niet geschat;
|
||
- SCK CEN, Cipal Schaubroeck, VanRoey, NTX en Thomas More passeerden twee livecycli zonder parserwarnings; de dertien actieve bronnen bevatten 210 vacature-aliassen;
|
||
- Codex-browsercontrole bevestigde 13 bronkaarten, de Mol/40-km-status, desktop en 360 px zonder horizontale overflow en zonder consolefouten;
|
||
- taakledger bevat 44 taken; na afronding van VR-126 blijven alleen 5 `blocked-external` en 3 `deferred` taken over.
|
||
|
||
VR-201/VR-205-herverificatie op 2026-07-22:
|
||
|
||
- 216 geslaagde tests en 2 optioneel overgeslagen pytest-Playwrightvarianten; HTML/a11y-fallback geslaagd;
|
||
- 84,42% branch-aware codedekking;
|
||
- Ruff, Django system check, migratiecontrole, taakledger en repositoryvalidatie geslaagd via `scripts/codex_verify.sh`;
|
||
- GeoNames België 2026-04-03 is onder CC BY 4.0 met checksums gedocumenteerd, 2.781 unieke invoerrijen zijn gevalideerd en 2400 Mol is opgelost naar het benaderende postcodecentrum 51.1919, 5.1166;
|
||
- Gemeente Mol en zeven bijkomende Kempen-werkgevers passeerden elk twee livecycli zonder parserwarnings; samen leverden zij 53 kaarten per cyclus;
|
||
- twaalf regionale werkgevers staan afzonderlijk als niet-scanbare waaklijst in de UI, ook wanneer zij momenteel geen vacature hebben;
|
||
- Codex-browsercontrole bevestigde 21 actieve bronnen, 12 waaklijstkaarten, de GeoNames-status, één `h1`, geen horizontale overflow op desktop of 390 px en geen consolefouten;
|
||
- de Unraid-deploy gebruikt expliciet Celery-queue `default`, overeenkomstig de queues die de productie-worker consumeert;
|
||
- taakledger bevat 44 taken: 38 `done`, 3 `blocked-external`, 3 `deferred` en 0 `ready`.
|
||
|
||
## 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-22: `VR-201` en `VR-205` voltooid.
|
||
- De officiële GeoNames-postcodedataset lost postcode 2400 op naar Mol en levert indicatieve postcodecentrumafstanden; licentie, versie, reviewdatum en twee SHA-256-checksums zijn vastgelegd.
|
||
- Gemeente Mol, Ziekenhuis Geel, lokaal bestuur Geel, Stad Turnhout, Group Renotec, Ravago, Sanofi Geel en DAF Trucks Westerlo zijn na fixtures, negatieve routechecks en twee livecycli actief.
|
||
- Johnson & Johnson Beerse, Nike Laakdal, AZ Turnhout, Cartamundi, Nyrstar, Aurubis, Estée Lauder, Soudal, H.Essers, Cegeka, IOK en Jessa staan als interessante niet-scanbare werkgeverswaaklijst in de applicatie.
|
||
- HTTP, robots en IMAP gebruiken een strikte gepinde CA-bundel; de eerdere lokale Windows-CA-fout bij Gemeente Mol en Ziekenhuis Geel was geen geldige reden voor een bypass.
|
||
- Volgende taak: geen uitvoerbare `ready` taak; alleen `VR-202`, `VR-203` en `VR-204` blijven `blocked-external` voor productiecredentials/-infrastructuur.
|
||
|
||
- 2026-07-22: `VR-126` voltooid.
|
||
- Het actieve lokale profiel bewaart postcode 2400 en een straal van 40 km; gemeente en coördinaten blijven leeg tot de gelicenseerde geodata uit `VR-205` beschikbaar is.
|
||
- De catalogus is herankerd op Mol en uitgebreid met SCK CEN, Cipal Schaubroeck, VanRoey, NTX/Netropolix en Thomas More.
|
||
- Exacte host-, pad-, plaats- en CVWarehouse-GUID-filters weigeren off-domain, andere vestigingen en kandidaat-/sollicitatieroutes.
|
||
- Gemeente Mol en Ziekenhuis Geel zijn niet geactiveerd wegens falende TLS-certificaatvalidatie; er is geen bypass toegepast.
|
||
- Volgende taak: geen uitvoerbare `ready` taak; `VR-205` blijft `blocked-external` voor de gelicenseerde geocodedataset en `VR-202` voor productie-mailboxcredentials.
|
||
|
||
- 2026-07-22: `VR-125` voltooid.
|
||
- De regionale catalogus gebruikt voorlopig Hasselt-Genk als omkeerbaar centrum voor de indicatieve 40-km-selectie omdat het actieve profiel nog geen postcode bevat; de profielafstand wordt exact zodra die postcode is ingevuld.
|
||
- Careerjet, Randstad en Robert Half vervangen de expliciete Brusselse nicheboards in de platformmailboxflow; alle brede jobboards blijven op de directe-fetchdenylist.
|
||
- ACA Group, Xplore Group, Universiteit Hasselt, Hogeschool PXL en Ziekenhuis Oost-Limburg worden via host- en padgebonden publieke lijstparsers ingelezen; alle vijf slaagden tweemaal live zonder warnings.
|
||
- Zeven werkgeversbronnen buiten de regionale scope zijn gedeactiveerd en verborgen, maar hun historische aliassen, documenten en provenance blijven intact.
|
||
- Volgende taak: geen uitvoerbare `ready` taak; `VR-201` en `VR-202` blijven `blocked-external` voor persoonlijke postcode-/bronreview en productiecredentials.
|
||
|
||
- 2026-07-22: `VR-124` voltooid.
|
||
- LinkedIn, ictjob.be, Jobat, StepStone, EuroBrussels en BrusselsJobs zijn toegevoegd aan dezelfde versleutelde platformmailboxflow als VDAB en Indeed.
|
||
- De bronpagina toont per jobboard een actuele officiële alertingang; ieder platform behoudt een eigen mailbox, interval, status, pauze- en syncactie.
|
||
- De mailparser accepteert per koppeling uitsluitend gelabelde HTTPS-links op het gekozen jobboarddomein en verwerpt externe en administratieve links.
|
||
- Alle brede jobboards blijven directe-fetchdenylistbronnen; VacatureRadar logt alleen in op het mailboxaccount en nooit op een jobboard.
|
||
- Volgende taak: `VR-202` blijft `blocked-external` voor productieconfiguratie en live validatie met de gewenste afzonderlijke alertmailboxen.
|
||
|
||
- 2026-07-22: `VR-123` voltooid.
|
||
- Een ingelogde gebruiker kan VDAB en Indeed elk aan een afzonderlijke Gmail-, Outlook- of aangepaste IMAP-mailbox koppelen, wijzigen, pauzeren en direct synchroniseren.
|
||
- Iedere koppeling heeft een eigen interval van 5 minuten tot 6 uur; de scheduler verwerkt alleen verschuldigde mailboxen met leases en foutisolatie.
|
||
- App-wachtwoorden worden nooit teruggetoond en zijn versleuteld met afzonderlijke roteerbare sleutels; mailboxmutaties zijn login-, gebruikersscope- en CSRF-beveiligd.
|
||
- Mailimport bewaart platform- en mailboxprovenance en is idempotent per mailbox en Message-ID; directe platformfetch en platformlogin blijven uitgesloten.
|
||
- Volgende taak: `VR-202` blijft `blocked-external` voor productieconfiguratie en live validatie met de afzonderlijke VDAB- en Indeed-mailboxaccounts.
|
||
|
||
- 2026-07-22: `VR-122` voltooid.
|
||
- Officiële VDAB-jobalerts worden standaard dagelijks om 06:15 Europe/Brussels via de dedicated IMAP-mailbox verwerkt; planning en batchlimieten zijn configureerbaar.
|
||
- De mailadapter bewaart VDAB-provenance, replay blijft idempotent en een oversized of fout bericht stopt de rest van de batch niet.
|
||
- De bronpagina toont mailboxstatus, laatste VDAB-import, een beveiligde handmatige inplanknop en de contractueel afgeschermde officiële VDAB Vacature API als afzonderlijke route.
|
||
- Directe VDAB-scraping, platformlogin en niet-goedgekeurde API-toegang blijven geblokkeerd.
|
||
- Volgende taak: `VR-202` blijft `blocked-external` voor het invullen en live valideren van mailbox-/SMTP-credentials.
|
||
|
||
- 2026-07-22: `VR-121` voltooid.
|
||
- Corda Campus, RPM Europe Logistics, YPTO, adesso Belgium, Monizze, Qover, SFEIR Belgium en ARHS Belgium zijn na actuele review en twee succesvolle cycli geactiveerd.
|
||
- De catalogus omvat nu regionale Hasselt/Genk-dekking en aanvullende Belgische IT-werkgevers in Brussel en Leuven.
|
||
- Bronnen op gedeelde ATS-hosts worden uniek per exacte feed-URL bewaard; per-origin leases en rate limits blijven gezamenlijk gelden.
|
||
- De Corda-adapter bewaart werkgever en titel van publieke jobkaarten en weigert off-domain links.
|
||
- VDAB en Indeed blijven op de directe-fetchdenylist en worden in de UI via officiële e-mailalerts naar de bestaande beveiligde mailboxingress geleid.
|
||
- Volgende taak: `VR-201` blijft `blocked-external` voor verdere persoonlijke bronkeuzes en periodieke menselijke voorwaardenreview.
|
||
|
||
- 2026-07-21: `VR-120` voltooid.
|
||
- Thuislocatie is teruggebracht tot een viercijferige postcode; gemeente en coördinaten worden alleen uit lokale geodata afgeleid.
|
||
- Alle profieltaxonomie gebruikt begeleide checkboxgroepen met dynamisch behoud van bestaande waarden.
|
||
- VITO en Deliverect zijn na actuele policy-/robotsreview en twee livecycli geactiveerd; samen leverden ze 63 actuele vacaturealiases.
|
||
- Recruitee- en Leverresponsevormen, employeridentiteit, direct-employerstatus, 304-inventaristelling en robotsredirectvalidatie zijn functioneel hersteld.
|
||
- De fixturebron is uit het normale bronoverzicht verborgen; browserhandoff staat op de vernieuwde profieleditor.
|
||
- Volgende taak: `VR-201` blijft `blocked-external` voor verdere persoonlijke werkgevers- en overheidsdekking.
|
||
|
||
- 2026-07-21: `VR-119` voltooid.
|
||
- Stitch bepaalt nu de dominante schermcompositie: utilityzoeker, brede matchfeed, vaste radar-/actierails, dichte resultaatkaarten, intelligence-strip, kanban, profielpreview, compacte bronimport en echte systeemtelemetrie.
|
||
- Vacaturelijstscores worden gebruikersgescopeerd uit de laatste `ScoreRun` geannoteerd; er is geen fictieve frontenddata toegevoegd.
|
||
- Nederlandstalige profielvelden, lokale favicon en aanvullende HTML/a11y-regressieasserties zijn toegevoegd.
|
||
- Browserbewijs en exact verificatierapport staan onder `docs/design/validation/` met prefix `vr119-`.
|
||
- Volgende taak: `VR-201` (`blocked-external`).
|
||
|
||
- 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; het volgende te behandelen item is `VR-202` als `blocked-external` voor live mailbox-/SMTP-credentials en echte jobalertmails van de gekozen platformen.
|
||
|
||
## Externe blokkades
|
||
|
||
Deze blokkeren onafhankelijke code niet:
|
||
|
||
- verdere persoonlijke werkgevers-/bronnenkeuze en actuele menselijke review buiten de actieve VITO-/Deliverect-startercatalogus;
|
||
- 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-119 is aanvullend met de geïntegreerde browser op alle kernroutes uitgevoerd, VR-120 op het begeleide profiel en de live vacaturefeed en VR-124 op de acht platformmailboxen en alertkaarten. 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`.
|