Commit Graph

8269 Commits

Author SHA1 Message Date
Nuwan e4300aecb4 docs(26): complete JamTrack Polish phase with gap closure round 2 2026-02-25 23:51:01 +05:30
Nuwan 5a7f29e3e6 fix(26): orchestrator corrections - update planning docs 2026-02-25 23:47:07 +05:30
Nuwan 38aacb49a5 docs(26-04): complete trigger download flow plan
Tasks completed: 2/2
- Task 1: Call loadJamTrack when track is not synchronized
- Task 2: Build verification (syntax validated via Babel parser)

SUMMARY: .planning/phases/26-jamtrack-polish/26-04-SUMMARY.md
2026-02-25 23:46:46 +05:30
Nuwan 6d92e93a63 feat(26-04): call loadJamTrack when track is not synchronized
- Added loadJamTrack call in handleJamTrackSelect else branch
- When syncResult.isSynchronized is false, triggers download flow
- This transitions state through checking → packaging → downloading → keying → synchronized
- Fixes empty JamTrack player for non-synchronized tracks
2026-02-25 23:44:45 +05:30
Nuwan 6423df4b7b docs(26): complete JamTrack Polish phase with gap closure 2026-02-25 23:24:34 +05:30
Nuwan b52e822bf7 fix(26-03): restore JamTrack popup window dimensions to 460x350 2026-02-25 23:21:15 +05:30
Nuwan 4e5192d52f docs(26-03): complete JamTrack stems/controls render timing fix
Tasks completed: 4/4
- Task 1: Call checkJamTrackSync in handleJamTrackSelect
- Task 2: Remove 'idle' from stems render condition
- Task 3: Remove 'idle' from controls render condition
- Task 4: Build verification

SUMMARY: .planning/phases/26-jamtrack-polish/26-03-SUMMARY.md
2026-02-25 23:17:32 +05:30
Nuwan d529c6c7e4 fix(26-03): remove 'idle' from controls render condition in JKSessionJamTrackPlayer
- Change condition from 'idle' OR 'synchronized' to only 'synchronized'
- Controls only appear after JamTrack is synchronized with backend
- Download progress UI handles loading states appropriately
2026-02-25 23:14:17 +05:30
Nuwan d11ce7189d fix(26-03): remove 'idle' from stems render condition in JKSessionScreen
- Change condition from 'synchronized' OR 'idle' to only 'synchronized'
- Stems only appear after JamTrack is synchronized with backend
- Already-synchronized tracks show stems immediately (checkJamTrackSync returns synchronized)
2026-02-25 23:13:24 +05:30
Nuwan 407b2f1410 feat(26-03): call checkJamTrackSync before dispatching UI state in handleJamTrackSelect
- Import checkJamTrackSync from mediaSlice
- Call checkJamTrackSync BEFORE setSelectedJamTrack/setJamTrackStems
- Show different toast messages based on sync state
- This ensures downloadState transitions from 'idle' appropriately
2026-02-25 23:12:37 +05:30
Nuwan 41463c9863 docs(26): create gap closure plan for stems/controls render timing
Phase 26: JamTrack Polish
- Plan 26-03 removes 'idle' from valid render states
- Closes UAT gap: stems/controls appearing before sync
- 1 plan in wave 3, depends on 26-02

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-25 22:59:46 +05:30
Nuwan 156b1039e8 test(26): complete UAT - 3 passed, 1 issue
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-25 22:53:41 +05:30
Nuwan 634d86f43b docs(26): complete JamTrack Polish phase
- Phase 26 verified: 4/4 must-haves passed
- Requirements JT-01 through JT-04 complete
- Ready for Phase 27 (Backing Track Sync)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-25 19:18:41 +05:30
Nuwan f46c0ebc01 docs(26): update PROJECT.md for v1.6 milestone
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-25 19:15:42 +05:30
Nuwan 00b912f801 docs(26-02): complete JamTrack callback cleanup plan
Tasks completed: 3/3
- Add callback cleanup action to mediaSlice
- Call cleanup on unmount and defer controls rendering
- Build verification

