Skip to content

Embed SPA build version in Subsonic c=, drop v= from Activity History - #256

Merged
benders merged 1 commit into
mainfrom
feature/255-client-version-in-c
Jul 13, 2026
Merged

Embed SPA build version in Subsonic c=, drop v= from Activity History#256
benders merged 1 commit into
mainfrom
feature/255-client-version-in-c

Conversation

@benders

@benders benders commented Jul 13, 2026

Copy link
Copy Markdown
Owner

Summary

  • Activity page's History showed the client as "poutine v1.16.1" — that's the Subsonic protocol version (fixed), not the SPA release, so it never changed across builds.
  • Surveyed other OSS Subsonic clients (Substreamer, Supersonic, Vibrdrome): none embed release version in v=; it's protocol-reserved everywhere. Instead, embed the SPA's actual build in c= (c=poutine/x.y.z), using the existing APP_VERSION (frontend/src/version.ts).
  • ActivityPage.tsx's streamClientLabel now shows just clientName, ignoring clientVersion.
  • Confirmed this is scoped to the SPA's own c=proxy.ts/federation.ts hardcode fixed client names (poutine-proxy/poutine-federation) when forwarding to Navidrome, so it does not touch the REAL_PATH_CLIENTS player-record pinning in navidrome-native.ts (docs/pitfalls.md Ingest track paths from Navidrome sync + folder-based Unknown Album detection with read-only preview report #252). Added a pitfalls.md entry documenting this.

closes #255

Test plan

  • pnpm verify — typecheck, lint:boundary, 786 hub + 126 frontend unit tests, all pass
  • pnpm lint — zero errors/warnings
  • pnpm test:federation — 84 Python subsonic-compat tests + tombstone-gossip integration checks, all pass
  • Added a unit test asserting c=poutine/<APP_VERSION> and v=1.16.1 are both sent (subsonic.test.ts)

🤖 Generated with Claude Code

https://claude.ai/code/session_011Q3riZ78G26ohMgPDh8F7u

…History

Subsonic's v= is a protocol version (fixed 1.16.1) that never changes across
releases, so Activity History's "poutine v1.16.1" never reflected the actual
SPA build. No surveyed OSS client (Substreamer, Supersonic, Vibrdrome) embeds
its release version in v= either. Embed it in c= instead (c=poutine/x.y.z)
using the SPA's existing APP_VERSION, and have streamClientLabel show just
clientName.

closes #255
@benders
benders marked this pull request as ready for review July 13, 2026 15:31
@benders
benders merged commit 7638128 into main Jul 13, 2026
2 checks passed
@benders
benders deleted the feature/255-client-version-in-c branch July 13, 2026 15:37
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Embed SPA app version in Subsonic c= client param, drop v= from Activity display

2 participants