Files
git.stella-ops.org/docs/accessibility.md
master 491e883653 Add tests for SBOM generation determinism across multiple formats
- Created `StellaOps.TestKit.Tests` project for unit tests related to determinism.
- Implemented `DeterminismManifestTests` to validate deterministic output for canonical bytes and strings, file read/write operations, and error handling for invalid schema versions.
- Added `SbomDeterminismTests` to ensure identical inputs produce consistent SBOMs across SPDX 3.0.1 and CycloneDX 1.6/1.7 formats, including parallel execution tests.
- Updated project references in `StellaOps.Integration.Determinism` to include the new determinism testing library.
2025-12-24 00:36:14 +02:00

66 lines
3.7 KiB
Markdown

# StellaOps Console Accessibility Guide
This guide defines the StellaOps Console accessibility baseline: keyboard interaction model, screen reader behavior, color/focus expectations, and offline parity requirements.
## Principles
1. **Deterministic navigation:** focus order, deep links, and announcements remain stable across releases.
2. **Keyboard-first:** every action is reachable without a mouse; shortcuts are accelerators, not requirements.
3. **AT parity:** ARIA roles and live regions mirror visual affordances (status banners, progress, drawers).
4. **Contrast by design tokens:** color and focus rings are governed by tokens that meet WCAG 2.2 AA targets.
5. **Offline equivalence:** accessibility behavior must remain consistent in sealed/air-gapped environments.
## Keyboard Interaction Map
### Global shortcuts
| Action | macOS | Windows/Linux | Notes |
| --- | --- | --- | --- |
| Command palette | `Cmd+K` | `Ctrl+K` | Opens palette search; respects tenant scope. |
| Tenant picker | `Cmd+T` | `Ctrl+T` | Switches tenant context; `Enter` confirms, `Esc` cancels. |
| Filter tray | `Shift+F` | `Shift+F` | Focus lands on first filter control. |
| Saved view presets | `Cmd+1..9` | `Ctrl+1..9` | Presets are stored per tenant. |
| Keyboard reference | `?` | `?` | Lists context-specific shortcuts; `Esc` closes. |
| Context search | `/` | `/` | Focuses inline search when filter tray is closed. |
### Module-specific shortcuts (examples)
| Area | Action | macOS | Windows/Linux | Notes |
| --- | --- | --- | --- | --- |
| Findings | Search within explain | `Cmd+/` | `Ctrl+/` | Only when explain drawer is open. |
| SBOM Explorer | Toggle overlays | `Cmd+G` | `Ctrl+G` | Persists per session (see `docs/15_UI_GUIDE.md`). |
| Advisories & VEX | Focus provider chips | `Cmd+Alt+F` | `Ctrl+Alt+F` | Moves focus to provider chip row. |
| Runs | Refresh stream state | `Cmd+R` | `Ctrl+R` | Soft refresh; no full reload. |
| Policies | Save draft | `Cmd+S` | `Ctrl+S` | Requires edit scope. |
| Downloads | Copy CLI command | `Shift+D` | `Shift+D` | Copies the related CLI command, when available. |
## Screen Reader and Focus Behavior
- **Skip navigation:** every route exposes a "Skip to content" link on focus.
- **Headings as anchors:** route changes move focus to the primary heading (`h1`) and announce the new view.
- **Drawers and modals:** trap focus until closed; `Esc` closes; focus returns to the launching control.
- **Live regions:** status tickers and progress surfaces use `aria-live="polite"`; errors use `assertive` sparingly.
- **Tables and grids:** sorting state is exposed via `aria-sort`; virtualization retains ARIA semantics.
- **Offline banners:** use `role="status"` and provide actionable, keyboard-reachable guidance.
## Color, Contrast, and Focus
- All user-visible color must derive from a token system (light/dark variants).
- Focus indicators must be visible on all surfaces (minimum 3:1 contrast against surrounding UI).
- Status colors (critical/warning/success) must be readable without color alone (icons + text + patterns).
## Testing Workflow (Recommended)
- **Automated:** Playwright accessibility sweep (keyboard navigation + axe checks) across core routes.
- **Component-level:** Storybook + axe for shared components.
- **Contrast linting:** validate token updates with an automated contrast check.
- **Manual:** NVDA (Windows) and VoiceOver (macOS) spot checks on tenant switching, drawers, and exports.
- **Offline smoke:** run the Console against Offline Kit snapshots and validate the same flows.
## References
- `docs/15_UI_GUIDE.md`
- `docs/cli-vs-ui-parity.md`
- `docs/observability/ui-telemetry.md`
- `docs/security/console-security.md`