From c8af3cd6cd8302535916b91279159cf73019cad3 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Sat, 3 Oct 2026 03:16:59 +0000 Subject: [PATCH] chore(main): release 0.3.0 --- .release-please-manifest.json | 2 +- CHANGELOG.md | 104 ++++++++++++++++++++++++++++++++++ package-lock.json | 4 +- package.json | 2 +- 4 files changed, 108 insertions(+), 4 deletions(-) diff --git a/.release-please-manifest.json b/.release-please-manifest.json index 2be9c43c..0ee8c012 100644 --- a/.release-please-manifest.json +++ b/.release-please-manifest.json @@ -1,3 +1,3 @@ { - ".": "0.2.0" + ".": "0.3.0" } diff --git a/CHANGELOG.md b/CHANGELOG.md index c099b70a..3af5ca52 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,110 @@ All notable changes to this project are documented here. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/), and this project follows [Semantic Versioning](https://semver.org/spec/v2.0.0.html). +## [0.3.0](https://github.com/rowkavdev/nowplaying/compare/v0.2.0...v0.3.0) (2026-10-03) + + +### Features + +* **linux:** add native tray with WebUI menu and bounded lifecycle ([513a34a](https://github.com/rowkavdev/nowplaying/commit/513a34ac83b62177d2227717bd7c6d9d1f6bbe05)) +* **linux:** stage native desktop packages with declared tray dependencies ([7edcdb5](https://github.com/rowkavdev/nowplaying/commit/7edcdb5fd657c1d21a7e95221a069f9f98f36101)) + + +### Fixes + +* accept Spotify loopback callback only once ([dcd79cc](https://github.com/rowkavdev/nowplaying/commit/dcd79cc34dee588b9f6f3db8804efa732ab42ea4)) +* add Plex GDM and gateway identity discovery ([3ff647d](https://github.com/rowkavdev/nowplaying/commit/3ff647dfe452e7015e573327e25280caf1e3f946)) +* allow bounded status card cache buster ([fc52a06](https://github.com/rowkavdev/nowplaying/commit/fc52a06e353994b623754a343e133986f78d0e82)) +* **analytics:** send one Discord ping per process start when calls overlap ([1126e31](https://github.com/rowkavdev/nowplaying/commit/1126e31843b5bab01eb77d43bdeab1710c2e9acf)) +* apply privacy to Settings sample card preview ([46857d4](https://github.com/rowkavdev/nowplaying/commit/46857d484a4b0e51abf80b2c3d7103069f96977e)) +* atomically order hosted device ingests ([2dae312](https://github.com/rowkavdev/nowplaying/commit/2dae31272c56d5e04bb3529906ca6d68442ff7f0)) +* bind local card artwork to selected server ([c67c5e7](https://github.com/rowkavdev/nowplaying/commit/c67c5e7b85f34d8928b6406f3184a6424effd92f)) +* **card:** pick auto text direction from the displayed title ([cef0e17](https://github.com/rowkavdev/nowplaying/commit/cef0e172411dfffc2c948171cf05b0074ad37097)) +* classify revoked media server tokens as authentication failures ([723ed56](https://github.com/rowkavdev/nowplaying/commit/723ed56db9f8078ccd0cc08b7d7208901ed63950)) +* clear hosted playback on privacy save during outage ([5b9d572](https://github.com/rowkavdev/nowplaying/commit/5b9d5720e3b7df0ad94f76251d5033799213043d)) +* clear stale Spotify consent link on sign-in failure ([5ea5954](https://github.com/rowkavdev/nowplaying/commit/5ea5954385064d6b73c1d7709993110cf5647cb0)) +* confine provider credential redirects to original origin ([345edce](https://github.com/rowkavdev/nowplaying/commit/345edcebbc2f47c2cdd03ed2154c97aa5bb76d7a)) +* discard late sign-in start after Cancel ([8f52243](https://github.com/rowkavdev/nowplaying/commit/8f52243177978de6b8575688d8d731fc8d119cb5)) +* discard Spotify sign-in completion after expiry ([52d53bb](https://github.com/rowkavdev/nowplaying/commit/52d53bb23bfabc59ba3d90bb795f3893efa83817)) +* drive the injected test clock through both Discord client timers ([#731](https://github.com/rowkavdev/nowplaying/issues/731)) ([cf15ab0](https://github.com/rowkavdev/nowplaying/commit/cf15ab0fb4c1ba9f651209c9bb35ed3f4b2924d9)) +* expire abandoned hosted sign-in guard ([e0629c1](https://github.com/rowkavdev/nowplaying/commit/e0629c159ce6e75c08cc01ceff3ef25df00c82bd)) +* expire artwork cache by elapsed time ([#721](https://github.com/rowkavdev/nowplaying/issues/721)) ([513c1af](https://github.com/rowkavdev/nowplaying/commit/513c1afa44468a1d02e80c6ce429ccf1a4d74657)) +* expire Discord artwork by elapsed time ([#723](https://github.com/rowkavdev/nowplaying/issues/723)) ([3693e51](https://github.com/rowkavdev/nowplaying/commit/3693e51fd7dee9e440535de54ec02b8215426168)) +* expire local last-good card by elapsed time ([7844ffe](https://github.com/rowkavdev/nowplaying/commit/7844ffed00d509a0de2d8a6ff265cf3c28b70b6e)) +* expire YouTube tabs by elapsed time ([bcc0465](https://github.com/rowkavdev/nowplaying/commit/bcc0465a4a71750d503a447fc3633f6a06111410)) +* explain server sign-in save failures in Settings ([0260a5b](https://github.com/rowkavdev/nowplaying/commit/0260a5bad13e21a6078ca00dc5bfdb42e35f9838)) +* guard server sign-in and restore credentials on failed saves ([057f648](https://github.com/rowkavdev/nowplaying/commit/057f64846dc9716b7f3e011fab2f36ea4de82bdc)) +* **hosted:** require the exact application/json media type on ingest ([be97948](https://github.com/rowkavdev/nowplaying/commit/be97948dcdea488145b47d541abd91c0b00927fa)) +* identify current repository in MusicBrainz User-Agent ([ede2712](https://github.com/rowkavdev/nowplaying/commit/ede271278e80ca96d838ef52188935fb1a25d522)) +* invalidate cancelled provider sign-in polls ([ef5cb56](https://github.com/rowkavdev/nowplaying/commit/ef5cb566c4f872a69bedba6118e0eb76df201e44)) +* invalidate last-good card after appearance save ([9b21318](https://github.com/rowkavdev/nowplaying/commit/9b21318c9b44d08fb054b8950245b63a44621fa1)) +* invalidate pending Spotify sign-in on disconnect ([70f10e3](https://github.com/rowkavdev/nowplaying/commit/70f10e3ad7d393d871a0684c26d945f5cc465de9)) +* invalidate private card cache after privacy changes ([76bfa90](https://github.com/rowkavdev/nowplaying/commit/76bfa90e8abadee2178b5ec9810d96beed077083)) +* keep a clickable auth link in WebUI provider flows ([287c095](https://github.com/rowkavdev/nowplaying/commit/287c0954e0a2b3f46bed6eb52265a2b75cdfd32a)) +* keep authenticated artwork redirects on original origin ([f3f7090](https://github.com/rowkavdev/nowplaying/commit/f3f709014a611610db9c3c6166cfb20bb9230032)) +* keep committing sign-in flows through expiry ([1412f5d](https://github.com/rowkavdev/nowplaying/commit/1412f5d4000f3323bb7e45e90566e8736cf21fb9)) +* keep hosted heartbeat alive after client clock rollback ([819a4ab](https://github.com/rowkavdev/nowplaying/commit/819a4abcc24aa6db711029d9f628078f019caba3)) +* keep sign-in flow claimed throughout finish ([61bd08e](https://github.com/rowkavdev/nowplaying/commit/61bd08eff07e44620ccd9621803803187bfe1d63)) +* keep sign-in visible while commit finishes ([23a65a2](https://github.com/rowkavdev/nowplaying/commit/23a65a2b162fab9ed4343bf13764848101b49657)) +* keep status snapshot ordered by provider poll start ([9101ee8](https://github.com/rowkavdev/nowplaying/commit/9101ee8c0a0bc88780c95019218b2e83363a72c6)) +* **linux:** constrain native packaging scripts and tests to Linux ([641763a](https://github.com/rowkavdev/nowplaying/commit/641763a428d5956251682552ba7bbe5387a2e4fc)) +* **linux:** disable RPM debug extraction for prebuilt Node bundles ([f25d9da](https://github.com/rowkavdev/nowplaying/commit/f25d9da2476640d67fb96a7a71cf9d612f00037f)) +* **linux:** route tray pages to Settings until first-run setup completes ([e9f7999](https://github.com/rowkavdev/nowplaying/commit/e9f79995c68a8c4237c8c867badc1d1f4b30371d)) +* make sign-in cancellation honest during credential commit ([bd0ec6a](https://github.com/rowkavdev/nowplaying/commit/bd0ec6a7b7e660b36b52597d967a6b2742851294)) +* measure Discord stuck and grace by elapsed time ([#727](https://github.com/rowkavdev/nowplaying/issues/727)) ([dc42e39](https://github.com/rowkavdev/nowplaying/commit/dc42e39e789cbcaeaa956a28463ce30589b8db69)) +* newest overlapping Spotify sign-in supersedes older pending flows ([#703](https://github.com/rowkavdev/nowplaying/issues/703)) ([b8649b2](https://github.com/rowkavdev/nowplaying/commit/b8649b2346c2edb032d85034c50686f156efcd87)) +* normalize private subnet targets before probing ([c8055b1](https://github.com/rowkavdev/nowplaying/commit/c8055b19b47fe14f04863deda363656c9eb296ff)) +* offer auth links in legacy setup page ([ec3fe04](https://github.com/rowkavdev/nowplaying/commit/ec3fe0423fc43d128c69954a1e3329ac1c013679)) +* omit hidden subtitles from card metadata and uploads ([4b2f4da](https://github.com/rowkavdev/nowplaying/commit/4b2f4dae6752b292d8e77b128fcc97e2f6935276)) +* omit progress track when timing is hidden ([17ad73e](https://github.com/rowkavdev/nowplaying/commit/17ad73e24fa489f4c1f24950fc739af30a2d2cb4)) +* prevent older hosted pushes from retrying above newer state ([7801e7d](https://github.com/rowkavdev/nowplaying/commit/7801e7d5d428e56ad6e9f02b5b95b10cbee99cf5)) +* prioritize failed sources over hosted startup ([ac10770](https://github.com/rowkavdev/nowplaying/commit/ac107707e79faea493a9120de3279acef201d6b3)) +* rank combined playback by activity order ([d4b83f9](https://github.com/rowkavdev/nowplaying/commit/d4b83f9a3f8b7987fc292c18cf73042e1a6b987a)) +* rank distinct same-title media items by stable ID ([d44b0ed](https://github.com/rowkavdev/nowplaying/commit/d44b0ed93bd7c051959695da87bb60ef79c87a25)) +* rank multi-server playback by activity order ([0bb954e](https://github.com/rowkavdev/nowplaying/commit/0bb954e06c1efd95bbd957ac7ee813e2a2aa4289)) +* rank YouTube tabs by playback activity order ([21c140f](https://github.com/rowkavdev/nowplaying/commit/21c140f0f1493bfd75eea0ba149de7037f257e9c)) +* re-check credential liveness before saving a rotated refresh token ([#725](https://github.com/rowkavdev/nowplaying/issues/725)) ([3ff3ccb](https://github.com/rowkavdev/nowplaying/commit/3ff3ccb3aa8af4461fc7ee5e70e83b6f3c4a51c5)) +* recover hosted upload sequence after clock rollback ([beb495d](https://github.com/rowkavdev/nowplaying/commit/beb495d50da48f6125bb916d64b531223b33fc22)) +* reflect per-server auth failures in tray and diagnostics ([1e6203d](https://github.com/rowkavdev/nowplaying/commit/1e6203d8ad59874dcfe8a48114e472e65a9b347f)) +* reject hosted ingest committed after device revocation ([2c668ce](https://github.com/rowkavdev/nowplaying/commit/2c668ce18fb43047dcc26a02abe81d49829163da)) +* reject oversized Discord IPC activity without leaking waiter ([a94006a](https://github.com/rowkavdev/nowplaying/commit/a94006afb036ca2750ba162127cb106f850de670)) +* remove saved sign-in when disconnecting a server ([fdd7c70](https://github.com/rowkavdev/nowplaying/commit/fdd7c701e4a53465d64886204d44116b7dd93b3b)) +* replace prior hosted device on same-PC sign-in ([e8e0755](https://github.com/rowkavdev/nowplaying/commit/e8e0755d70c1f585b98210f0322caaea65575e8a)) +* report bounded discovery probe failure reasons ([abcccbc](https://github.com/rowkavdev/nowplaying/commit/abcccbcb382f7421ba86a2e011dffb458b9cb7e1)) +* reset stuck detection for distinct same-title media ([8e26ced](https://github.com/rowkavdev/nowplaying/commit/8e26cedf3a0e9f01ace04ea845e247ed76148f17)) +* restore focus after cancelling server sign-in ([83cee39](https://github.com/rowkavdev/nowplaying/commit/83cee39b80c54d7caf9ba5dc88629d58d7764718)) +* restore Spotify credential when config save fails ([6f6b404](https://github.com/rowkavdev/nowplaying/commit/6f6b404dac44408b58bbeaf6fe316691219e8428)) +* retain hosted revoke key and expose pending disconnect ([abe2377](https://github.com/rowkavdev/nowplaying/commit/abe2377243f478f6aaf6a06def17cfdf5941c72b)) +* retry Discord clear after publish limiter ([7a2203d](https://github.com/rowkavdev/nowplaying/commit/7a2203d69030d3a7158e7b1edfc0e575602adae2)) +* retry failed Plex owner checks ([7729906](https://github.com/rowkavdev/nowplaying/commit/77299065807bb261f3393bc2342849cc2e64b2a0)) +* retry first-run activation after another sign-in ([91c9fe2](https://github.com/rowkavdev/nowplaying/commit/91c9fe2acd4cd7ff2014fec31fc776c20c45c723)) +* retry unchanged Discord activity after publish failure ([d6cff56](https://github.com/rowkavdev/nowplaying/commit/d6cff5638fb67c16718836d53870fad3d393572e)) +* run optional setup before committing server config ([89d9319](https://github.com/rowkavdev/nowplaying/commit/89d9319e1a279e6271b2e80126623d07c0dba9e5)) +* serialize same-account Spotify credential writes ([#703](https://github.com/rowkavdev/nowplaying/issues/703)) ([be5fdd1](https://github.com/rowkavdev/nowplaying/commit/be5fdd11955012c3acde85d85d2a2fe1fdd7cee4)) +* **setup:** accept a 4096-byte draft on load ([7d68d1d](https://github.com/rowkavdev/nowplaying/commit/7d68d1d9c904e73becab33fdbabc092103009c81)) +* **setup:** settle LAN discovery when cancelled during bind ([1757815](https://github.com/rowkavdev/nowplaying/commit/1757815d7596d7c69da70b5263d82edc604e6f81)) +* share first hosted registration across callers ([0cb6d0e](https://github.com/rowkavdev/nowplaying/commit/0cb6d0e35ecd43713a2bb2e289ac151dd29a5669)) +* show failed server in Settings notice ([65d65dd](https://github.com/rowkavdev/nowplaying/commit/65d65dd036d609cdd9c0e59f00dddb0e531fb6b4)) +* show localhost Plex probe failures in quick scan ([85d0e28](https://github.com/rowkavdev/nowplaying/commit/85d0e28d058c0f35600125489b79834907d4e29a)) +* show per-server sign-in failures in multi-server status ([627a8b2](https://github.com/rowkavdev/nowplaying/commit/627a8b2f2d197286beab59503c7d8fa7b855632c)) +* skip artwork fetch when card hides image ([d039fcb](https://github.com/rowkavdev/nowplaying/commit/d039fcb2b80e6e0eb6e9ed56c3405076ed4763f3)) +* space MusicBrainz requests by elapsed clock ([#734](https://github.com/rowkavdev/nowplaying/issues/734)) ([4a0cc23](https://github.com/rowkavdev/nowplaying/commit/4a0cc23c430d51fb1b373dbac79df2bab9ff2a06)) +* stream first-run discovery probe bodies with a running byte cap ([#745](https://github.com/rowkavdev/nowplaying/issues/745)) ([0ccf48b](https://github.com/rowkavdev/nowplaying/commit/0ccf48b6173b6824ab0d257e9430558d025e0f54)) +* surface failed first-run activation with recovery ([192e8b6](https://github.com/rowkavdev/nowplaying/commit/192e8b6d11bde8b4fe49fa081c7c35d29cb798f7)) +* surface hosted upload failures in app health ([b670eca](https://github.com/rowkavdev/nowplaying/commit/b670eca419e8f07c53d7b3753d16a42aa265d34b)) +* time Discord publish throttle and reconnect backoff by elapsed clock ([#731](https://github.com/rowkavdev/nowplaying/issues/731)) ([5794b1d](https://github.com/rowkavdev/nowplaying/commit/5794b1db1ad6f70dd1e4d29f3fbedb0f87be2cf5)) +* time hosted device flow by elapsed clock ([#729](https://github.com/rowkavdev/nowplaying/issues/729)) ([692f110](https://github.com/rowkavdev/nowplaying/commit/692f110f7ee32a541376f61f841fc2f50d6b75d0)) +* time hosted sign-in restart guard by elapsed clock ([#741](https://github.com/rowkavdev/nowplaying/issues/741)) ([18859b1](https://github.com/rowkavdev/nowplaying/commit/18859b1d86eac28d23d5068465d5848c0bcd3182)) +* time status-only refresh interval by elapsed clock ([#736](https://github.com/rowkavdev/nowplaying/issues/736)) ([d670e3a](https://github.com/rowkavdev/nowplaying/commit/d670e3aeb9a955c6f94cb60dd8701be31696d433)) +* track setup test rate window by elapsed clock ([#739](https://github.com/rowkavdev/nowplaying/issues/739)) ([e79d193](https://github.com/rowkavdev/nowplaying/commit/e79d1936b13c4c4153005c5f6c4c289ef74757b4)) +* **tray:** close the app on a stop request after the tray fails ([031a0b7](https://github.com/rowkavdev/nowplaying/commit/031a0b796c83085f614bff187aee01042421c94a)) +* **tray:** keep one quit waiter across Settings restarts ([1b2d99f](https://github.com/rowkavdev/nowplaying/commit/1b2d99ff9efd7da4e9201a514e7931492127719a)) +* **tray:** log tray outcomes with statuses the logger accepts ([73b4110](https://github.com/rowkavdev/nowplaying/commit/73b4110acdc974845f12db83a0fbc8540a53ea0a)) +* use elapsed time for hosted stale playback guards ([14b4cd9](https://github.com/rowkavdev/nowplaying/commit/14b4cd9652ebfd77055e7498e018a852590ebd70)) +* use elapsed time for hosted upload backoff ([e9cf458](https://github.com/rowkavdev/nowplaying/commit/e9cf45892c11a84052c10d7f7ed4d09700dc4da6)) +* use elapsed time for provider reconnect backoff ([e81bc10](https://github.com/rowkavdev/nowplaying/commit/e81bc10b3bd02a497eb585aa475485795146630d)) +* wait for cancel before switching server sign-in ([a3e90a6](https://github.com/rowkavdev/nowplaying/commit/a3e90a6535fb106eaa3d34add3a3b11965070982)) + ## [0.2.0](https://github.com/rowkavdev/nowplaying/compare/v0.1.0...v0.2.0) (2026-09-26) diff --git a/package-lock.json b/package-lock.json index cb6142af..715bc030 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "nowplaying", - "version": "0.2.0", + "version": "0.3.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "nowplaying", - "version": "0.2.0", + "version": "0.3.0", "dependencies": { "sharp": "^0.35.4" }, diff --git a/package.json b/package.json index 1f1237f1..005b9fac 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "nowplaying", - "version": "0.2.0", + "version": "0.3.0", "private": true, "type": "module", "description": "Universal media presence core for Plex, Jellyfin, Navidrome and Emby",