fix(screenshots): regenerate screenshots from the current demo, remove older sets

tests/screenshot/run.mjs now clears PNGs a previous run left in its output directory and writes playground/screenshots/MANIFEST.json (output directory, sha256 per PNG, sha256 of the demo state rendered). One run produced the 24 PNGs in playground/screenshots/v1.15.0/ (12 surfaces x 2 themes, including the dark onboarding view removed in 1.18.1).

Removed the v1.10.0, v1.11.0, v1.14.0 and v2-mockup sets (77 PNGs) and tests/screenshot/shoot-mockup.local.mjs. Chose regenerate for the set the runner writes and delete for the rest, because the current runner cannot reproduce the older layouts, and the mockup script reads an HTML file that is not in the repository, so its output could never be regenerated from a clone.

README gallery, docs/playground.md and tests/screenshot/README.md now point at v1.15.0 and describe the 12 surfaces the runner captures. The manifest gate goes green: 4/4.

OCR (Apple Vision, local): 0 of 24 PNGs in the tree carry text from the older demo; known positives from 715950b were found (2 of 2).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
Kjell Tore Guttormsen 2026-09-23 14:43:42 +02:00
commit 2ed24add12
Signed by: ktg
SSH key fingerprint: SHA256:JakMjO6FTBBzN0Bhfj9saOoEjaFxlSdYuZQQpM/lF9Q
107 changed files with 98 additions and 81 deletions

View file

@ -439,22 +439,24 @@ node scripts/build-demo-state.mjs
### Screenshot gallery
Screenshots of every surface in both themes live in `playground/screenshots/v1.11.0/` (the v1.10.0 set is preserved as historical reference). They are committed so forkers see what the plugin produces without running anything:
Screenshots of every surface in both themes live in `playground/screenshots/v1.15.0/`, taken of the current demo project. They are committed so forkers see what the plugin produces without running anything:
| # | File | What you see |
|---|------|--------------|
| 01 | `01-onboarding-empty-light.png` | Onboarding surface, empty state (the dark variant was removed in 1.18.1; regenerate to restore it) |
| 02 | `02-project-rapporter-regulatory-{dark,light}.png` | All 6 regulatory renderers (classify pyramid, requirements, transparency, FRIA, conformity kanban, DPIA matrix) |
| 03 | `03-project-rapporter-security-{dark,light}.png` | 6×5 + 7×5 risk matrices, radar, top-risks, residual-pair, recommendation-card, review kanban |
| 03 | `03-project-rapporter-economy-{dark,light}.png` | Cost distribution P10/P50/P90, license capability matrix |
| 03 | `03-project-rapporter-documentation-{dark,light}.png` | Migrate mat-ladder, ADR critique-card, summary read-more, POC traffic-light, utredning screen-tabs, compare scenario-cards |
| 03 | `03-project-rapporter-tool-{dark,light}.png` | 7 tool commands (no report — pipeline-string builders) |
| 04-06 | `04-project-oversikt-{dark,light}.png` etc. | Project screen-tabs (oversikt / kontekst / eksport) |
| 07 | `07-home-{dark,light}.png` | Home with project list + 3 entry tracks |
| 08 | `08-catalog-{dark,light}.png` | Catalog with 29 commands in 5 expansion-grupper |
| 09 | `09-onboarding-prefilled-{dark,light}.png` | Onboarding with state from demo |
| 01 | `01-onboarding-empty-{dark,light}.png` | Onboarding surface, empty state |
| 02 | `02-project-overview-{dark,light}.png` | Project view: sidebar with 17 artifacts, aggregate verdict, top risks |
| 03 | `03-project-artifact-classify-{dark,light}.png` | EU AI Act classification (risk pyramid, role, obligations) |
| 04 | `04-project-artifact-security-{dark,light}.png` | Security assessment (6×5 matrix) |
| 05 | `05-project-artifact-ros-{dark,light}.png` | ROS analysis (risk matrix, radar) |
| 06 | `06-project-artifact-cost-{dark,light}.png` | Cost estimate (P10/P50/P90 in NOK) |
| 07 | `07-project-artifact-summary-{dark,light}.png` | Technical summary and decision note |
| 08 | `08-project-import-modal-{dark,light}.png` | Import modal (viewport only) |
| 09 | `09-project-search-{dark,light}.png` | Sidebar search filtering artifacts |
| 10 | `10-home-{dark,light}.png` | Home with project list |
| 11 | `11-catalog-{dark,light}.png` | Command catalog |
| 12 | `12-onboarding-prefilled-{dark,light}.png` | Onboarding with state from the demo |
Regenerate via `cd tests/screenshot && npm install && npx playwright install chromium && node run.mjs`.
Regenerate via `cd tests/screenshot && npm install && npx playwright install chromium && node run.mjs`. The run also writes `playground/screenshots/MANIFEST.json`; `tests/kb-update/test-screenshots-manifest.test.mjs` fails when a screenshot in the tree is not from the latest run or the demo changed after it.
### Validation

