diff --git a/.planning/REQUIREMENTS.md b/.planning/REQUIREMENTS.md
index 4ea5b2871..25463155b 100644
--- a/.planning/REQUIREMENTS.md
+++ b/.planning/REQUIREMENTS.md
@@ -43,23 +43,30 @@ Requirements for fixing memory leaks in the session screen. Focus on cleanup pat
| Requirement | Phase | Status |
|-------------|-------|--------|
-| VUMTR-01 | TBD | Pending |
-| VUMTR-02 | TBD | Pending |
-| VUMTR-03 | TBD | Pending |
-| CHAT-01 | TBD | Pending |
-| CHAT-02 | TBD | Pending |
-| CHAT-03 | TBD | Pending |
-| SESS-01 | TBD | Pending |
-| SESS-02 | TBD | Pending |
-| SESS-03 | TBD | Pending |
-| VRFY-01 | TBD | Pending |
-| VRFY-02 | TBD | Pending |
+| VUMTR-01 | Phase 20 | Pending |
+| VUMTR-02 | Phase 20 | Pending |
+| VUMTR-03 | Phase 20 | Pending |
+| CHAT-01 | Phase 21 | Pending |
+| CHAT-02 | Phase 21 | Pending |
+| CHAT-03 | Phase 21 | Pending |
+| SESS-01 | Phase 22 | Pending |
+| SESS-02 | Phase 22 | Pending |
+| SESS-03 | Phase 22 | Pending |
+| VRFY-01 | Phase 23 | Pending |
+| VRFY-02 | Phase 23 | Pending |
**Coverage:**
- v1.4 requirements: 11 total
-- Mapped to phases: 0
-- Unmapped: 11
+- Mapped to phases: 11
+- Unmapped: 0
+
+**Phase Summary:**
+- Phase 19 (Audit and Discovery): 0 requirements (discovery phase - informs subsequent phases)
+- Phase 20 (VU Meter Fixes): 3 requirements (VUMTR-01, VUMTR-02, VUMTR-03)
+- Phase 21 (Chat Window Fixes): 3 requirements (CHAT-01, CHAT-02, CHAT-03)
+- Phase 22 (Session Screen Fixes): 3 requirements (SESS-01, SESS-02, SESS-03)
+- Phase 23 (Verification): 2 requirements (VRFY-01, VRFY-02)
---
*Requirements defined: 2026-02-08*
-*Last updated: 2026-02-08 after initial definition*
+*Last updated: 2026-02-08 after roadmap creation*
diff --git a/.planning/ROADMAP.md b/.planning/ROADMAP.md
index 7b1c7fd0c..b962526c7 100644
--- a/.planning/ROADMAP.md
+++ b/.planning/ROADMAP.md
@@ -10,10 +10,11 @@ None
## Milestones
-- ✅ **v1.0 Media Players** - Phases 1-5 (shipped 2026-01-14)
-- ✅ **v1.1 Music Session Chat** - Phases 6-11 (shipped 2026-01-31)
-- ✅ **v1.2 Session Attachments** - Phases 12-16 (shipped 2026-02-07)
-- ✅ **v1.3 Session Settings Tests** - Phases 17-18 (shipped 2026-02-08)
+- v1.0 Media Players - Phases 1-5 (shipped 2026-01-14)
+- v1.1 Music Session Chat - Phases 6-11 (shipped 2026-01-31)
+- v1.2 Session Attachments - Phases 12-16 (shipped 2026-02-07)
+- v1.3 Session Settings Tests - Phases 17-18 (shipped 2026-02-08)
+- **v1.4 Memory Leak Prevention** - Phases 19-23 (in progress)
## Phases
@@ -23,7 +24,7 @@ None
Decimal phases appear between their surrounding integers in numeric order.
-### ✅ v1.0 Media Players (Phases 1-5) - SHIPPED 2026-01-14
+### v1.0 Media Players (Phases 1-5) - SHIPPED 2026-01-14
Show completed phases
@@ -36,7 +37,7 @@ Decimal phases appear between their surrounding integers in numeric order.
-### ✅ v1.1 Music Session Chat (Phases 6-11) - SHIPPED 2026-01-31
+### v1.1 Music Session Chat (Phases 6-11) - SHIPPED 2026-01-31
Show completed phases
@@ -52,7 +53,7 @@ Decimal phases appear between their surrounding integers in numeric order.
-### ✅ v1.2 Session Attachments (Phases 12-16) - SHIPPED 2026-02-07
+### v1.2 Session Attachments (Phases 12-16) - SHIPPED 2026-02-07
Show completed phases
@@ -67,16 +68,31 @@ Decimal phases appear between their surrounding integers in numeric order.
-### ✅ v1.3 Session Settings Tests (Phases 17-18) - SHIPPED 2026-02-08
+### v1.3 Session Settings Tests (Phases 17-18) - SHIPPED 2026-02-08
+
+
+Show completed phases
**Milestone Goal:** Add test coverage for the Session Settings modal component (JKSessionSettingsModal) to enable confident changes.
- [x] **Phase 17: Unit Tests (Jest)** - Component rendering, save payload, loading state
- [x] **Phase 18: Integration Tests (Playwright)** - Settings button, save API call, cancel behavior
+
+
+### v1.4 Memory Leak Prevention (Phases 19-23) - IN PROGRESS
+
+**Milestone Goal:** Fix memory leaks causing session screen freezes after ~10 minutes. Audit and fix cleanup patterns in VU meters, chat window, and session screen components.
+
+- [ ] **Phase 19: Audit and Discovery** - Investigate all three areas, identify actual memory leaks with evidence
+- [ ] **Phase 20: VU Meter Fixes** - Fix identified VU meter interval/animation cleanup issues
+- [ ] **Phase 21: Chat Window Fixes** - Fix identified chat WebSocket listener and state cleanup issues
+- [ ] **Phase 22: Session Screen Fixes** - Fix identified session screen useEffect and polling cleanup issues
+- [ ] **Phase 23: Verification** - Validate session stability after fixes
+
## Phase Details
-### ✅ v1.0 Media Players - SHIPPED 2026-01-14
+### v1.0 Media Players - SHIPPED 2026-01-14
Show completed phase details
@@ -136,7 +152,7 @@ Plans:
-### ✅ v1.1 Music Session Chat (Phases 6-11) - SHIPPED 2026-01-31
+### v1.1 Music Session Chat (Phases 6-11) - SHIPPED 2026-01-31
Show completed phase details
@@ -207,7 +223,7 @@ Plans:
-### ✅ v1.2 Session Attachments (Phases 12-16) - SHIPPED 2026-02-07
+### v1.2 Session Attachments (Phases 12-16) - SHIPPED 2026-02-07
Show completed phase details
@@ -319,7 +335,7 @@ Plans:
-### ✅ v1.3 Session Settings Tests (Phases 17-18) - SHIPPED 2026-02-08
+### v1.3 Session Settings Tests (Phases 17-18) - SHIPPED 2026-02-08
Show completed phase details
@@ -362,10 +378,100 @@ Plans:
+### v1.4 Memory Leak Prevention (Phases 19-23) - IN PROGRESS
+
+**Milestone Goal:** Fix memory leaks causing session screen freezes after ~10 minutes. Audit and fix cleanup patterns in VU meters, chat window, and session screen components.
+
+#### Phase 19: Audit and Discovery
+**Goal**: Investigate all three areas (VU meters, chat, session screen) and identify actual memory leaks with evidence
+**Depends on**: Phase 18 (previous milestone complete)
+**Research**: Likely (code audit to identify actual leak sources)
+**Requirements**: None (discovery phase - informs subsequent phases)
+**Plans**: TBD (1-2 plans expected)
+
+**Success Criteria:**
+1. VU meter components audited - all setInterval, setTimeout, and requestAnimationFrame calls documented
+2. Chat window components audited - all WebSocket listeners and state growth patterns documented
+3. Session screen components audited - all useEffect hooks and cleanup functions documented
+4. Leak sources identified with evidence (missing cleanup, unbounded growth, etc.)
+5. Priority ranking of fixes based on severity (which leaks cause the 10-minute freeze)
+
+Plans:
+- [ ] 19-01: TBD
+
+#### Phase 20: VU Meter Fixes
+**Goal**: Fix identified VU meter interval/animation cleanup issues
+**Depends on**: Phase 19
+**Research**: Unlikely (fixing issues identified in Phase 19)
+**Requirements**: VUMTR-01, VUMTR-02, VUMTR-03
+**Plans**: TBD (1-2 plans expected)
+
+**Success Criteria:**
+1. All setInterval calls in VU meter components have corresponding clearInterval in cleanup
+2. All requestAnimationFrame calls have corresponding cancelAnimationFrame in cleanup
+3. VU meter animations stop completely when component is hidden or unmounted
+4. No orphaned intervals or animation frames accumulate over time
+5. VU meters can be shown/hidden repeatedly without memory growth
+
+Plans:
+- [ ] 20-01: TBD
+
+#### Phase 21: Chat Window Fixes
+**Goal**: Fix identified chat WebSocket listener and state cleanup issues
+**Depends on**: Phase 19
+**Research**: Unlikely (fixing issues identified in Phase 19)
+**Requirements**: CHAT-01, CHAT-02, CHAT-03
+**Plans**: TBD (1-2 plans expected)
+
+**Success Criteria:**
+1. WebSocket listeners are properly removed when chat window closes
+2. Message list has bounded growth (e.g., max messages, pagination, or virtualization)
+3. Chat window can be opened/closed repeatedly without memory growth
+4. No duplicate WebSocket listeners accumulate over time
+5. Redux state cleanup happens when session ends or user leaves
+
+Plans:
+- [ ] 21-01: TBD
+
+#### Phase 22: Session Screen Fixes
+**Goal**: Fix identified session screen useEffect and polling cleanup issues
+**Depends on**: Phase 19
+**Research**: Unlikely (fixing issues identified in Phase 19)
+**Requirements**: SESS-01, SESS-02, SESS-03
+**Plans**: TBD (1-2 plans expected)
+
+**Success Criteria:**
+1. All useEffect hooks that set up subscriptions/intervals have cleanup return functions
+2. All polling intervals are cleared on component unmount
+3. All event listeners have corresponding removal on cleanup
+4. Session screen can be mounted/unmounted without memory growth
+5. No orphaned polling or listeners accumulate during normal session use
+
+Plans:
+- [ ] 22-01: TBD
+
+#### Phase 23: Verification
+**Goal**: Validate session stability after all fixes are applied
+**Depends on**: Phase 20, Phase 21, Phase 22
+**Research**: Unlikely (verification of completed fixes)
+**Requirements**: VRFY-01, VRFY-02
+**Plans**: 1 plan
+
+**Success Criteria:**
+1. Session remains stable and responsive for 15+ minutes of continuous use
+2. Memory usage in browser dev tools remains stable (no unbounded growth)
+3. Multiple session join/leave cycles don't accumulate memory
+4. Chat window open/close cycles don't accumulate memory
+5. VU meter show/hide cycles don't accumulate memory
+6. All existing Playwright tests still pass (no regressions)
+
+Plans:
+- [ ] 23-01: TBD
+
## Progress
**Execution Order:**
-Phases execute in numeric order: 1 → 2 → ... → 16 → 17 → 18
+Phases execute in numeric order: 1 → 2 → ... → 18 → 19 → 20 → 21 → 22 → 23
| Phase | Milestone | Plans Complete | Status | Completed |
|-------|-----------|----------------|--------|-----------|
@@ -387,3 +493,8 @@ Phases execute in numeric order: 1 → 2 → ... → 16 → 17 → 18
| 16. Attachment Finalization | v1.2 | 2/2 | Complete | 2026-02-07 |
| 17. Unit Tests (Jest) | v1.3 | 1/1 | Complete | 2026-02-08 |
| 18. Integration Tests (Playwright) | v1.3 | 1/1 | Complete | 2026-02-08 |
+| 19. Audit and Discovery | v1.4 | 0/TBD | Not started | - |
+| 20. VU Meter Fixes | v1.4 | 0/TBD | Not started | - |
+| 21. Chat Window Fixes | v1.4 | 0/TBD | Not started | - |
+| 22. Session Screen Fixes | v1.4 | 0/TBD | Not started | - |
+| 23. Verification | v1.4 | 0/TBD | Not started | - |
diff --git a/.planning/STATE.md b/.planning/STATE.md
index 379db7c05..be41b6fd0 100644
--- a/.planning/STATE.md
+++ b/.planning/STATE.md
@@ -4,17 +4,17 @@
See: .planning/PROJECT.md (updated 2026-02-08)
-**Core value:** Fix memory leaks to ensure stable session experience
-**Current focus:** v1.4 Memory Leak Prevention
+**Core value:** Fix memory leaks to ensure stable session experience without freezes
+**Current focus:** v1.4 Memory Leak Prevention - Phase 19 Audit and Discovery
## Current Position
-Phase: Not started (defining requirements)
-Plan: —
-Status: Defining requirements
-Last activity: 2026-02-08 — Milestone v1.4 started
+Phase: 19 of 23 (Audit and Discovery)
+Plan: Not started
+Status: Ready to plan
+Last activity: 2026-02-08 — Roadmap created for v1.4
-Progress: ░░░░░░░░░░░░ 0%
+Progress (v1.4): [░░░░░░░░░░░░░░░░░░░░] 0%
## Performance Metrics
@@ -42,6 +42,11 @@ Progress: ░░░░░░░░░░░░ 0%
- Completion date: 2026-02-08
- Duration: 1 day
+**v1.4 Memory Leak Prevention (In Progress):**
+- Phases: 5 (phases 19-23)
+- Requirements: 11
+- Plans completed: 0
+
## Accumulated Context
### Decisions
@@ -50,12 +55,8 @@ Decisions are logged in PROJECT.md Key Decisions table.
| Date | Phase | Decision | Rationale |
|------|-------|----------|-----------|
-| 2026-02-08 | 17-01 | renderModal helper pattern with defaultProps | Reduces test boilerplate |
-| 2026-02-08 | 17-01 | react-i18next mock with translation map | Enables testing actual label values |
-| 2026-02-08 | 17-01 | Requirement-labeled describe blocks (UNIT-XX) | Traceability from tests to requirements |
| 2026-02-08 | 18-01 | Use privacy select as modal indicator | Avoids toast notification collision |
| 2026-02-08 | 18-01 | page.route() for API interception | Simpler than APIInterceptor for single-request |
-| 2026-02-08 | 18-01 | INT-XX labeled test names | Traceability to integration test requirements |
### Deferred Issues
@@ -64,7 +65,7 @@ Decisions are logged in PROJECT.md Key Decisions table.
3. **Volume control not working in popup mode** (Medium) - From v1.0
4. **WebSocket chat messages only broadcast to musicians** (Medium) - From v1.2
5. **mp3 backend support** (Medium) - Frontend allows, backend whitelist doesn't support
-6. **Pre-existing test failures in JKChatMessageList.test.js** (Low) - Missing activeSession state in store
+6. **Pre-existing test failures in JKChatMessageList.test.js** (Low) - Missing activeSession state
### Roadmap Evolution
@@ -72,14 +73,15 @@ Decisions are logged in PROJECT.md Key Decisions table.
- **v1.1 Music Session Chat** (Phases 6-11): Shipped 2026-01-31
- **v1.2 Session Attachments** (Phases 12-16): Shipped 2026-02-07
- **v1.3 Session Settings Tests** (Phases 17-18): Shipped 2026-02-08
+- **v1.4 Memory Leak Prevention** (Phases 19-23): In progress
## Session Continuity
Last session: 2026-02-08
-Stopped at: Started v1.4 Memory Leak Prevention milestone
+Stopped at: Roadmap created for v1.4 Memory Leak Prevention
Resume file: None
**Next steps:**
-1. Define requirements for memory leak fixes
-2. Create roadmap with phases
-3. Begin auditing session screen components
+1. Run `/gsd:plan-phase 19` to plan Audit and Discovery phase
+2. Investigate VU meters, chat window, and session screen for memory leaks
+3. Document findings before implementing fixes