mirror of
https://github.com/got-feedBack/feedBack.git
synced 2026-09-12 13:58:30 +00:00
Compare commits
merge into: got-feedBack/feedBack:refactor/r3-router-song
got-feedBack/feedBack:main
got-feedBack/feedBack:fix/h3d-viz-init-fallback
got-feedBack/feedBack:feat/rigs-library-on-the-wire
got-feedBack/feedBack:refactor/rigs-loader-uses-path-helper
got-feedBack/feedBack:refactor/sloppak-path-containment-helper
got-feedBack/feedBack:feat/core-rig-reader-tone-passthrough
got-feedBack/feedBack:midi-lyrics-import
got-feedBack/feedBack:gp-vocal-sidecar-wire
got-feedBack/feedBack:fix/folder-library-hover-preview
got-feedBack/feedBack:core-vocals-arrangement
got-feedBack/feedBack:fix/count-in-timesig-pickup
got-feedBack/feedBack:feat/drum-part-picker
got-feedBack/feedBack:fix/gp_drum_import
got-feedBack/feedBack:feat/lyrics-display-window
got-feedBack/feedBack:feat/v3-playlist-tuning-check
got-feedBack/feedBack:fix/bass-extended-tuning-names
got-feedBack/feedBack:fix/991-lane-stops-at-hit-line
got-feedBack/feedBack:fix/plugin-esc-global
got-feedBack/feedBack:fix/gig-flyover-once
got-feedBack/feedBack:fix/queue-survives-playsong-wrappers
got-feedBack/feedBack:fix/gig-song-selection
got-feedBack/feedBack:feat/gig-preextract-setlist
got-feedBack/feedBack:feat/song-info-playable-stems
got-feedBack/feedBack:fix/viz-superseded-init
got-feedBack/feedBack:feat/audio-ownership-clients
got-feedBack/feedBack:fix/venue-scope-and-arrangement-intro
got-feedBack/feedBack:perf/folder-library-windowed-lists
got-feedBack/feedBack:perf/resolve-library-root-once
got-feedBack/feedBack:feat/career-gold
got-feedBack/feedBack:feat/career-gigs-ui
got-feedBack/feedBack:feat/career-gigs-backend
got-feedBack/feedBack:feat/career-wall-card
got-feedBack/feedBack:feat/career-invitations
got-feedBack/feedBack:feat/career-genre-families
got-feedBack/feedBack:fix/933-full-mix-is-a-stem
got-feedBack/feedBack:fix/bound-sloppak-unpack-cache
got-feedBack/feedBack:feat/enrichment-genre-fallback
got-feedBack/feedBack:test/seconds-recency-proof
got-feedBack/feedBack:fix/career-hours-polish
got-feedBack/feedBack:feat/career-foil
got-feedBack/feedBack:feat/career-drill-curation
got-feedBack/feedBack:feat/career-hours
got-feedBack/feedBack:feat/career-badge-ceremony
got-feedBack/feedBack:fix/bundle-career-bar-pack
got-feedBack/feedBack:test/career-mode-combined
got-feedBack/feedBack:feat/career-plugin
got-feedBack/feedBack:feat/career-venue-crowd
got-feedBack/feedBack:fix/career-passport-review
got-feedBack/feedBack:feat/career-passports
got-feedBack/feedBack:fix/accuracy-floor-not-round
got-feedBack/feedBack:fix/loopback-raw-audio
got-feedBack/feedBack:feat/r3-carve-juce
got-feedBack/feedBack:feat/r3-carve-resume
got-feedBack/feedBack:feat/r3-carve-player-controls
got-feedBack/feedBack:feat/r3-countin-module
got-feedBack/feedBack:feat/r3-carve-countin
got-feedBack/feedBack:feat/r3-carve-loops
got-feedBack/feedBack:feat/r3-host-seam
got-feedBack/feedBack:feat/r3-audio-element
got-feedBack/feedBack:feat/r3-carve-settings-io
got-feedBack/feedBack:feat/r3-carve-tuning-display
got-feedBack/feedBack:feat/r3-carve-settings
got-feedBack/feedBack:feat/r3-carve-dom
got-feedBack/feedBack:feat/r3-carve-diagnostics
got-feedBack/feedBack:feat/r3-carve-viz
got-feedBack/feedBack:feat/r3-carve-plugin-loader
got-feedBack/feedBack:fix/asio-all-app-audio
got-feedBack/feedBack:feat/r3-appjs-module
got-feedBack/feedBack:feat/r3-capabilities-modules
got-feedBack/feedBack:feat/r3-window-contract
got-feedBack/feedBack:feat/r3-defer-classic-scripts
got-feedBack/feedBack:feat/r3-v2-removal
got-feedBack/feedBack:refactor/r3-router-artist
got-feedBack/feedBack:refactor/r3-router-media
got-feedBack/feedBack:refactor/r3-router-enrichment-routes
got-feedBack/feedBack:revert/asio-all-app-audio-865
got-feedBack/feedBack:refactor/r3-library-registry
got-feedBack/feedBack:refactor/r3-router-song
got-feedBack/feedBack:refactor/r3-router-settings
got-feedBack/feedBack:refactor/r3-router-art
got-feedBack/feedBack:refactor/r3-enrichment-lib
got-feedBack/feedBack:refactor/r3-router-tunings
got-feedBack/feedBack:refactor/r3-router-diagnostics
got-feedBack/feedBack:refactor/r3-router-version
got-feedBack/feedBack:refactor/r3-router-stats
got-feedBack/feedBack:refactor/r3-router-profile
got-feedBack/feedBack:refactor/r3-router-progression
got-feedBack/feedBack:diag/asio-routing-debug
got-feedBack/feedBack:refactor/r3-progression-substrate
got-feedBack/feedBack:refactor/r3-router-library-extras
got-feedBack/feedBack:refactor/r3-highway-h-lift
got-feedBack/feedBack:refactor/r3-h0-frametime
got-feedBack/feedBack:refactor/r3-router-wanted
got-feedBack/feedBack:refactor/r3-router-chart
got-feedBack/feedBack:fix/ws-highway-disconnect
got-feedBack/feedBack:refactor/r3-router-ws-highway
got-feedBack/feedBack:refactor/r3-dlc-paths
got-feedBack/feedBack:fix/playlist-cover-errors
got-feedBack/feedBack:refactor/r3-router-playlists
got-feedBack/feedBack:fix/loops-lock-atomicity
got-feedBack/feedBack:refactor/r3-router-loops
got-feedBack/feedBack:refactor/r3-router-artist-aliases
got-feedBack/feedBack:fix/r3-bundle-appstate-routers
got-feedBack/feedBack:refactor/r3-router-artists
got-feedBack/feedBack:refactor/r3-appstate
got-feedBack/feedBack:refactor/r3-audio-effects-db
got-feedBack/feedBack:refactor/r3-metadata-db
got-feedBack/feedBack:fix/highway-3d-butterchurn-scaling
got-feedBack/feedBack:fix/gp2rs-tempo-precision
got-feedBack/feedBack:feat/api-tunings-midis
got-feedBack/feedBack:feat/renderer-bus-phase2
got-feedBack/feedBack:fix/keys-highway-3d-midi-global-default
got-feedBack/feedBack:feat/feedpak-exclusive-native-routing
got-feedBack/feedBack:fix/effects-plan-schema-legacy-alias
got-feedBack/feedBack:feat/library-slow-mode
got-feedBack/feedBack:feat/unmapped-drum-velocities
got-feedBack/feedBack:fix/loop-api-bridge-throttle
got-feedBack/feedBack:bot/manual-update-global-workflow-main-mehr7c
got-feedBack/feedBack:bot/manual-update-global-workflow-main-5ddsnm
got-feedBack/feedBack:perf/highway-sustain-glow-no-shadowblur
got-feedBack/feedBack:feat/onboarding-handedness
got-feedBack/feedBack:highway-editor-handoff-polish
got-feedBack/feedBack:feat/v3-cover-search
got-feedBack/feedBack:feat/v3-batch-popup-handoff
got-feedBack/feedBack:fix/autosync-dtw-step-constraint
got-feedBack/feedBack:fix/webgl-context-loss-recovery
got-feedBack/feedBack:feat/v3-genre-in-details
got-feedBack/feedBack:feat/v3-match-details-bridge
got-feedBack/feedBack:feat/v3-write-to-file
got-feedBack/feedBack:feat/v3-fix-metadata-popup
got-feedBack/feedBack:feat/deuteranope-string-color-preset
got-feedBack/feedBack:feat/autosync-piecewise-warp
got-feedBack/feedBack:feat/v3-unmatched-visibility
got-feedBack/feedBack:feat/mb-alias-scoring
got-feedBack/feedBack:feat/mb-loose-search-fallback
got-feedBack/feedBack:fix/gpx-bcfs-final-partial-sector
got-feedBack/feedBack:fix/v3-library-scroll-recycle
got-feedBack/feedBack:feat/acoustid-fingerprint
got-feedBack/feedBack:host-instrument-profiles
got-feedBack/feedBack:fix/starter-content-sources
got-feedBack/feedBack:fix/safe-join-allow-junctions
got-feedBack/feedBack:feat/mb-canonical-ranking
got-feedBack/feedBack:feat/v3-refresh-metadata
got-feedBack/feedBack:fix/ffmpeg-autobuild-repin
got-feedBack/feedBack:feat/starter-content-anthem
got-feedBack/feedBack:feat/starter-content-seed
got-feedBack/feedBack:fix/plugin-hydration-partial-response-wipe
got-feedBack/feedBack:feat/playlist-shuffle
got-feedBack/feedBack:feat/pack-overwrite
got-feedBack/feedBack:fix/upload-accept-feedpak
got-feedBack/feedBack:perf/highway-frame-hotspots
got-feedBack/feedBack:feat/v3-mastery-filter-sort
got-feedBack/feedBack:feat/v3-play-queue
got-feedBack/feedBack:feat/instrument-chart-routing
got-feedBack/feedBack:feat/v3-library-refresh-scan
got-feedBack/feedBack:feat/v3-add-to-playlist-picker
got-feedBack/feedBack:feat/v3-persist-library-sort
got-feedBack/feedBack:docs/host-theme-contract
got-feedBack/feedBack:fix/calibrate-modal-loses-background-blur
got-feedBack/feedBack:fix/audio-input-readback-only
got-feedBack/feedBack:fix/practise-typo
got-feedBack/feedBack:feat/grid-virtualization
got-feedBack/feedBack:fix/audio-input-open-readback
got-feedBack/feedBack:fix/input-setup-drop-label-dedup
got-feedBack/feedBack:dogfood/highway-combined
got-feedBack/feedBack:feat/v3-nav-audio-engine
got-feedBack/feedBack:feat/edit-region-roundtrip
got-feedBack/feedBack:chore/rename-cosmetic-followup
got-feedBack/feedBack:rename-slopsmith
got-feedBack/feedBack:chore/deprecate-sloppak-to-feedpak
got-feedBack/feedBack:rename-feedback-refs
got-feedBack/feedBack:feat/studio-nav-item
got-feedBack/feedBack:docs/point-to-feedpak-spec
got-feedBack/feedBack:pr-332-capability-updates
got-feedBack/feedBack:009-jobs
got-feedBack/feedBack:feat/typescript-checkjs
got-feedBack/feedBack:fix/v3-topbar-zindex
got-feedBack/feedBack:fix/cap-inspector-shim-commands
got-feedBack/feedBack:spec/011-progression-contributors
got-feedBack/feedBack:spec/009-note-detection-domain
got-feedBack/feedBack:feat/note-staff-schema
got-feedBack/feedBack:fix/plugin-install-nonblocking
got-feedBack/feedBack:docs/realtime-scoring
..
pull from: got-feedBack/feedBack:revert/asio-all-app-audio-865
got-feedBack/feedBack:fix/h3d-viz-init-fallback
got-feedBack/feedBack:feat/rigs-library-on-the-wire
got-feedBack/feedBack:refactor/rigs-loader-uses-path-helper
got-feedBack/feedBack:main
got-feedBack/feedBack:refactor/sloppak-path-containment-helper
got-feedBack/feedBack:feat/core-rig-reader-tone-passthrough
got-feedBack/feedBack:midi-lyrics-import
got-feedBack/feedBack:gp-vocal-sidecar-wire
got-feedBack/feedBack:fix/folder-library-hover-preview
got-feedBack/feedBack:core-vocals-arrangement
got-feedBack/feedBack:fix/count-in-timesig-pickup
got-feedBack/feedBack:feat/drum-part-picker
got-feedBack/feedBack:fix/gp_drum_import
got-feedBack/feedBack:feat/lyrics-display-window
got-feedBack/feedBack:feat/v3-playlist-tuning-check
got-feedBack/feedBack:fix/bass-extended-tuning-names
got-feedBack/feedBack:fix/991-lane-stops-at-hit-line
got-feedBack/feedBack:fix/plugin-esc-global
got-feedBack/feedBack:fix/gig-flyover-once
got-feedBack/feedBack:fix/queue-survives-playsong-wrappers
got-feedBack/feedBack:fix/gig-song-selection
got-feedBack/feedBack:feat/gig-preextract-setlist
got-feedBack/feedBack:feat/song-info-playable-stems
got-feedBack/feedBack:fix/viz-superseded-init
got-feedBack/feedBack:feat/audio-ownership-clients
got-feedBack/feedBack:fix/venue-scope-and-arrangement-intro
got-feedBack/feedBack:perf/folder-library-windowed-lists
got-feedBack/feedBack:perf/resolve-library-root-once
got-feedBack/feedBack:feat/career-gold
got-feedBack/feedBack:feat/career-gigs-ui
got-feedBack/feedBack:feat/career-gigs-backend
got-feedBack/feedBack:feat/career-wall-card
got-feedBack/feedBack:feat/career-invitations
got-feedBack/feedBack:feat/career-genre-families
got-feedBack/feedBack:fix/933-full-mix-is-a-stem
got-feedBack/feedBack:fix/bound-sloppak-unpack-cache
got-feedBack/feedBack:feat/enrichment-genre-fallback
got-feedBack/feedBack:test/seconds-recency-proof
got-feedBack/feedBack:fix/career-hours-polish
got-feedBack/feedBack:feat/career-foil
got-feedBack/feedBack:feat/career-drill-curation
got-feedBack/feedBack:feat/career-hours
got-feedBack/feedBack:feat/career-badge-ceremony
got-feedBack/feedBack:fix/bundle-career-bar-pack
got-feedBack/feedBack:test/career-mode-combined
got-feedBack/feedBack:feat/career-plugin
got-feedBack/feedBack:feat/career-venue-crowd
got-feedBack/feedBack:fix/career-passport-review
got-feedBack/feedBack:feat/career-passports
got-feedBack/feedBack:fix/accuracy-floor-not-round
got-feedBack/feedBack:fix/loopback-raw-audio
got-feedBack/feedBack:feat/r3-carve-juce
got-feedBack/feedBack:feat/r3-carve-resume
got-feedBack/feedBack:feat/r3-carve-player-controls
got-feedBack/feedBack:feat/r3-countin-module
got-feedBack/feedBack:feat/r3-carve-countin
got-feedBack/feedBack:feat/r3-carve-loops
got-feedBack/feedBack:feat/r3-host-seam
got-feedBack/feedBack:feat/r3-audio-element
got-feedBack/feedBack:feat/r3-carve-settings-io
got-feedBack/feedBack:feat/r3-carve-tuning-display
got-feedBack/feedBack:feat/r3-carve-settings
got-feedBack/feedBack:feat/r3-carve-dom
got-feedBack/feedBack:feat/r3-carve-diagnostics
got-feedBack/feedBack:feat/r3-carve-viz
got-feedBack/feedBack:feat/r3-carve-plugin-loader
got-feedBack/feedBack:fix/asio-all-app-audio
got-feedBack/feedBack:feat/r3-appjs-module
got-feedBack/feedBack:feat/r3-capabilities-modules
got-feedBack/feedBack:feat/r3-window-contract
got-feedBack/feedBack:feat/r3-defer-classic-scripts
got-feedBack/feedBack:feat/r3-v2-removal
got-feedBack/feedBack:refactor/r3-router-artist
got-feedBack/feedBack:refactor/r3-router-media
got-feedBack/feedBack:refactor/r3-router-enrichment-routes
got-feedBack/feedBack:revert/asio-all-app-audio-865
got-feedBack/feedBack:refactor/r3-library-registry
got-feedBack/feedBack:refactor/r3-router-song
got-feedBack/feedBack:refactor/r3-router-settings
got-feedBack/feedBack:refactor/r3-router-art
got-feedBack/feedBack:refactor/r3-enrichment-lib
got-feedBack/feedBack:refactor/r3-router-tunings
got-feedBack/feedBack:refactor/r3-router-diagnostics
got-feedBack/feedBack:refactor/r3-router-version
got-feedBack/feedBack:refactor/r3-router-stats
got-feedBack/feedBack:refactor/r3-router-profile
got-feedBack/feedBack:refactor/r3-router-progression
got-feedBack/feedBack:diag/asio-routing-debug
got-feedBack/feedBack:refactor/r3-progression-substrate
got-feedBack/feedBack:refactor/r3-router-library-extras
got-feedBack/feedBack:refactor/r3-highway-h-lift
got-feedBack/feedBack:refactor/r3-h0-frametime
got-feedBack/feedBack:refactor/r3-router-wanted
got-feedBack/feedBack:refactor/r3-router-chart
got-feedBack/feedBack:fix/ws-highway-disconnect
got-feedBack/feedBack:refactor/r3-router-ws-highway
got-feedBack/feedBack:refactor/r3-dlc-paths
got-feedBack/feedBack:fix/playlist-cover-errors
got-feedBack/feedBack:refactor/r3-router-playlists
got-feedBack/feedBack:fix/loops-lock-atomicity
got-feedBack/feedBack:refactor/r3-router-loops
got-feedBack/feedBack:refactor/r3-router-artist-aliases
got-feedBack/feedBack:fix/r3-bundle-appstate-routers
got-feedBack/feedBack:refactor/r3-router-artists
got-feedBack/feedBack:refactor/r3-appstate
got-feedBack/feedBack:refactor/r3-audio-effects-db
got-feedBack/feedBack:refactor/r3-metadata-db
got-feedBack/feedBack:fix/highway-3d-butterchurn-scaling
got-feedBack/feedBack:fix/gp2rs-tempo-precision
got-feedBack/feedBack:feat/api-tunings-midis
got-feedBack/feedBack:feat/renderer-bus-phase2
got-feedBack/feedBack:fix/keys-highway-3d-midi-global-default
got-feedBack/feedBack:feat/feedpak-exclusive-native-routing
got-feedBack/feedBack:fix/effects-plan-schema-legacy-alias
got-feedBack/feedBack:feat/library-slow-mode
got-feedBack/feedBack:feat/unmapped-drum-velocities
got-feedBack/feedBack:fix/loop-api-bridge-throttle
got-feedBack/feedBack:bot/manual-update-global-workflow-main-mehr7c
got-feedBack/feedBack:bot/manual-update-global-workflow-main-5ddsnm
got-feedBack/feedBack:perf/highway-sustain-glow-no-shadowblur
got-feedBack/feedBack:feat/onboarding-handedness
got-feedBack/feedBack:highway-editor-handoff-polish
got-feedBack/feedBack:feat/v3-cover-search
got-feedBack/feedBack:feat/v3-batch-popup-handoff
got-feedBack/feedBack:fix/autosync-dtw-step-constraint
got-feedBack/feedBack:fix/webgl-context-loss-recovery
got-feedBack/feedBack:feat/v3-genre-in-details
got-feedBack/feedBack:feat/v3-match-details-bridge
got-feedBack/feedBack:feat/v3-write-to-file
got-feedBack/feedBack:feat/v3-fix-metadata-popup
got-feedBack/feedBack:feat/deuteranope-string-color-preset
got-feedBack/feedBack:feat/autosync-piecewise-warp
got-feedBack/feedBack:feat/v3-unmatched-visibility
got-feedBack/feedBack:feat/mb-alias-scoring
got-feedBack/feedBack:feat/mb-loose-search-fallback
got-feedBack/feedBack:fix/gpx-bcfs-final-partial-sector
got-feedBack/feedBack:fix/v3-library-scroll-recycle
got-feedBack/feedBack:feat/acoustid-fingerprint
got-feedBack/feedBack:host-instrument-profiles
got-feedBack/feedBack:fix/starter-content-sources
got-feedBack/feedBack:fix/safe-join-allow-junctions
got-feedBack/feedBack:feat/mb-canonical-ranking
got-feedBack/feedBack:feat/v3-refresh-metadata
got-feedBack/feedBack:fix/ffmpeg-autobuild-repin
got-feedBack/feedBack:feat/starter-content-anthem
got-feedBack/feedBack:feat/starter-content-seed
got-feedBack/feedBack:fix/plugin-hydration-partial-response-wipe
got-feedBack/feedBack:feat/playlist-shuffle
got-feedBack/feedBack:feat/pack-overwrite
got-feedBack/feedBack:fix/upload-accept-feedpak
got-feedBack/feedBack:perf/highway-frame-hotspots
got-feedBack/feedBack:feat/v3-mastery-filter-sort
got-feedBack/feedBack:feat/v3-play-queue
got-feedBack/feedBack:feat/instrument-chart-routing
got-feedBack/feedBack:feat/v3-library-refresh-scan
got-feedBack/feedBack:feat/v3-add-to-playlist-picker
got-feedBack/feedBack:feat/v3-persist-library-sort
got-feedBack/feedBack:docs/host-theme-contract
got-feedBack/feedBack:fix/calibrate-modal-loses-background-blur
got-feedBack/feedBack:fix/audio-input-readback-only
got-feedBack/feedBack:fix/practise-typo
got-feedBack/feedBack:feat/grid-virtualization
got-feedBack/feedBack:fix/audio-input-open-readback
got-feedBack/feedBack:fix/input-setup-drop-label-dedup
got-feedBack/feedBack:dogfood/highway-combined
got-feedBack/feedBack:feat/v3-nav-audio-engine
got-feedBack/feedBack:feat/edit-region-roundtrip
got-feedBack/feedBack:chore/rename-cosmetic-followup
got-feedBack/feedBack:rename-slopsmith
got-feedBack/feedBack:chore/deprecate-sloppak-to-feedpak
got-feedBack/feedBack:rename-feedback-refs
got-feedBack/feedBack:feat/studio-nav-item
got-feedBack/feedBack:docs/point-to-feedpak-spec
got-feedBack/feedBack:pr-332-capability-updates
got-feedBack/feedBack:009-jobs
got-feedBack/feedBack:feat/typescript-checkjs
got-feedBack/feedBack:fix/v3-topbar-zindex
got-feedBack/feedBack:fix/cap-inspector-shim-commands
got-feedBack/feedBack:spec/011-progression-contributors
got-feedBack/feedBack:spec/009-note-detection-domain
got-feedBack/feedBack:feat/note-staff-schema
got-feedBack/feedBack:fix/plugin-install-nonblocking
got-feedBack/feedBack:docs/realtime-scoring
3
Commits
| Author | SHA1 | Message | Date | |
|---|---|---|---|---|
|
|
b44116e85a |
Revert "feat(audio): loopback feeder mode — all app audio under exclusive/ASIO (#865)"
This reverts commit
|
||
|
|
9a58a55fe8 |
feat(audio): loopback feeder mode — all app audio under exclusive/ASIO (#865)
* feat(audio): loopback feeder mode — all app audio under exclusive/ASIO Tester-confirmed (2026-07-11 log): song previews and other plugin-private audio bypass the per-surface feeder taps and leak to the default WASAPI device under ASIO output. Also confirmed: the element capture path poisons itself when highway_3d already owns #audio's one-shot MediaElementSource (InvalidStateError with _elCtx assigned pre-throw → TypeError every later tick). - New preferred mode 'loopback': one getDisplayMedia frame-audio capture (desktop main answers with the app's own frame) covers song, previews, and UI sounds for the whole exclusive session — engages even with no song loaded. Local playback silenced via suppressLocalAudioPlayback, page-mute IPC fallback otherwise. - Sticky fallback to the existing stems/element surface modes when capture is unavailable (old desktop main, denied, Docker sphere). - Element capture: assign module state only after the whole chain succeeds; close the context on failure — collision now retries clean. - Failed engage now disables the bus and tears down loopback (no more bus-enabled-with-no-producer stranding). - Tests: 12 (5 new — loopback engage/preference/mute-fallback/sticky fallback, collision retry). Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> * fix(audio): close loopback capture context on teardown (release tap worklet) The loopback context was reused across engages (_lbCtx || new), but teardown only stopped the stream + deactivated the tap — never closing the context or detaching the worklet node. Each exclusive<->shared switch orphaned a live tap worklet on the long-lived context. Use a fresh context per session and close it on disengage. Adds a test asserting the context is closed on teardown. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> --------- Co-authored-by: Claude Fable 5 <noreply@anthropic.com> Co-authored-by: Byron Gamatos <xasiklas@gmail.com> |
||
|
|
bbdff4e10f |
refactor(server): extract the song routes into routers/song.py (R3) (#864)
Upload/delete, the catalog-metadata write-back, user-meta, overrides, gap-fill,
and the per-song info payload (11 routes) move to lib/routers/song.py with their
exclusive helpers (the atomic upload commit + the song-IO lock, the upload caps,
the gap-fill proposal builders). Bodies verbatim except @app->@router and the
seam reads: meta_db->appstate.meta_db, art_override_paths->appstate.art_override_paths,
and the scan/ingest helpers that stay in server.py (the scan lifecycle owns them)
-> new appstate seam callables: kick_scan, invalidate_song_caches, stat_for_cache,
and scan_status() (a getter — the underlying dict is reassigned). The gap-fill
MBID/ISRC regexes are reached as enrichment.X; _MULTIPART_OVERHEAD_SLACK (shared
with the staying AcoustID-identify route) moves to lib/enrichment.py beside
_ACOUSTID_MAX_UPLOAD_BYTES.
ROUTE ORDER: song_router mounts AFTER art_router — get_song_info's catch-all
`/api/song/{filename:path}` would otherwise shadow `/api/song/{path}/art*`
(Starlette matches first-registered; the :path converter is greedy).
server.py: 4,478 -> 3,692 (-786).
Verified: pyflakes clean; ORDERED route table preserves the specific-before-catch-all
invariant; full pytest 2397 passed (incl the art/cover 304 + CAA-fetch tests that
caught the shadowing before it was fixed). eslint 0.
BEHAVIORAL — needs an on-device pass (upload a sloppak, edit metadata write-back,
delete a song) before merge.
Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
|