SUMMARY: .planning/phases/26-jamtrack-polish/26-02-SUMMARY.md
2026-02-25 19:15:12 +05:30
Nuwan dbaaba82f9 feat(26-02): cleanup callbacks on unmount and defer controls rendering
- Import and call cleanupJamTrackCallbacks in cleanup useEffect
- Wrap controls section in condition: only render when downloadState
  is 'idle' or 'synchronized' and not in initial loading
- Fixes memory leak from orphaned window.jamTrackDownload* globals
- Fixes UX issue where controls appeared before track ready
2026-02-25 19:13:42 +05:30
Nuwan 90d3fd29dd feat(26-02): add cleanupJamTrackCallbacks to mediaSlice
- Add cleanup function for window.jamTrackDownload* globals
- Prevents memory leaks from orphaned callbacks when closing JamTrack
- Pattern matches useRecordingHelpers.js cleanup approach
2026-02-25 19:12:34 +05:30
Nuwan 2314c29b9e docs(26-01): complete JamTrack player fixes plan
Tasks completed: 2/2
- Fix WindowPortal sizing for JamTrack player
- Implement create custom mix navigation

SUMMARY: .planning/phases/26-jamtrack-polish/26-01-SUMMARY.md
2026-02-25 19:11:29 +05:30
Nuwan 7038f617cf feat(26-01): implement create custom mix navigation
- Replace TODO console.log with actual navigation
- Open JamTrack editor at /jamtracks/{id} in new tab
- Use noopener,noreferrer for security best practices
2026-02-25 19:10:19 +05:30
Nuwan d79911caa8 fix(26-01): correct WindowPortal sizing for JamTrack player
- Change window dimensions from 600x500 to 460x350
- Disable scrollbars since content now fits properly
- Player content is 420px wide + 20px padding on each side
2026-02-25 19:10:01 +05:30
Nuwan 48c9bf8313 docs(26): create phase plan for JamTrack Polish
Phase 26: JamTrack Polish
- 2 plan(s) in 2 wave(s)
- Wave 1: 26-01 (UI fixes - sizing, navigation)
- Wave 2: 26-02 (state/callback fixes - cleanup, deferred rendering)
- Ready for execution

Requirements covered:
- JT-01: Defer UI rendering until track ready
- JT-02: Fix WindowPortal sizing (460x350)
- JT-03: Implement create custom mix navigation
- JT-04: Add callback cleanup for jamTrackDownload* globals

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-25 19:05:14 +05:30
Nuwan eab0b0d19a docs(v1.6): create roadmap for Media Features Polish
- 3 phases: JamTrack Polish, Backing Track Sync, Metronome Responsiveness
- 8 requirements mapped to phases
- Research complete for all features

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-25 18:51:18 +05:30
Nuwan daaa37a84e chore: complete v1.5 milestone
Archived:
- milestones/v1.5-ROADMAP.md
- milestones/v1.5-REQUIREMENTS.md
- milestones/v1.5-MILESTONE-AUDIT.md

Deleted (fresh for next milestone):
- ROADMAP.md
- REQUIREMENTS.md

Updated:
- MILESTONES.md (new entry)
- PROJECT.md (requirements → Validated)
- STATE.md (reset for next milestone)

v1.5 Fix Session Recording shipped:
- Fixed C++ client crash on Start Recording (JSON parsing)
- Fixed memory leaks in recording modal
- User verified 15+ minute recording stability

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-25 11:56:26 +05:30
Nuwan 2292cb4fd6 docs: audit v1.5 milestone before completion
Findings:
- Recording crash fixed (JSON parsing, not method names)
- Memory leaks fixed (timer/callback/async cleanup)
- Tech debt: 24-VERIFICATION.md describes reverted code
- Tech debt: CTRL requirements unmapped in roadmap

Status: tech_debt (shippable, documentation inconsistencies)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-25 00:31:58 +05:30
Nuwan 585b7f9cc1 docs(25): complete Memory Leak Audit phase
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-25 00:03:41 +05:30
Nuwan af71f8e500 docs(25-01): complete memory leak audit plan
Tasks completed: 4/4
- Fix timer and callback cleanup in useRecordingHelpers
- Fix async cleanup in JKSessionRecordingModal
- Create UAT checklist for memory verification
- Verify memory stability with UAT checklist (user approved)

