Files
geointel/TEST_LOG.md
T
Jens d5ea270329
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
Update GeoIntel project files
2026-07-25 23:43:08 +02:00

366 lines
53 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# TEST_LOG.md
## Unieke categorie-iconen - 2026-07-22
| Check | Resultaat |
| ----------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------ |
| Live inventaris | Pass; 16 categorieën bevatten al 16 unieke semantische waarden, waarvan 10 eerder niet door de frontendrenderer werden herkend |
| Renderer en instellingen | Pass; één catalogus levert 19 opties en alle 16 canonieke categorieën resolven naar een afzonderlijke Lucide-component |
| Nieuwe categorie | Pass; kiest automatisch het eerste nog ongebruikte ondersteunde pictogram |
| Onbekende importwaarde | Pass; veilige `Layers3`-fallback blijft behouden en verschijnt als Aangepast in Instellingen |
| `npm run format:check` / lint / typecheck | Pass |
| Unit/integratie / security | Pass; 57/57 en 5/5 |
| Playwright | Pass; 13 uitgevoerd en 15 project-gededupliceerd op desktop, tablet, mobiel en ultrawide |
| Build / audit | Pass; JS 377,08 kB, CSS 187,64 kB, server 182,0 kB en 0 kwetsbaarheden |
| React-review | Pass; named components, stabiele catalogus, afgeleide icoonkeuze en behouden semantische SVG-presentatie |
De release draait live op Tower met image `sha256:1cf11fc02e7e…`, is healthy en heeft 0 herstarts. De `.env` en bestaande JPEG-wallpaper van 3.245.835 bytes bleven byte-identiek. Chrome bevestigt in Categorieën 16 opgeslagen icoonwaarden, 16 gerenderde SVG's en 16 unieke SVG-signaturen; het dashboard toont dezelfde semantische pictogrammen en rapporteert 0 browserwaarschuwingen of -fouten. Er was geen databasewijziging nodig: de bestaande unieke waarden worden uitsluitend voortaan correct gerenderd.
## Platformbrede wallpaperlaag - 2026-07-22
| Check | Resultaat |
| ----------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------- |
| Geometrie | Pass; stage start op 72 px, eindigt op de viewportonderrand en is exact viewportbreed vanaf x=0 |
| Presetprioriteit | Pass; canvas heeft bij een wallpaper `background-image: none` en een transparante achtergrond |
| Compositie | Pass; scherp instelbaar beeld plus zachte `cover`-ambientlaag, met glasoppervlakken voor linkerrail, tegels en rechter widgetdock |
| Scrollgedrag | Pass; fixed stage blijft onder de topbalk staan terwijl de dashboardinhoud onafhankelijk doorloopt |
| `npm run format:check` / lint / typecheck | Pass |
| Unit/integratie / security | Pass; 54/54 en 5/5 |
| Playwright | Pass; 13 uitgevoerd en 15 project-gededupliceerd op desktop, tablet, mobiel en ultrawide; geen horizontale overflow |
| Build / audit | Pass; JS 375,95 kB, CSS 187,64 kB, server 182,0 kB en 0 kwetsbaarheden |
| React-review | Pass; decoratieve ambientbeelden zijn verborgen, de bestaande semantiek en lokale draftstate blijven intact |
De live Tower-release draait op image `sha256:f5d62a9e30f6…`, is healthy en heeft 0 herstarts. De `.env` en bestaande JPEG-wallpaper van 3.245.835 bytes bleven byte-identiek; Unraid, AppOps en alle zeven livepanelen zijn connected. Chrome bevestigt op 3440×1215 een fixed stage van x=0/y=72 tot de volledige 3425×1143 browsercontentruimte. Na 900 px scroll blijft y=72 behouden, de presetcanvas blijft transparant, beide zijpanelen gebruiken 62% glas en er is geen horizontale overflow of applicatiefout.
## Responsieve wallpaperstudio - 2026-07-22
| Check | Resultaat |
| ----------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------- |
| Reproductie | Pass; `cover` schaalde tegen een 3077×3015 contentcanvas in plaats van het zichtbare centrale viewport van 3077×1143 |
| Viewportstage | Pass; wallpaper schaalt tegen `100svh - 72px`, blijft tijdens scrollen in het centrale vlak en verstoort het ultrawide dock niet |
| Preview en bediening | Pass; Passend/Vullend, X-/Y-focus, 80–160% zoom, herstel en expliciet toepassen |
| Persistentie/migratie/export | Pass; vier nieuwe gevalideerde voorkeuren, legacydefaults en versie 1 round-trip |
| `npm run format:check` / lint / typecheck | Pass |
| Unit/integratie / security | Pass; 54/54 en 5/5 |
| Playwright | Pass; 13 uitgevoerd en 15 project-gededupliceerd op desktop, tablet, mobiel en ultrawide |
| Build / audit | Pass; JS 375,56 kB, CSS 185,13 kB, server 182,0 kB en 0 kwetsbaarheden |
| React-review | Pass; lokale draftstate, volledige dependencies, semantische controls, toetsenbordbediening en decoratieve alttekst |
De live Tower-release draait op image `sha256:606051e4f146…`, is healthy en heeft 0 herstarts. De `.env` en bestaande JPEG-wallpaper van 3.245.835 bytes bleven byte-identiek. Chrome bevestigt op 3440×1215 een wallpaperstage van 2381×1143 binnen een 3015 px hoge scrollcanvas: `Passend`, 50/50-focus en 100% zoom, zonder horizontale overflow of browserfouten. De gecentreerde studio-preview is 1600×686; `Vullend` wijzigt alleen de draft en `Herstellen` zet die terug zonder de live voorkeur te overschrijven.
## Achtergrond- en wallpaperherstel - 2026-07-22
| Check | Resultaat |
| ----------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Reproductie live | Pass; voorkeur `grid` en JPEG-wallpaper van 3,2 MB waren opgeslagen, maar de CSS-compositie werd ongeldig verklaard door een ontbrekende semantische token |
| Achtergrondpresets | Pass; Aurora, Blauwdruk en Minimaal leveren drie verschillende berekende canvasachtergronden |
| Wallpaperflow | Pass; upload via Instellingen verschijnt als preview, zet `has-wallpaper` en wordt als `/api/wallpaper` in de zichtbare canvas gerenderd |
| `npm run format:check` / lint / typecheck | Pass |
| Unit/integratie / security | Pass; 54/54 en 5/5 |
| Playwright | Pass; 13 uitgevoerd en 15 project-gededupliceerd, inclusief de nieuwe end-to-end achtergrondflow |
| Build / audit | Pass; JS 371,81 kB, CSS 180,35 kB, server 180,6 kB en 0 kwetsbaarheden |
| Live Unraid-release | Pass; image `sha256:977791a84355…` healthy met 0 herstarts, `.env` byte-identiek en bestaande JPEG-wallpaper van 3.245.835 bytes behouden |
| Live Chrome-audit | Pass op 3440×1215; alle presets visueel en berekend verschillend, wallpaper in iedere compositie, 0 overflow en 0 browserfouten |
De audit heeft via de echte instellingeninterface Aurora, Minimaal en Blauwdruk geactiveerd. De wallpaper bleef tijdens iedere wissel zichtbaar; de canvascomposities gebruikten respectievelijk kleurlichten, een rustige overlay en een raster van 40 px. Blauwdruk is na de controle als actieve gebruikersvoorkeur hersteld.
## Premium wallpaper-, weer- en controlpass - 2026-07-22
| Check | Resultaat |
| ---------------------------- | ---------------------------------------------------------------------------------------------------- |
| Typecheck en unit/integratie | Pass; 54/54 tests inclusief weer-cache en wallpaperformaten |
| Playwright | Pass; 12 uitgevoerd, 12 project-gededupliceerd; desktop/tablet/mobile/3440px, 0 browserfouten |
| Toggle-geometrie | Pass; E2E bevestigt meer dan 18px verplaatsing tussen beide zichtbare posities |
| Visuele screenshots | Pass; weerbadge, compacte Home Assistant-tegel, consistente rails en geen horizontale overflow |
| React-review | Pass; effectcleanup, locatie-afhankelijke revalidatie, semantische switches en server-side datafetch |
De finale lint, typecheck, unit/integratie, Playwright, security, build en audit zijn groen. Build: client-JS 371,81 kB (115,70 kB gzip), CSS 178,48 kB (30,05 kB gzip), server 180,6 kB; `npm audit` meldt 0 kwetsbaarheden. Tower `docker compose config` en imagebuild zijn groen; image `a371cab602ce…` draait healthy met 0 restarts en een byte-identieke `.env`. Live wallpapercyclus: PUT 201, GET 200, DELETE 204. Open-Meteo gaf voor Mol 21,2 °C/bewolkt. Alle zes appwidgets zijn connected; de ultrawide Chrome-audit toont 0 functionele fouten.
Project: DockDeck
Laatste gate: 2026-07-22
## Autoritatieve inventarisheartbeat en instellingen-UX — 2026-07-22
| Check | Resultaat |
| ---------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------- |
| `npm run format:check` | Pass, alle bestanden Prettier-conform |
| `npm run lint` | Pass, 0 waarschuwingen |
| `npm run typecheck` | Pass |
| `npm test` | Pass, 48/48; inclusief connected-only opschoning, degraded behoud, deduplicatie en read-only/case-insensitieve Unraid-iconen |
| `npm run test:security` | Pass, 5/5 |
| `npm run test:e2e` | Pass, 12 uitgevoerd / 12 project-gededupliceerd op vier viewports; dashboardcategoriefilter en 0 console-/paginafouten |
| `npm run build` | Pass, JS 364,55 kB / 113,69 kB gzip; CSS 170,68 kB / 28,53 kB gzip; server 167,2 kB |
| `npm audit --audit-level=moderate` | Pass, 0 kwetsbaarheden |
| In-app browseraudit | Pass op 1440×900: topbars beide `left=32`/`height=72`, filter reduceert tot één groep, verticale Integraties, 14px kleine tekst, brede Paneelstudio |
| React-review | Pass: single-flight heartbeat, cleanup van timer/listeners, afgeleide filterstate, semantische knoppen, stabiele ids en lokaal begrensde state |
De browseraudit mat geen horizontale overflow en bevatte geen browserwarnings of -errors. De opschoonregel wijzigt uitsluitend DockDecks SQLite-records na een verbonden inventarisrespons; Docker blijft read-only en een degraded heartbeat verwijdert niets.
Live release `5e411d1`: Compose-config en imagebuild groen; image `sha256:2d320ff25b66eb84e3fdad27f5437ad8c9732e99891ceb14d714e95655c6db2c`; container healthy met 0 herstarts en PID 1 als UID 100. De secretvrije pre-sync-export bevat 139 apps, 16 categorieën en 1 favoriet (SHA-256 `35d1cf987511177a7246e906afd27f42f87f714f4b621358aaa21ab22b5873ea`). Na de verbonden heartbeat: 90 apps, 50 zichtbaar, 16 categorieën, 0 stale/ontbrekende/dubbele namen en 0 statusafwijkingen tegenover AppOps. Alle 5 lokale Unraid-iconen geven HTTP 200 met een afbeelding-MIME-type.
## Finale visuele audit — 2026-07-22
| Check | Resultaat |
| ---------------------------------- | --------------------------------------------------------------------------------------------------------------------- |
| `npm run format:check` | Pass, alle bestanden Prettier-conform |
| `npm run lint` | Pass, 0 waarschuwingen |
| `npm run typecheck` | Pass |
| `npm test` | Pass, 42/42; inclusief persistente echte ontdekstatus en legacy-migratie |
| `npm run test:security` | Pass, 5/5 |
| `npm run test:e2e` | Pass, 11 uitgevoerd / 9 project-gededupliceerd op vier viewports; 0 console-/paginafouten |
| `npm run build` | Pass, JS 361,49 kB / 113,01 kB gzip; CSS 147,26 kB / 25,19 kB gzip; server 164,6 kB |
| `npm audit --audit-level=moderate` | Pass, 0 kwetsbaarheden |
| In-app Chrome-audit | Pass: dashboard, Quick Launch en alle zeven instellingensecties; 390, 768, 1440 en 3440 px; geen horizontale overflow |
| React-review | Pass: afgeleide catalogusstate, begrensde renders, effect-cleanup, semantische controls, stabiele keys en portalfocus |
| Secret-/mutatiescan | Pass; geen toegevoegde secrets, externe UI-assets of Docker-mutaties |
| Lokale Docker-validatie | Niet beschikbaar: Windows-omgeving heeft geen Docker-CLI; Compose en imagebuild worden op Tower uitgevoerd |
De audit heeft de operationele servicepanelen onder een compacte maar zichtbare **Live inzicht**-rij geplaatst, zonder de Paneelstudio of configuratie te verwijderen. Appbeheer gebruikt maximaal twintig rijen per pagina en een echte `isNew`-status; Widget Studio toont twaalf mogelijkheden per tranche. Geavanceerde weergavekeuzes en favoriete-editorvelden blijven volledig werkend via expliciete uitklapsecties. De Quick Launch-portal vult op ultrawide het volledige viewport en herstelt de invoerfocus na de portalovergang.
### Live release `72879e1`
| Check | Resultaat |
| ------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------- |
| Pre-deploybehoud | Secretvrije export opgeslagen; `.env`-SHA-256 vóór/staging/na identiek; named volume `dockdeck_dockdeck_data` behouden |
| `docker compose config --quiet` | Pass op huidige en gestagede bron |
| Klassieke Docker-imagebuild | Pass; image `sha256:5025a6599410…`, bundels identiek aan de lokale build |
| Compose release | Pass; één `DockDeck`-container, healthy, 0 herstarts op `192.168.10.150:1218` |
| Persistentie/schema | Pass; 138 apps, 55 zichtbaar, 1 favoriet, 3 categorieën, 6 appwidgets en dark theme; alle API-records hebben `isNew` |
| Read-only integraties | Pass; 233 templates, 3 array-/poolgroepen en 89 AppOps-containers connected; NPM bewust disabled |
| Live Chrome-audit | Pass op 3440×1271: favorietenrail, echte iconen, 0 monogrammen, Quick Launch 3440 px met focus, alle zeven instellingensecties en 0 overflow |
De vorige bronversie blijft recoverable onder `/mnt/user/appdata/dockdeck-prev-20260722-025420`; de secretvrije pre-release-export en behoudsmetingen staan afgeschermd onder `/mnt/user/appdata/dockdeck-release-backups/72879e1-20260722-025420`.
## Checks
| Check | Command / evidence | Result |
| -------------------------- | ----------------------------------- | --------------------------------------------------------------------------------------------------------------------------------- |
| Dependency-installatie | `npm install` | Pass |
| Formatting | `npm run format:check` | Pass |
| Lint | `npm run lint` | Pass, 0 warnings |
| TypeScript | `npm run typecheck` | Pass |
| Unit/integratie/migratie | `npm test` | Pass, 42/42; inclusief app-/serverhistoriek, widgetpersistentie, capabilityprofielen en duale Unraid-icooncachehelper |
| Read-only security | `npm run test:security` | Pass, 5/5; inclusief GET-only providergrens, serviceworker zonder API-cache en cachehelper zonder Docker-mutaties |
| Browserflows | `npm run test:e2e` | Pass, 10 uitgevoerd / 18 bewust overgeslagen; vier viewports, advanced widgets, presets, diagnostics en editmodus |
| Production build | `npm run build` | Pass; client 305.49 kB / 91.03 kB gzip, CSS 69.77 kB / 12.85 kB gzip, serverbundle 163.0 kB |
| Dependency security | `npm audit --audit-level=moderate` | Pass, 0 vulnerabilities |
| Production smoke | `PORT=3100 npm start` + HTTP checks | Pass: health `ok`, HTML 200, 4 mockapps, alle nieuw verborgen |
| Visuele browseraudit | In-app Chromium, echte lokale UI | Pass: diepe widgetinstellingen op 375×812 en 2560×1440; mobiele codecontract-overflow hersteld, 0 consolefouten |
| Secret-/mutatiescan | `rg` plus securitytests | Pass; alleen verwachte envnamen en socketmount in de aparte proxy |
| Unraid Compose-config | `docker compose config --quiet` | Pass op Tower/Unraid |
| Unraid image/build | Klassieke Docker-builder | Pass; de BuildKit-cache op de host was inconsistent, de klassieke builder bouwde `dockdeck:local` |
| Unraid live smoke | Compose, health en HTTP API | Pass: healthy, 0 restarts, `192.168.10.150:1218`, persistent named volume |
| Live read-only discovery | Socketproxy + metadata-mirror | Pass: 77 containers, 228 bruikbare templates; 230 templates gesaneerd en geverifieerd tot Name/WebUI/Icon |
| Responsive live release | Unraid Compose + Chromium | Pass: `192.168.10.150:1218`, healthy, 0 restarts, 77 apps, nieuwe voorkeurvelden en geen browserconsolefouten |
| Live servicewidget | Docker stats + Chromium 2560×1080 | Pass: AdGuard gemigreerd, CPU/geheugen/netwerk/uptime gevuld, integraties connected, geen overflow/fouten |
| Providerwidget release | Vitest + in-app Chromium | Pass: Unraid-hostwidget en providerfallback op 390×844 en 2560×1440; geen overflow, overlay of consolefouten |
| React review | React best-practices checklist | Pass: named configurator, stabiele keys, geen extra effects, semantische buttons/switches en zichtbare focus |
| Live hostwidget release | Unraid Compose + API + Chromium | Pass: healthy op `192.168.10.150:1218`; Tower, 77 containers, 72 running, 20 cores, 62 GB, geen overflow/fouten |
| Live tailored widgets | API-delta + Chromium desktop/mobile | Pass: AdGuard DNS-layout/API-lock, JDownloader down-/uploadsnelheid, correcte links, 0 restarts en geen overflow/fouten |
| Live credential settings | API + in-app Chromium | Pass: AdGuard toont alleen ontbrekende username/password, password masking, geen overflow/consolefouten, geen dummywrite |
| Widget Studio lokaal | In-app Chromium + Playwright | Pass: catalogus/filter/search op desktop, responsive op vier viewports, gelijke kaarten, geen overflow/consolefouten |
| Widget Studio live | Unraid API + Compose health | Pass: 41 capabilities voor 82 apps, 2 bestaande widgets behouden, healthy met 0 restarts; credentialstore niet aangemaakt |
| Navigatie/beheer lokaal | Vitest + Playwright + Chromium | Pass: 30 tests, 8 browserchecks; remove-suppressie, rename-search, Tower, Google, sidebarfavorieten en 390px zonder overflow |
| Navigatie/beheer live | Unraid API + in-app Chromium | Pass: healthy/0 restarts; Tower-search/link, Tweakers-sidebar, gecorrigeerde AdGuard- en Immich-URL's, geen fouten/overflow |
| Widgetconfiguratie lokaal | Vitest + Playwright + agent-browser | Pass: drie formaten, inhoudslagen, import/export, 390/3440 px en geen overflow |
| Widgetconfiguratie live | Tower Compose + API + browser | Pass: healthy/0 restarts op `:1218`; 80 apps, 55 zichtbaar, 5 widgets; juiste AnythingLLM/Immich-attributie |
| Volledige widgetroadmap | Vitest + Playwright + API | Pass: onafhankelijke volgorde, metriccompositie, presets, freshness, cadence, warnings, sparklines, PWA en diagnostics |
| Native Unraid live | Read-only mounts + API | Pass: array STARTED, parity healthy/0 fouten, 3 opslaggroepen, 57 °C hoogste meting; integratie connected |
| Finale live responsiviteit | Chromium 390×844 en 3440×1440 | Pass: 7 live panelen incl. Tower, geen positieve overflow, geen Vite-overlay en PWA-manifest aanwezig |
| Persoonlijke widgetdiepte | API + Vitest + Chromium | Pass: 80/80 capabilities, 55 custom GET-profielen, 23 native providers en gescheiden app/worker/database-metrics |
| Tower poort/configuratie | SQLite + live API + Chromium | Pass: naam/URL zichtbaar in Settings; voorkeur en hostkaart wijzen naar `http://192.168.10.150:5000` |
| Finale Unraid release | Compose config/build/up + health | Pass: klassieke imagebuild, healthy, 0 restarts, 80 apps/55 zichtbaar/6 appwidgets; named-volumeconfiguratie behouden |
| Single-container release | AppOps + Compose + API + browser | Pass: exact één `DockDeck`, oude proxy verwijderd, 83 live containers, icoon/WebUI correct, data-ID en 55 zichtbare apps behouden |
| Diepe widgetconfiguratie | Vitest + Playwright + browser | Pass: statselectie/-limiet/-stijl, elke numerieke waarschuwing, 3 grafiektypes, 60-punt provider- en Towerhistoriek |
| App-specifieke fallback | Capabilityaudit + browser | Pass: kaarten behouden eigen metrics zonder endpoint en tonen eerlijke `Connect data`; alle geaudite generieke profielen weg |
| Unraid PNG-icoon | Asset, HTTP, beide caches en Chrome | Pass live: actieve SVG-cache vervangen; Unraid rendert nu de echte 512×512 PNG in DockDecks rij zonder `question.png`-fallback |
| Finale capabilityaudit | Live API + capabilityvergelijking | Pass: 97 opgeslagen apps, 97 capabilityprofielen, nul generieke profielen; BlockPilot en LumaOps expliciet gedekt |
| Diepe widgetrelease live | Compose + API + in-app Chromium | Pass: healthy/0 restarts, 74 ontdekt/69 actief, 55 zichtbaar, 6 appwidgets plus Tower, geen overflow of browserconsolefouten |
## Scenario coverage
- Deterministische discovery, Unraid XML/WebUI-portvervanging en NPM-hostmatching.
- Nieuwe containers verborgen; zichtbaarheid, naam, categorie, order en URL-override.
- Categorieën en favorieten aanmaken/bewerken/verwijderen.
- Volledige dynamische zoekindex voor zichtbare/verborgen apps, actuele namen, technische namen, categorieën, images, URL's, favorieten en Tower; expliciete Google-fallback in nieuw tabblad.
- Persistente DockDeck-only appverwijdering met rediscoveryonderdrukking en back-updekking; geen Docker-mutatie.
- Alle drie thema's, overzicht/categorienavigatie en mobiele navigatie.
- Persistente accent-, dichtheid-, contentbreedte-, achtergrond-, hero- en statusvoorkeuren.
- Responsieve grids en navigatie op mobiel, tablet, desktop en ultrawide; lokale fonts zonder externe request.
- Automatische first-party faviconafleiding met lokale merk-/semantische fallback en handmatige override; lettermonogrammen zijn niet meer nodig.
- Per-app widgetkeuze, limiet van acht, legacy-migratie en generieke read-only Dockerstats met degraded fallback.
- Persistente widgetformaten en inhoudslagen voor app- en Unraidpanelen, refreshmomenten en dichte responsieve plaatsing.
- Standaard Unraid-hostwidget via Docker `/info` en provider-aware AdGuard/Plex/Immich/Home Assistant/*arr-presentatie met server-only credentials.
- Gemaskeerde providercredentialinvoer via Settings, allowlist per provider, HTTP(S)-URL-validatie, same-origin write, atomische `0600`-environmentpersistentie en directe hertest zonder secret echo.
- Widget Studio capabilitycatalogus met aanbevolen/alle/actieve filters, acht-panelenlimiet, directe sync en vervangbare connected credentials.
- Volledige 80/80 capabilitycatalogus met app-specifieke metricdefinities, per-metric zichtbaarheid/volgorde en een begrensd custom GET-only JSON-contract.
- Persistente Tower-naam/URL met poort `5000` als standaard en dezelfde actuele waarde in kaart en zoekindex.
- Zero-config Ollama-/Glances-API's, Tautulli-/Paperless-adapters en app-specifieke AI/document/security-Dockerfallbacks.
- Per-servicetype fallbackpresentatie met berekende live netwerkdelta's; JDownloader gebruikt download-/uploadsnelheid en AdGuard DNS-traffic in plaats van generieke cumulatieve netwerkbytes.
- Zijpaneel met klok, deck health, favorieten en snelle servicelinks; gebalanceerde tegelbreedtes op 2560 en 3440 pixels.
- Statuspolling, offline container en integratie-degradatie.
- SQLite-migratie, restartpersistentie, container-ID-wijziging en export/import versie 1.
- Geen Docker-mutatie-endpoint of Docker-beheeractie.
## Open external checks
- Live Nginx Proxy Manager: credentials ontbreken; adapter en degradatie zijn wel gemockt/getest.
- Optionele providercredentials: alleen nodig voor de diepste API-metrics van beveiligde diensten; Dockerfallbacks blijven beschikbaar.
## Latest quality gate
De volledige lokale Canon v1-gate is groen: `format:check`, lint, typecheck, 42/42 unit- en integratietests, 5/5 afzonderlijke securitytests, 7 uitgevoerde en 9 doelbewust project-gededupliceerde Playwright-checks op desktop/tablet/mobile/ultrawide, production build en 0 kwetsbaarheden. De browserflows eindigen met 0 `console.error`- of ongehanteelde paginafouten. De clientbuild is 312,99 kB JS (93,53 kB gzip) en 94,91 kB CSS (17,51 kB gzip); de serverbundle is 163,9 kB. In-app Chromium verifieerde daarnaast eerste-use, gevuld dashboard, Quick Launch, apps-instellingen, mobiele drawer en dark/light op 390×844 en 1440×900. De vaste testpoortblokkade op 3000 is opgelost met geïsoleerde poorten 3101/5174 en een schone Canon-testdatabase. Docker Compose en imagebuild zijn niet opnieuw uitgevoerd omdat in deze Windows-omgeving geen `docker`-CLI/runtime beschikbaar is; de eerdere Tower-verificatie blijft ongewijzigd.
## Canon v1 gate — 2026-07-21
| Check | Resultaat |
| -------------------------------------------- | ------------------------------------------------------------------------------------------------------- |
| `npm run format:check` | Pass, alle bestanden Prettier-conform |
| `npm run lint` | Pass, 0 waarschuwingen |
| `npm run typecheck` | Pass |
| `npm test` | Pass, 42/42 |
| `npm run test:security` | Pass, 5/5 |
| `npm run test:e2e` | Pass, 7 uitgevoerd / 9 gededupliceerd over vier viewports; 0 console-/paginafouten |
| `npm run build` | Pass, JS 312,99 kB / 93,53 kB gzip; CSS 94,91 kB / 17,51 kB gzip; server 163,9 kB |
| `npm audit --audit-level=moderate` | Pass, 0 kwetsbaarheden |
| In-app browserreview | Pass: 390×844 en 1440×900, dark/light, dashboard, Quick Launch, apps, drawer, geen horizontale overflow |
| Secret-/mutatiescan | Pass; geen toegevoegde secrets of Docker-mutaties |
| `docker compose config --quiet` / imagebuild | Niet uitgevoerd: `docker` is lokaal niet geïnstalleerd |
## Directe Stitch-pass — 2026-07-21
| Check | Resultaat |
| ---------------------------------- | ---------------------------------------------------------------------------------------------------------------------- |
| `npm run format:check` | Pass, alle bestanden Prettier-conform |
| `npm run lint` | Pass, 0 waarschuwingen |
| `npm run typecheck` | Pass |
| `npm test` | Pass, 42/42 |
| `npm run test:security` | Pass, 5/5 |
| `npm run test:e2e` | Pass, 11 uitgevoerd / 9 project-gededupliceerd; 390×844, 768×1024, 1440×900 en 3440×1440; 0 console-/paginafouten |
| `npm run build` | Pass, JS 312,49 kB / 93,60 kB gzip; CSS 125,83 kB / 22,07 kB gzip; server 163,9 kB |
| `npm audit --audit-level=moderate` | Pass, 0 kwetsbaarheden |
| In-app browserreview | Pass: gevuld donker dashboard, Quick Launch, App Beheer, editordrawer en Weergave; muis/toetsenbord en focus bevestigd |
| React-review | Pass: afgeleide state, effect-cleanup, semantische links/buttons, stabiele sleutels en toegankelijke switches |
De CSS-toename is de expliciete directe Canon-compositielaag. Zij vervangt geen runtime- of backendlogica en bevat geen externe assets. De finale E2E-test schrijft de actuele referentiebeelden naar `docs/design/dockdeck-canon-v1/implementation/`.
## Stitch launcherrail, iconen en widgets — 2026-07-22
| Check | Resultaat |
| ---------------------------------- | --------------------------------------------------------------------------------------------------------------------------------- |
| `npm run format:check` | Pass, alle bestanden Prettier-conform |
| `npm run lint` | Pass, 0 waarschuwingen |
| `npm run typecheck` | Pass |
| `npm test` | Pass, 42/42 |
| `npm run test:security` | Pass, 5/5 |
| `npm run test:e2e` | Pass, 11 uitgevoerd / 9 project-gededupliceerd op 390×844, 768×1024, 1440×900 en 3440×1440; 0 console-/paginafouten |
| `npm run build` | Pass, JS 353,39 kB / 110,42 kB gzip; CSS 135,18 kB / 23,34 kB gzip; server 163,9 kB |
| `npm audit --audit-level=moderate` | Pass na transitieve `fast-uri`-lockfile-update, 0 kwetsbaarheden |
| In-app browserreview | Pass: desktopfavorietenrail, echte Google/YouTube/GitHub/Plex/Immich/Home Assistant-iconen, zichtbare widgets en mobiele volgorde |
| React-review | Pass: zelfstandig railcomponent, effect-cleanup, afgeleide state, semantische links/buttons en getypeerde instellingenroute |
| Docker Compose/imagebuild | Niet uitgevoerd: in de lokale Windows-omgeving is geen `docker`-CLI/runtime beschikbaar |
De browsertest valideert aanvullend dat de desktoprail en servicepanelen zichtbaar zijn, dat appkaarten geen `.app-monogram` meer renderen en dat de Paneelstudio via de rail rechtstreeks in `Instellingen → Algemeen` opent. De nieuwe merkiconen zijn lokaal gebundeld; expliciete Unraid-/gebruikersiconen blijven de eerste bron.
## Widescreen leesbaarheids- en categorieaudit — 2026-07-22
| Check | Resultaat |
| ---------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------ |
| `npm run format:check` | Pass, alle bestanden Prettier-conform |
| `npm run lint` | Pass, 0 waarschuwingen |
| `npm run typecheck` | Pass |
| `npm test` | Pass, 51/51; inclusief categorie-inferentie, behoud van onbekende toewijzingen en de expliciete organisatie-API |
| `npm run test:security` | Pass, 5/5 |
| `npm run test:e2e` | Pass, 12 uitgevoerd / 12 bewust overgeslagen over desktop, tablet, mobiel en ultrawide; 0 testfouten |
| `npm run build` | Pass, JS 365,35 kB / 113,90 kB gzip; CSS 173,48 kB / 29,03 kB gzip; server 170,8 kB |
| `npm audit --audit-level=moderate` | Pass, 0 kwetsbaarheden |
| React-review | Pass: afgeleide categorieanalyse, expliciete semantische actie, stabiele sleutels, geen extra effecten en ongewijzigde cleanup |
| Chrome audit vóór correctie | 3440×1215, 0 horizontale overflow en 0 consolefouten; wel widgetmetadata van 8 px, Paneelstudio tot 6 px en foutieve bulkcategorieën |
De pass vergroot de ultrawide widgetdock, maakt widget- en instellingenmicrotypografie leesbaar en begrenst extreem lange beheer-, integratie- en back-uprijen. De categorieactie gebruikt uitsluitend bestaande categorieën en laat onbekende services onaangeroerd.
### Live verificatie
| Check | Resultaat |
| --------------------------- | ------------------------------------------------------------------------------------------------------------------------------------- |
| Secretvrij herstelpunt | `.codex-input/dockdeck-before-widescreen-audit-20260722-140834.json`, 80.809 bytes |
| `.env`-behoud | SHA-256 voor en na bronvervanging identiek: `e41e1b63…` |
| `docker compose config` | Pass vóór en na bronvervanging |
| Imagebuild en health | Pass, image `cc3a4b56fdfb…`, container healthy, 0 restarts |
| Read-only heartbeat | Pass, exact 90 bestaande containers en 50 zichtbare apps |
| Slimme categorieorganisatie | Pass, 14 gecorrigeerd, 76 behouden, 0 onbekend; 16 bestaande categorieën |
| Chrome 3440×1215 | Pass, dock 540 px, 0 horizontale overflow, 0 kapotte images, geen applicatieconsolefouten |
| Interacties | Pass: Downloads-filter toont exact Deluge/JDownloader2/slskd; instellingenzoeker, categoriebeheer en Quick Launch-favicon werken live |
De enige browserlogregel kwam van de WideFrog Chrome-extensie zelf (`keyflow timeout` op een titelupdate), niet van DockDeck. De live DockDeck-tab is als testdashboard open gebleven.
## Volledige instellingen- en releasepass — 2026-07-22
| Check | Resultaat |
| ---------------------------------- | -------------------------------------------------------------------------------------------------------------------------------- |
| `npm run format:check` | Pass, alle bestanden Prettier-conform |
| `npm run lint` | Pass, 0 waarschuwingen |
| `npm run typecheck` | Pass |
| `npm test` | Pass, 42/42; inclusief legacy-migratie en export/import van `reducedMotion` en `pollingIntervalMs` |
| `npm run test:security` | Pass, 5/5 |
| `npm run test:e2e` | Pass, 11 uitgevoerd / 9 project-gededupliceerd op vier viewports; instellingenzoeker en voorkeurpersistentie; 0 browserfouten |
| `npm run build` | Pass, JS 357,89 kB / 111,86 kB gzip; CSS 139,39 kB / 24,06 kB gzip; server 164,2 kB |
| `npm audit --audit-level=moderate` | Pass, 0 kwetsbaarheden |
| In-app browserreview | Pass: Apps, Categorieën, Weergave en Back-up; zoekfilter, kaartlayout, dropzone, scrollherstel en 0 horizontale overflow op 1280 |
| React-review | Pass: afgeleide zoekstate, correcte hookafhankelijkheden, getypeerde drag-events en semantische buttons/switches |
De instellingenmatrix dekt iedere persistente voorkeur, app-/favoriet-/categoriebeheer, widgets, integratiecredentials en back-up/export. Fictieve online- of back-uphistoriek is bewust niet toegevoegd; de UI toont alleen werkelijk beschikbare gegevens.
### Live Unraid-release
| Check | Resultaat |
| --------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------- |
| Pre-deploybehoud | Secretvrije export gemaakt; `.env`-SHA-256 voor/na bronkopie identiek; named volume `dockdeck_dockdeck_data` behouden |
| `docker compose config` | Pass vóór en na bronvervanging |
| Klassieke Docker-imagebuild | Pass; image `14497e8a384c…`, client-/serverbundels identiek aan lokale build |
| Compose release | Pass; commit `3ffd39b`, één `DockDeck`-container, healthy, 0 restarts op `192.168.10.150:1218` |
| Persistentie na migratie | Pass; 55 zichtbare apps, 1 favoriet, 3 categorieën, 6 appwidgets en dark/30 s behouden; sync voegde 3 nieuwe records standaard verborgen toe |
| Read-only integraties | Pass; 233 templates, 3 array-/poolgroepen, 90 AppOps-containers GET-only en AdGuard connected; NPM bewust disabled |
| Live in-app browser | Pass; favorietenrail, echte iconen, 7 panelen, instellingenzoeker/controls, scrolltop 0 en geen horizontale overflow |
De enige foutregel in de eerste vijf minuten was een door de releasecheck zelf veroorzaakte lege POST zonder JSON-contenttype (verwachte HTTP 415); de onmiddellijk herhaalde geldige synchronisatie gaf HTTP 200 en alle daaropvolgende health-/dashboardchecks zijn groen.
## Stitch consistentie- en ultrawidepass - 2026-07-22
| Check | Resultaat |
| ---------------------------------- | --------------------------------------------------------------------------------------------------------------------------- |
| `npm run format:check` | Pass, alle bestanden Prettier-conform |
| `npm run lint` | Pass, 0 waarschuwingen |
| `npm run typecheck` | Pass |
| `npm test` | Pass, 42/42 |
| `npm run test:security` | Pass, 5/5 |
| `npm run test:e2e` | Pass, 11 uitgevoerd / 9 project-gededupliceerd op desktop/tablet/mobile/ultrawide; 0 browserfouten |
| `npm run build` | Pass, JS 363,25 kB / 113,46 kB gzip; CSS 155,55 kB / 26,33 kB gzip; server 164,6 kB |
| `npm audit --audit-level=moderate` | Pass, 0 kwetsbaarheden |
| React-review | Pass: lokale state voor widgetdock, media-query cleanup, afgeleide Quick Launch-snelkoppelingen en semantische linkcontrols |
| Secret-/mutatiescan | Pass; geen toegevoegde secrets, externe UI-assets of Docker-mutaties |
Deze pass maakt de platformlayout consistent tussen dashboard en instellingen, vergroot de instellingen-typografie, gebruikt ultrawide-detectie om widgets als rechterdock te tonen, laat Quick Launch-favorieten met echte iconen renderen en vervangt de lege Quick Launch-uitleg door functionele snelkoppelingskaarten. Loopback-iconen uit discovery worden op een LAN-host naar de actuele DockDeck-host herschreven, zodat appiconen zoals Widefrog niet meer naar client-localhost wijzen. De E2E-suite valideert daarnaast dat de ultrawide-widgetdock automatisch open staat en rechts van de dashboardgroepen ligt zonder horizontale overflow.
## Edge-anchored Stitch shell en rijkere Dockerkaarten - 2026-07-22
| Check | Resultaat |
| ---------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------- |
| `npm run format:check` | Pass, alle bestanden Prettier-conform |
| `npm run lint` | Pass, 0 waarschuwingen |
| `npm run typecheck` | Pass |
| `npm test` | Pass, 42/42 |
| `npm run test:security` | Pass, 5/5 |
| `npm run test:e2e` | Pass, 11 uitgevoerd / 9 project-gededupliceerd op desktop/tablet/mobile/ultrawide |
| `npm run build` | Pass, JS 363,25 kB / 113,46 kB gzip; CSS 162,12 kB / 27,27 kB gzip; server 164,6 kB |
| `npm audit --audit-level=moderate` | Pass, 0 kwetsbaarheden |
| Chrome visuele audit | Pass: dashboardrail `left=0`, settings-sidebar `left=0`, ultrawide widgetdock `right=3440`, 0 horizontale overflow op 1920 en 3440 px |
Deze pass verwijdert de zwevende dashboard-shell op desktop: de linkerfavorietenrail staat tegen de viewportzijde en gebruikt dezelfde oppervlakte, padding en typografische taal als de instellingenrail. Op ultrawide staat het widgetpaneel als rechterdock tegen de rechter viewportzijde. Docker-snelkoppelingen zijn visueel zwaardere Stitch-servicekaarten met grotere iconen, statuschips, accentrail, arrow affordance, subtiel verloop en diepere hoverrespons.
### Live categorie-indeling - 2026-07-22
Voor de live DockDeck-config op `http://192.168.10.150:1218` is vooraf een secretvrije export gemaakt naar `.codex-input/dockdeck-categories-before-20260722-052942.json`. Daarna zijn 139 apps via de DockDeck-config-API over 16 categorieën verdeeld; verificatie: 0 apps zonder categorie. Categorieaantallen: Media 17, Downloads 2, Books & Documents 7, Photos 14, Home & Automation 2, Security & Identity 4, Network & Admin 4, Monitoring 7, Development & Projects 45, AI & ML 3, Databases & Storage 12, Infrastructure 16, Games & Emulation 5, Tools & Productivity 1, Experiments & Archived 0, Favorites 0.
Live codevervanging is daarna alsnog uitgevoerd via de bestaande SSH-alias `unraid-widefrog` (`root`, sleutel `widefrog_unraid_deploy`). De deploymentmap is een uitgepakte source-copy en geen git-worktree; daarom is commit `41942d5` via een checksum-gecontroleerd `git archive` naar Tower gekopieerd en over de source uitgepakt. `.env` bleef byte-identiek (`e41e1b63...` voor en na), `docker compose config --quiet` slaagde, `docker compose up -d --build` bouwde image `af96b8ac7a04...` en de `DockDeck`-container staat healthy met 0 restarts op `192.168.10.150:1218`. Na een geldige read-only sync zijn Unraid templates, Unraid runtime, AppOps inventory en AdGuard Home widget connected; dashboardverificatie: 139 apps, 55 zichtbaar, 16 categorieën, 0 zonder categorie.