11 KiB
11 KiB
AI UX Patterns
Sprint: SPRINT_20251226_020_FE_ai_ux_patterns Tasks: AIUX-43, AIUX-44
This document defines the design patterns for AI assistance in StellaOps, ensuring AI is helpful without being intrusive.
Core Principles
1. Deterministic Verdict First, AI Second
AI is never shown above evidence. The visual hierarchy is:
- Verdict Panel (authoritative) - policy outcome
- Evidence Panel (authoritative) - reachability, runtime, VEX
- AI Panel (assistant) - explanations, suggestions
2. Progressive Disclosure
AI is an overlay, not a layer. Users click to expand:
- Default: 3-line summary + chips
- Click: Full explanation with citations
- Drill-down: Evidence node details
3. The 3-Line Doctrine
AI text is constrained to 3 lines by default:
- Line 1: What changed or what is it
- Line 2: Why it matters here
- Line 3: Recommended next action
Users can expand for more details, but the default is always 3 lines.
4. Compact Chips
AI chips are action-oriented, 3-5 words maximum:
- "Reachable Path" (not "A reachable path exists from...")
- "Fix in 1 PR" (not "A fix is available that can be applied...")
- "Needs: Runtime" (not "Runtime evidence is needed to confirm...")
5. Authority Labels
All AI output must have a clear authority label:
- Evidence-backed (green): Claims supported by citations
- Suggestion (amber): AI inference without direct evidence
6. Opt-in in CI/CLI
No AI text appears in logs unless explicitly requested:
stella scan --ai-summary # Opt-in for AI summary
7. State-Change PR Comments
Only comment when materially useful (state changes, new fixes available).
Component Library
AI Chips
Base Chip (stella-ai-chip)
<stella-ai-chip
[label]="'Reachable Path'"
[icon]="'\u2192'"
[variant]="'status'"
(onClick)="handleClick()"
/>
Variants:
action: Blue, clickable actionstatus: Neutral, informationalevidence: Purple, links to evidence
Specialized Chips
| Chip | Use Case | Max Words |
|---|---|---|
stella-ai-explain-chip |
Trigger explanation | 3 |
stella-ai-fix-chip |
Fix available/PR ready | 4 |
stella-ai-vex-draft-chip |
Draft VEX | 3 |
stella-ai-needs-evidence-chip |
Evidence gap | 4 |
stella-ai-exploitability-chip |
Reachability/exploitability | 4 |
AI Summary (stella-ai-summary)
<stella-ai-summary
[line1]="'libfoo 1.2.3 introduced CVE-2025-1234'"
[line2]="'Vulnerable function called via main\u2192parse_input'"
[line3]="'Fastest fix: bump to 1.2.5'"
[authority]="'evidence-backed'"
[hasMore]="true"
[expandLabel]="'details'"
(expanded)="onExpand()"
/>
AI Authority Badge (stella-ai-authority-badge)
<stella-ai-authority-badge [authority]="'evidence-backed'" />
<stella-ai-authority-badge [authority]="'suggestion'" />
Visual Design:
- Evidence-backed: Green badge, checkmark icon
- Suggestion: Amber badge, lightbulb icon
Finding Detail Layout
3-Panel Structure
\u250C\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510
\u2502 VERDICT PANEL (authoritative) \u2502
\u2502 \u250C\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \u2502
\u2502 \u2502 Critical \u2502 BLOCK \u2502 SLA: 3 days \u2502 Reachable: Confirmed \u2502 \u2502
\u2502 \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 \u2502
\u2502 \u2502
\u2502 EVIDENCE PANEL (authoritative, collapsible) [\u25BC] \u2502
\u2502 \u250C\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \u2502
\u2502 \u2502 Reachability: main\u2192parse_input\u2192vulnerable_fn (3 hops) \u2502 \u2502
\u2502 \u2502 VEX: vendor=affected, distro=not_affected \u2192 affected \u2502 \u2502
\u2502 \u2502 Runtime: loaded in api-gw (observed 2025-12-25) \u2502 \u2502
\u2502 \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 \u2502
\u2502 \u2502
\u2502 AI ASSIST (non-authoritative) [Evidence-backed]\u2502
\u2502 \u250C\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \u2502
\u2502 \u2502 libfoo 1.2.3 introduced CVE-2025-1234 in this build. \u2502 \u2502
\u2502 \u2502 Vulnerable function called via path main\u2192parse_input. \u2502 \u2502
\u2502 \u2502 Fastest fix: bump libfoo to 1.2.5 (PR ready). \u2502 \u2502
\u2502 \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 \u2502
\u2502 [Explain] [Fix] [Draft VEX] [Show evidence] \u2502
\u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518
Visual Hierarchy
- Verdict Panel: Bold border (2px), full opacity, largest header
- Evidence Panel: Standard border (1px), full opacity, normal header
- AI Panel: Dashed border, 50% opacity background, smaller italic header
Findings List Integration
Chip Display Rules
| Severity | Policy State | Chips Shown (max 2) |
|---|---|---|
| Any | BLOCK | Reachable Path + Fix Available |
| Any | WARN | Exploitability + Fix Available |
| Critical/High | Any | Reachable Path + Needs Evidence |
| Medium/Low | Any | Exploitability only (1 chip) |
Hard Rules
- Maximum 2 chips per row - prevents visual clutter
- No paragraphs in list view - chips only
- Hover for preview - 3-line tooltip on hover
- Click to detail - chip click opens finding detail with AI panel
Ask Stella Command Bar
Layout
\u250C\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510
\u2502 Ask Stella [CVE-2025-1234] [prod] \u2502
\u2502 \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 \u2502
\u2502 [Explain why exploitable] [Show minimal evidence] \u2502
\u2502 [Draft VEX] [What test closes Unknown?] \u2502
\u2502 \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 \u2502
\u2502 Or type your question... [Ask] \u2502
\u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518
Features
- Auto-scoped context: CVE, service, environment shown as chips
- Suggested prompts: Prominent buttons for common questions
- Freeform secondary: Text input available but not emphasized
- Not a chatbot: One question at a time, not conversational
User Preferences
Settings
| Setting | Options | Default |
|---|---|---|
| Verbosity | Minimal / Standard / Detailed | Standard |
| Show in UI | On/Off | On |
| Show in PR Comments | On/Off | Off |
| Show in Notifications | On/Off | Off |
| Per-team notifications | Opt-in per team | Off |
Verbosity Levels
- Minimal: Action chips only, no explanations
- Standard: 3-line summaries with expand option
- Detailed: Full explanations shown by default
Dashboard Integration
Executive Dashboard Rules
- No generative narrative - No AI-generated prose paragraphs
- Top 3 risk drivers - Evidence-linked, grounded in data
- Top 3 bottlenecks - Actionable gaps (missing runtime, etc.)
- Deterministic trends - Risk trend from policy, not AI
Risk/Noise Metrics
- Risk Trend: Deterministic calculation from policy outcomes
- Noise Reduction: % of findings confirmed "not exploitable"
Testing Requirements
Unit Tests
- All chip components render correctly
- Authority badge shows correct color
- Summary respects 3-line limit
- Expand/collapse toggles work
E2E Tests
- Ask Stella flow: button \u2192 panel \u2192 response
- Finding detail: all 3 panels visible in order
- Chip click opens finding with AI panel
Visual Regression
- Chips don't overflow list rows
- 3-line summary doesn't exceed container
- Authority badges visible in all contexts