Commit Graph
890 Commits
Author SHA1 Message Date
Jens 1bbe3d2de0 test: keep production GIS available without AI scope evidence 2026-08-26 22:16:22 +02:00
Jens 50d57b6ab0 security: keep GIS startup available while AI scope fails closed 2026-08-26 22:15:39 +02:00
Jens 4ba7ab9aca ci: deploy only successful validated revisions 2026-08-26 22:14:15 +02:00
Jens f176915966 frontend: wire source policy lint 2026-08-26 22:13:04 +02:00
Jens 56b2a36528 frontend: add dependency-free source policy lint 2026-08-26 22:12:52 +02:00
Jens 6ac87a0504 hardening: verify immutable supply chain references 2026-08-26 22:12:39 +02:00
Jens 86675faf49 hardening: add architecture debt ratchet 2026-08-26 22:12:22 +02:00
Jens d5570c962e hardening: add repository hygiene gate 2026-08-26 22:12:07 +02:00
Jens e187dbfffc hardening: record audit remediation boundaries 2026-08-26 22:11:52 +02:00
Jens d36c5424cd hardening: document security invariants 2026-08-26 22:11:39 +02:00
Jens 82458b4d29 repo: restore README after branch-only tool error 2026-08-26 21:35:56 +02:00
Jens fd52142ef6 noop 2026-08-26 21:35:23 +02:00
Jens bd52652232 test: cover secure runtime defaults 2026-08-26 21:35:05 +02:00
Jens 284fe4f248 security: complete production YOLO fail-closed validation 2026-08-26 21:34:36 +02:00
Jens 931a037361 repo: remove generated codex contact sheet 2026-08-26 21:10:45 +02:00
Jens 8d1daa2931 repo: remove cross-project DockDeck archive 2026-08-26 21:10:39 +02:00
Jens 406fa39b35 repo: remove cross-project DockDeck archive 2026-08-26 21:10:31 +02:00
Jens 06fc2a8d24 repo: remove cross-project DockDeck archive 2026-08-26 21:10:22 +02:00
Jens d61b807c6d repo: remove cross-project DockDeck archive 2026-08-26 21:10:15 +02:00
Jens 7aad50f35f repo: remove cross-project DockDeck archive 2026-08-26 21:10:08 +02:00
Jens 9b89506f87 repo: remove generated codex contact sheet 2026-08-26 21:09:54 +02:00
Jens 8fa8e84ef6 repo: remove generated codex contact sheet 2026-08-26 21:09:48 +02:00
Jens 149657f8ed repo: remove generated codex contact sheet 2026-08-26 21:09:37 +02:00
Jens 6b82e2e124 repo: prevent codex working inputs from returning 2026-08-26 21:09:17 +02:00
Jens ab0e2b446c security: make guest and YOLO scope defaults fail closed 2026-08-26 21:08:57 +02:00
Jens c0dcf573a8 security: fail closed for guest and production YOLO scope 2026-08-26 21:08:13 +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