# 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:**

- `ChatSession` factory (faker-based)
- `mock-indexeddb` fixture for fast DB testing

**Tooling:**

- `vitest` for Unit/Integration
- `playwright` for E2E
- `@vite-pwa/assets-generator` for 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

1. IndexedDB is reliable on supported browsers.
2. User does not clear browser data while offline with pending actions.

### Dependencies

1. `dexie` library stability.
2. `next-pwa` plugin 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.md`
- `test-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)
