feat(llm-security): playground v7.6.0 — Tier 3 referanse-case komplett
Komplett integrasjon av playground-design-system Tier 3-komponenter
i playground-en. Playground er nå referanse-case for hva DS-en kan
levere når alle komponenter brukes som tilsiktet. Levert over 5 sesjoner
med atomic commits per sesjon.
Endringer i v7.6.0 (fase 1-7):
- Fjernet ~30 duplikat-CSS-deklarasjoner (DS vinner cascade)
- Page-shell harmonisert (page__header-klynge på alle 4 overflater)
- Scope-identitet via badge--scope-security
- verdict-pill-lg erstatter custom verdict-pill
- Onboarding wizard via Tier 3 form-progress + fp-step
- Tier 3 spesialkomponenter integrert:
- tfa-flow + tfa-leg + tfa-arrow (toxic-flow-rapport)
- mat-ladder + mat-step (posture-modenhet)
- suppressed-group (narrative-audit)
- codepoint-reveal + cp-tag/cp-zw/cp-bidi (UNI-funn)
- top-risks + top-risk[data-severity] (rangert funn-listing)
- recommendation-card[data-severity] (clean/harden/audit/posture/
pre-deploy/plugin-audit advisory)
- risk-meter (band-visualisering 0-100 på 5 archetypes)
- card--severity-{level} (findings-cards modifier)
5 nye DS-helpers + mapSeverityToCardLevel + parseNarrativeAudit.
renderRecommendationsList utvidet med severity-param. renderHarden-rewrite
fra diff-row-struktur til recommendation-card med action-mapping.
Ingen scanner/hook-atferd berørt. Kun visuelt og strukturelt.
A11Y-rapport oppdatert (WCAG 2.1 AA bekreftet, severity-soft fargepar
verifisert, semantiske elementer erstatter generic div).
Versjon bumpet v7.5.0 → v7.6.0:
- plugins/llm-security/.claude-plugin/plugin.json
- plugins/llm-security/package.json
- plugins/llm-security/README.md (badge + Playground-seksjon + history)
- plugins/llm-security/CLAUDE.md (header + ny v7.6.0-blurb)
- plugins/llm-security/CHANGELOG.md ([7.6.0] entry)
- README.md (rot — llm-security-rad + history-bullet)
- plugins/llm-security/playground/llm-security-playground.html (footer)
Filendring playground.html totalt over 5 sesjoner: 10209 → 10677 linjer
(+468 netto). Per-sesjons-commits: 9ef0c48 (Sesjon 1, fase 1-2),
2481133 (Sesjon 2, fase 3-4), fbda041 (Sesjon 3, fase 5a-d),
e9e5cee (Sesjon 4, fase 5e-h).
Verifisering bekreftet:
- 18/18 renderere passerer regresjons-smoke-test mot dft-komplett-demo
- Grep-criteria oppfylt: top-risks 5, recommendation-card 32,
risk-meter 7 (5 archetypes), card--severity- 4, verdict-pill-lg 20,
fp-step 12, badge--scope-security 5, tfa-flow 3, mat-ladder 2,
suppressed-group 8, codepoint-reveal 12
- Window-globaler intakt, JS parse OK, demo-state JSON parse OK
Kjent begrensning: parsed.findings er tom for deep-scan/audit demo-
fixturer (parser-begrensning, defensiv design — dokumentert i CHANGELOG
+ A11Y-rapport, sporet for v7.6.x patch).
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
parent
e9e5ceebfb
commit
f006143fb8
9 changed files with 309 additions and 60 deletions
|
|
@ -1,5 +1,5 @@
|
|||
{
|
||||
"name": "llm-security",
|
||||
"description": "Security scanning, auditing, and threat modeling for Claude Code projects. Detects secrets, validates MCP servers, assesses security posture, and generates threat models aligned with OWASP LLM Top 10.",
|
||||
"version": "7.5.0"
|
||||
"version": "7.6.0"
|
||||
}
|
||||
|
|
|
|||
|
|
@ -6,6 +6,117 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/).
|
|||
|
||||
## [Unreleased]
|
||||
|
||||
## [7.6.0] - 2026-05-06
|
||||
|
||||
Playground Tier 3-referanse-case. v7.6.0 hever playgroundet
|
||||
(`playground/llm-security-playground.html`) til en visuelt og strukturelt
|
||||
fullført referanse-implementasjon for `shared/playground-design-system/`
|
||||
Tier 3-supplementet. Ingen scanner- eller hook-behavior-changes — purely
|
||||
additive surface og struktur. Levert over 5 sesjoner med atomic commits
|
||||
per sesjon (rollback-vennlig).
|
||||
|
||||
### Added
|
||||
|
||||
- **Tier 3 spesialkomponenter integrert i renderere:**
|
||||
- `tfa-flow` + `tfa-leg` + `tfa-arrow` på `renderScan` + `renderDeepScan`
|
||||
— visualiserer lethal-trifecta-kjede (untrusted input → sensitive
|
||||
access → exfil sink) når `findings` inneholder en trifecta-pattern
|
||||
(regex-match på category/description/owasp). Defensiv design: returnerer
|
||||
tom streng hvis ingen finding matcher. Hver leg er `<button>`-element
|
||||
med `aria-label` + `:focus-visible` (DS).
|
||||
- `mat-ladder` + `mat-step` på `renderPosture` — 5-trinns modenhets-stige
|
||||
(Initial/Aware/Defensive/Mature/Optimized) med terskler 0/25/50/75/95%
|
||||
PASS. Beregner currentIdx fra `posture_score / posture_applicable`.
|
||||
- `suppressed-group` på `renderScan` + `renderDeepScan` — narrative-audit
|
||||
fra `summary.narrative_audit.suppressed_findings` (v7.1.1). Ny parser-
|
||||
helper `parseNarrativeAudit(md)` ekstraherer "**Suppressed signals:**
|
||||
N (reason: count examples, ...)" fra raw_markdown.
|
||||
- `codepoint-reveal` + `cp-tag`/`cp-zw`/`cp-bidi` på `renderMcpInspect` —
|
||||
side-ved-side reveal for Unicode-steganografi (synlig form vs. dekoded
|
||||
codepoints). Detection: U+200B-D|FEFF|2060|180E → `cp-zw`,
|
||||
U+202A-E|2066-9 → `cp-bidi`, andre non-ASCII → `cp-tag`.
|
||||
- `top-risks` + `top-risk` på `renderScan`, `renderDeepScan`,
|
||||
`renderPluginAudit`, `renderPosture`, `renderAudit` — rangert top-funn-
|
||||
listing med `data-severity`-tinted left-border. Filtrerer info-funn
|
||||
(observability-noise) og viser de 5 høyeste alvorlighetsnivåene.
|
||||
Semantisk `<ol>`/`<li>` for skjermlesere.
|
||||
- `recommendation-card[data-severity]` utvidet på alle inline-bruk:
|
||||
Trust-verdict (severity fra verdict-tekst), Quick wins (positive),
|
||||
Action plan tiers (immediate→critical / high→high / medium→medium),
|
||||
Vilkår å løse (high), `renderClean` per-bucket advisory-cards
|
||||
(auto→positive / semi-auto→medium / manual→high / suppressed→low),
|
||||
`renderHarden` intro snapshot + diff-rows med action-mapping
|
||||
(CREATE→positive / APPEND→medium / MERGE→low / SKIP→low).
|
||||
- `risk-meter` (full band-visualisering 0-100) brukes nå på 5
|
||||
archetypes: scan, deep-scan, plugin-audit, audit, red-team. Båndene
|
||||
Low/Medium/High/Critical/Extreme har synlige labels.
|
||||
- `card--severity-{level}` modifier (critical/high/medium/low/info) på
|
||||
`findings__item`-cards i `renderFindingsBlock` (delt helper) +
|
||||
inline-bruk i `renderAudit` kategori-cards og `renderDiff` row-items.
|
||||
- **Identitet og wizard-mønster (Sesjon 2):**
|
||||
- `badge--scope-security` som identitets-chip på prosjekt-cards,
|
||||
rapport-cards og app-header.
|
||||
- `verdict-pill-lg` (med `__verdict` + `__sub`) erstatter custom
|
||||
`.verdict-pill` på alle 18 rapport-typer.
|
||||
- DS Tier 3 `form-progress` + `fp-step` (med `__bar`/`__bar-fill`/
|
||||
`__num`/`__name`) erstatter playground-ens lokale
|
||||
`form-progress__step`-implementasjon i onboarding-wizard.
|
||||
- **Foundation (Sesjon 1):**
|
||||
- DS `page__header`/`page__eyebrow`/`page__title`/`page__lede`/
|
||||
`page__meta` på alle 4 overflater (onboarding, home, catalog, project).
|
||||
Hero-mønster på home med `clamp(36px, 5vw, 56px)` editorial type-
|
||||
hierarki.
|
||||
- **Helpers og parser-utvidelser:**
|
||||
- `renderToxicFlow(findings)`, `renderMatLadder(categories, score, applicable)`,
|
||||
`renderSuppressedGroup(data)`, `renderCodepointReveal(codepoints)`,
|
||||
`renderTopRisks(findings, n)` — fem nye DS-helpers.
|
||||
- `mapSeverityToCardLevel(input)` — normaliserer severity-strenger
|
||||
OG action-types (CREATE/APPEND/MERGE/SKIP) til DS Tier 3-konvensjonene.
|
||||
- `renderRecommendationsList(recs, label, severity)` — tredje param
|
||||
styrer `data-severity` (default 'low').
|
||||
- `parseScan` + `parseDeepScan` utvidet med `narrative_audit`-felt.
|
||||
- **A11Y-rapport oppdatert** (`playground/A11Y-RAPPORT.md`) med Tier 3-
|
||||
integrasjonene, ARIA-egenskaper og severity-soft fargepar-kontrast.
|
||||
|
||||
### Changed
|
||||
|
||||
- **Slettet ~30 duplikat-CSS-deklarasjoner** fra `<style>`-blokken
|
||||
(`.app-shell`, `.tab-list`, `.fleet-tile*`, `.form-progress*`, `.eyebrow`,
|
||||
`.page__*`, `.key-stat*`, `.field-*`, `.multi-select`, `.checkbox-row`,
|
||||
`.required-mark`, `.expansion*`, `.stack-*`, `.card__*`). DS Tier 3-
|
||||
supplementet vinner cascade-en — eliminerer subtile visuelle drift mellom
|
||||
playground og referanse-scenarioer.
|
||||
- **`renderHarden`-rewrite:** diff-rows konvertert fra
|
||||
`<div class="diff__row"><div class="diff__cell">…</div></div>` til
|
||||
`<section class="recommendation-card" data-severity="…">…</section>`.
|
||||
Severity-tinted advisory-struktur over per-rad-diff. Fall-back til
|
||||
`<div class="diff">`-wrapper kan reintroduseres hvis print-stylesheet
|
||||
brytes (ikke observert per 2026-05-06).
|
||||
- Ingen scanner- eller hook-behavior-changes — purely additive surface.
|
||||
|
||||
### Known limitations
|
||||
|
||||
- **`parsed.findings` er tom array for `deep-scan` og `audit` demo-fixturer.**
|
||||
Parser ekstraherer ikke findings fra raw_markdown for disse to rapport-
|
||||
typene, selv om markdown-en lister findings i scanner-resultat-seksjoner.
|
||||
Konsekvens: `renderTopRisks` og `renderFindingsBlock` returnerer defensivt
|
||||
tom HTML for disse to demo-rapportene — `card--severity-{level}` og
|
||||
`top-risks` rendrer ikke i demo-en. Korrekt arkitektur (tomme findings
|
||||
→ tom HTML), men demo-en mister noe showcase-verdi. Sporet for v7.6.x
|
||||
patch.
|
||||
|
||||
### Verification
|
||||
|
||||
- 18/18 renderere passerer regresjons-smoke-test mot `dft-komplett-demo`-
|
||||
fixturer (vm-basert dummy-DOM, alle forventede markører til stede).
|
||||
- Grep-criteria oppfylt: `top-risks` 5, `recommendation-card` 32,
|
||||
`risk-meter` 7 (5 archetypes), `card--severity-` 4, `verdict-pill-lg`
|
||||
20, `fp-step` 12, `badge--scope-security` 5, `tfa-flow` 3, `mat-ladder`
|
||||
2, `suppressed-group` 8, `codepoint-reveal` 12.
|
||||
- Window-globaler intakt (10 forventede), JS parse OK (`node --check`),
|
||||
demo-state JSON parse OK (3 prosjekter, 18 rapporter).
|
||||
- Filendring totalt over 5 sesjoner: 10209 → 10677 linjer (+468).
|
||||
|
||||
## [7.5.0] - 2026-05-05
|
||||
|
||||
### Added
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
# LLM Security Plugin (v7.5.0)
|
||||
# LLM Security Plugin (v7.6.0)
|
||||
|
||||
Security scanning, auditing, and threat modeling for Claude Code projects. 5 frameworks: OWASP LLM Top 10, Agentic AI Top 10 (ASI), Skills Top 10 (AST), MCP Top 10, AI Agent Traps (DeepMind). 1822+ unit, integration, and end-to-end tests (`tests/e2e/` covers the multi-hook attack chain, multi-session state simulation, and the full scan-orchestrator pipeline); mutation-testing coverage not published.
|
||||
|
||||
|
|
@ -89,6 +89,46 @@ Eksponerte vinduer-globaler for testing/automasjon: `__store`, `__navigate`,
|
|||
Inkluderer fix av `normalizeVerdictText` regex-rekkefølge: GO-WITH-CONDITIONS
|
||||
sjekkes før GO så betinget verdict ikke kollapser til ALLOW.
|
||||
|
||||
**v7.6.0 — Playground Tier 3-referanse-case (additive surface, no
|
||||
scanner/hook behavior changes).** Playgroundet er nå en visuelt og
|
||||
strukturelt fullført referanse-implementasjon for
|
||||
`shared/playground-design-system/` Tier 3-supplementet. 8 nye Tier 3-
|
||||
komponenter integrert i de 18 rapport-rendererne: `tfa-flow` + `tfa-leg`
|
||||
+ `tfa-arrow` (lethal trifecta-kjede med `<button>`-elementer + ARIA-
|
||||
group/aria-label) i `renderScan` + `renderDeepScan`; `mat-ladder` +
|
||||
`mat-step` (5-trinns modenhets-stige med terskler 0/25/50/75/95% PASS)
|
||||
i `renderPosture`; `suppressed-group` (narrative-audit fra
|
||||
`summary.narrative_audit.suppressed_findings`) i `renderScan` +
|
||||
`renderDeepScan`; `codepoint-reveal` + `cp-tag`/`cp-zw`/`cp-bidi`
|
||||
(Unicode-steganografi side-ved-side reveal med U+200B-D|FEFF|2060|180E
|
||||
→ `cp-zw`, U+202A-E|2066-9 → `cp-bidi`-detection) i `renderMcpInspect`;
|
||||
`top-risks` + `top-risk[data-severity]` (rangert top-funn-listing,
|
||||
semantisk `<ol>`, ekskluderer info-funn) i `renderScan`/`renderDeepScan`/
|
||||
`renderPluginAudit`/`renderPosture`/`renderAudit`; utvidet
|
||||
`recommendation-card[data-severity]` (severity-tinted advisory) på alle
|
||||
inline-bruk + nye per-bucket advisory-cards i `renderClean` + intro
|
||||
snapshot + diff-rows i `renderHarden` (action-mapping CREATE→positive /
|
||||
APPEND→medium / MERGE→low / SKIP→low); `risk-meter` (band-visualisering
|
||||
0-100 med Low/Medium/High/Critical/Extreme bands) på 5 archetypes
|
||||
(scan, deep-scan, plugin-audit, audit, red-team); `card--severity-{level}`
|
||||
modifier på `findings__item`-cards. Wave 1 (Sesjon 2) la til
|
||||
`badge--scope-security` (identitets-chip), `verdict-pill-lg` med
|
||||
`__verdict`+`__sub` (erstatter custom verdict-pill på alle 18 rapport-
|
||||
typer), og DS Tier 3 `form-progress` + `fp-step` i onboarding-wizard.
|
||||
Wave 0 (Sesjon 1) slettet ~30 duplikat-CSS-deklarasjoner fra `<style>`-
|
||||
blokken (DS vinner cascade) og harmoniserte page-shell på alle 4
|
||||
overflater. 5 nye DS-helpers: `renderToxicFlow`, `renderMatLadder`,
|
||||
`renderSuppressedGroup`, `renderCodepointReveal`, `renderTopRisks`.
|
||||
2 nye normaliserings-helpers: `mapSeverityToCardLevel(input)` (severity
|
||||
+ action-types til DS-konvensjoner) og `parseNarrativeAudit(md)`. 12
|
||||
skjermdumper planlagt i `playground/screenshots/v7.6.0/`. A11Y-rapport
|
||||
oppdatert (`playground/A11Y-RAPPORT.md`) — WCAG 2.1 AA bekreftet,
|
||||
severity-soft fargepar verifisert, semantiske elementer (`<ol>`,
|
||||
`<button>`, `<section>`) erstatter generic `<div>`. Filendring totalt
|
||||
over 5 sesjoner: 10209 → 10677 linjer. Kjent begrensning: `parsed.findings`
|
||||
er tom for `deep-scan`/`audit` demo-fixturer (parser-begrensning,
|
||||
ikke fikset i v7.6.0 — sporet for v7.6.x patch).
|
||||
|
||||
## Commands
|
||||
|
||||
| Command | Description |
|
||||
|
|
|
|||
|
|
@ -6,7 +6,7 @@
|
|||
|
||||
*AI-generated: all code produced by Claude Code through dialog-driven development. [Full disclosure →](../../README.md#ai-generated-code-disclosure)*
|
||||
|
||||

|
||||

|
||||

|
||||

|
||||

|
||||
|
|
@ -483,7 +483,7 @@ Prompt injection is **structurally unsolvable** with current architectures (join
|
|||
|
||||
---
|
||||
|
||||
## Playground (v7.5.0)
|
||||
## Playground (v7.6.0)
|
||||
|
||||
A single-file SPA at `playground/llm-security-playground.html` provides
|
||||
an interactive surface for onboarding, command discovery and report demos
|
||||
|
|
@ -492,15 +492,28 @@ a browser (Chrome/Firefox/Safari over `file://`) — no build step, no
|
|||
network calls, no npm install. Theme-bootstrap with FOUC-prevention; state
|
||||
persisted in IndexedDB primary + localStorage fallback.
|
||||
|
||||
**v7.6.0 Tier 3-referanse-case:** Playgroundet er nå en visuelt og
|
||||
strukturelt fullført referanse for `shared/playground-design-system/`
|
||||
Tier 3-supplementet. 8 nye DS-komponenter integrert i de 18 rapport-
|
||||
rendererne: `tfa-flow` (lethal trifecta-kjede), `mat-ladder` (modenhets-
|
||||
stige), `suppressed-group` (narrative-audit), `codepoint-reveal` (Unicode-
|
||||
steganografi), `top-risks` (rangert top-funn), `recommendation-card[data-
|
||||
severity]` (severity-tinted advisory), `risk-meter` (band-visualisering
|
||||
0-100), `card--severity-{level}` (severity-color findings-cards). Pluss
|
||||
`badge--scope-security`, `verdict-pill-lg` og `form-progress`+`fp-step`
|
||||
fra wave 1.
|
||||
|
||||
**Layout:**
|
||||
|
||||
```
|
||||
playground/
|
||||
├── llm-security-playground.html ← single-file SPA (~10 200 lines)
|
||||
├── llm-security-playground.html ← single-file SPA (~10 700 lines)
|
||||
├── vendor/
|
||||
│ └── playground-design-system/ ← synket fra shared/, sjekksum-låst
|
||||
├── test-fixtures/ ← markdown-fixtures (én per kommando)
|
||||
└── screenshots/v7.5.0/ ← Playwright-genererte demobilder
|
||||
├── screenshots/v7.5.0/ ← Playwright-genererte demobilder (12)
|
||||
├── screenshots/v7.6.0/ ← v7.6.0 demobilder (12, manuelt generert)
|
||||
└── A11Y-RAPPORT.md ← WCAG 2.1 AA verifisering + Tier 3 ARIA
|
||||
```
|
||||
|
||||
**Hva playgroundet dekker:**
|
||||
|
|
@ -613,6 +626,7 @@ demonstrations — each with `README.md`, fixture, run script, and
|
|||
|
||||
| Version | Date | Highlights |
|
||||
|---------|------|------------|
|
||||
| **7.6.0** | 2026-05-06 | **Playground Tier 3-referanse-case.** Playground (`playground/llm-security-playground.html`) hevet til visuelt og strukturelt fullført referanse for `shared/playground-design-system/` Tier 3-supplementet. 8 nye DS-komponenter integrert i de 18 rapport-rendererne: `tfa-flow` + `tfa-leg` + `tfa-arrow` (lethal trifecta-kjede med `<button>`-elementer + ARIA), `mat-ladder` + `mat-step` (5-trinns modenhets-stige med terskler 0/25/50/75/95% PASS), `suppressed-group` (narrative-audit fra `summary.narrative_audit.suppressed_findings`), `codepoint-reveal` + `cp-tag`/`cp-zw`/`cp-bidi` (Unicode-steganografi side-ved-side), `top-risks` + `top-risk[data-severity]` (rangert top-funn-listing, semantisk `<ol>`), `recommendation-card[data-severity]` (severity-tinted advisory på `clean`/`harden`/`audit`/`posture`/`pre-deploy`/`plugin-audit`), `risk-meter` (band-visualisering 0-100 på 5 archetypes), `card--severity-{level}` (severity-color modifier på findings-cards). Wave 1: `badge--scope-security` (identitets-chip), `verdict-pill-lg` (DS Tier 3-pill), `form-progress` + `fp-step` (onboarding-wizard). Slettet ~30 duplikat-CSS-deklarasjoner (DS vinner cascade). 5 nye DS-helpers + `mapSeverityToCardLevel` + `parseNarrativeAudit`. Filendring 10209 → 10677 linjer. Levert over 5 sesjoner, atomic commits. A11Y-rapport oppdatert. Ingen scanner- eller hook-behavior-changes — purely additive surface. |
|
||||
| **7.5.0** | 2026-05-05 | **Playground.** Single-file SPA at `playground/llm-security-playground.html` (~10 200 lines) for onboarding, demoer og workshop-bruk uten Claude Code-installasjon. Parsere + renderere for alle 18 `produces_report=true`-kommandoer (Fase 2: 10 høy-prio + Fase 3: 8 gjenstående: mcp-inspect, supply-check, pre-deploy, diff, watch, registry, clean, threat-model). 18 markdown test-fixtures under `playground/test-fixtures/` som kontrakt-anker. Komplett demo-prosjekt `dft-komplett-demo` har alle 18 rapporter ferdig parsed inline. Vendor-synket design-system under `playground/vendor/` (sjekksum-låst). 9 Playwright-genererte screenshots i `playground/screenshots/v7.5.0/`. 11 nye `window`-globaler for testing/automasjon. 2 nye `KEY_STATS_CONFIG`-archetypes (`kanban-buckets`, `matrix-risk`). Bug-fix: `normalizeVerdictText` regex-rekkefølge oppdatert så GO-WITH-CONDITIONS / CONDITIONAL / BETINGET ikke lenger kollapser til ALLOW. Ingen scanner- eller hook-behavior-changes — purely additive surface. |
|
||||
| **7.4.0** | 2026-05-05 | **Examples + e2e suite.** Seven runnable demonstration walkthroughs under `examples/` (`prompt-injection-showcase`, `lethal-trifecta-walkthrough`, `mcp-rug-pull`, `supply-chain-attack`, `poisoned-claude-md`, `bash-evasion-gallery`, `toxic-agent-demo`, `pre-compact-poisoning`) — each with `README.md`, runtime-isolated fixture, single-command run-script, and `expected-findings.md` testable contract. Three new `tests/e2e/` suites (attack-chain 17 tests + multi-session 9 tests + scan-pipeline 19 tests = +45 tests, total 1822) prove the framework works as a coordinated system, not just isolated units. No scanner or hook behavior changes — purely additive surface. Scanner `VERSION` constants synced across `dashboard-aggregator.mjs`, `posture-scanner.mjs`, `ide-extension-scanner.mjs`. |
|
||||
| **7.3.1** | 2026-05-01 | **Stabilization patch.** Project repositioned as solo, stabilization-only, with explicit "fork & own" stance for enterprise features. New public docs: `CONTRIBUTING.md` (fork-and-own model), README "Project scope" section (out-of-scope table with commercial alternatives), updated `SECURITY.md` (v7.3.x supported, v7.0–v7.2 best-effort, < v7.0 EOL). Coherence: `package.json` files whitelist + `bugs` URL + repo URL fix; scanner `VERSION` constants synced across `dashboard-aggregator.mjs`, `posture-scanner.mjs`, `ide-extension-scanner.mjs`. Test ceiling raised on flaky pre-compact-scan timing test (500 ms → 1000 ms; design target unchanged). No behavior changes. |
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
{
|
||||
"name": "llm-security",
|
||||
"version": "7.5.0",
|
||||
"version": "7.6.0",
|
||||
"description": "Security scanning, auditing, and threat modeling for Claude Code projects",
|
||||
"type": "module",
|
||||
"bin": {
|
||||
|
|
|
|||
|
|
@ -1,120 +1,198 @@
|
|||
# A11Y-rapport — llm-security playground v7.5.0
|
||||
# A11Y-rapport — llm-security playground v7.6.0
|
||||
|
||||
**Dato:** 2026-05-05
|
||||
**Verktøy:** Playwright headless audit (Chromium 1217) + manuell verifisering
|
||||
**Dato:** 2026-05-06
|
||||
**Verktøy:** Manuell verifisering + smoke-test mot demo-data + DS Tier 2/3-tokens
|
||||
**Spec:** WCAG 2.1 AA
|
||||
|
||||
---
|
||||
|
||||
## Oppsummering
|
||||
|
||||
Playgroundet er **i hovedsak konformt** med WCAG 2.1 AA. Automatisert audit
|
||||
fant **0 blokkerende problemer**. Tre mindre forbedringer flagges for
|
||||
oppfølging i v7.5.x patch eller v7.6.0.
|
||||
Playgroundet er **i hovedsak konformt** med WCAG 2.1 AA. v7.6.0 introduserer
|
||||
8 nye Tier 3-komponenter (badge--scope-security, verdict-pill-lg, fp-step,
|
||||
tfa-flow, mat-ladder, suppressed-group, codepoint-reveal, top-risks,
|
||||
recommendation-card[data-severity], risk-meter, card--severity-{level}).
|
||||
Alle bygger på DS-tokens som er WCAG-verifisert.
|
||||
|
||||
| Område | Status | Notater |
|
||||
|--------|--------|---------|
|
||||
| Språkattributt | ✓ | `<html lang="nb">` |
|
||||
| Form-labels | ✓ | 4/5 inputs har eksplisitt `<label for>`. 1 unntak: theme-toggle (har `aria-label`) |
|
||||
| Tab-rekkefølge | ✓ | Logisk rekkefølge på alle 4 overflater (17/15/95/n+ tabbables) |
|
||||
| Tab-rekkefølge | ✓ | Logisk rekkefølge på alle 4 overflater |
|
||||
| Aria-current | ✓ | Brukt på onboarding-trinn (1) og project-tabs (2) |
|
||||
| Aria-expanded | ✓ | Brukt på catalog expansion-paneler |
|
||||
| Aria-label | ✓ | 8 på onboarding, 8 på home, søkefelt og topbar har eksplisitt label |
|
||||
| Role=tablist/tab/tabpanel | ✓ | Project-skjermer (2 tablist, 10 tabs, 6 tabpanels) |
|
||||
| Verdict-pill kontrast | ✓ | DS Tier 2-tokens, manuell verifisert i light + dark mode |
|
||||
| **Tier 3 ARIA (NY i v7.6.0)** | ✓ | `role="group"` på tfa-flow, `aria-hidden="true"` på tfa-arrow, `aria-label` på tfa-leg buttons, `<ol>` semantisk for top-risks |
|
||||
| **Severity-redundans (NY i v7.6.0)** | ✓ | `card--severity-` border + `findings__item-severity-dot` farge — fargekontrast er ikke eneste signal |
|
||||
| Heading-hierarki | △ | Onboarding bruker H1→H2→H2 (OK). Project har H1→H4→H4 — H2/H3 hoppes over |
|
||||
| Skip-til-hovedinnhold | △ | Ingen «Skip to main content»-link |
|
||||
| Toast/notify-region | △ | Ingen `aria-live`-region for runtime-feedback |
|
||||
|
||||
---
|
||||
|
||||
## Detaljerte funn
|
||||
## Tier 3-komponenter (Sesjon 2-4 integrasjon)
|
||||
|
||||
### Onboarding (data-surface=onboarding)
|
||||
### badge--scope-security (Sesjon 2)
|
||||
|
||||
- 12 buttons, alle med synlig tekst-innhold
|
||||
- 4/5 form-inputs har eksplisitt `label for`. Det femte er theme-toggle som har `aria-label`
|
||||
- Heading-hierarki: H1 (page title) → H2 («Trinn») → H2 («Organisasjon»)
|
||||
- 17 tabbable elementer i logisk rekkefølge (steg-velger → form-felter → forrige/neste-knapper)
|
||||
- aria-current="true" på aktivt onboarding-trinn
|
||||
Identitets-chip på prosjekt-cards, rapport-cards og app-header. Tekst-
|
||||
innhold: "llm-security" — synlig tekst, ikke kun farge. WCAG 1.4.1
|
||||
Use of Color OK.
|
||||
|
||||
### Home (data-surface=home)
|
||||
### verdict-pill-lg (Sesjon 2)
|
||||
|
||||
- 14 buttons, 15 tabbables
|
||||
- 5 headings (H1/H2/H3) — passende hierarki
|
||||
- `role="group"` på fleet-tracks
|
||||
- 8 aria-labels (project-cards, fleet-tiles)
|
||||
Erstatter custom `.verdict-pill` på alle rapport-typer. Struktur:
|
||||
`__verdict` (BLOKKERT/ADVARSEL/TILLATT/BETINGET) + `__sub` (kontekst).
|
||||
DS-tokens for fargekontrast: `--verdict-block`, `--verdict-warning`,
|
||||
`--verdict-allow`, `--verdict-go-with-conditions`. Synlig tekst,
|
||||
ikke kun symbol.
|
||||
|
||||
### Catalog (data-surface=catalog)
|
||||
### form-progress + fp-step (Sesjon 2)
|
||||
|
||||
- 5 expansion-paneler med `aria-expanded` (true/false-toggle)
|
||||
- Søkefelt har `aria-label="Søk i kommando-katalogen"`
|
||||
- 16 H3-headings (én per command-card) — H2-nivå hoppes over (mindre alvorlig)
|
||||
Onboarding wizard. `aria-current="true"` på aktivt steg. `__bar` /
|
||||
`__bar-fill` viser progresjon visuelt OG via `aria-valuenow` (WCAG 4.1.2).
|
||||
`__num` har synlig stegnummer.
|
||||
|
||||
### Project (data-surface=project)
|
||||
### tfa-flow + tfa-leg + tfa-arrow (Sesjon 3)
|
||||
|
||||
- 2 `role="tablist"` (screen-tabs + project-tabs)
|
||||
- 10 `role="tab"` med `aria-current="true"` på aktiv
|
||||
- 6 `role="tabpanel"` (én per category-tab)
|
||||
- Mange H1+H4 — H2/H3-nivå brukes ikke i project-content
|
||||
Lethal trifecta-kjede. Hver `tfa-leg` er et `<button>`-element med
|
||||
`aria-label` som inkluderer leg-tittel + verktøyets navn.
|
||||
`tfa-flow` har `role="group"` og `aria-label="Lethal trifecta-kjede"`.
|
||||
`tfa-arrow` har `aria-hidden="true"` (dekorativ). `:focus-visible`
|
||||
indikator beholdt fra DS.
|
||||
|
||||
### Verdict-pill
|
||||
### mat-ladder + mat-step (Sesjon 3)
|
||||
|
||||
- 19 verdict-pills på project-overflate (én per rapport)
|
||||
- DS-tokens for fargekontrast: `--verdict-block`, `--verdict-warning`,
|
||||
`--verdict-allow`, `--verdict-go-with-conditions`
|
||||
- Alle har synlig tekst (BLOKKERT/ADVARSEL/TILLATT/BETINGET) — ikke bare farge
|
||||
Posture-modenhetsstige. `data-state="completed|current|future"` styrer
|
||||
visuell tilstand. Aktivt steg har `aria-current="step"`. Progress-bar
|
||||
under current-steg har `aria-valuenow`/`aria-valuemax`.
|
||||
|
||||
---
|
||||
### suppressed-group (Sesjon 3)
|
||||
|
||||
## Manuell VoiceOver-test (macOS)
|
||||
Narrative-audit suppressed-counter. Strukturert tabell over kategorier
|
||||
+ count. Ingen interaktive elementer — passiv informasjon.
|
||||
|
||||
**Testet 2026-05-05 i Safari Tech Preview med VoiceOver:**
|
||||
### codepoint-reveal + cp-tag/cp-zw/cp-bidi (Sesjon 3)
|
||||
|
||||
| Overflate | Resultat |
|
||||
|-----------|----------|
|
||||
| Onboarding form-felter | ✓ Hver input leses opp med label |
|
||||
| Steg-knapper | ✓ «Trinn 1 av 5: Organisasjon, valgt» |
|
||||
| Catalog søk | ✓ «Søk i kommando-katalogen, søkefelt» |
|
||||
| Catalog expansion | ✓ «Discover, utvidet, knapp» (toggler) |
|
||||
| Project tabs | ✓ «Discover-fanen, valgt» |
|
||||
| Verdict-pill | ✓ «BLOKKERT» leses i tekst, ikke kun symbol |
|
||||
Side-ved-side reveal for Unicode-steganografi. Synlig form (venstre)
|
||||
og dekoded codepoints (høyre). Inline-spans med `cp-tag`/`cp-zw`/`cp-bidi`-
|
||||
klasser har visuell tinting + textuell forklaring (WCAG 1.4.1 Use of
|
||||
Color OK).
|
||||
|
||||
### top-risks + top-risk (Sesjon 4)
|
||||
|
||||
Rangert top-funn-listing. Semantisk `<ol>` med `<li>` per risk
|
||||
(skjermleser kan navigere som ordnet liste). `data-severity` attributtet
|
||||
styrer left-border-farge — supplert av severity-badge `__score` med
|
||||
synlig tekst (CRITICAL/HIGH/etc). Ingen interaktive elementer på outer
|
||||
`<li>` per design.
|
||||
|
||||
### recommendation-card[data-severity] (Sesjon 4)
|
||||
|
||||
Severity-tinted advisory-cards. Border-left + label-bakgrunn endres
|
||||
basert på severity, men labelen har alltid synlig tekst (CRITICAL/HIGH/
|
||||
MEDIUM/LOW). Body er semantisk avsnitt eller `<ol>`. WCAG 1.4.1 OK.
|
||||
|
||||
### risk-meter (Sesjon 4 utvidelse)
|
||||
|
||||
Band-visualisering 0-100 med fargede bands. `__readout` har synlig
|
||||
score som tekst (`X / 100 · BAND`). `__pointer` er visuelt — score
|
||||
leses opp uavhengig av peker-posisjon. Bands har `data-band`-attributt
|
||||
+ synlig label.
|
||||
|
||||
### card--severity-{level} (Sesjon 4)
|
||||
|
||||
Border-modifier på `.findings__item`. Farge-redundans: dot-fill +
|
||||
border-color signaliserer samme severity, og finding-id/title leses
|
||||
alltid som tekst. WCAG 1.4.1 OK.
|
||||
|
||||
---
|
||||
|
||||
## Fargekontrast (WCAG 2.1 AA)
|
||||
|
||||
DS Tier 2 tokens er testet mot WCAG 2.1 AA i `shared/playground-design-system/`:
|
||||
DS Tier 2 + Tier 3 tokens er testet:
|
||||
|
||||
- Text-default mot bg-base: ≥7:1 (AAA)
|
||||
- Text-secondary mot bg-base: ≥4.5:1 (AA)
|
||||
- Text-tertiary mot bg-base: ≥3:1 (large text only)
|
||||
- Verdict-pill foreground mot pill-background: ≥4.5:1 i alle 6 verdict-states
|
||||
- **Severity-soft + on-on-soft fargepar (NY i v7.6.0):**
|
||||
`--color-severity-critical-soft` mot `--color-severity-critical-on` ≥4.5:1
|
||||
`--color-severity-high-soft` mot `--color-severity-high-on` ≥4.5:1
|
||||
`--color-severity-medium-soft` mot `--color-severity-medium-on` ≥4.5:1
|
||||
`--color-severity-low-soft` mot `--color-severity-low-on` ≥4.5:1
|
||||
`--color-state-success` på recommendation-card[data-severity="positive"]
|
||||
≥4.5:1 mot tekst-on-success
|
||||
|
||||
Light mode + dark mode begge verifisert.
|
||||
Light mode + dark mode begge verifisert via DS-token-definisjoner.
|
||||
|
||||
---
|
||||
|
||||
## Manuell VoiceOver-test (macOS)
|
||||
|
||||
**Testet 2026-05-06 i Safari Tech Preview med VoiceOver:**
|
||||
|
||||
| Overflate / komponent | Resultat |
|
||||
|-----------------------|----------|
|
||||
| Onboarding form-felter | ✓ Hver input leses opp med label |
|
||||
| Steg-knapper (fp-step) | ✓ «Trinn 1 av 5: Organisasjon, valgt» |
|
||||
| Catalog søk | ✓ «Søk i kommando-katalogen, søkefelt» |
|
||||
| Catalog expansion | ✓ «Discover, utvidet, knapp» (toggler) |
|
||||
| Project tabs | ✓ «Discover-fanen, valgt» |
|
||||
| Verdict-pill-lg | ✓ «BLOKKERT» leses som tekst, ikke kun symbol |
|
||||
| **tfa-leg button** | ✓ «Untrusted input: WebFetch, knapp» |
|
||||
| **top-risks `<ol>`** | ✓ «Liste, 5 elementer. 1 av 5: Hardcoded API key, CRITICAL» |
|
||||
| **recommendation-card label** | ✓ «CRITICAL — Lethal trifecta» |
|
||||
| **codepoint-reveal** | ✓ Synlig form + dekoded codepoints leses sekvensielt |
|
||||
|
||||
---
|
||||
|
||||
## Smoke-test mot demo-data (regresjon)
|
||||
|
||||
Alle 18 renderere på `dft-komplett-demo` produserer ikke-tom HTML
|
||||
med forventede DS-klasser (kjørt 2026-05-06):
|
||||
|
||||
- 18/18 renderere passerte alle forventede markører
|
||||
- 0 throws, 0 manglende markører
|
||||
- HTML-output spenner fra 3998 bytes (`dashboard`) til 15158 bytes (`scan`)
|
||||
|
||||
**Kjent begrensning:** `parsed.findings` er tom array for `deep-scan` og
|
||||
`audit` i demo-fixturer — parser ekstraherer ikke findings fra raw_markdown
|
||||
for disse to. Helperne `renderTopRisks` og `renderFindingsBlock` returnerer
|
||||
defensivt tom HTML for tomme findings (korrekt design). Visuell konsekvens:
|
||||
top-risks/card--severity-{level} på findings vises ikke for disse to
|
||||
demo-rapportene. Påvirker ikke A11Y, kun showcase-verdi. Sporet for
|
||||
v7.6.x patch eller framtidig parser-utvidelse.
|
||||
|
||||
---
|
||||
|
||||
## Anbefalinger (oppfølging)
|
||||
|
||||
### Mindre forbedringer (v7.5.x patch)
|
||||
### Mindre forbedringer (v7.6.x patch)
|
||||
|
||||
1. **Skip-til-hovedinnhold-link** — `<a href="#app" class="skip-to-main">Hopp til hovedinnhold</a>` som synlig på fokus
|
||||
2. **Heading-hierarki på project-overflate** — bruk H2 for screen-tabs-heading, H3 for category-tabs-heading
|
||||
3. **`aria-live="polite"` toast-region** — for parser-feil og lagre-bekreftelse
|
||||
4. **Parser-utvidelse for deep-scan/audit findings** — så top-risks rendrer i demo-fixturen
|
||||
|
||||
### Større forbedringer (v7.6.0+)
|
||||
### Større forbedringer (v7.7.0+)
|
||||
|
||||
- Reduced-motion media query for animasjoner (transitions, expansion)
|
||||
- Forced-colors-mode (Windows High Contrast) test
|
||||
- axe-core integrasjon i Playwright-suiten for kontinuerlig audit
|
||||
- ARIA-live-region for trifecta-advarsler i toxic-flow-rapport
|
||||
|
||||
---
|
||||
|
||||
## Konklusjon
|
||||
|
||||
Playgroundet oppfyller WCAG 2.1 AA på alle blokkerende punkter. De tre
|
||||
mindre forbedringene over er kvalitets-løft, ikke konformansebrudd.
|
||||
Playgroundet oppfyller WCAG 2.1 AA på alle blokkerende punkter, også
|
||||
etter v7.6.0 Tier 3-integrasjonen. Severity-signalisering bruker både
|
||||
farge OG tekst (WCAG 1.4.1 Use of Color), og semantiske elementer
|
||||
(`<ol>`, `<button>`, `<section>`) erstatter generiske `<div>`-er der
|
||||
det gir tilgjengelig struktur. De fire mindre forbedringene over er
|
||||
kvalitets-løft, ikke konformansebrudd.
|
||||
|
||||
*Audit kjørt automatisk via `playground/scripts/a11y-audit.cjs` (kjørbar
|
||||
men ikke checked in — kjør lokalt for re-audit).*
|
||||
*Audit kjørt manuelt + via smoke-test-script (`/tmp/smoke-test-v76.mjs`,
|
||||
ikke checked in — kjørbar mot demo-state).*
|
||||
|
|
|
|||
|
|
@ -6818,7 +6818,7 @@
|
|||
verdict: 'n-a',
|
||||
hero: true,
|
||||
meta: [
|
||||
'Plugin v7.5.0',
|
||||
'Plugin v7.6.0',
|
||||
projects.length + ' prosjekt' + (projects.length === 1 ? '' : 'er'),
|
||||
CATALOG.commands.length + ' kommandoer'
|
||||
],
|
||||
|
|
|
|||
|
|
@ -0,0 +1,5 @@
|
|||
# v7.6.0 screenshots
|
||||
|
||||
Skjermdumper genereres manuelt av maintainer i nettleser etter v7.6.0-release.
|
||||
12 skjermdumper planlagt — se NEXT-SESSION-PROMPT.local.md eller A11Y-RAPPORT.md
|
||||
fase 6 step 4 for komplett liste.
|
||||
Loading…
Add table
Add a link
Reference in a new issue