From 3ab9127548167c31742b6c969d860656a1cf68e9 Mon Sep 17 00:00:00 2001 From: Jens Date: Thu, 30 Jul 2026 02:53:38 +0200 Subject: [PATCH] Record live mail and registry acceptance --- docs/ai/BACKLOG.yaml | 27 ++++++++++++--------- docs/ai/PROJECT_STATE.md | 37 ++++++++++++++++++++--------- docs/audit/FINAL_ACCEPTANCE.md | 14 ++++++++--- docs/quality/TRACEABILITY_MATRIX.md | 6 +++++ 4 files changed, 59 insertions(+), 25 deletions(-) diff --git a/docs/ai/BACKLOG.yaml b/docs/ai/BACKLOG.yaml index f5c9117..ba4345f 100644 --- a/docs/ai/BACKLOG.yaml +++ b/docs/ai/BACKLOG.yaml @@ -1,6 +1,6 @@ schema_version: 1 project: VacatureRadar -updated_at: '2026-07-29' +updated_at: '2026-07-30' execution_policy: order: file-order, then first ready task whose dependencies are done no_product_questions: true @@ -1341,7 +1341,7 @@ tasks: gebruikt strikt de gepinde certifi-bundel zonder bypass. - id: VR-202 title: Live IMAP- en SMTP-credentials configureren - status: blocked-external + status: done priority: P0 requirement_ids: - PR-016 @@ -1361,17 +1361,19 @@ tasks: - Dezelfde live testmail importeert per mailbox idempotent en alle geconfigureerde intervallen worden door de scheduler gerespecteerd. - SMTP verstuurt één testdigest en outboxstatus klopt. - - OAuth-clientcredentials en de encryptiesleutel staan alleen in de productie-secretstore/.env; eventuele - Gmail/custom-app-wachtwoorden zijn als ciphertext opgeslagen en sleutelrotatie is live getest. + - OAuth-clientcredentials en de encryptiesleutel staan alleen in de productie-secretstore/.env; eventuele Gmail/custom-app-wachtwoorden + zijn als ciphertext opgeslagen en sleutelrotatie is live getest. verification: - Volg Unraid mailboxchecklist - Inspecteer logs op afwezigheid van secret/payload primary_paths: - - /mnt/user/appdata/vacatureradar/config/.env + - /mnt/user/appdata/VacatureRadar/.env - Bronnen -> Platformmailboxen - external_blocker: De dedicated productie-alias, Entra-appregistratie, admin consent en Exchange-mailboxscope zijn - op 2026-07-30 live ingericht; resterend zijn de productie-uitrol en echte platformalertmails voor de - import-/digestproef. + result: + completed_at: '2026-07-30' + note: M365 app-only OAuth/XOAUTH2 live ingericht met dedicated alias/map en Exchange-regel; negen platformmailboxen + importeerden dezelfde live testmail idempotent, schedulerstatus was correct, testdigest stond sent en logs + bleven payload-/secretvrij. - id: VR-203 title: Productiedomein, TLS en reverse proxy activeren status: done @@ -1403,7 +1405,7 @@ tasks: containerintern bereikbaar. - id: VR-204 title: Immutable containerimage publiceren - status: blocked-external + status: done priority: P1 requirement_ids: - NFR-009 @@ -1421,9 +1423,12 @@ tasks: - Pull image op schone host - Start smoke stack en rollback naar vorige digest primary_paths: - - .github/workflows/release.yml + - .gitea/workflows/release.yml - docker-compose.unraid.yml - external_blocker: Vereist registrykeuze, account en credentials. + result: + completed_at: '2026-07-30' + note: Gitea private registry publiceerde v0.3.15 als immutable digest met commitlabel, SPDX-SBOM, checksums + en release notes; Unraid pull, digest-pin, healthy smoke en rollback naar 0.3.14 plus herstel zijn live geslaagd. - id: VR-205 title: Gelicenseerde Belgische geodatabron laden status: done diff --git a/docs/ai/PROJECT_STATE.md b/docs/ai/PROJECT_STATE.md index ac9a9f8..b9e131c 100644 --- a/docs/ai/PROJECT_STATE.md +++ b/docs/ai/PROJECT_STATE.md @@ -1,7 +1,7 @@ # Projectstatus -- Laatst bijgewerkt: 2026-07-29 -- Repositoryversie: 0.3.14 importperformance +- Laatst bijgewerkt: 2026-07-30 +- Repositoryversie: 0.3.15 M365 OAuth en immutable registryrelease - Uitvoeringsmodus: autonome backlog - Eerste uitvoerbare taak: controleer met `python scripts/backlog.py next` @@ -30,9 +30,28 @@ Productieoplevering 0.3.14 op 2026-07-29: - de pre-releasecustomdump, media en composeconfig staan checksum-geldig onder `/mnt/user/appdata/VacatureRadar/backups/release-0.3.14-20260729T164500Z`; rollbackimage `vacatureradar:rollback-0.3.13` wijst naar `sha256:34aef8853f77a3f311b119bd67d9f1160a97fd4a21e62c9776222be289bf3b88`; - productie is healthy zonder restarts, versie 0.3.14 is publiek zichtbaar, alle gastkernroutes antwoorden 200 en een echte importsmoke creëerde één job binnen een transactie waarna rollback expliciet bevestigd werd. -Volgende uitvoerbare taak: geen na afronding van VR-228. Alleen de optionele -mailbox-/identityconfiguratie (`VR-202`) en publicatie naar een externe private -registry (`VR-204`) blijven extern geblokkeerd. +Productieoplevering 0.3.15 op 2026-07-30: + +- `VR-202` is live afgerond met een dedicated alias, geïsoleerde Exchange-map en + inboxregel, app-only OAuth/XOAUTH2 voor IMAP en SMTP en negen platformconnecties; +- dezelfde echte testmail werd per connectie eenmaal geïmporteerd en bij herhaling + als duplicate herkend; alle ingestelde intervallen zetten `next_poll_at` correct + en de scheduler plande geen connectie te vroeg; +- de productie-Fernet-sleutel werd live naar een nieuwe primaire MultiFernet-sleutel + geroteerd; een tijdelijke versleutelde custom credential bleef ontsleutelbaar en + is na de proef verwijderd; +- één echte digest werd verzonden en de outbox eindigde op `sent`; productie-logs + bevatten geen OAuth-secret, bearer-token of mailpayload; +- `VR-204` publiceerde `v0.3.15` naar de private Gitea-registry en Unraid is gepind + op `sha256:5a6dc253db7a60c42c0c806ae084ddc6ee7c98db5db71a857423b894a3662ba5`; +- commitlabel, digest, SPDX-SBOM, checksums en release notes zijn checksum-geldig + opgeslagen als Gitea Actions-artifact `release-evidence-v0.3.15`; +- pull, interne en publieke readiness, rollback naar `0.3.14` en herstel naar de + immutable `0.3.15`-digest zijn live geslaagd; +- lokale en Gitea-releasegate zijn groen met 324 tests, 0 failures, 0 skips en + 84,05% branch-aware dekking. + +Volgende uitvoerbare taak: geen; alle P0- en P1-releasepunten zijn afgerond. ## Laatste risicohardening @@ -42,8 +61,7 @@ Live mailboxvoorbereiding op 2026-07-30: - de alias is niet primair gemaakt en bestaande adressen zijn ongewijzigd gebleven; - de Entra-appregistratie, admin consent en Exchange-mailboxscope zijn live ingericht met app-only OAuth; tijdelijke bootstraprechten en de bootstrap-app zijn na afloop verwijderd; -- `VR-202` resteert alleen nog op de productie-uitrol en echte platformalert-/digestproeven; - Basic Auth wordt niet geactiveerd; +- `VR-202` is volledig afgerond; Basic Auth is niet geactiveerd; - de volledige lokale gate is groen met 324 tests, 0 failures, 0 skips en 84,05% branch-aware dekking. @@ -576,16 +594,13 @@ Een toekomstige agent moet altijd de actuele waarheid opnieuw bepalen met: ## 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. +Momenteel staan er geen `ready` taken of P0/P1-releaseblokkers meer over. ## 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; -- containerregistry en credentials; -- actieve/voor deze repository geregistreerde Gitea Actions-runner; ## Bekende verificatiebeperking van de aangeleverde basis diff --git a/docs/audit/FINAL_ACCEPTANCE.md b/docs/audit/FINAL_ACCEPTANCE.md index c8e60f6..af950e2 100644 --- a/docs/audit/FINAL_ACCEPTANCE.md +++ b/docs/audit/FINAL_ACCEPTANCE.md @@ -1,6 +1,6 @@ -# Finale acceptance 0.3.14 +# Finale acceptance 0.3.15 -Status: productie geaccepteerd op 2026-07-29. +Status: productie geaccepteerd op 2026-07-30. ## Bewijs @@ -14,7 +14,15 @@ Status: productie geaccepteerd op 2026-07-29. - PostgreSQL custom dump plus media/configbewijs is naar een geïsoleerde database hersteld; migrations, exacte recordtellingen en een aparte applicatiestart slaagden. - Een productie-importsmoke extraheerde en creëerde één geldige job in een expliciete transactie; rollback werd bevestigd en liet geen smokedata achter. - De checksum-geldige pre-releaseback-up staat onder `backups/release-0.3.14-20260729T164500Z`; rollbacktag `vacatureradar:rollback-0.3.13` bewaart image `sha256:34aef8853f77a3f311b119bd67d9f1160a97fd4a21e62c9776222be289bf3b88`. +- M365 IMAP en SMTP werken app-only via OAuth/XOAUTH2; negen geïsoleerde + platformconnecties importeerden één live testmail idempotent en één testdigest + eindigde met outboxstatus `sent`. +- Gitea Actions publiceerde `v0.3.15` met immutable digest + `sha256:5a6dc253db7a60c42c0c806ae084ddc6ee7c98db5db71a857423b894a3662ba5`. + Het artifact bevat een geverifieerde SPDX-SBOM, checksums en release notes. +- Unraid is op die digest gepind; pull, health/readiness, rollback naar `0.3.14` + en herstel naar `0.3.15` zijn live geslaagd. ## Uitkomst -Er bestaan geen bekende P0- of P1-releaseblokkers. Alleen optionele Entra- en mailboxcredentials blijven extern; zij raken de kernrelease niet. +Er bestaan geen bekende P0- of P1-releaseblokkers. diff --git a/docs/quality/TRACEABILITY_MATRIX.md b/docs/quality/TRACEABILITY_MATRIX.md index e876786..0ab06a4 100644 --- a/docs/quality/TRACEABILITY_MATRIX.md +++ b/docs/quality/TRACEABILITY_MATRIX.md @@ -96,6 +96,12 @@ Iedere backlogtaak die een requirement wijzigt, werkt in dezelfde commit deze ma - VR-122 operationaliseert de veilige platformingress als dagelijkse, configureerbare en begrensde mailboxpoll. VDAB-alerts krijgen expliciete provenance, replay blijft idempotent en de bronpagina onderscheidt de werkende jobalertroute van de contractueel afgeschermde officiële Vacature API. Bewijs staat in de e-mailadapter-/importtests, `apps/sources/services/imap_import.py` en ADR-0005. - VR-123 vervangt die globale poll door gebruikersgescopeerde VDAB- en Indeed-mailboxkoppelingen met versleutelde app-wachtwoorden, afzonderlijke intervallen, per-mailboxleases en UI-beheer. Bewijs staat in `tests/unit/test_mailbox_credentials.py`, `tests/integration/test_mailbox_connections.py`, de migratie en ADR-0009. - VR-124 breidt dezelfde mailboxingang uit met LinkedIn, ictjob.be, Jobat, StepStone, EuroBrussels en BrusselsJobs. De platformgebonden parser accepteert uitsluitend gelabelde HTTPS-links op het gekozen jobboarddomein; fixtures, adapter-/integratietests en de centrale denylist bewijzen de afscherming. +- VR-202 bewijst de productie-ingress met M365 app-only OAuth/XOAUTH2, een + dedicated alias en map, negen platformconnecties, een idempotente live + testmail, correcte schedulerstatus en een verzonden digest-outbox. +- VR-204 bewijst de immutable releaseketen via de private Gitea-registry, + digest-pin, commitlabel, SPDX-SBOM, checksums, release notes en een live + Unraid pull-/rollback-/herstelsmoke. - VR-125 vervangt de twee Brusselse nicheboards door Careerjet, Randstad en Robert Half, retireert buitenregionale werkgevers zonder provenanceverlies en voegt host- en padgebonden adapters toe voor ACA Group, Xplore Group, UHasselt, PXL en ZOL in de kern Hasselt-Genk. - VR-126 herankert profiel en broncatalogus op postcode 2400 Mol en 40 km. De host-, pad- en locatiefilters voor SCK CEN, Cipal Schaubroeck, VanRoey, NTX en Thomas More worden gedekt door regionale adaptertests, source-viewtests, live bronruns en de bijgewerkte threat T-39. - VR-201 activeert Gemeente Mol en zeven bijkomende Kempen-werkgevers na menselijke voorwaardenreview, fixtures, fail-closed locatie-/routefilters en twee livecycli. Twaalf interessante werkgevers zonder stabiele actieve ingang staan afzonderlijk en niet-scanbaar op de UI-waaklijst. Bewijs staat in de livecatalogus, seeddata, `KempenEmployerAdapter`, bronruns en adapter-/seed-/viewtests.