feat(23-01): create UAT checklist for memory leak verification

- VU meter state cleanup verification (Phase 20)
- Chat bounded storage and cleanup verification (Phase 21)
- Session callback cleanup verification (Phase 22)
- 15-minute stability test (VRFY-01)
- Memory growth check with heap snapshots (VRFY-02)
This commit is contained in:
Nuwan 2026-02-10 14:43:33 +05:30
parent c23169a870
commit e2766b05d5
1 changed files with 286 additions and 0 deletions

View File

@ -0,0 +1,286 @@
---
phase: 23-verification
type: uat
status: pending
---
# Phase 23: Memory Leak Verification UAT
## Prerequisites
- **Browser:** Chrome (recommended for DevTools memory profiling)
- **DevTools:** Open with Performance Monitor and Memory tabs visible
- **jam-ui:** Running locally (`npm run start`)
- **web backend:** Running (`./runweb`)
- **Native client:** Running and connected
## Quick Verification (5 minutes)
Before full verification, confirm basic stability:
1. Join a session
2. Open/close chat window 3 times
3. Show/hide VU meters 3 times
4. Leave session
5. Verify no console errors
**Quick check pass:** [ ]
---
## Section 1: VU Meter Verification (Phase 20 fixes)
**Purpose:** Verify vuStates cleanup when tracks are removed (VUMTR-02, VUMTR-03)
### Test Steps
1. **Open React DevTools**
- Press F12 > Components tab
- Find VuContext provider in the component tree
2. **Join Session with Tracks**
- Join a session with at least one other participant
- Note the initial vuStates keys in VuContext
3. **Record Initial State**
- Inspect VuContext state
- Record number of mixer IDs in vuStates: ______
4. **Simulate Track Changes**
- If possible, have participants join/leave
- OR: Navigate away and back to session (triggers track refresh)
- Repeat 3 times
5. **Verify Cleanup**
- Check vuStates keys in VuContext
- vuStates should ONLY contain active mixer IDs
- No orphaned entries from removed tracks
### Expected Results
| Check | Expected | Actual |
|-------|----------|--------|
| vuStates keys match active mixers | Yes | |
| No orphaned mixer IDs | Yes | |
| Console errors | None | |
**Section 1 Pass:** [ ]
---
## Section 2: Chat Memory Verification (Phase 21 fixes)
**Purpose:** Verify bounded message storage and cleanup on session leave (CHAT-02, CHAT-03)
### Test Steps
1. **Open Session and Chat Window**
- Join any session
- Click the chat button to open chat window
2. **Send Messages**
- Send at least 10 test messages
- Messages should appear in chat list
3. **Verify Bounded Storage**
- Open Redux DevTools (requires Redux DevTools extension)
- Navigate to state > sessionChat > messagesByChannel
- Note message count: ______
- Verify messages array length is reasonable (max 500 per channel)
4. **Leave Session**
- Click the leave button to exit session
- Navigate to dashboard
5. **Verify Chat Cleanup**
- Open Redux DevTools
- Check sessionChat.messagesByChannel
- Should be empty object `{}`
### Expected Results
| Check | Expected | Actual |
|-------|----------|--------|
| Messages bounded (< 500) | Yes | |
| Chat cleared on leave | Yes | |
| lastReadAt preserved | Yes | |
| Console errors | None | |
**Section 2 Pass:** [ ]
---
## Section 3: Session Screen Verification (Phase 22 fixes)
**Purpose:** Verify callback cleanup on session leave (SESS-01)
### Test Steps
1. **Join Session**
- Join any session
- Wait for session screen to fully load
2. **Leave Session**
- Click the leave button
- Navigate to dashboard
3. **Check Console**
- Open browser console (F12 > Console)
- Look for any warnings about duplicate callbacks
- Look for any "cleanup" or "unregister" errors
4. **Rejoin Session**
- Join the same or different session
- Verify app works normally
5. **Verify No Duplicate Callbacks**
- Check console for "already registered" warnings
- Check for duplicate WebSocket event handlers
### Expected Results
| Check | Expected | Actual |
|-------|----------|--------|
| Clean leave (no errors) | Yes | |
| Rejoin works normally | Yes | |
| No duplicate callback warnings | Yes | |
| Console errors | None | |
**Section 3 Pass:** [ ]
---
## Section 4: 15-Minute Stability Test (VRFY-01)
**Purpose:** Verify app remains stable during extended session use
### Test Steps
1. **Join Session**
- Join any active session
- Note start time: ______
2. **Perform Repeated Actions**
- Open/close chat window: 5 times
- Show/hide VU meters (if available): 5 times
- Leave and rejoin session: 3 times
- Send chat messages: 10 messages
3. **Wait and Observe**
- Keep session active for 15+ minutes
- Check for app responsiveness every 5 minutes:
- 5 min: Responsive? [ ]
- 10 min: Responsive? [ ]
- 15 min: Responsive? [ ]
4. **Final Check**
- Note end time: ______
- Total duration: ______ minutes
- App responsive at end: [ ]
### Expected Results
| Check | Expected | Actual |
|-------|----------|--------|
| No freezes | Yes | |
| No memory alerts | Yes | |
| App responsive throughout | Yes | |
| UI renders correctly | Yes | |
**Section 4 Pass:** [ ]
---
## Section 5: Memory Growth Check (VRFY-02)
**Purpose:** Verify memory doesn't grow unbounded during usage
### Test Steps
1. **Open Performance Monitor**
- Chrome DevTools > More tools > Performance monitor
- Note initial JS heap size: ______ MB
2. **Record Baseline**
- Wait 30 seconds for app to stabilize
- Record baseline heap size: ______ MB
3. **Perform Test Actions**
- Complete all actions from Section 4 (15-minute test)
- OR: At minimum, perform:
- 5 chat open/close cycles
- 5 VU meter visibility toggles
- 3 session leave/rejoin cycles
4. **Take Heap Snapshot**
- DevTools > Memory tab > Take heap snapshot
- Note heap snapshot size: ______ MB
5. **Analyze Growth**
- Calculate growth: (Final - Baseline) = ______ MB
- Growth percentage: ______%
- Expected: < 50% growth, heap should stabilize
### Expected Results
| Check | Expected | Actual |
|-------|----------|--------|
| Initial heap size | < 200 MB | |
| Final heap size | < 300 MB | |
| Growth < 50% | Yes | |
| Heap stabilizes | Yes | |
**Section 5 Pass:** [ ]
---
## Verification Results Summary
| Section | Status | Notes |
|---------|--------|-------|
| Quick Verification | | |
| Section 1: VU Meters | | |
| Section 2: Chat Memory | | |
| Section 3: Session Callbacks | | |
| Section 4: 15-min Stability | | |
| Section 5: Memory Growth | | |
**Overall UAT Status:** [ ] PASS / [ ] FAIL
**Verifier:** ______________________
**Date:** ______________________
**Notes:**
---
## Troubleshooting
If any section fails:
### VU Meter Issues
- Check React DevTools for VuContext
- Look for mixer IDs that don't correspond to active tracks
- Review `useVuHelpers.js` removeVuState function
### Chat Issues
- Verify Redux DevTools shows proper state structure
- Check clearAllMessages is called on session leave
- Review `sessionChatSlice.js` for bounded array logic
### Session Callback Issues
- Check console for "unregister" related errors
- Verify cleanup effect runs on unmount
- Review `JKSessionScreen.js` for registeredCallbacksRef usage
### Memory Growth Issues
- Take multiple heap snapshots to identify retained objects
- Look for arrays/objects that grow without bound
- Check for detached DOM nodes in memory snapshot
---
*UAT Template Version: 1.0*
*Created: 2026-02-10*
*For: v1.4 Memory Leak Prevention Milestone*