SUMMARY: .planning/phases/25-memory-leak-audit/25-01-SUMMARY.md
2026-02-24 23:59:52 +05:30
Nuwan 32ee0e8b10 docs(25-01): create UAT checklist for recording memory verification
- 5 comprehensive test sections covering all memory leak scenarios
- Timer cleanup verification test
- Callback accumulation verification test
- Async operation cleanup verification test
- 15-minute modal idle stability test
- 15-minute active recording stability test
- Troubleshooting guide for each failure type
2026-02-24 23:20:38 +05:30
Nuwan 1c1e7e4a3f fix(25-01): add async cleanup in JKSessionRecordingModal
- Add ignore flag pattern to audio preference useEffect
- Add ignore flag pattern to video sources useEffect
- Guard state updates with !ignore check
- Prevents "state update on unmounted component" warnings
2026-02-24 23:19:31 +05:30
Nuwan ef3d7a630e fix(25-01): add timer and callback cleanup in useRecordingHelpers
- Add useEffect cleanup for waitingOnStopTimer on unmount
- Add conditional cleanup for window.JK callbacks
- Track callback references to avoid deleting shared callbacks
- Prevents memory leaks from accumulated timers and callbacks
2026-02-24 23:19:00 +05:30
Nuwan 445e4834a6 fix(25): revise plan based on checker feedback
- Added Task 3 to create 25-UAT.md (requirement_coverage blocker)
- Renumbered checkpoint task from 3 to 4
- Simplified key_links[0] pattern to 'delete window\.JK' (warning fix)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-24 22:51:29 +05:30
Nuwan 5f7f0fda76 docs(25): create phase plan for memory leak audit
Phase 25: Memory Leak Audit
- 1 plan in 1 wave
- 2 auto tasks + 1 human-verify checkpoint
- Fixes timer cleanup, callback cleanup, async cleanup
- Ready for execution

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-24 22:48:03 +05:30
Nuwan 59f36edd93 docs(25): research memory leak audit domain
Phase 25: Memory Leak Audit
- Identified 4 memory leak issues in recording code
- Documented cleanup patterns (useRef, ignore flag, timer cleanup)
- Created verification method following Phase 23 approach
- Confidence: HIGH based on React docs and codebase analysis

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-24 22:44:50 +05:30
Nuwan 677732996f docs(25): capture phase context
Phase 25: Memory Leak Audit
- Implementation decisions documented
- Phase boundary established
2026-02-24 22:32:31 +05:30
Nuwan b2bad70b5d chore: remove phase 25 (Verify Basic Controls) 2026-02-23 21:08:17 +05:30
Nuwan eaf50fd2af remove jam-ui/.env.development 2026-02-23 21:00:16 +05:30
Nuwan 42eac0d304 style(24-01): add recording button pulse animation
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-23 20:45:03 +05:30
Nuwan 89a9d4ced3 fix(24-01): update recording modal to use Redux state
- Use selectIsRecording from Redux instead of local hook state
- Dispatch setRecordingStopped() when stopping recording
- Add recording name validation before starting
- Replace alert() with toast notifications
- Wait for native client callback before updating Redux state
- Add client_id to useJamServer payload

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-23 20:44:43 +05:30
Nuwan c6d61de4eb fix(24-01): complete recording stop functionality
- Pass jamClient to useRecordingHelpers in JKSessionScreen
- Add thisClientStartedRecording to Redux for cross-instance state sharing
- Capture shouldCallRestStop before async operations to prevent race conditions
- Add comprehensive logging for debugging recording start/stop flow
- Fix error handling to properly parse 422 response details
- Update tests with new Redux state and API mock responses

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-23 20:41:31 +05:30
Nuwan e1065430e5 fix(24-01): revert to original StartMediaRecording method
The original research was incorrect - jam-ui uses StartMediaRecording
(enum 428) not StartRecording (enum 377). These are different methods
in the C++ client.

Reverted to original method signatures:
- StartMediaRecording(id, groupedTracks, recordSettings)
- FrontStopRecording(id, groupedTracks)

The JSON parsing fix in rest.js (previous commit) is the actual fix
that resolves recording.id being undefined.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-19 21:10:13 +05:30
Nuwan 0766e6b99f fix(24-01): parse JSON response in recording REST functions
The startRecording, stopRecording, and getRecordingPromise functions
were returning the raw Response object instead of the parsed JSON data.
This caused recording.id to be undefined, leading to the C++ client
crash with "Assertion failed: (!clientId.isEmpty())".

- Add .json() parsing before resolving the Promise
- Fixes crash when clicking Start Recording

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-19 21:01:25 +05:30
Nuwan fcf68b6926 docs(24): complete Fix Recording Crash phase
- Phase 24 executed and verified
- CRASH-01 through CRASH-04 requirements complete
- Method names corrected: StartMediaRecording → StartRecording, FrontStopRecording → StopRecording
- Parameters unpacked to match legacy signature

Verification: 4/4 must-haves passed

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-19 15:26:26 +05:30
Nuwan e50845dcd1 docs(24-01): complete Fix Recording Crash plan
Tasks completed: 2/2
- Fix useRecordingHelpers.js method names and parameters
- Fix JKSessionScreen.js doStartRecording method

SUMMARY: .planning/phases/24-fix-recording-crash/24-01-SUMMARY.md
2026-02-19 15:22:55 +05:30
Nuwan 6602643127 fix(24-01): correct recording method name in JKSessionScreen
- Change StartMediaRecording to StartRecording with unpacked params
- Unpack videoType, recordChat, recordFramerate from params object
- Match legacy recordingModel.js signature for C++ client
2026-02-19 15:21:19 +05:30
Nuwan 45aeb04eb2 fix(24-01): correct recording method names in useRecordingHelpers
- Change StartMediaRecording to StartRecording with unpacked params
- Change FrontStopRecording to StopRecording
- Match legacy recordingModel.js signature for C++ client
2026-02-19 15:21:02 +05:30
Nuwan 94ae383267 docs(24): create phase plan
Phase 24: Fix Recording Crash
- 1 plan in 1 wave
- 1 parallel, 0 sequential
- Ready for execution

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-19 15:13:27 +05:30
Nuwan 1512f646ea docs: start milestone v1.5 Fix Session Recording
Scope:
- Phase 24: Fix C++ client crash on Start Recording
- Phase 25: Verify Start/Stop/Pause work like desktop native app
- Phase 26: Memory leak audit for recording modal

Research findings:
- Missing RegisterRecordingCallbacks call
- Wrong method names (StartMediaRecording vs StartRecording)
- Parameter format mismatch

10 requirements across 3 phases.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-19 15:04:30 +05:30
Nuwan 0d2c76f83d feat(ui): add size prop to JKSessionInviteModal
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-19 14:20:20 +05:30
Nuwan 34d6a2fbac fix(ui): correct Volume modal to use category mixers for proper display
- Use MonitorCatGroup category mixers with AudioInputMusic/AudioInputChat
  names instead of incorrect MasterGroup/MonitorGroup channel mixers
- Add refresh on modal open to fetch fresh data from native client
- Remove FTUESave call that was causing VU meters to stop working
- Export getAudioInputCategoryMixer and getChatCategoryMixer from useMixerHelper

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-19 14:19:14 +05:30
Nuwan 4a3a0fee87 fix instrument icon now being shown correctly in VU tracks 2026-02-18 18:53:33 +05:30
Nuwan 4f74da017f chore: complete v1.4 milestone
Archived:
- milestones/v1.4-ROADMAP.md
- milestones/v1.4-REQUIREMENTS.md

Deleted (fresh for next milestone):
- ROADMAP.md
- REQUIREMENTS.md

Updated:
- MILESTONES.md (v1.3 and v1.4 entries)
- PROJECT.md (requirements → Validated)
- STATE.md (reset for next milestone)

Tagged: v1.4

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-18 18:51:29 +05:30