Repository navigation
QA and UAT
Canonical source:
docs/10-uat-acceptance/uat-guide.md— this page is rendered from it on every publish; edit the source.
Structured UAT plan for validating ClawAI features from an end-user perspective. Each section covers a feature area with test scenarios, expected outcomes, and evidence requirements.
Last updated: 2026-04-09
-
Environment: Run all tests against the full Docker Compose dev environment (
./scripts/claw.sh up -d). -
Accounts: Use the seeded admin account (credentials in
.env: ADMIN_EMAIL, ADMIN_PASSWORD). Create additional Operator and Viewer accounts for RBAC testing. - Browser: Test in Chrome (latest) as primary. Cross-check critical flows in Firefox and Safari.
- Evidence: For each scenario, capture a screenshot or API response as proof of pass/fail.
- Defects: Log defects with: scenario ID, steps to reproduce, expected vs actual, screenshot, browser/OS.
| ID | Scenario | Steps | Expected Outcome |
|---|---|---|---|
| AUTH-01 | Valid login | Enter valid email + password, click Login | Redirect to dashboard; JWT stored; user info displayed in sidebar |
| AUTH-02 | Invalid credentials | Enter wrong password | Error message displayed; no redirect; no token stored |
| AUTH-03 | Empty fields | Submit with empty email or password | Validation errors shown inline |
| AUTH-04 | Session persistence | Login, close tab, reopen app | User remains logged in (refresh token active) |
| AUTH-05 | Logout | Click logout button | Redirect to login page; tokens cleared; API calls return 401 |
| ID | Scenario | Steps | Expected Outcome |
|---|---|---|---|
| AUTH-06 | Admin access | Login as Admin, navigate to Admin page | Full access to all features; user management visible |
| AUTH-07 | Operator restrictions | Login as Operator, navigate to Admin page | Admin page not accessible or not visible in navigation |
| AUTH-08 | Viewer restrictions | Login as Viewer, attempt to create a thread | Create actions disabled or hidden; read-only access |
| AUTH-09 | Token expiry | Wait for access token to expire | Refresh token automatically obtains new access token; no user disruption |
Evidence required: Screenshots of each role's navigation menu and an attempt to access a restricted feature.
| ID | Scenario | Steps | Expected Outcome |
|---|---|---|---|
| CHAT-01 | Create thread | Click new thread button | Thread created; appears in thread list; redirect to thread page |
| CHAT-02 | Thread title | Send first message in new thread | Thread title auto-generated or editable |
| CHAT-03 | Thread list | Create 3+ threads | All threads visible in sidebar; sorted by most recent activity |
| CHAT-04 | Delete thread | Delete a thread | Thread removed from list; messages deleted; confirmation prompt shown |
| CHAT-05 | Thread settings | Open thread settings panel | System prompt, temperature, max tokens, model, context packs all editable |
| ID | Scenario | Steps | Expected Outcome |
|---|---|---|---|
| CHAT-06 | Send message | Type message, press Enter/Send | User message appears; thinking indicator shown; AI response streams in |
| CHAT-07 | Message display | After AI responds | Both user and AI messages visible; AI message shows provider/model badge |
| CHAT-08 | Token counts | View completed AI message | Input tokens, output tokens, and latency displayed in message metadata |
| CHAT-09 | Message feedback | Click thumbs up/down on AI message | Feedback recorded; visual confirmation shown |
| CHAT-10 | Regenerate | Click regenerate on AI message | New AI response generated; may use different provider/model |
| CHAT-11 | Long conversation | Send 20+ messages in a thread | All messages load correctly; scroll works; no performance degradation |
| CHAT-12 | Empty message | Press Send with empty input | Send button disabled; no empty message created |
| ID | Scenario | Steps | Expected Outcome |
|---|---|---|---|
| CHAT-13 | SSE streaming | Send a message that triggers cloud provider | Response appears token-by-token (not all at once) |
| CHAT-14 | Thinking indicator | Send a message | Thinking indicator visible while waiting for response; disappears when response starts |
| CHAT-15 | Network interruption | Disconnect network mid-stream | Graceful error message; partial response preserved if possible |
Evidence required: Screenshots of message with provider badge, token counts, and streaming in progress.
| ID | Scenario | Steps | Expected Outcome |
|---|---|---|---|
| ROUTE-01 | AUTO mode | Send coding question with AUTO mode | Routed to appropriate provider (e.g., Anthropic for coding); routing transparency shows decision |
| ROUTE-02 | LOCAL_ONLY | Set LOCAL_ONLY mode, send message | Response from local Ollama model; no cloud provider used |
| ROUTE-03 | MANUAL_MODEL | Select specific provider+model, send message | Response from exactly the selected provider and model |
| ROUTE-04 | PRIVACY_FIRST | Set PRIVACY_FIRST, send message | Routed to local Ollama if healthy; falls back to Anthropic if local unavailable |
| ROUTE-05 | LOW_LATENCY | Set LOW_LATENCY, send message | Routed to OpenAI/gpt-4o-mini |
| ROUTE-06 | HIGH_REASONING | Set HIGH_REASONING, send message | Routed to Anthropic/claude-opus-4 |
| ROUTE-07 | COST_SAVER | Set COST_SAVER, send message | Routed to local model if healthy; else cheapest cloud |
| ID | Scenario | Steps | Expected Outcome |
|---|---|---|---|
| ROUTE-08 | Decision display | Send message in AUTO mode, expand routing info | Shows: selected provider, model, confidence score, reason tags, privacy/cost class |
| ROUTE-09 | Fallback indicator | Send message when primary provider fails | Routing transparency shows fallback was used; original and fallback providers visible |
| ID | Scenario | Steps | Expected Outcome |
|---|---|---|---|
| ROUTE-10 | View policies | Navigate to Routing page | Active policies listed with name, mode, priority |
| ROUTE-11 | Create policy | Create new routing policy | Policy appears in list; affects subsequent routing decisions |
| ROUTE-12 | Policy priority | Create conflicting policies with different priorities | Higher priority policy takes precedence |
Evidence required: Screenshots of routing transparency panel, routing decisions page, and policy list.
| ID | Scenario | Steps | Expected Outcome |
|---|---|---|---|
| CONN-01 | List connectors | Navigate to Connectors page | All configured connectors listed with status indicators |
| CONN-02 | Add connector | Add new OpenAI connector with API key | Connector created; test connection succeeds; status shows healthy |
| CONN-03 | Invalid API key | Add connector with invalid key, test connection | Test fails; error message shown; connector status unhealthy |
| CONN-04 | Model sync | Click sync on a connector | Models fetched from provider; model list updated |
| CONN-05 | Edit connector | Modify connector base URL | Changes saved; re-test shows updated configuration |
| CONN-06 | Delete connector | Delete a connector | Connector removed; routing no longer uses this provider |
| CONN-07 | Health check | View connector health status | Health events shown; last check timestamp; latency |
Evidence required: Screenshots of connector list, add/edit forms, sync results, and health status.
| ID | Scenario | Steps | Expected Outcome |
|---|---|---|---|
| MEM-01 | Auto-extraction | Complete a conversation with facts | Memory service extracts facts/preferences (check memory page) |
| MEM-02 | View memories | Navigate to Memory page | User's memories listed by type (FACT, PREFERENCE, INSTRUCTION, SUMMARY) |
| MEM-03 | Edit memory | Edit a memory record | Changes saved; updated content used in future conversations |
| MEM-04 | Delete memory | Delete a memory record | Memory removed; no longer included in context assembly |
| MEM-05 | Toggle memory | Disable a memory without deleting | Memory hidden from context assembly; re-enable restores it |
| ID | Scenario | Steps | Expected Outcome |
|---|---|---|---|
| MEM-06 | Create pack | Create context pack with items | Pack appears in list; items ordered by sort order |
| MEM-07 | Attach to thread | Attach context pack in thread settings | Pack items included in subsequent messages' context |
| MEM-08 | Multiple packs | Attach 2+ packs to a thread | All pack items included; no duplicates |
Evidence required: Screenshots of memory list, context pack creation, and thread settings with packs attached.
| ID | Scenario | Steps | Expected Outcome |
|---|---|---|---|
| FILE-01 | Upload file | Upload a text/CSV/JSON/Markdown file | File appears in file list; ingestion status shows processing then complete |
| FILE-02 | File chunking | Upload a large file, check chunks | File chunked; chunks visible in file detail view |
| FILE-03 | Attach to message | Attach file to a message via paperclip picker | File content included in AI context; AI can reference file contents |
| FILE-04 | File list | Navigate to Files page | All uploaded files listed with name, type, size, status |
| FILE-05 | Invalid file | Upload unsupported file type | Error message; file not stored |
| FILE-06 | Size limit | Upload oversized file | Rejected with appropriate error message |
Evidence required: Screenshots of file upload, file list, chunking status, and a chat message referencing file content.
| ID | Scenario | Steps | Expected Outcome |
|---|---|---|---|
| MODEL-01 | View models | Navigate to Models > Local page | All pulled Ollama models listed with name, size, parameters |
| MODEL-02 | Model roles | View role assignments | Router, fallback, reasoning, coding roles assigned to appropriate models |
| MODEL-03 | Pull model | Initiate pull of a new model | Progress shown; model appears in list when complete |
| MODEL-04 | Generate test | Send test prompt to local model | Response generated; displayed correctly |
Evidence required: Screenshots of model list, role assignments, and generation result.
| ID | Scenario | Steps | Expected Outcome |
|---|---|---|---|
| OBS-01 | Health dashboard | Navigate to health/observability page | Every service shows status (healthy/unhealthy); response times visible |
| OBS-02 | Audit logs | Navigate to Audits page | Recent events listed: login, message, connector operations |
| OBS-03 | Usage stats | Navigate to usage view | Token usage, message counts, provider breakdown displayed |
| OBS-04 | Client logs | Navigate to Logs page, filter client logs | Frontend log entries visible with component, action, timestamp |
| OBS-05 | Server logs | Filter server logs by service | Backend log entries visible with service name, module, action |
Evidence required: Screenshots of health dashboard, audit log entries, and usage statistics.
| ID | Scenario | Steps | Expected Outcome |
|---|---|---|---|
| ADMIN-01 | User list | Navigate to Admin page | All users listed with role, status, email |
| ADMIN-02 | Create user | Create new user with Operator role | User appears in list; can log in with provided credentials |
| ADMIN-03 | Change role | Change user role from Operator to Viewer | Permissions updated immediately; user's UI reflects new role on next load |
| ADMIN-04 | Disable user | Disable a user account | User cannot log in; existing sessions invalidated |
| ADMIN-05 | System settings | View/edit system settings | Settings page shows configurable options; changes persist |
Evidence required: Screenshots of user list, create user form, and role change confirmation.
| ID | Scenario | Steps | Expected Outcome |
|---|---|---|---|
| I18N-01 | Language switch | Change language to German | All UI text switches to German; no untranslated strings |
| I18N-02 | RTL support | Change language to Arabic | Layout mirrors to RTL; text aligned right; sidebar on right |
| I18N-03 | All languages | Switch through all 9 languages | No missing translations; no layout breaks |
| I18N-04 | Persistence | Set language to French, reload page | Language preference persists across sessions |
Evidence required: Screenshots of the same page in English, Arabic (RTL), and one other language.
| ID | Scenario | Steps | Expected Outcome |
|---|---|---|---|
| SET-01 | Dark mode | Toggle dark/light mode | Theme switches; all components render correctly in both modes |
| SET-02 | Sidebar collapse | Collapse sidebar | Sidebar minimizes; main content expands; state persists |
| SET-03 | User preferences | Update user preferences | Changes saved; reflected on next page load |
Evidence required: Screenshots of dark mode and light mode on the same page.
These are known system limitations that should NOT be logged as defects during UAT:
- Cold start delay: First Ollama request after container start takes 10-30 seconds (model loading).
- LOCAL_ONLY quality: Local models (1-4B parameters) produce lower quality responses than cloud models.
- No real-time collaboration: Threads are single-user; no shared/collaborative chat.
- File type limits: Only text, CSV, JSON, and Markdown files supported for chunking.
- Browser limit: Optimized for Chrome; minor visual differences possible in Firefox/Safari.
- Single instance: No horizontal scaling; performance degrades under heavy concurrent usage.
When retesting after bug fixes, always verify these areas have not regressed:
- Login/logout flow -- token handling is security-critical
- Message send/receive -- core user journey
- Routing mode selection -- must route to correct provider
- Connector health -- affects routing decisions
- SSE streaming -- fragile to proxy/CORS configuration changes
- i18n completeness -- new text often misses translations
- Dark mode -- CSS variable changes can break theme switching
- Sidebar navigation -- layout changes can break responsive behavior
UAT is complete when:
- All Critical scenarios (AUTH, CHAT, ROUTE core flows) pass with evidence
- All High scenarios (connectors, memory, files) pass with evidence
- All Medium scenarios (observability, admin, i18n) pass or have documented exceptions
- No Critical or High severity defects remain open
- Medium severity defects have agreed remediation timeline
- Product owner has reviewed evidence and approved
- Regression areas verified after final bug fixes
ClawAI Wiki · source-controlled under wiki/ · generated/mirrored from the current repository knowledge layer.
ClawAI Wiki
Product
- Product-Vision
- Flagship-Features
- Business-Overview
- Requirements-Register
- Drift-Log
- Runtime-Managed-Connector-Providers
- Threads
- ADR-Index
Architecture
- System-at-a-Glance
- Architecture-Map
- System-Architecture
- Message-Flow
- End-to-End-Data-Flow
- Routing-Engine
- Event-Bus
- Security-Architecture
Platform
- Backend-Services
- Frontend-Architecture
- Shared-Packages
- Database-Reference
- API-Reference
- Provider-Catalog
- Memory-and-Context-Architecture
- File-Support-Architecture
- Research-and-Web-Crawling
Runtime & Ops
- Docker-Guide
- Nginx-Reference
- CI-CD-Pipeline
- Logging-and-Observability
- Operational-Runbooks
- Troubleshooting
Quality
Engineering OS
- AI-Native-Engineering-OS
- Generated-Manifests
- Rules-Catalog
- Skills-Catalog
- Context-Layer
- Engineering-Memory
- Tooling-and-Automation
- Scripts-and-Operations
- ESLint-and-Architecture-Enforcement
- Extended-Work-Skills
Agents
Reference