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