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:
parent
c23169a870
commit
e2766b05d5
|
|
@ -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*
|
||||
Loading…
Reference in New Issue