# Deliberation: general — GPT-5.3-Codex **Date**: 2026-03-18 12:16 **Model**: GPT-5.3-Codex **Type**: general **Artifact**: ## Cloud Download for Export — Draft Proposal ### Problem Cloud tracks cannot be included in DAW ex --- ## Scope Critique The proposal is directionally correct, but slightly over-scoped for an MVP. ### What is correct - Problem framing matches context: cloud tracks are skipped in `MixExporter.copyAudioFiles` due to `hasLocalFile == false`. - Reusing existing `ChadMusicAPIClient` auth/URL logic is sensible. - No backend API expansion is likely needed **if** stream URLs are stable for full-file GET. ### Gaps / challenges 1. **Model change is likely unnecessary in MVP** - Adding `localCachePath` to `Track` introduces persistence/state invalidation complexity. - For export-only, use an export-scoped mapping (`trackID -> temp/local URL`) and keep `Track` unchanged. 2. **Cache path strategy is under-specified** - `~/Library/Caches/.../{trackId}.{ext}` is **[UNVERIFIED]** for extension availability and uniqueness. - If `ext` is inferred from URL, query params/content-type handling must be defined **[CHECK THIS]**. - If filenames are deterministic, auth or version changes can leave stale/wrong files **[CHECK THIS]**. 3. **Auth and URL lifetime risk** - “Same GET request, just save to disk” is plausible but **[UNVERIFIED]**. - Confirm stream URLs do not require player-specific headers/cookies and do not expire mid-export **[CHECK THIS]**. 4. **Progress/cancellation/error semantics are missing** - “Show download progress in export UI” is **[UNVERIFIED]** against current UI capabilities. - Define behavior for partial failure: skip failed cloud tracks vs fail entire export (this is a product decision, currently ambiguous). 5. **Performance and UX** - Serial downloads may make export feel stalled for large sessions. - Unbounded parallel downloads can overload bandwidth/server. - Add bounded concurrency (e.g., 2–4) and clear per-track status. ## Minimum Viable Slice (recommended) - **Export-only**, not general-purpose download feature. - Implement an internal `ExportCloudResolver` (or lightweight `DownloadService`) used only by exporter. - Download cloud tracks into an **export-scoped temp directory** first, then copy into export bundle. - No `Track` schema/model changes. - No standalone toolbar download UI yet. - Add cleanup at end of export (or on next launch for interrupted sessions). - Add explicit test cases: - valid cloud export - expired/unauthorized URL - network interruption/retry - duplicate track IDs / filename collisions - cancellation during download ## Recommendation quality Current recommendation is good at a high level, but should be narrowed to avoid premature cache architecture. Build export-path reliability first, then generalize into persistent/offline caching only if a separate requirement appears. No hallucinations detected for core context claims. Potentially speculative claims flagged above: cache filename/extension handling **[UNVERIFIED]**, same-GET equivalence **[UNVERIFIED]**, and progress UI readiness **[UNVERIFIED]**.
Session State **Blocking findings**: - Ambiguous failure policy (fail export vs partial export) - Untested assumptions about stream URL/auth/header behavior for full-file download - Ambiguous file naming/versioning strategy (collision/stale cache risk) **Advisory findings**: - Defer `Track.localCachePath` to avoid persistence complexity - Prefer export-scoped temp downloads over persistent cache in MVP - Add bounded concurrency and cancellation/progress semantics **Decisions**: - Recommend export-only MVP, no standalone download UI, no model schema change - Reassess general-purpose cache/download feature after export success metrics **Open Questions**: - What is the export failure contract for unavailable cloud tracks? - Are stream URLs time-limited or header-sensitive for non-AVPlayer downloads? - Is file extension derivable reliably from metadata or response headers? **Key Entities**: - `MixExporter.copyAudioFiles` - `ChadMusicAPIClient.streamURL(for:)` - `ChadMusicAPIClient.authHeaders` - `Track` (`isCloud`, `cloudStreamPath`, `hasLocalFile`) - `DownloadService` (proposed) - `UploadService` (existing pattern)