Commit Graph
890 Commits
Author SHA1 Message Date
Jens 4fe3040f85 docs: add data and provenance contribution rules 2026-08-31 09:02:30 +02:00
Jens 5e941edb8c docs: add geospatial data security policy 2026-08-31 09:02:14 +02:00
Jens 36755034c7 repo: prevent generated Codex inputs from returning 2026-08-31 09:01:53 +02:00
Jens d24aa53056 Merge pull request 'Stabilize the protected production release' (#8) from codex/stabilize-ai-sbom into main
GeoIntel release gates / Compile, test, contracts and builds (push) Successful in 2m11s
GeoIntel release gates / Python and npm vulnerability policy (push) Successful in 21s
GeoIntel release gates / Production AI image, SBOM and container scan (push) Successful in 5m38s
GeoIntel release gates / Deploy exact gated revision to Unraid (push) Failing after 52m59s
2026-08-30 14:02:14 +02:00
Jens bf5e1b7e06 fix(deploy): ignore parent Git checkout in backup binding
Managed validation / Managed repository validation (pull_request) Successful in 2m16s
GeoIntel release gates / Compile, test, contracts and builds (pull_request) Successful in 2m7s
GeoIntel release gates / Python and npm vulnerability policy (pull_request) Successful in 26s
GeoIntel release gates / Production AI image, SBOM and container scan (pull_request) Successful in 7m43s
GeoIntel release gates / Deploy exact gated revision to Unraid (pull_request) Skipped
2026-08-30 13:32:22 +02:00
Jens 9f771a61cf fix(ci): cap Syft heap inside DinD
Managed validation / Managed repository validation (pull_request) Successful in 2m39s
GeoIntel release gates / Compile, test, contracts and builds (pull_request) Successful in 2m49s
GeoIntel release gates / Python and npm vulnerability policy (pull_request) Successful in 31s
GeoIntel release gates / Production AI image, SBOM and container scan (pull_request) Successful in 7m31s
GeoIntel release gates / Deploy exact gated revision to Unraid (pull_request) Skipped
2026-08-30 13:25:37 +02:00
Jens aec584d433 Merge pull request 'Full platform remediation' (#7) from codex/full-platform-remediation into main
GeoIntel release gates / Compile, test, contracts and builds (push) Successful in 2m25s
GeoIntel release gates / Python and npm vulnerability policy (push) Successful in 28s
GeoIntel release gates / Production AI image, SBOM and container scan (push) Failing after 2m41s
GeoIntel release gates / Deploy exact gated revision to Unraid (push) Skipped
2026-08-30 11:30:37 +02:00
Jens 11de6d0005 fix(ci): bound Syft binary cataloging
Managed validation / Managed repository validation (pull_request) Successful in 3m48s
GeoIntel release gates / Compile, test, contracts and builds (pull_request) Successful in 3m19s
GeoIntel release gates / Python and npm vulnerability policy (pull_request) Successful in 28s
GeoIntel release gates / Production AI image, SBOM and container scan (pull_request) Successful in 8m37s
GeoIntel release gates / Deploy exact gated revision to Unraid (pull_request) Skipped
2026-08-30 11:06:46 +02:00
Jens bcd023ec36 fix(deploy): bind prepared source and scanned image exactly
Managed validation / Managed repository validation (pull_request) Successful in 3m35s
GeoIntel release gates / Compile, test, contracts and builds (pull_request) Successful in 3m42s
GeoIntel release gates / Python and npm vulnerability policy (pull_request) Successful in 45s
GeoIntel release gates / Production AI image, SBOM and container scan (pull_request) Failing after 6m19s
GeoIntel release gates / Deploy exact gated revision to Unraid (pull_request) Skipped
2026-08-30 10:50:12 +02:00
Jens 16616d56a5 fix(ci): restore exact AI release evidence gates 2026-08-30 10:49:41 +02:00
Jens fd58cb2378 fix(release): keep large snapshots attached and low impact
Managed validation / ${{ inputs.profile || 'full' }} (pull_request) Failing after 1m35s
GeoIntel release gates / Compile, test, contracts and builds (pull_request) Failing after 1m43s
GeoIntel release gates / Python and npm vulnerability policy (pull_request) Failing after 32s
GeoIntel release gates / Production AI image, SBOM and container scan (pull_request) Failing after 31s
GeoIntel release gates / Deploy exact gated revision to Unraid (pull_request) Skipped
2026-08-30 10:09:26 +02:00
Jens f77f6f2d93 docs(accuracy): bind verification evidence to audited commit
Managed validation / ${{ inputs.profile || 'full' }} (pull_request) Failing after 1m59s
GeoIntel release gates / Compile, test, contracts and builds (pull_request) Failing after 4m12s
GeoIntel release gates / Python and npm vulnerability policy (pull_request) Failing after 1m15s
GeoIntel release gates / Production AI image, SBOM and container scan (pull_request) Failing after 15m2s
GeoIntel release gates / Deploy exact gated revision to Unraid (pull_request) Skipped
2026-08-30 06:01:13 +02:00
Jens 0e3c1b20e9 docs(accuracy): refresh governed scan and training evidence 2026-08-30 06:00:57 +02:00
Jens c272220277 fix(release): make deployment backup and rollback immutable 2026-08-30 06:00:43 +02:00
Jens a0884d64c9 feat(ui): refine governed workbench and dual-screen flows 2026-08-30 06:00:28 +02:00
Jens 80a2d1654d fix(platform): govern geospatial analysis and raster handoffs 2026-08-30 06:00:15 +02:00
Jens 96f90373dc feat(auth): harden Authentik and guest capability boundaries 2026-08-30 05:59:49 +02:00
Jens b93d926b94 chore(repo): retire duplicate nested source mirror 2026-08-30 05:59:32 +02:00
Jens d39816a4ca Merge pull request 'fix(ci): restore release gates and contract baseline (fixes #4)' (#6) from codex/resolve-open-issues into main
Unraid autoredeploy / Deploy geointel (push) Successful in 9m48s
GeoIntel release gates / Compile, test, contracts and builds (push) Failing after 2m24s
GeoIntel release gates / Python and npm vulnerability policy (push) Failing after 25s
GeoIntel release gates / GIS image, SBOM and container scan (push) Failing after 14s
Reviewed-on: #6
2026-08-29 04:07:37 +02:00
NuklearRabbit 38c7b5f85e fix(ci): use one required pull-request gate
Managed validation / full (pull_request) Successful in 11s
2026-08-29 03:35:31 +02:00
NuklearRabbit 029ed9c3f1 fix(ci): stop duplicate feature-branch runs
GeoIntel release gates / Compile, test, contracts and builds (pull_request) Waiting to run
GeoIntel release gates / Python and npm vulnerability policy (pull_request) Waiting to run
GeoIntel release gates / GIS image, SBOM and container scan (pull_request) Waiting to run
Managed validation / full (pull_request) Canceled after 0s
2026-08-29 03:27:53 +02:00
NuklearRabbit edb762219c fix(ci): restore release gates and contract baseline (fixes #4)
Managed validation / full (pull_request) Canceled after 0s
GeoIntel release gates / Compile, test, contracts and builds (pull_request) Canceled after 0s
GeoIntel release gates / Python and npm vulnerability policy (pull_request) Canceled after 0s
GeoIntel release gates / GIS image, SBOM and container scan (pull_request) Canceled after 0s
GeoIntel release gates / Python and npm vulnerability policy (push) Failing after 22s
GeoIntel release gates / Compile, test, contracts and builds (push) Waiting to run
GeoIntel release gates / GIS image, SBOM and container scan (push) Failing after 45s
2026-08-29 02:00:23 +02:00
Jens d39f703abf Merge pull request '[skip ci] Centralize Gitea Actions runner' (#3) from codex/centralize-gitea-runner into main 2026-08-27 23:50:01 +02:00
NuklearRabbit 5b47df2750 chore(actions): use central Unraid runner [skip ci] 2026-08-27 23:42:26 +02:00
Jens ec1fbd5b15 ci: align managed validation contract [skip ci] 2026-08-27 07:40:32 +02:00
Jens 4d916ee04c ci: add managed validation contract [skip ci] 2026-08-27 06:27:41 +02:00
NuklearRabbit fb1b776843 deploy: attach production container group labels
GeoIntel release gates / Compile, test, contracts and builds (push) Failing after 29s
GeoIntel release gates / Python and npm vulnerability policy (push) Failing after 39s
GeoIntel release gates / GIS image, SBOM and container scan (push) Failing after 1m28s
Unraid autoredeploy / Deploy geointel (push) Successful in 7m36s
2026-08-26 04:52:47 +02:00
NuklearRabbit fe51bfe3ae ci: add scoped Unraid autoredeploy
GeoIntel release gates / Compile, test, contracts and builds (push) Failing after 1m17s
GeoIntel release gates / Python and npm vulnerability policy (push) Failing after 30s
GeoIntel release gates / GIS image, SBOM and container scan (push) Failing after 1m29s
2026-08-26 02:49:50 +02:00
Jens 3627a05bfe Recover model provenance from verified backup receipt
GeoIntel release gates / Compile, test, contracts and builds (push) Failing after 29s
GeoIntel release gates / Python and npm vulnerability policy (push) Failing after 53s
GeoIntel release gates / GIS image, SBOM and container scan (push) Failing after 5m38s
2026-08-24 03:22:45 +02:00
Jens 36a3c84699 Fix governed runtime model registration
GeoIntel release gates / Compile, test, contracts and builds (push) Failing after 20s
GeoIntel release gates / Python and npm vulnerability policy (push) Failing after 24s
GeoIntel release gates / GIS image, SBOM and container scan (push) Failing after 2m43s
2026-08-23 23:31:42 +02:00
Jens 73228259a0 Merge runtime provenance script execution fix
GeoIntel release gates / Compile, test, contracts and builds (push) Canceled after 0s
GeoIntel release gates / Python and npm vulnerability policy (push) Canceled after 0s
GeoIntel release gates / GIS image, SBOM and container scan (push) Canceled after 0s
2026-08-23 23:26:44 +02:00
Jens a37c6d5b17 Place runtime script lint exception correctly
GeoIntel release gates / Compile, test, contracts and builds (push) Failing after 25s
GeoIntel release gates / Python and npm vulnerability policy (push) Failing after 26s
GeoIntel release gates / GIS image, SBOM and container scan (push) Failing after 1m49s
2026-08-23 23:26:37 +02:00
Jens d944fa7276 Keep runtime provenance script lint-clean
GeoIntel release gates / Compile, test, contracts and builds (push) Canceled after 0s
GeoIntel release gates / Python and npm vulnerability policy (push) Canceled after 0s
GeoIntel release gates / GIS image, SBOM and container scan (push) Canceled after 0s
2026-08-23 23:26:24 +02:00
Jens de8beae183 Make runtime provenance operator script directly executable
GeoIntel release gates / Compile, test, contracts and builds (push) Canceled after 0s
GeoIntel release gates / Python and npm vulnerability policy (push) Canceled after 0s
GeoIntel release gates / GIS image, SBOM and container scan (push) Canceled after 0s
2026-08-23 23:26:06 +02:00
Jens 2f15da97c3 Merge governed model provenance migration
GeoIntel release gates / Compile, test, contracts and builds (push) Canceled after 0s
GeoIntel release gates / Python and npm vulnerability policy (push) Canceled after 0s
GeoIntel release gates / GIS image, SBOM and container scan (push) Canceled after 0s
2026-08-23 23:22:12 +02:00
Jens be2e092b33 Recover governed runtime provenance for legacy YOLO models
GeoIntel release gates / Compile, test, contracts and builds (push) Failing after 20s
GeoIntel release gates / Python and npm vulnerability policy (push) Failing after 22s
GeoIntel release gates / GIS image, SBOM and container scan (push) Failing after 2m31s
2026-08-23 23:22:02 +02:00
Jens 300fbba5c9 Merge stable icon compatibility fix
GeoIntel release gates / Compile, test, contracts and builds (push) Failing after 33s
GeoIntel release gates / Python and npm vulnerability policy (push) Failing after 28s
GeoIntel release gates / GIS image, SBOM and container scan (push) Failing after 1m46s
2026-08-23 22:42:30 +02:00
Jens 730d8c8312 Restore stable GeoIntel icon endpoint
GeoIntel release gates / Compile, test, contracts and builds (push) Failing after 24s
GeoIntel release gates / Python and npm vulnerability policy (push) Failing after 31s
GeoIntel release gates / GIS image, SBOM and container scan (push) Failing after 1m50s
2026-08-23 22:42:21 +02:00
Jens 9e8a7a5883 Merge Tower release identity fix
GeoIntel release gates / Compile, test, contracts and builds (push) Canceled after 0s
GeoIntel release gates / Python and npm vulnerability policy (push) Canceled after 0s
GeoIntel release gates / GIS image, SBOM and container scan (push) Canceled after 0s
2026-08-23 22:39:05 +02:00
Jens 19cd1054b2 Fix Tower release source and image identity
GeoIntel release gates / Compile, test, contracts and builds (push) Failing after 24s
GeoIntel release gates / Python and npm vulnerability policy (push) Failing after 30s
GeoIntel release gates / GIS image, SBOM and container scan (push) Failing after 2m7s
2026-08-23 22:38:42 +02:00
Jens 4268465fc3 Merge visual audit and GPU workflow upgrade
GeoIntel release gates / Compile, test, contracts and builds (push) Failing after 22s
GeoIntel release gates / Python and npm vulnerability policy (push) Failing after 19s
GeoIntel release gates / GIS image, SBOM and container scan (push) Failing after 1m40s
2026-08-23 21:50:31 +02:00
Jens b996986d20 Upgrade async GPU analysis and workbench UX 2026-08-23 21:50:11 +02:00
JensandClaude Opus 5 4040cbca7b Vertaal tien Engelse aria-labels
Deze worden voorgelezen aan gebruikers die met een schermlezer werken. In een
verder Nederlandse werkbank hoorden zij "Export artifact actions" en "Map
selection QA shortcut".

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-23 15:11:46 +02:00
JensandClaude Opus 5 596bbb0e8c Vertaal 56 Engelse foutteksten in de Nederlandse interface
Deze verschenen zodra de backend geen eigen melding meegaf: de terugvalteksten
van formatError en de controles vóór een handeling. Een operator kreeg dan
"Failed to load exports" of "Select a project first" te zien, midden in een
verder Nederlandse werkbank.

Dit is geen meertaligheidsvraagstuk maar inconsistentie binnen de taal die het
product al spreekt. De teksten volgen nu de bestaande toon: benoemen wat er
misging of wat er eerst nodig is, in actieve vorm, zonder excuus.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-23 15:10:07 +02:00
JensandClaude Opus 5 7bf7caf56b Werk de frontend-documentatie bij
De README noemde App.tsx nog de orchestrator; die rol ligt sinds de splitsing
bij WorkbenchApp.tsx. Verder twee secties toegevoegd over wat er veranderd is:
de werkstanden en het leidende designsysteem, en de laadstrategie met de
verzoekdeler en het laden per werkblad.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-23 15:07:55 +02:00
JensandClaude Opus 5 7a5f64e5ca Deel geen antwoorden meer over een identiteitswissel heen
De verzoekdeler uit de vorige commit houdt een antwoord driehonderd
milliseconde vast om de opstartcascade op te vangen. Uitloggen herlaadt de
pagina echter niet, dus die tabel overleeft een sessiewissel: binnen dat venster
zou de volgende gebruiker het antwoord van de vorige kunnen krijgen.

Met de hand is dat nauwelijks te bereiken, maar een verzoekcache die een
identiteitswissel overleeft is hoe dan ook fout. De tabel wordt nu gewist bij
uitloggen, bij aanmelden en zodra de sessie verloopt.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-23 15:04:45 +02:00
JensandClaude Opus 5 70157400d9 Breng de opstartkosten terug en geef de werkstand een schakelaar
De inlogpagina haalde 1,46 MB over de lijn, waaronder de volledige kaartmotor
van 213 kB terwijl er geen kaart staat. De werkbank is nu een aparte brok die
pas na aanmelden geladen wordt: de eerste JS-bundel gaat van 476 naar 30 kB, en
met de beeldwerk uit een eerdere commit komt de inlogpagina op 344 kB.

Bij het opstarten gingen 27 verzoeken de deur uit in drie golven. Alles werd
vooraf opgehaald, ook voor werkbladen die de gebruiker misschien nooit opent,
en twee daarvan werden dubbel opgevraagd door effecten die negentig
milliseconde na elkaar liepen. Gelijktijdige en vlak opeenvolgende identieke
GET-verzoeken delen nu één belofte, en elk werkblad haalt zijn eigen gegevens
pas op wanneer het geopend wordt. Nu zestien verzoeken.

Typen in het themazoekveld kostte 53 ms mediaan met uitschieters tot 127 ms,
omdat die filterwaarde in het viewmodel van de hele werkruimte leefde. Het veld
is een eigen component geworden dat zijn invoer zelf bijhoudt. React.memo om de
kaart is geprobeerd en weer verwijderd: van de negentien props worden er te
veel per render opnieuw gemaakt, dus de vergelijking sloeg nooit over.

Verder: donker blijft de standaard maar er is nu een weg terug naar licht, de
kaartondergrond schakelt mee zonder de datalagen te herbouwen, de onderste
hero-afbeelding wordt pas opgehaald als hij in beeld komt, en de werkbank heeft
een h1 zodat schermlezers een ankerpunt hebben.

De tests op de bootstrap legden het oude gedrag vast en toetsen nu het nieuwe,
van drie naar zeven gevallen.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-23 15:00:57 +02:00
JensandClaude Opus 5 663855f8a4 Geef het tweede scherm zijn opmaak en lettertypen
De analyseconsole opent in een eigen venster en stond daar in Times New Roman
op wit, met standaard browserknoppen, terwijl de werkbank ernaast donker was.
Niemand had er ooit naar gekeken.

Er was code die de opmaak moest meenemen, maar die kloonde de link naar het
nieuwe venster. Dat venster wordt geopend met window.open('') en staat dus op
about:blank; nagemeten leverde link.sheet === null op. De regels worden nu
ingeschreven in plaats van gelinkt, met de verwijzingen absoluut gemaakt tegen
de bron van het blad.

Daarna bleef document.fonts.status eeuwig op 'loading' staan. De bestanden
kwamen wel binnen met status 200, maar in een about:blank-document voltooit het
lettertypeladen niet. Een FontFace hangt niet aan een document, dus de
gezichten die het hoofdvenster al geladen heeft worden nu overgenomen en gaan
de @font-face-regels niet mee. Meetbaar: status 'loaded', en een schermafdruk
die op de lettertypen wacht is klaar in 45 ms in plaats van af te breken na
dertig seconden.

Dit verklaarde ook de vijftien !important in dit blok: die probeerden iets te
overschrijven dat er nooit aankwam. Alle zestien bleken overbodig en zijn in de
vorige commit verwijderd.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-23 15:00:30 +02:00
JensandClaude Opus 5 f567a459b0 Laat een kapot paneel geen kapotte applicatie meer zijn
Er was nergens een error boundary: geen componentDidCatch, geen
getDerivedStateFromError. Eén component die gooit nam de hele werkbank mee,
inclusief de kaart en de navigatie. Nu blijft de schil staan, ziet de gebruiker
welk werkblad het liet afweten, en wist wegnavigeren de fout.

Daarnaast een patroon dat op zeven plekken half was toegepast: een optionele
keten die te vroeg stopt. report?.items?.filter(...) stond geguard, twintig
regels verderop stond report.items.map(...) zonder. Half geguard is de
eigenlijke fout, want het wekt zekerheid zonder die te bieden. Waar de lijst op
meerdere plekken gebruikt wordt staat nu één normalisatie aan de kop.

De brondetails hadden geen enkele afhandeling en werden met .catch(() => null)
overgeslagen; die melden nu wel. De overige elf catch-blokken bleken bovenop
hooks te staan die de fout al zelf opvangen en tonen, wat ik heb nagemeten door
een verzoek te laten mislukken.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-23 15:00:08 +02:00
JensandClaude Opus 5 438d0ec083 Voer de visuele audit door: fundament, donkere werkstand, kaart en schil
Achttien bevindingen uit de audit, met de metingen erbij in de betreffende
CSS-secties.

Fundament. Dertien tokens werden op 87 plaatsen aangeroepen zonder ooit
gedefinieerd te zijn; in de browser gaf getPropertyValue('--gi-text') een lege
string terug, dus die kleurregels vielen terug op overerving. Vorm en hoogte
zijn terug naar de schaal: radius via token van 17% naar 81%, unieke schaduwen
van 115 naar 71, losse kleurwaarden van 928 naar 352.

Typografie. De stylesheets declareerden negen gewichten terwijl er per familie
twee gezichten geladen werden, en font-synthesis-weight: none verbiedt
namaakvet. Alles van 650 tot 850 kwam dus als 600 op het scherm: 138 van de 148
declaraties rendereden identiek. Nu vier stappen die alle vier ook geladen
worden, en Manrope draagt de koppen zoals op de landingspagina.

Donkere werkstand. De werkbank staat tegen luchtbeelden aan; een lichte schil
daarnaast laat de kaart altijd verliezen. De landingspagina blijft licht.

Kaart. De ondergrond wordt ontkleurd en gedempt zodat alleen de eigen data nog
kleur draagt, en de symbologie staat niet langer als losse hexwaarden in
GeoMap. De zes zwevende vlakken zijn er drie: statuskaart, staprail en
resultaatchip bleken al één component te zijn die de opmaak over drie hoeken
van de kaart uiteentrok.

Schil. Eén kopbalk in plaats van drie (215px chroom naar 100px), het raster van
AI-vragen zonder botsingen, kapitalen op één niveau in plaats van 57
declaraties, en het leverancierslogo uit de navigatiebalk.

Van 47 echte !important naar 1, gemeten door telkens twee productiebuilds op
berekende stijlen te vergelijken. Contrast: nul tekstelementen onder AA op zes
werkbladen, in beide werkstanden.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-23 14:59:45 +02:00