Soulseek downloads: transfer lifecycle, candidate shape, search recall, per-peer concurrency #267
Closed
yonlu
wants to merge 0 commits from
fix/263-slskd-transfer-lifecycle into main
pull from: fix/263-slskd-transfer-lifecycle
merge into: :main
:main
:batch/274-276-slskd
:batch/258-272
:fix/263-slskd-transfer-lifecycle
:fix/271-slskd-search-recall
:fix/270-slskd-candidate-shape
:build/265-go-1.26
:feat/264-explore-cards
:fix/258-artifact-blob-cursor
:docs/256-claude-md-split
:batch/248-249
:fix/248-artist-metadata-sweep
:fix/247-cover-art-orphans
:fix/249-unbounded-growth
:fix/246-incremental-scan-phantoms
:fix/183-phantom-across-retire
:fix/243-model-fallback
:feat/31-play-all-shuffle-all
:fix/240-loop-operational-fixes
:docs/220-skill-check-scope
:fix/231-setter-rollback
:fix/197-duplicate-column-label
:fix/175-wizard-follows-the-library
:fix/146-stub-etxtbsy
:docs/225-fixtures-wav-tags
:feat/238-merge-leg-refresh-watch
:feat/236-autonomous-backlog-loop
:test/217-fixture-names-in-queue-selection
:fix/216-riff-parse-allocation
:fix/170-queue-header-action-names
:fix/210-nav-sheet-scroll-affordance
:docs/50-readme-landing-page
:feat/65-art-prefetch-ahead
:feat/71-more-as-a-bottom-sheet
:feat/54-native-touch-feel
:feat/67-entity-links-into-menus
:test/196-visual-tier-gates
:fix/138-ui-test-storage-leak
:fix/104-wav-tags-read
:fix/207-sheet-scroll-affordance
:fix/204-ui-visual-update-filter
:pi-agent-backlog-automation
:63-touch-model-phase-2
:63-android-touch-model
:186-touch-targets-settings
:186-touch-targets-page-header
:187-seek-bar-hit-area
:189-190-explore-correctness
:135-android-underrun-instrumentation
:51-android-small-screens
:fix/171-phone-queue-scrim
:fix/137-touch-only-affordances
:fix/154-nested-css-check
:feat/58-mini-player-progress-line
:fix/66-album-page-scrolls-as-one
:60-context-menu-action-sheet
:64-android-system-volume
:59-slim-the-mini-player
:55-queue-as-a-screen
:feat/57-drop-the-android-top-bar
:feat/62-jobs-as-a-notification
:fix/53-seek-bar-never-moves
:fix/159-android-task-app-id
:fix/52-android-activity-recreation-restarts-the-process
:fix/150-expand-button-under-the-art
:feat/42-inline-volume-and-centred-transport
:fix/156-queue-selection-fixture-order
:fix/151-fuse-the-scroll-guard-and-the-write
:fix/43-queue-panel-selection
:fix/143-top-bar-fits-its-window
:feat/27-jobs-into-settings
:feat/25-configurable-sidebar-tabs
:feat/6-global-back-forward
:fix/72-active-view-broadcast
:fix/69-page-header-action-overflow
:fix/quick-wins-batch
:fix/118-in-library-clear
:fix/61-mini-player-plain-text
:fix/68-hover-affordances-pointer
:fix/119-dev-headless-port
:fix/130-issue-claim-user
:fix/131-codegen-check-scope
:feat/28-autotag-match-on-album
:feat/17-demote-version-selector
:feat/38-ownership-visibility
:ci/115-manual-release
:feat/34-icon-language
:feat/7-full-tracklist-toggle
:fix/16-tagwriter-totals
:fix/unclaim-ca-certs
:fix/unclaim-shell
:ci/unclaim-on-close
:docs/closing-keyword
:docs/retire-stale-planning-docs
:docs/issue-driven-workflow
:integration/small-fixes
:fix/small-issue-batch
:fix/queue-toggle-state
:fix/drag-count-badge
:fix/album-card-year
:fix/album-tracklist-heading
:fix/seek-bar-clock-width
:fix/explore-art-scanner-requests
:chore/workflow-guardrails
No Reviewers
Labels
Clear labels
Area/Design
Area/Downloads
Area/Explore
Area/Library-UI
Area/Metadata
Area/Packaging
Area/Player
Area/Queue
Area/Settings
Area/Shell-Nav
Compat/Breaking
Kind/Bug
Kind/Documentation
Kind/Enhancement
Kind/Feature
Kind/Security
Kind/Testing
Platform/Android
Platform/Desktop
Breaking change that won't be backward compatible
Something is not working
Documentation changes
Improve existing functionality
New functionality
This is security issue
Issue or pull request related to testing
Priority
Critical
1
The priority is critical
Priority
High
2
The priority is high
Priority
Medium
3
The priority is medium
Priority
Low
4
The priority is low
Reviewed
Confirmed
1
Issue has been confirmed
Reviewed
Duplicate
2
This issue or pull request already exists
Reviewed
Invalid
3
Invalid issue
Reviewed
Won't Fix
3
This issue won't be fixed
Status
Blocked
1
Something is blocking this issue or pull request
Status
Need More Info
2
Feedback is required to reproduce issue or to continue work
Status
Abandoned
3
Somebody has started to work on this but abandoned work
Status
In Progress
Somebody is actively working on this right now
No labels
Milestone
No items
No Milestone
Projects
Clear projects
No projects
Notifications
Due Date
No due date set.
Dependencies
No dependencies set.
Reference: yonlu/yellowjacket#267
Reference in New Issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
The Soulseek download path, from an audit of
backend/download/, as one batch because every commit editsprovider_slskd.go.fc0121220a33b9d6grabfalls through to the next auto-acceptable candidate: at most 3 attempts; on Soulseek a failed peer rules out every folder it offered; no fallback for a hand pick. Also fixes auto-pick grabbingranked[0]while the veto had judged the first candidate inside the guardrails, so an oversized copy was downloaded anyway.7fbfd9c1TestScan_StoresOnlyCoverTiersskips without fixtures instead of failing; it blocked pre-push in a fresh worktree.f81a9509CD1/Disc 2folders under their album and reads the disc from the folder. Keeps the disc folders in staging, where flattened they overwrote each other. Sets a one-file floor for recording requests. Counts completeness in aligned tracks rather than files.5e3ac8fb-, "Various Artists") and merges by peer and folder. States the search options. Polls state only and fetches responses once, falling back for an older daemon. Carries per-filelengthasLengthMillisand scoresDurationFit, which takes 0.15 of title fit's weight when timed. Drops the phantomfreeUploadSlots. Regenerates bindings.9710c114Verification
go test -race -count=2 ./backend/download/passes, and the pre-push hook rango test -race ./...andmake ui-test.?remove=true; a stall after partial arrival keeps what arrived; a transfer that is moving is never abandoned; an unlisted file counts as failed; a stale record is ignored; a cancelled caller still cancels in slskd; usernames are escaped.AlbumDir, disc grouping, disc folders kept in staging, a two-disc album aligning completely, the one-file floor for a track request, coverage counted in tracks.includeResponsespoll, the older-daemon fallback, duration agreement, lengths separating a studio album from a live one, and an unknown duration leaving the score unchanged.golangci-lintreports 0 issues (default anddevtags; run withGOTOOLCHAIN=go1.26.0, see #265).tsc --noEmitpasses against the regenerated bindings.Not verified
DELETE …/{id}?remove=truecancel, theGET /searches/{id}/responsesendpoint (which has a fallback), and the search option names (searchTimeout,responseLimit,fileLimit,filterResponses,minimumResponseFileCount,maximumPeerQueueLength). ASP.NET ignores unknown body fields, so a wrong option name is inert rather than an error. A first real download, a real stall and one search with slskd's own log open would settle all of it.Closes
🤖 Generated with Claude Code
https://claude.ai/code/session_017HJiuc3ZZhxsPXz3ozTirT
fix(download): fall back past a failed or stalled Soulseek peer (#263)to fix(download): the Soulseek path: transfers, candidates and search (#263, #270, #271)fix(download): the Soulseek path: transfers, candidates and search (#263, #270, #271)to Soulseek downloads: transfer lifecycle, candidate shape, search recall, per-peer concurrencyPull request closed