fix(20): revise plan based on checker feedback

- Task 2: Changed from 'auto' to 'checkpoint:pass' (no code changes needed)
- Task 3: Explicitly state line 111 destructuring modification
- Added VUMTR-01 deferral note in objective section
- Updated files_modified to exclude VuContext.js (auto-exposes via pattern)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
Nuwan 2026-02-08 19:20:28 +05:30
parent f8e74a3c1f
commit 4f0119b259
1 changed files with 14 additions and 16 deletions

View File

@ -6,8 +6,8 @@ wave: 1
depends_on: []
files_modified:
- jam-ui/src/hooks/useVuHelpers.js
- jam-ui/src/context/VuContext.js
- jam-ui/src/hooks/useMixerHelper.js
# Note: VuContext.js not modified - it automatically exposes removeVuState via existing pattern
autonomous: true
must_haves:
@ -43,8 +43,10 @@ Purpose: Address HIGH priority memory leak (VUMTR-02, VUMTR-03) where vuStates o
Output:
- Modified useVuHelpers.js with removeVuState function
- Modified VuContext.js exposing removeVuState
- Modified VuContext.js exposing removeVuState (automatic via existing pattern)
- Modified useMixerHelper.js calling removeVuState on mixer cleanup
Note: VUMTR-01 (VU callback throttling) is intentionally deferred as a performance optimization, not a memory leak (per Phase 19 audit).
</objective>
<execution_context>
@ -122,13 +124,12 @@ removeVuState callback exists in useVuHelpers.js and is exported in the return o
</done>
</task>
<task type="auto">
<name>Task 2: Expose removeVuState through VuContext</name>
<files>jam-ui/src/context/VuContext.js</files>
<action>
The VuContext.js file already passes all of useVuHelpers return values through the context provider (line 7: `const vuHelpers = useVuHelpers()`), so removeVuState is automatically available.
<task type="checkpoint:pass">
<name>Task 2: Verify removeVuState is exposed through VuContext</name>
<rationale>
The VuContext.js file already passes all of useVuHelpers return values through the context provider (line 7: `const vuHelpers = useVuHelpers()`), so removeVuState is automatically available after Task 1 completes.
**Verification only** - No code changes needed. The existing pattern at lines 6-13 passes the entire vuHelpers object to the context, which now includes removeVuState:
The existing pattern at lines 6-13 passes the entire vuHelpers object to the context:
```javascript
export const VuProvider = ({ children }) => {
@ -142,15 +143,15 @@ export const VuProvider = ({ children }) => {
};
```
Consumers using `useVuContext()` will automatically have access to removeVuState.
</action>
No code changes required - consumers using `useVuContext()` will automatically have access to removeVuState once Task 1 adds it to useVuHelpers.
</rationale>
<verify>
1. Read VuContext.js to confirm the pattern passes all useVuHelpers exports
2. Verify useVuHelpers() is called and spread into context value
2. Verify useVuHelpers() is called and its result is passed to context value
3. Confirm no changes are needed to VuContext.js
</verify>
<done>
VuContext automatically exposes removeVuState through the existing vuHelpers spread pattern
VuContext automatically exposes removeVuState through the existing vuHelpers spread pattern - no modifications needed
</done>
</task>
@ -167,10 +168,7 @@ Implementation steps:
import { useVuContext } from '../context/VuContext.js';
```
Update line 111 to destructure removeVuState alongside updateVU3:
```javascript
const { updateVU3, removeVuState } = useVuContext();
```
Modify line 111 from `const { updateVU3 } = useVuContext();` to `const { updateVU3, removeVuState } = useVuContext();` to destructure removeVuState alongside updateVU3.
2. **Add cleanup effect that watches for mixer removals** - After the existing `useEffect` that syncs `isReady` (around line 317), add a new effect that detects when mixers are removed and cleans up their VU state: