3.3 KiB
Milestone v1.6: Media Features Polish
Status: ✅ SHIPPED 2026-03-03 Phases: 26-27 Total Plans: 5
Overview
v1.6 addressed usability issues in JamTrack (loading sequence bug, sizing, navigation) and Backing Track (sync integration). Metronome responsiveness was determined to be satisfactory after phases 26-27 improvements and was descoped.
Phases
Phase 26: JamTrack Polish
Goal: JamTrack player works correctly from selection through playback without freezes Depends on: v1.5 complete Requirements: JT-01, JT-02, JT-03, JT-04 Success Criteria (what must be TRUE):
- User sees loading indicator while backend processes track (not premature stem UI)
- JamTrack player fits properly in popup window without scrollbars
- "Create custom mix" button opens JamTrack editor in new tab
- No console warnings about leaked callbacks when closing JamTrack or navigating away Plans: 4 plans
Plans:
- 26-01-PLAN.md - Fix window sizing and create custom mix navigation ✓
- 26-02-PLAN.md - Add callback cleanup and defer controls rendering ✓
- 26-03-PLAN.md - Remove 'idle' from valid render states (gap closure) ✓
- 26-04-PLAN.md - Trigger loadJamTrack when not synchronized (gap closure) ✓
Completed: 2026-02-25
Phase 27: Backing Track Sync
Goal: Backing Track appears in session screen when opened Depends on: Nothing (independent of Phase 26) Requirements: BT-01, BT-02 Success Criteria (what must be TRUE):
- Opening a backing track file shows the track in session screen (not just popup)
- No "state update on unmounted component" warnings when closing backing track quickly Plans: 1 plan
Plans:
- 27-01-PLAN.md - Use openBackingTrack action and add async cleanup ✓
Completed: 2026-02-26
Milestone Summary
Descoped Phases:
- Phase 28: Metronome Responsiveness — descoped as responsiveness was satisfactory after Phase 26-27 improvements
Key Decisions:
- Keep WindowPortal for Metronome (consistency with JamTrack, BackingTrack, Chat)
- 300ms debounce for responsive UI while avoiding excessive native client calls
- WindowPortal sizing should match content dimensions plus padding (420px + 40px = 460px)
- Use noopener,noreferrer for security on window.open calls
- cleanupJamTrackCallbacks is a simple function (not thunk) since it only manipulates window globals
- Controls render when downloadState is 'synchronized' only (removed 'idle' from conditions)
- Call checkJamTrackSync BEFORE dispatching setSelectedJamTrack/setJamTrackStems
- Call loadJamTrack when syncResult.isSynchronized is false to trigger download flow
- Use openBackingTrack action instead of direct jamClient call for centralized sync
- Use ignore flag pattern (not AbortController) for simple async cleanup
Issues Resolved:
- JamTrack player showed empty controls before backend processing complete
- JamTrack player window had scrollbars due to incorrect sizing
- "Create custom mix" button did nothing
- Memory leaks from unreleased JamTrack callbacks
- Backing track didn't appear in session screen (only popup)
- State update warnings when closing backing track quickly
Issues Deferred:
- Metronome debounce (MET-01, MET-02) — responsiveness satisfactory
Technical Debt Incurred:
- None identified
For current project status, see .planning/ROADMAP.md Archived: 2026-03-03