- Fix ChatBubble to handle non-string content with String() wrapper - Fix API route to use generateText for non-streaming requests - Add @ai-sdk/openai-compatible for non-OpenAI providers (DeepSeek, etc.) - Use Chat Completions API instead of Responses API for compatible providers - Update ChatBubble tests and fix component exports to kebab-case - Remove stale PascalCase ChatBubble.tsx file
9.6 KiB
Test Design: Epic 3 - "My Legacy" - History, Offline Sync & PWA Polish
Date: 2026-01-23 Author: Max Status: Approved
Executive Summary
Scope: Epic-level test design for Epic 3 covering Story 3.1 (History Feed), 3.2 (Deletion), 3.3 (Offline Sync), and 3.4 (PWA Install). Focus on data integrity, offline resilience, and PWA capabilities.
Risk Summary:
- Total risks identified: 4
- High-priority risks (≥6): 2
- Critical categories: DATA, TECH
Coverage Summary:
- P0 scenarios: 5 (10 hours)
- P1 scenarios: 6 (6 hours)
- P2/P3 scenarios: 4 (2 hours)
- Total effort: 18 hours (~2.5 days)
Risk Assessment
High-Priority Risks (Score ≥6)
| Risk ID | Category | Description | Probability | Impact | Score | Mitigation | Owner | Timeline |
|---|---|---|---|---|---|---|---|---|
| R-001 | DATA | Data loss during offline-to-online sync if queue fails | 2 (Possible) | 3 (Critical) | 6 | Implement "Action Replay" pattern with retry backoff and persistent queue in Dexie | Dev/QA | Story 3.3 |
| R-002 | DATA | Deletion conflict (deleting item offline that changes online) | 2 (Possible) | 3 (Critical) | 6 | Optimistic UI updates + Soft delete markers + server reconciliation | Dev | Story 3.2 |
Medium-Priority Risks (Score 3-4)
| Risk ID | Category | Description | Probability | Impact | Score | Mitigation | Owner |
|---|---|---|---|---|---|---|---|
| R-003 | PERF | History feed lag with large dataset (>1000 items) | 2 (Possible) | 2 (Degraded) | 4 | Implement virtualization (react-window) and pagination | Dev |
| R-004 | TECH | PWA Install Prompt not appearing on some browsers | 2 (Possible) | 2 (Degraded) | 4 | Fallback manual install instructions / comprehensive browser testing | QA |
Low-Priority Risks (Score 1-2)
| Risk ID | Category | Description | Probability | Impact | Score | Action |
|---|---|---|---|---|---|---|
| R-005 | SEC | Local storage scrutiny (physical access required) | 1 (Unlikely) | 2 (Degraded) | 2 | Monitor |
Risk Category Legend
- TECH: Technical/Architecture
- SEC: Security
- PERF: Performance
- DATA: Data Integrity
- BUS: Business Impact
- OPS: Operations
Test Coverage Plan
P0 (Critical) - Run on every commit
Criteria: Blocks core journey + High risk (≥6) + No workaround
| Requirement | Test Level | Risk Link | Test Count | Owner | Notes |
|---|---|---|---|---|---|
| Offline Action Queueing | Integration | R-001 | 3 | Dev | Verify actions added to queue when network disconnected |
| Sync Action Replay | Integration | R-001 | 2 | Dev | Verify queue processes successfully upon reconnection |
| Entry Deletion | Component | R-002 | 1 | Dev | Verify delete dialog and optimistic removal |
| Deletion Persistence | Integration | R-002 | 1 | Dev | Verify deletion persists to DB |
| Initial Load (Empty State) | E2E | - | 1 | QA | Verify app loads correctly for new users |
Total P0: 8 tests, 5 hours
P1 (High) - Run on PR to main
Criteria: Important features + Medium risk (3-4) + Common workflows
| Requirement | Test Level | Risk Link | Test Count | Owner | Notes |
|---|---|---|---|---|---|
| History Feed Rendering | Component | R-003 | 2 | Dev | Verify list renders with mock data |
| PWA Manifest Validity | Unit/Int | R-004 | 1 | Dev | Verify manifest.json served correctly |
| Install Prompt Trigger | Component | R-004 | 1 | Dev | Verify prompt appears on 'beforeinstallprompt' event |
| Pagination/Load More | Integration | R-003 | 1 | Dev | Verify loading more items works |
Total P1: 5 tests, 3 hours
P2 (Medium) - Run nightly/weekly
Criteria: Secondary features + Low risk (1-2) + Edge cases
| Requirement | Test Level | Risk Link | Test Count | Owner | Notes |
|---|---|---|---|---|---|
| Data Export Format | Unit | - | 1 | Dev | Verify JSON export structure |
| Scroll Position Retention | E2E | - | 1 | QA | Verify scroll maintained after back navigation |
Total P2: 2 tests, 1 hour
P3 (Low) - Run on-demand
Criteria: Nice-to-have + Exploratory + Performance benchmarks
| Requirement | Test Level | Test Count | Owner | Notes |
|---|---|---|---|---|
| Large Dataset Scroll | Perf | 1 | QA | Validate FPS with 1000 items |
Total P3: 1 tests, 0.5 hours
Execution Order
Smoke Tests (<5 min)
Purpose: Fast feedback, catch build-breaking issues
- App Loads (E2E)
- History Feed Renders (Component)
- Offline Indicator shows when network off (Integration)
Total: 3 scenarios
P0 Tests (<10 min)
Purpose: Critical path validation
- Offline Sync Queue add/process (Integration)
- Delete Entry Flow (Integration)
Total: 2 scenarios
P1 Tests (<30 min)
Purpose: Important feature coverage
- PWA Install Prompt (Component)
- Pagination (Integration)
Total: 2 scenarios
P2/P3 Tests (<60 min)
Purpose: Full regression coverage
- Export Data (Unit)
- Perf tests
Total: 2 scenarios
Resource Estimates
Test Development Effort
| Priority | Count | Hours/Test | Total Hours | Notes |
|---|---|---|---|---|
| P0 | 8 | 0.5 | 4 | Core sync logic tests |
| P1 | 5 | 0.5 | 2.5 | UI/Manifest tests |
| P2 | 2 | 0.5 | 1 | Export/UI polish |
| P3 | 1 | 0.5 | 0.5 | Performance check |
| Total | 16 | - | 8 | ~1 day |
Prerequisites
Test Data:
ChatSessionfactory (faker-based)mock-indexeddbfixture for fast DB testing
Tooling:
vitestfor Unit/Integrationplaywrightfor E2E@vite-pwa/assets-generatorfor icon validation
Environment:
- Local dev environment
- Vercel Preview (for PWA manifest validation)
Quality Gate Criteria
Pass/Fail Thresholds
- P0 pass rate: 100% (no exceptions)
- P1 pass rate: ≥95% (waivers required for failures)
- High-risk mitigations: 100% complete or approved waivers
Coverage Targets
- Critical paths (Sync): ≥90%
- Data Integrity: 100%
Non-Negotiable Requirements
- All P0 (Sync/Delete) tests pass
- No high-risk (≥6) items unmitigated
Mitigation Plans
R-001: Data loss during offline-to-online sync (Score: 6)
Mitigation Strategy: Implement SyncManager class with persistent ActionQueue in Dexie. Use exponential backoff for retries.
Owner: Dev
Timeline: Story 3.3
Status: Complete
Verification: integration/offline-sync.test.ts validates queue persistence and processing.
R-002: Deletion conflict (Score: 6)
Mitigation Strategy: Use soft deletes where possible or last-write-wins with version vector (simplified to local-first authority for MVP).
Owner: Dev
Timeline: Story 3.2
Status: Complete
Verification: components/features/journal/DeleteConfirmDialog.test.tsx and manual verification.
Assumptions and Dependencies
Assumptions
- IndexedDB is reliable on supported browsers.
- User does not clear browser data while offline with pending actions.
Dependencies
dexielibrary stability.next-pwaplugin for Service Worker generation.
Approval
Test Design Approved By:
- Product Manager: Max Date: 2026-01-23
- Tech Lead: Max Date: 2026-01-23
- QA Lead: Max Date: 2026-01-23
Comments: Review completed. High risks mitigated by architecture decisions in Epic 3 implementation.
Appendix
Knowledge Base References
risk-governance.mdtest-priorities-matrix.md
Related Documents
- PRD:
_bmad-output/planning-artifacts/prd.md - Epic:
_bmad-output/planning-artifacts/epics.md - Architecture:
_bmad-output/planning-artifacts/architecture.md
Generated by: BMad TEA Agent - Test Architect Module
Workflow: _bmad/bmm/testarch/test-design
Version: 4.0 (BMad v6)