View file

@ -34,7 +34,7 @@ Erstatter v2 5-stegs-pipelinen med en multi-surface-app som persisterer state og
`scripts/build-demo-state.mjs` leser alle 17 fixture-filer fra `playground/test-fixtures/` og injiserer dem som en `<script type="application/json" id="demo-state-v1">`-blokk i playground HTML (idempotent — erstatter eksisterende blokk). "Last inn demo-data"-knappen på onboarding-overflaten kaller `ACTIONS['load-demo']` som leser blokken, erstatter alle state-grener via Proxy-mutasjon, kjører `migrateDataVersion` (v2→v3 auto-parser raw_markdown til artifacts), og navigerer til project-surface. Demo viser 17 artifacts gruppert i sidebar med severity-badges, aggregate verdict (BLOKKERT), top-risks-liste, og fungerende re-importer/slett-knapper per artifact.
`tests/screenshot/` inneholder en frittstående Playwright-runner med egen `package.json` (gitignored `node_modules`). `node run.mjs` produserer 24 PNG-er (12 surfaces × 2 tema) under `playground/screenshots/v1.15.0/`. v1.15.0-surfaces: onboarding-empty, project-overview, project-artifact-{classify,security,ros,cost,summary}, project-import-modal (viewport-only — modal er position:fixed overlay), project-search, home, catalog, onboarding-prefilled. v1.10.0/v1.11.0/v1.14.0 beholdt som historisk referanse. Disse committes så forkere ser pluginen uten å installere noe. Demo-org er "Acme Kommune" og demo-prosjekt er "Acme: Kunde-chatbot".
`tests/screenshot/` inneholder en frittstående Playwright-runner med egen `package.json` (gitignored `node_modules`). `node run.mjs` produserer 24 PNG-er (12 surfaces × 2 tema) under `playground/screenshots/v1.15.0/`. v1.15.0-surfaces: onboarding-empty, project-overview, project-artifact-{classify,security,ros,cost,summary}, project-import-modal (viewport-only — modal er position:fixed overlay), project-search, home, catalog, onboarding-prefilled. Runneren sletter PNG-er en tidligere kjøring la igjen, og skriver `playground/screenshots/MANIFEST.json` (sha256 per PNG + sha256 av demo-state-blokken). `tests/kb-update/test-screenshots-manifest.test.mjs` feiler når et PNG i treet ikke er output fra siste kjøring, eller demoen er endret etter at bildene ble tatt — kjør `node run.mjs` på nytt. Eldre sett (v1.10.0, v1.11.0, v1.14.0, v2-mockup) er fjernet i 1.18.2. Disse committes så forkere ser pluginen uten å installere noe. Demo-org er "Acme Kommune" og demo-prosjekt er "Acme: Kunde-chatbot".
## Design-system 100%-adoption (v1.11.0 → v1.14.0)

View file

