- async zip() instead of zipSync (non-blocking for large files) - null check for track in DELETE endpoint (was non-null assertion) - formatFileSize extracted to format.ts, imported in StemList - Stem type exported from StemList, removed duplicate in +page.svelte - files[idx].progress = p direct Svelte 5 mutation (no spread) - remove narrative comments from stems.ts Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>