demo mode
deploy / deploy (push) Canceled after 0s

This commit is contained in:
Jens
2026-07-27 23:38:37 +02:00
parent d28fd05bf6
commit 7caea3a1ee
44 changed files with 1682 additions and 460 deletions
+50 -84
View File
@@ -1,102 +1,68 @@
# Verificatierapport van de aangeleverde projectbasis
# Verificatierapport — VacatureRadar 0.3.12
- Datum: 2026-07-20
- Omgeving: Linux, Python 3.13.5, uv 0.10.0
- Projectversie: 0.1.0
- Doel: aantonen dat de ZIP een reproduceerbare, werkende MVP-basis en autonome overdracht bevat
- Datum: 27 juli 2026
- Onderwerp: productiehardening, Nginx Proxy Manager, gastmodus en overdrachts-ZIP
- Branch: `fix/public-production-hardening`
## Uitgevoerde volledige gate
## Gecontroleerd
Commando:
### Applicatie en regressies
```bash
./scripts/codex_verify.sh
```text
296 tests geslaagd
2 optionele Playwrighttests overgeslagen omdat de browserbinary niet lokaal aanwezig was
83,43% branch-aware codedekking; vereiste drempel 70%
```
Resultaat:
De afzonderlijke HTML- en accessibilityprobe bleef actief. De Playwrightfallback is hersteld zodat een geïnstalleerde Pythonmodule zonder browserbinary geen synchrone databasecall meer binnen de Playwright-eventloop uitvoert.
- Ruff: geslaagd;
- Django system check: geslaagd, 0 issues;
- migratiecontrole: geslaagd, geen ontbrekende migraties;
- pytest: 43/43 tests geslaagd;
- branch-aware codedekking: 80,42% (`apps` en `config`), drempel 70%;
- machineleesbare backlog: geldig, 35 taken en acyclische dependencies;
- lokale Markdownlinks, YAML/Compose/OpenAPI, `.env.example` en Codex-skillfrontmatter: geldig.
### Django en data
De tests omvatten unit-, integratie- en securitypaden voor parsers, URL-security, fetchbeleid, sanitization, normalisatie, dedupe, scoring, profiles, e-mailimport, notificaties, lifecycle, tasks en webviews.
- `python manage.py check`: 0 issues;
- `python manage.py makemigrations --check --dry-run`: geen wijzigingen;
- productie-settings met `PUBLIC_BASE_URL=https://vacatureradar.itworx.tech`: laden correct;
- `manage.py check --deploy`: geen errors; HSTS-preload blijft bewust uit en geeft daarom alleen de verwachte Django-waarschuwing;
- publieke host en HTTPS-origin worden aantoonbaar aan `ALLOWED_HOSTS` en `CSRF_TRUSTED_ORIGINS` toegevoegd.
## Clean-room ZIP-proef
### Repository en deployment
De gegenereerde ZIP is in een lege directory uitgepakt. Voor de start is gecontroleerd dat `.env`, `.venv` en `local/db.sqlite3` niet aanwezig waren. Daarna is uitgevoerd:
- repositoryvalidator: geslaagd;
- taakledger: geldig, 64 taken, 0 uitvoerbare ready-taken;
- Docker Compose, Unraid Compose en backlog-YAML: parseerbaar;
- shellsyntax van deploy- en entrypoints: geldig;
- Pythoncompilecheck: geslaagd;
- `git diff --check`: geslaagd;
- packagevalidatie en manifestcontrole: geslaagd na definitieve packaging.
```bash
./scripts/codex_bootstrap.sh
```
## Belangrijkste herstelde productieproblemen
Resultaat:
- `DisallowedHost` voor de publieke Nginx-host;
- publieke Django-debugmodus;
- verkeerde externe CSRF-origin met interne poort `1226`;
- healthchecks die door HTTPS-redirect konden falen;
- proceslokale rate limiting bij meerdere Gunicornworkers;
- onvoorwaardelijk vertrouwen in `X-Forwarded-For`;
- schrijfbare gedeelde demo;
- afwijkende Unraid `.env`-paden;
- database-URL-interpolatie buiten het Unraid-`env_file`;
- URL-import die zonder staticfilesmanifest kon falen tijdens deployment checks;
- stale project-/assetversie en verouderd verificatierapport.
- nieuwe virtuele omgeving uit `uv.lock` opgebouwd;
- alle migraties op een lege SQLite-database toegepast;
- lokaal beheeraccount, standaardprofiel en één demovacature aangemaakt;
- volledige kwaliteitsgate opnieuw geslaagd met 43 tests en 80,42% dekking;
- ontwikkelserver gestart;
- `/health/live/` gaf `200` met `ok: true`;
- `/health/ready/` gaf `200` met databasecheck `ok`;
- `/login/` gaf `200` met de Nederlandstalige titel `Aanmelden · VacatureRadar`.
## Omgevingsbeperking
## Offline/reproduceerbare eigenschappen
De normale `uv sync --frozen` kon in deze uitvoeringsomgeving geen packages downloaden door DNS-uitval. Voor de regressies zijn de pure Python-packages uit de door de gebruiker aangeleverde gelockte Windows-omgeving gecombineerd met reeds aanwezige Linux-wheels. Daardoor konden Django, pytest en de volledige offline suite betrouwbaar draaien.
- De standaardtests doen geen live internetrequests.
- IMAP en Ollama staan standaard uit.
- Celery draait in tests eager en vereist geen Redis.
- SQLite wordt voor lokale bootstrap/tests gebruikt; productieconfiguratie ondersteunt PostgreSQL.
- Externe bronformaten worden via gesaneerde fixtures getest.
- `.venv`, caches, `.env`, lokale database, logs, media en back-ups worden door het packaging-script uitgesloten.
De Ruff-Linuxbinary en Playwright-browser konden zonder netwerk niet worden geïnstalleerd. Pythoncompile, alle tests, Djangochecks, lijnlengtecontrole op gewijzigde Pythonbestanden en `git diff --check` zijn wel uitgevoerd. Een Dockerdaemon en de live Unraid/Nginx-omgeving waren niet beschikbaar.
## Autonome overdracht
## Nog op de doelserver uitvoeren
Gevalideerd:
1. bestaande `.env` back-uppen;
2. `scripts/configure_public_url.py` uitvoeren;
3. container met `--force-recreate` herbouwen;
4. interne liveness/readiness controleren;
5. publieke TLS-, login-, logout- en CSRF-smoke uitvoeren;
6. demo-read-only controleren;
7. exacte Nginx Proxy Manager-CIDR instellen wanneer individuele client-IP-rate-limiting gewenst is;
8. databaseback-up en herstel-smoke uitvoeren.
```bash
python scripts/backlog.py validate
python scripts/backlog.py next
```
Ledgerstatus bij oplevering:
- 10 taken `done`: de werkende MVP- en overdrachtsbasis;
- 17 taken `ready`: uitvoerbare product-, hardening- en releasestappen;
- 5 taken `blocked-external`: uitsluitend live bronreview, accounts, domein/registry of bulkdataset;
- 3 taken `deferred`: multi-tenant SaaS, automatisch solliciteren en algemene publieke API.
Codex krijgt vaste productbeslissingen via `AGENTS.md`, `CODEX_START_HERE.md`, accepted ADRs, een repo-eigen skill en een startprompt. Een externe blokkade mag alleen het live restpunt blokkeren; interface, tests, mocks en documentatie moeten eerst worden voltooid.
## Niet in deze omgeving uitgevoerd
Docker was in de assemblageomgeving niet beschikbaar. Daarom zijn de Dockerfile en Composebestanden statisch gevalideerd, maar een echte imagebuild, PostgreSQL/Redis-container-smoke, Unraid-installatie en restore-drill worden niet als uitgevoerd geclaimd. `VR-115` en `VR-117` bevatten de exacte acceptatiecriteria en commando's voor een Docker-capabele omgeving.
Live bronvoorwaarden, mailboxcredentials, SMTP, domein/TLS, registry en een gelicenseerde Belgische geodatabron vereisen persoonlijke/externe configuratie en staan apart als `blocked-external`.
## VR-118 — Stitch Intelligence Cockpit (2026-07-21)
Aanvullend op de bestaande releasebasis is de volledige interface opnieuw geïntegreerd en gecontroleerd.
Uitgevoerde browsermatrix:
- 1440×900, 1280×800, 1024×768, 768×1024, 390×844 en 360×800;
- exact één `h1` en geen documentbrede horizontale overflow op ieder formaat;
- dashboard, vacaturelijst/detail, sollicitatiepipeline, profiel/editor, bronnen en systeem;
- dark en light, mobiele open/sluitnavigatie, bron-disclosure en vacature → gesolliciteerd → pipeline;
- geen externe productie-scripts of stylesheets en geen nieuwe consolefouten na de storagefallbackfix.
Screenshots: `docs/design/validation/`. Deze map en de originele Stitch-referentie zijn via `.dockerignore` uitgesloten van de productiecontainer.
Volledige afrondingsgate:
- Ruff: geslaagd;
- Django system check: geslaagd;
- migratiecontrole: geen wijzigingen;
- pytest: 146 geslaagd, 2 optionele Playwrightvarianten overgeslagen met geslaagde HTML/a11y-fallback;
- branch-aware codedekking: 82,00%, boven de vereiste 70%;
- taakledger: 36 taken, waarvan 28 done, 5 blocked-external, 3 deferred en 0 ready;
- repositorydocumentatie en configuratie: geldig.
Zie `docs/operations/NGINX_PROXY_MANAGER.md` en `docs/quality/PRODUCTION_AUDIT_2026-07-27.md`.