Compare commits

..

No commits in common. "main" and "v1.18.1" have entirely different histories.

120 changed files with 93 additions and 303 deletions

View file

@ -1,6 +1,6 @@
{ {
"name": "ms-ai-architect", "name": "ms-ai-architect",
"version": "1.18.2", "version": "1.18.1",
"description": "Microsoft AI Solution Architect - structured architecture guidance for the full Microsoft AI stack", "description": "Microsoft AI Solution Architect - structured architecture guidance for the full Microsoft AI stack",
"author": { "author": {
"name": "Kjell Tore Guttormsen" "name": "Kjell Tore Guttormsen"

View file

@ -7,19 +7,6 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
## [Unreleased] ## [Unreleased]
## [1.18.2] - 2026-09-23
### Changed
- Regenerated the playground screenshots from the current demo: 24 PNGs (12 surfaces × 2 themes) in `playground/screenshots/v1.15.0/`, including the dark onboarding view removed in 1.18.1. The README gallery, `docs/playground.md` and `tests/screenshot/README.md` describe this set.
- `tests/screenshot/run.mjs` clears PNGs a previous run left behind and writes `playground/screenshots/MANIFEST.json` (sha256 per PNG and of the demo state rendered).
- Aligned the demo project description with its reports (a housing-allowance chatbot, not building permits) and set six demo fixtures equal to the corrected AI Act deadlines already shown in the demo; `tests/kb-update/test-demo-project-description.test.mjs` keeps the demo block equal to its fixtures.
### Removed
- The v1.10.0, v1.11.0, v1.14.0 and v2-mockup screenshot sets (77 PNGs), which showed an earlier demo, and `tests/screenshot/shoot-mockup.local.mjs`, whose input file is not in the repository.
### Added
- `tests/kb-update/test-screenshots-manifest.test.mjs`: fails when a PNG in the tree is not output of the latest screenshot run, a PNG changed, the demo state changed after the run, or a doc points at another screenshot directory.
## [1.18.1] - 2026-09-23 ## [1.18.1] - 2026-09-23
### Changed ### Changed

View file

@ -8,7 +8,7 @@ Microsoft AI Solution Architect — structured architecture guidance for the ful
*AI-generated: all code produced by Claude Code through dialog-driven development. Every change is human-directed, reviewed, and validated before commit.* *AI-generated: all code produced by Claude Code through dialog-driven development. Every change is human-directed, reviewed, and validated before commit.*
![Version](https://img.shields.io/badge/version-1.18.2-blue) ![Version](https://img.shields.io/badge/version-1.18.1-blue)
![Platform](https://img.shields.io/badge/platform-Claude_Code_Plugin-purple) ![Platform](https://img.shields.io/badge/platform-Claude_Code_Plugin-purple)
![Docs](https://img.shields.io/badge/reference_docs-389-green) ![Docs](https://img.shields.io/badge/reference_docs-389-green)
![Agents](https://img.shields.io/badge/agents-12-orange) ![Agents](https://img.shields.io/badge/agents-12-orange)
@ -439,24 +439,22 @@ node scripts/build-demo-state.mjs
### Screenshot gallery ### Screenshot gallery
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: 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:
| # | File | What you see | | # | File | What you see |
|---|------|--------------| |---|------|--------------|
| 01 | `01-onboarding-empty-{dark,light}.png` | Onboarding surface, empty state | | 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-overview-{dark,light}.png` | Project view: sidebar with 17 artifacts, aggregate verdict, top risks | | 02 | `02-project-rapporter-regulatory-{dark,light}.png` | All 6 regulatory renderers (classify pyramid, requirements, transparency, FRIA, conformity kanban, DPIA matrix) |
| 03 | `03-project-artifact-classify-{dark,light}.png` | EU AI Act classification (risk pyramid, role, obligations) | | 03 | `03-project-rapporter-security-{dark,light}.png` | 6×5 + 7×5 risk matrices, radar, top-risks, residual-pair, recommendation-card, review kanban |
| 04 | `04-project-artifact-security-{dark,light}.png` | Security assessment (6×5 matrix) | | 03 | `03-project-rapporter-economy-{dark,light}.png` | Cost distribution P10/P50/P90, license capability matrix |
| 05 | `05-project-artifact-ros-{dark,light}.png` | ROS analysis (risk matrix, radar) | | 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 |
| 06 | `06-project-artifact-cost-{dark,light}.png` | Cost estimate (P10/P50/P90 in NOK) | | 03 | `03-project-rapporter-tool-{dark,light}.png` | 7 tool commands (no report — pipeline-string builders) |
| 07 | `07-project-artifact-summary-{dark,light}.png` | Technical summary and decision note | | 04-06 | `04-project-oversikt-{dark,light}.png` etc. | Project screen-tabs (oversikt / kontekst / eksport) |
| 08 | `08-project-import-modal-{dark,light}.png` | Import modal (viewport only) | | 07 | `07-home-{dark,light}.png` | Home with project list + 3 entry tracks |
| 09 | `09-project-search-{dark,light}.png` | Sidebar search filtering artifacts | | 08 | `08-catalog-{dark,light}.png` | Catalog with 29 commands in 5 expansion-grupper |
| 10 | `10-home-{dark,light}.png` | Home with project list | | 09 | `09-onboarding-prefilled-{dark,light}.png` | Onboarding with state from demo |
| 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`. 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. Regenerate via `cd tests/screenshot && npm install && npx playwright install chromium && node run.mjs`.
### Validation ### Validation

View file

@ -21,7 +21,7 @@ disclose within 90 days of the initial report.
## Supported versions ## Supported versions
The latest tagged release (currently 1.18.2) is the only supported The latest tagged release (currently 1.18.1) is the only supported
version. Security fixes land on `main` and are released as a new tag; version. Security fixes land on `main` and are released as a new tag;
we do not backport fixes to older releases. See `CHANGELOG.md` for the we do not backport fixes to older releases. See `CHANGELOG.md` for the
release history. release history.

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. `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. 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". `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".
## Design-system 100%-adoption (v1.11.0 → v1.14.0) ## Design-system 100%-adoption (v1.11.0 → v1.14.0)

View file

@ -239,7 +239,7 @@
{ {
"id": "acme-kunde-chatbot", "id": "acme-kunde-chatbot",
"name": "Acme: Kunde-chatbot", "name": "Acme: Kunde-chatbot",
"description": "AI-chatbot som svarer innbyggere på henvendelser og forhåndsvurderer søknader om kommunal bostøtte ut fra opplastede vedlegg. Trenger DPIA, ROS, EU AI Act-klassifisering og kostnadsestimat før beslutning. Alle 17 rapport-typer er pre-importert med eksempel-data.", "description": "AI-chatbot som hjelper innbyggere med byggesak-spørsmål. Trenger DPIA, ROS, EU AI Act-klassifisering og kostnadsestimat før beslutning. Alle 17 rapport-typer er pre-importert med eksempel-data.",
"scenarios": [ "scenarios": [
"Chatbot/agent", "Chatbot/agent",
"Beslutningsstøtte" "Beslutningsstøtte"

View file

@ -1,31 +0,0 @@
{
"generator": "tests/screenshot/run.mjs",
"dir": "playground/screenshots/v1.15.0",
"demoStateSha256": "f952333f8cc8471c1bf0bfa0e4aff638bdb81b5c1351e4e0b1ca0fea7f24969f",
"files": {
"01-onboarding-empty-dark.png": "258c8e1d71ee0ef91ca9b0521939bc7b8ed340f1d2a8b477760463d21314da95",
"01-onboarding-empty-light.png": "bc0ddc7c386f3eb5d7d9a25f225563d10d917ac263c6df9571a0a8f558b4ebb7",
"02-project-overview-dark.png": "dbd45d1b49d33d7483f0bf6e22419e5e6621aec2b7802e6d6880ecc4498a855a",
"02-project-overview-light.png": "c98f83ce1f01d7367e10bbc30a97152c27777af55f4df2c62819d808b1f1d001",
"03-project-artifact-classify-dark.png": "ab8255ca57624ee81e3790561403934dbd516463c8d3fb2a36aa8d7640492a95",
"03-project-artifact-classify-light.png": "268386ca08b5ec5f9a7bb83dab928b4d2f9268781f99e29e0020243fd3926bd0",
"04-project-artifact-security-dark.png": "1b3cbc8ddbf0fba6af5de559fdf8208eb4ffe909fe2775d60e52443f53cf3b57",
"04-project-artifact-security-light.png": "ed95d278bcf41ebf9377f7a7641b022a14550694feb08a3e03195a347634dd28",
"05-project-artifact-ros-dark.png": "7f2bde4833fa35d30b79bc57c847c172d2383cdcfe85bd061860b7b7020602f8",
"05-project-artifact-ros-light.png": "02721873b69e2a8fd6636b0b3229035fc89e4af6d04f087228c2e214355f8991",
"06-project-artifact-cost-dark.png": "c2516e500aa6eb6b81ec6c770d8a771de653d78ff533b77f0f2c9e6b8f48c2bc",
"06-project-artifact-cost-light.png": "54a5d7994f8b660819d6b1302a8cef5605bea505bc729076621975de5f26ae24",
"07-project-artifact-summary-dark.png": "513cc3e39e8ee5a9dfa8201d881799e7b5023f1eb6afb96a40be13d9833ab093",
"07-project-artifact-summary-light.png": "7ddea4ad5aed3b273323312fe68e767e160adedae937cda9030153ef6107d04d",
"08-project-import-modal-dark.png": "72dcf6748bbb5b8227fa2e105e420d04f53270c6a812746ccd33c946807c980e",
"08-project-import-modal-light.png": "6fb21d479c6d6e8da4c29e748e2d9611c266fc2577f01bf23248f795dcec5b39",
"09-project-search-dark.png": "76ad042f2fb1bd8f6c23d4c7088bcbd8f2cbeb116c31143823c7d1f243502ffa",
"09-project-search-light.png": "6ca20d2830775837858c242070836f45a17b2e58067daa82569d9985383a511d",
"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.

After

Width:  |  Height:  |  Size: 244 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.7 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.7 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.9 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.9 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 825 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 824 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 218 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 216 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 214 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 213 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 189 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 188 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 218 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 215 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 380 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 377 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 246 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 244 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 244 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.6 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.6 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.9 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 815 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 814 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 197 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 196 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 193 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 192 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 171 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 169 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 215 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 213 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 410 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 407 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 246 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 244 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 245 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.7 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.7 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.4 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.4 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 963 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 961 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 197 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 196 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 193 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 192 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 171 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 169 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 216 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 214 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 415 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 412 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 247 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 245 KiB

Binary file not shown.

Before

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: 627 KiB

After

Width:  |  Height:  |  Size: 620 KiB

Before After
Before After

Binary file not shown.

Before

Width:  |  Height:  |  Size: 622 KiB

After

Width:  |  Height:  |  Size: 616 KiB

Before After
Before After

Binary file not shown.

Before

Width:  |  Height:  |  Size: 894 KiB

After

Width:  |  Height:  |  Size: 879 KiB

Before After
Before After

Binary file not shown.

Before

Width:  |  Height:  |  Size: 885 KiB

After

Width:  |  Height:  |  Size: 872 KiB

Before After
Before After

Binary file not shown.

Before

Width:  |  Height:  |  Size: 961 KiB

After

Width:  |  Height:  |  Size: 960 KiB

Before After
Before After

Binary file not shown.

Before

Width:  |  Height:  |  Size: 954 KiB

After

Width:  |  Height:  |  Size: 954 KiB

Before After
Before After

Binary file not shown.

Before

Width:  |  Height:  |  Size: 871 KiB

After

Width:  |  Height:  |  Size: 863 KiB

Before After
Before After

Binary file not shown.

Before

Width:  |  Height:  |  Size: 864 KiB

After

Width:  |  Height:  |  Size: 857 KiB

Before After
Before After

Binary file not shown.

Before

Width:  |  Height:  |  Size: 748 KiB

After

Width:  |  Height:  |  Size: 744 KiB

Before After
Before After

Binary file not shown.

Before

Width:  |  Height:  |  Size: 742 KiB

After

Width:  |  Height:  |  Size: 739 KiB

Before After
Before After

Binary file not shown.

Before

Width:  |  Height:  |  Size: 810 KiB

After

Width:  |  Height:  |  Size: 816 KiB

Before After
Before After

Binary file not shown.

Before

Width:  |  Height:  |  Size: 802 KiB

After

Width:  |  Height:  |  Size: 809 KiB

Before After
Before After

Binary file not shown.

Before

Width:  |  Height:  |  Size: 272 KiB

After

Width:  |  Height:  |  Size: 265 KiB

Before After
Before After

Binary file not shown.

Before

Width:  |  Height:  |  Size: 268 KiB

After

Width:  |  Height:  |  Size: 262 KiB

Before After
Before After

Binary file not shown.

Before

Width:  |  Height:  |  Size: 600 KiB

After

Width:  |  Height:  |  Size: 594 KiB

Before After
Before After

Binary file not shown.

Before

Width:  |  Height:  |  Size: 593 KiB

After

Width:  |  Height:  |  Size: 588 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: 417 KiB

After

Width:  |  Height:  |  Size: 415 KiB

Before After
Before After

Binary file not shown.

Before

Width:  |  Height:  |  Size: 414 KiB

After

Width:  |  Height:  |  Size: 412 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

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