feedBack/static/v3
K. O. A. 32127bc70b
feat: save as .feedpak; discover and load both .feedpak and .sloppak (#553)
* feat: save songs as .feedpak; discover and load both .feedpak and .sloppak

The open song format was renamed sloppak -> feedpak (public spec lives in
the feedback-feedpak-spec repo), but the server still wrote and recognized
only `.sloppak`. The two are byte-identical on disk.

Read both suffixes everywhere songs are discovered, uploaded, and loaded;
writing the new `.feedpak` suffix is handled in the editor plugin repo. Keep
the internal `format` tag `sloppak` so existing feature gates (stems, drums,
keys) are untouched, matching the "internal rename not landed yet" stance.

- lib/sloppak.py: add FEEDPAK_EXT / SLOPPAK_EXT / SONG_EXTS; is_sloppak()
  now matches either suffix (covers all 7 callers).
- server.py: union scan glob over SONG_EXTS; widen loose-folder exclusion,
  settings DLC count, upload gate (_ALLOWED_SONG_EXTS) and zip-magic check;
  refresh user-facing messages to .feedpak.
- static: library format filter relabeled Sloppak -> Feedpak (value stays
  sloppak, matches both); badge text SLOPPAK -> FEEDPAK in v2 + v3;
  filename-suffix detection and upload drag-drop filter accept both.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Signed-off-by: topkoa <topkoa@gmail.com>

* test: cover .feedpak/.sloppak dual-suffix support

Add tests/test_feedpak_extension.py pinning the four paths PR #553
widened so a refactor can't drop .sloppak back-compat or stop
accepting .feedpak:

- is_sloppak / SONG_EXTS suffix detection (file + dir form, case-insensitive)
- _background_scan discovery glob unions over both suffixes
- POST /api/songs/upload accepts both, rejects wrong suffix + non-zip
- save_settings DLC count includes both suffixes

19 tests, all passing; reuses the existing scan_module / TestClient /
isolate_logging fixtures.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

---------

Signed-off-by: topkoa <topkoa@gmail.com>
Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
Co-authored-by: byrongamatos <xasiklas@gmail.com>
2026-06-22 20:47:56 +02:00
..
avatars Clean release snapshot 2026-06-16 18:47:13 +02:00
brand Clean release snapshot 2026-06-16 18:47:13 +02:00
pedals Clean release snapshot 2026-06-16 18:47:13 +02:00
audio-routing.js Clean release snapshot 2026-06-16 18:47:13 +02:00
badges.js feat(onboarding): first-run home tour (spotlight coach marks) (#528) 2026-06-19 16:32:33 +02:00
brand.js Clean release snapshot 2026-06-16 18:47:13 +02:00
card-actions-core.js Clean release snapshot 2026-06-16 18:47:13 +02:00
dashboard.js feat: save as .feedpak; discover and load both .feedpak and .sloppak (#553) 2026-06-22 20:47:56 +02:00
feedbarcade.js Clean release snapshot 2026-06-16 18:47:13 +02:00
index.html feat: save as .feedpak; discover and load both .feedpak and .sloppak (#553) 2026-06-22 20:47:56 +02:00
lessons.js feat(player): global autoplay & auto-exit option (songs + lessons) (#558) 2026-06-22 11:04:03 +02:00
live-guitar-tone-source.js fix: 'feed[dB]ack' -> 'fee[dB]ack' in v3 guitar tone source labels 2026-06-20 08:20:43 -07:00
live-performance-hud.js Clean release snapshot 2026-06-16 18:47:13 +02:00
manifest.json Clean release snapshot 2026-06-16 18:47:13 +02:00
notifications.js feat(progression): fancy notifications for quest/path progress + completion (#552) 2026-06-21 21:18:28 +02:00
onboarding-tour.js fix(onboarding): midi-input multi-provider discovery + home-tour lifecycle (#568) 2026-06-22 14:06:28 +02:00
overlay-active.png Clean release snapshot 2026-06-16 18:47:13 +02:00
overlay-inactive.png Clean release snapshot 2026-06-16 18:47:13 +02:00
pedal-cables.js Clean release snapshot 2026-06-16 18:47:13 +02:00
pedal-default.svg Clean release snapshot 2026-06-16 18:47:13 +02:00
pedal-frame.svg Clean release snapshot 2026-06-16 18:47:13 +02:00
player-chrome.js Clean release snapshot 2026-06-16 18:47:13 +02:00
playlists.js Clean release snapshot 2026-06-16 18:47:13 +02:00
plugins-page.js fix(v3): pedal click opens the plugin's screen, not its settings (#556) 2026-06-22 10:07:36 +02:00
profile.js fix(onboarding): midi-input multi-provider discovery + home-tour lifecycle (#568) 2026-06-22 14:06:28 +02:00
progress.js fix(v3): rename the "Shop" nav entry to "Unlockables" (#333) 2026-06-20 14:57:05 +02:00
progression-core.js feat(progression): fancy notifications for quest/path progress + completion (#552) 2026-06-21 21:18:28 +02:00
scoreboard-pref.js fix(highway): user-selectable scoreboard to stop duplicate HUDs 2026-06-19 20:56:38 +02:00
shell.js fix(v3): scope song search to the library + keep it above the toolbar on scroll (#560) 2026-06-22 11:26:52 +02:00
shop.js Clean release snapshot 2026-06-16 18:47:13 +02:00
songs.js feat: save as .feedpak; discover and load both .feedpak and .sloppak (#553) 2026-06-22 20:47:56 +02:00
stats-recorder.js Clean release snapshot 2026-06-16 18:47:13 +02:00
theme-core.js fix(v3): make equipped theme recolor the sidebar background (#570) 2026-06-22 14:25:39 +02:00
tuner-core.js Clean release snapshot 2026-06-16 18:47:13 +02:00
v3.css fix(highway): user-selectable scoreboard to stop duplicate HUDs 2026-06-19 20:56:38 +02:00
venue-instrument-pov.js Clean release snapshot 2026-06-16 18:47:13 +02:00
venue-mood-fx.js Clean release snapshot 2026-06-16 18:47:13 +02:00
venue-scene-3d.js Clean release snapshot 2026-06-16 18:47:13 +02:00
venue-viz.js Clean release snapshot 2026-06-16 18:47:13 +02:00