@ -0,0 +1,31 @@
{
"generator": "tests/screenshot/run.mjs",
"dir": "playground/screenshots/v1.15.0",
"demoStateSha256": "0530e2312ece925d5e9cbd4ec0330476eee7e1d83cfb1060e53627341a7dc83a",
"files": {
"01-onboarding-empty-dark.png": "5ef4a9c1e264842e1ace08d590fc52ae1392c9b277a21e0aa220356d51379c1e",
"01-onboarding-empty-light.png": "bc0ddc7c386f3eb5d7d9a25f225563d10d917ac263c6df9571a0a8f558b4ebb7",
"02-project-overview-dark.png": "54448f7b968da367bedd5cfbd00322b8389b29a7b2e42d777cf0958225591450",
"02-project-overview-light.png": "eca5558a9e41edcfa7daa3d17833a8762e8769f7a1ec91d475934852db781a10",
"03-project-artifact-classify-dark.png": "7eef903788ba0b421849472df1257bd760ff947d4857bdd3bdb70136bea838fc",
"03-project-artifact-classify-light.png": "b015e585915f4274c2773441661aa9f1fc1afa7ce89f323be1f1ad983c8b0201",
"04-project-artifact-security-dark.png": "04010e82de61c2bf3ee28497b3e55866aa5ba7f0f1611bf1626b8b42d11b9aba",
"04-project-artifact-security-light.png": "28789b9a56c34f957287185d1803e401f53e09d72719115fb22ae88157734fdc",
"05-project-artifact-ros-dark.png": "b10739151c49c2c0181b0fdf25fd17eba3cb6ef8896bf9e94d3a0851b2f72faa",
"05-project-artifact-ros-light.png": "6c92839794ca15822d77d79d8943d1b22b97a602b240d4821d3145658a987f85",
"06-project-artifact-cost-dark.png": "eff9771c842f82a9ff5dcb377d5d729097d41da2ede74c6856e77b0db9c7a5c3",
"06-project-artifact-cost-light.png": "da4dc1ef35b77c9f132fb1425a01a6ca6927fb09970cf7c34a19eab5dbebf7d3",
"07-project-artifact-summary-dark.png": "2d2d822d97d2b59d30a19b170ae64ff7d7eca65f8a4b45faf802b3195dd91133",
"07-project-artifact-summary-light.png": "c887eb673ec49a8d9443c4da95041503c1133aed0981af756239c9651ba12331",
"08-project-import-modal-dark.png": "4acaba5bf92643b76867297c07eae4331c5b1d19c9aa51ec015641ed510058e8",
"08-project-import-modal-light.png": "a55af215c2c49b5a163c9d781ebb0927ffb862fcc82ee168151d5297e67ea480",
"09-project-search-dark.png": "5fcbbb1f19d94232dbe58fb3919466b1e6fcb54afdcad9949411f0eaf30f1e52",
"09-project-search-light.png": "c331e4b24c5fb36d7c12ccf5bf672656b972e75190082e6be031fb2232956c2f",
"10-home-dark.png": "c4180d9ef9c379e90759b4ec2f07e43f453e69aff1ef44ad696162f3455dafbd",
"10-home-light.png": "60c8907dfbfc3ac69797524bbe2fca2928379d15def16540436fe23b055fc117",
"11-catalog-dark.png": "7e211e14fbd6f1fcfe5eb895065675ccfe9d86f69f110d0c812123665bb2c891",
"11-catalog-light.png": "47439db2e9b941d9a9d6ade2244d63143c48abaeb619c779d1310dac597a6337",
"12-onboarding-prefilled-dark.png": "c443ae30e9f63d29f6153293b388bd6e6d9256ee414ddc3ab1f712a8af8a5c11",
"12-onboarding-prefilled-light.png": "bc0ddc7c386f3eb5d7d9a25f225563d10d917ac263c6df9571a0a8f558b4ebb7"
}
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 244 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.7 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.7 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.9 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.9 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.1 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.1 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.9 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.9 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 825 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 824 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 218 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 216 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 214 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 213 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 189 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 188 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 218 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 215 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 380 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 377 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 246 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 244 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 244 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.6 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.6 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.9 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.1 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.1 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.9 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.9 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 815 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 814 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 197 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 196 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 193 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 192 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 171 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 169 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 215 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 213 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 410 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 407 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 246 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 244 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 245 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.7 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.7 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.4 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.4 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.1 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.1 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 963 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 961 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 197 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 196 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 193 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 192 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 171 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 169 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 216 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 214 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 415 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 412 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 247 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 245 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 718 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 245 KiB

After

Width:  |  Height:  |  Size: 245 KiB

Before After
Before After

Binary file not shown.

Before

Width:  |  Height:  |  Size: 620 KiB

After

Width:  |  Height:  |  Size: 611 KiB

Before After
Before After

Binary file not shown.

Before

Width:  |  Height:  |  Size: 616 KiB

After

Width:  |  Height:  |  Size: 606 KiB

Before After
Before After

Binary file not shown.

Before

Width:  |  Height:  |  Size: 879 KiB

After

Width:  |  Height:  |  Size: 876 KiB

Before After
Before After

Binary file not shown.

Before

Width:  |  Height:  |  Size: 872 KiB

After

Width:  |  Height:  |  Size: 869 KiB

Before After
Before After

Binary file not shown.

Before

Width:  |  Height:  |  Size: 960 KiB

After

Width:  |  Height:  |  Size: 944 KiB

Before After
Before After

Binary file not shown.

Before

Width:  |  Height:  |  Size: 954 KiB

After

Width:  |  Height:  |  Size: 938 KiB

Before After
Before After

Binary file not shown.

Before

Width:  |  Height:  |  Size: 863 KiB

After

Width:  |  Height:  |  Size: 854 KiB

Before After
Before After

Binary file not shown.

Before

Width:  |  Height:  |  Size: 857 KiB

After

Width:  |  Height:  |  Size: 849 KiB

Before After
Before After

Binary file not shown.

Before

Width:  |  Height:  |  Size: 744 KiB

After

Width:  |  Height:  |  Size: 731 KiB

Before After
Before After

Binary file not shown.

Before

Width:  |  Height:  |  Size: 739 KiB

After

Width:  |  Height:  |  Size: 726 KiB

Before After
Before After

Binary file not shown.

Before

Width:  |  Height:  |  Size: 816 KiB

After

Width:  |  Height:  |  Size: 793 KiB

Before After
Before After

Binary file not shown.

Before

Width:  |  Height:  |  Size: 809 KiB

After

Width:  |  Height:  |  Size: 787 KiB

Before After
Before After

Binary file not shown.

Before

Width:  |  Height:  |  Size: 265 KiB

After

Width:  |  Height:  |  Size: 262 KiB

Before After
Before After

Binary file not shown.

Before

Width:  |  Height:  |  Size: 262 KiB

After

Width:  |  Height:  |  Size: 259 KiB

Before After
Before After

Binary file not shown.

Before

Width:  |  Height:  |  Size: 594 KiB

After

Width:  |  Height:  |  Size: 584 KiB

Before After
Before After

Binary file not shown.

Before

Width:  |  Height:  |  Size: 588 KiB

After

Width:  |  Height:  |  Size: 578 KiB

Before After
Before After

Binary file not shown.

Before

Width:  |  Height:  |  Size: 216 KiB

After

Width:  |  Height:  |  Size: 216 KiB

Before After
Before After

Binary file not shown.

Before

Width:  |  Height:  |  Size: 214 KiB

After

Width:  |  Height:  |  Size: 214 KiB

Before After
Before After

Binary file not shown.

Before

Width:  |  Height:  |  Size: 415 KiB

After

Width:  |  Height:  |  Size: 417 KiB

Before After
Before After

Binary file not shown.

Before

Width:  |  Height:  |  Size: 412 KiB

After

Width:  |  Height:  |  Size: 414 KiB

Before After
Before After

Binary file not shown.

Before

Width:  |  Height:  |  Size: 247 KiB

After

Width:  |  Height:  |  Size: 247 KiB

Before After
Before After

Binary file not shown.

Before

Width:  |  Height:  |  Size: 245 KiB

After

Width:  |  Height:  |  Size: 245 KiB

Before After
Before After

Binary file not shown.

Before

Width:  |  Height:  |  Size: 740 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 735 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 475 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 473 KiB

Some files were not shown because too many files have changed in this diff Show more