fix(archiver): make the parent track best-effort in stems archives - #75
Merged
Merged
Conversation
Stem-only uploads (e.g. remix contest tracks) can report isDownloadable while having no original file to serve — the API signs a download URL with an empty CID and every mirror 404s it. Previously that failed the whole archive job after 3 retries, so users couldn't download any stems (BURKO Labyrinth contest, 2026-07-16). Now the parent track is best-effort: if its size can't be inspected or its download fails, we log a warning and deliver a stems-only archive. Stem download failures still fail the job as before. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
dylanjeffers
added a commit
that referenced
this pull request
Jul 16, 2026
…e fallback (#76) Stems downloads were still failing after #75 (Endevie job 62416-1416946406, 2026-07-16 20:47 UTC): every stem failed with 'All mirrors failed' after attempting exactly one host — creatornode2.audius.co. Two compounding bugs: 1. The mirror list is always empty. The pinned @audius/sdk 10.0.0 generated deserializer (TrackFromJSONTyped) drops the download/stream fields the API returns, so the cast in createStemsArchive reads undefined. The tests passed because the mock SDK returned mirrors the real SDK never delivers. 2. With no mirrors, the only candidate was ARCHIVE_FALLBACK_HOST — creatornode2.audius.co — which is decommissioned (bare nginx, 404s everything including /health_check). Fix: buildCandidateHosts now puts the canonical host from the API's 302 first — the API already selected it by rendezvous for the exact cid, and mediorum peer-redirects on a miss — so downloads succeed even with no mirrors. The fallback host moves to creatornode.audius.co (verified serving signed cidstream requests, 206). The mock SDK no longer fabricates mirrors, and new tests cover canonical-first and dead-canonical→fallback paths. Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Problem
Stems downloads for the BURKO Labyrinth contest fail deterministically. The parent track (
qJ0RAXE) is a stem-only upload: it has notrack_cid/orig_file_cid, but the API still reportsis_downloadable=trueand signs a cidstream URL with an empty CID, which every validator node 404s. Because the client seesaccess.download === trueit requestsinclude_parent=true, the parent download 404s, and the whole job fails after 3 retries — users get an infinite "zipping" spinner (or an error, post-#14519 in the apps repo) and never get their stems.Fix
Treat the parent track as best-effort:
Stem download failures still fail the job exactly as before.
Notes
🤖 Generated with Claude Code