Commit Graph

  • 70f419edf3 Merge: promote dev to prod peter 2026-07-12 04:58:45 +02:00
  • 216200eebf release: v0.39.1 peter 2026-07-12 04:57:06 +02:00
  • ac0bb19d32 Merge bug/oauth-scope-and-email: OAuth scope-clobber + admin-email fixes peter 2026-07-12 04:56:24 +02:00
  • 30e6ce74ff fix(auth): decrypt the access-token fallback before revoking on account deletion peter 2026-07-12 04:52:31 +02:00
  • e667fe0776 fix(auth): don't let a re-sign-in clobber the YouTube grant (root cause) peter 2026-07-12 04:44:37 +02:00
  • ca10b88bf5 fix(auth): preserve OAuth scopes across re-login + accurate multi-admin request emails peter 2026-07-12 04:34:07 +02:00
  • 9fa120b09e Merge feature/auth-loose-ends: close SA5 timing oracles + dedup messages_ws peter 2026-07-12 04:17:48 +02:00
  • 42bc45a365 chore(auth): drop now-dead session guard in messages_ws epoch read peter 2026-07-12 04:17:02 +02:00
  • d939b2efb6 fix(auth): close SA5 timing oracles on register/reset + dedup messages_ws peter 2026-07-12 04:13:11 +02:00
  • 2fef26cd75 Merge: promote dev to prod peter 2026-07-12 03:51:36 +02:00
  • 9d3624d51b release: v0.39.0 peter 2026-07-12 03:49:55 +02:00
  • ff8e49b8ce harden(auth): SA3 review follow-ups — IPv6-mapped match + no-proxy-headers guardrail peter 2026-07-12 03:49:08 +02:00
  • db2257c5e7 feat(auth): SA3 — trusted-proxy X-Forwarded-For for rate limiting peter 2026-07-12 03:42:41 +02:00
  • 4b3e83db74 Merge feature/auth-security: SB3 + SA4 (SA3 deferred) peter 2026-07-12 03:25:54 +02:00
  • bfcee41f2a fix(auth): address SA4 review findings (WS epoch check, commit ordering, verify guard) peter 2026-07-12 03:07:13 +02:00
  • bfcacb518f feat(auth): SA4 — server-side session revocation via per-user session epoch peter 2026-07-12 03:00:16 +02:00
  • e99ec65721 fix(auth): SB3 — keep reset/verify tokens out of URL query strings peter 2026-07-12 02:48:40 +02:00
  • 4353327e30 Merge: promote dev to prod peter 2026-07-12 02:26:55 +02:00
  • c7ef5a87b2 release: v0.38.0 peter 2026-07-12 02:26:42 +02:00
  • 78fcbb651f Merge chore/code-hygiene: Phase 4 guardrails (noUnusedLocals + dead-code sweep + ruff.toml) peter 2026-07-12 02:16:07 +02:00
  • 5c29a383cf chore(hygiene): Phase 4 guardrails — noUnusedLocals/Parameters + dead-code sweep peter 2026-07-12 02:15:52 +02:00
  • ebe77721cd Merge chore/code-hygiene: Plex filter-sidebar collapse button peter 2026-07-12 01:55:25 +02:00
  • 2fcef981cd feat(plex): collapse button in the expanded Plex filter sidebar peter 2026-07-12 01:55:10 +02:00
  • 0f21f6292f Merge chore/code-hygiene: Phase 3 — jscpd clones to zero peter 2026-07-12 00:50:09 +02:00
  • cddfb909da chore(ui): dedup last 3 jscpd clones → 0 (collapsed rail, video-card text block, subs column) peter 2026-07-12 00:46:52 +02:00
  • 2169232d57 Merge chore/code-hygiene: Phase 3 — extract shared inputCls + btnCls to ui/form.tsx peter 2026-07-12 00:35:48 +02:00
  • eabfb6e00a chore(ui): extract shared inputCls + btnCls to ui/form.tsx peter 2026-07-12 00:29:04 +02:00
  • d1adec02ad Merge chore/code-hygiene: fix Plex infinite-scroll dead after drill-in→Back peter 2026-07-12 00:16:54 +02:00
  • 9a00bd8836 fix(plex): infinite-scroll dead after drill-in → Back (stale sentinel observer) peter 2026-07-12 00:09:19 +02:00
  • ca99afe965 Merge chore/code-hygiene: Phase 2 #9 Plex backend pass (watch_sync bugs + backend dedup) peter 2026-07-11 23:53:29 +02:00
  • a12f1d8ef7 Plex backend pass (#9): watch_sync bugs + backend dedup peter 2026-07-11 23:48:35 +02:00
  • bce055b774 Merge chore/code-hygiene: Phase 2 #9 Plex follow-up (frontend player bugs + FE dedup) peter 2026-07-11 23:22:54 +02:00
  • 4d22349aa6 fix(plex): player marker-skip reset, lang-switch reload, tracks wheel, sidebar badge clamp peter 2026-07-11 23:13:10 +02:00
  • d7fbe01f81 chore(plex): dedup frontend formatters + LS key, drop dead wasPlaying pref peter 2026-07-11 23:10:24 +02:00
  • ae8bc871f2 Merge chore/code-hygiene: Phase 2 #9 Plex (first pass — transcode config-drift + safe cleanups) peter 2026-07-11 21:53:25 +02:00
  • c9a249d922 chore(plex): drop dead _enabled guard, dedup watch-toggle, remove dead i18n peter 2026-07-11 21:53:24 +02:00
  • 9347d52a54 fix(plex): honor the admin "max concurrent transcodes" setting (config drift) peter 2026-07-11 21:53:24 +02:00
  • ce43db9a80 Merge chore/code-hygiene: Phase 2 #8 Auth security fixes (contained batch) peter 2026-07-11 21:26:39 +02:00
  • a61a281158 fix(auth): security hardening — token encryption, timing, adoption + isolation peter 2026-07-11 21:26:39 +02:00
  • 3fb345d825 fix(auth): last-admin guard counts only ACTIVE admins (prevents lockout) peter 2026-07-11 21:26:39 +02:00
  • 18cf9cd82d Merge chore/code-hygiene: clear E2EE key on logout (user-approved) peter 2026-07-11 20:57:30 +02:00
  • 856f39642f fix(e2ee): clear the device's private key on logout (user-approved: every logout) peter 2026-07-11 20:57:30 +02:00
  • 022d8262db Merge chore/code-hygiene: Phase 2 #7 Messages (E2EE crypto fix + UI bugs) peter 2026-07-11 20:48:38 +02:00
  • c0f9ce732c fix(messages-ui): surface silent send failures, stop scroll/render churn (+cleanup) peter 2026-07-11 20:16:14 +02:00
  • 52197b28fb fix(e2ee): stop reusing the AES-GCM nonce in setup; drop redundant key_check oracle peter 2026-07-11 20:16:14 +02:00
  • 60d6fc3fa0 Merge chore/code-hygiene: Phase 2 #6 Admin/Settings/Scheduler (cleanup + bugs) peter 2026-07-11 19:45:09 +02:00
  • e91369f827 fix(admin-ui): Plex library toggle inversion + Purge-discovery confirm (+ cleanups) peter 2026-07-11 19:44:53 +02:00
  • 1fc8214f8f chore(scheduler): dedup token-user query + drop pointless rss lambda peter 2026-07-11 19:44:53 +02:00
  • 7e18d9698f fix(config): honor DB-overridable download layout + retention (env-vs-DB drift) peter 2026-07-11 19:44:53 +02:00
  • 02d334825b Merge chore/code-hygiene: Phase 2 #5 YouTube player (1 bug + cleanups) peter 2026-07-11 18:50:06 +02:00
  • 6648ba557a fix(player): short-video auto-watch + player cleanups peter 2026-07-11 18:49:56 +02:00
  • 7f35be1a78 Merge chore/code-hygiene: Phase 2 #4 Playlists (cleanup + bug fixes) peter 2026-07-11 18:33:28 +02:00
  • 09a6095363 fix(playlists-ui): surface YouTube 403s + rollback remove; drop dup name/import peter 2026-07-11 18:33:16 +02:00
  • a7c8b3d0a6 fix(playlists): reorder position collision + dedup remove helper peter 2026-07-11 18:33:16 +02:00
  • 2b2af2aca2 Merge chore/code-hygiene: Phase 2 #3 Channels (cleanup + 2 bug fixes) peter 2026-07-11 18:11:37 +02:00
  • 1fb10895cc fix(channels): ChannelPage subscribe — surface 403 + fix stale caches peter 2026-07-11 18:11:23 +02:00
  • c06e8462be chore(channels-ui): Phase 2 #3 frontend cleanup — dedup 403 handler, count cell, LS keys, dead i18n peter 2026-07-11 18:11:23 +02:00
  • e00fffd000 chore(channels): Phase 2 #3 backend cleanup — extract blocked + summary helpers peter 2026-07-11 18:11:23 +02:00
  • 939ca6ee6d Merge chore/code-hygiene: Downloads FE follow-up + Phase 2 #2 Feed (cleanup + 2 bug fixes) peter 2026-07-11 17:44:11 +02:00
  • 83f5b87424 fix(feed): repair 2 bugs found in the Phase 2 #2 review peter 2026-07-11 17:43:18 +02:00
  • bafaa5192d chore(feed-ui): Phase 2 #2 frontend cleanup — hoist, drop wrapper, dedup caches peter 2026-07-11 17:37:52 +02:00
  • 957396aee7 chore(feed): Phase 2 #2 backend cleanup — dead return, dup helpers, shared const peter 2026-07-11 17:37:52 +02:00
  • c9285b8c25 chore(downloads-ui): FE-C4 follow-up cleanup peter 2026-07-11 17:10:15 +02:00
  • fef8036d6c fix(downloads-ui): editor tail no-op + persisted-tab fallback (+ dead ternary) peter 2026-07-11 16:37:57 +02:00
  • 4b22a7fa23 Merge branch 'dev' into chore/code-hygiene peter 2026-07-11 16:22:39 +02:00
  • a24e77c693 Merge bugfix/downloads: repair 5 Downloads backend bugs (B1-B5) peter 2026-07-11 16:22:22 +02:00
  • 006f38382b fix(downloads): repair 5 confirmed backend bugs (B1-B5) peter 2026-07-11 16:15:12 +02:00
  • 39748c394b chore(downloads): C3-C6 — DRY the source-URL, filename, and serialize helpers peter 2026-07-11 05:47:51 +02:00
  • efcac631de chore(downloads): C1+C2 — drop dead target_ext; centralize path-traversal guard peter 2026-07-11 05:41:43 +02:00
  • 0b2740de0f chore: Phase 1 hygiene — drop unused imports/exports/types (behavior-neutral) peter 2026-07-11 04:47:08 +02:00
  • 7842e48952 Merge: promote dev to prod peter 2026-07-11 03:52:32 +02:00
  • 2bdccfb8c7 release: v0.37.0 — unified library, series view, adaptive filters, collections picker peter 2026-07-11 03:50:34 +02:00
  • 11bc8bf347 Merge feature/plex-series-view into dev peter 2026-07-11 03:42:50 +02:00
  • 196f3bf2f9 fix(plex): genre facet offers only co-occurring genres in AND mode peter 2026-07-11 03:41:17 +02:00
  • b85d12e0c9 feat(plex): restore Collections filter as a cross-library union picker peter 2026-07-11 03:30:33 +02:00
  • 213145b7bd perf(plex): batch bulk pushes, cache show enrichment; remove dead code + DRY (F6/F8/F10) peter 2026-07-11 03:10:02 +02:00
  • d46f55af83 fix(plex): address code-review findings (F1-F3, F5, F9) peter 2026-07-11 02:25:14 +02:00
  • 3c46bc4377 fix(plex): series-page UX fixes from UAT (7 items) peter 2026-07-11 01:34:30 +02:00
  • 819e17536c feat(plex): series-page polish — season/episode quick actions + glassy art backdrop peter 2026-07-11 01:01:34 +02:00
  • cb93b698f4 fix(plex): facet + sort refinements peter 2026-07-11 00:45:05 +02:00
  • 59d6ad01b3 feat(plex): adaptive (faceted) filters — each filter narrows the others peter 2026-07-11 00:31:47 +02:00
  • b526b4d9cc feat(plex): unify movies + shows into one cross-library browser peter 2026-07-11 00:15:49 +02:00
  • 5fa1c701c2 feat(plex): Plex-web-style 3-level series view (Phase 2 of series view) peter 2026-07-10 22:08:04 +02:00
  • 56799e5bcc feat(plex): TV-show metadata sync + series filters (Phase 1 of series view) peter 2026-07-10 21:43:09 +02:00
  • 1401294ad1 Merge: promote dev to prod peter 2026-07-10 18:16:15 +02:00
  • 6397844863 Merge improvement/player-drop-hd-experiment: drop HD flash, clean notes (v0.36.4) peter 2026-07-10 18:14:32 +02:00
  • 8279f259bb revert(player): drop the experimental HD-unlock fullscreen flash peter 2026-07-10 18:14:32 +02:00
  • 409f8c0ce8 Merge: promote dev to prod peter 2026-07-10 17:32:43 +02:00
  • f785650269 Merge improvement/player-hd-unlock-flash: experimental windowed-HD unlock (v0.36.3) peter 2026-07-10 17:30:50 +02:00
  • aac03e2c2b chore(release): 0.36.3 peter 2026-07-10 17:30:50 +02:00
  • fcd58f12c9 feat(player): experimental one-time fullscreen flash to unlock windowed HD peter 2026-07-10 17:30:49 +02:00
  • c3987a8d52 Merge: promote dev to prod peter 2026-07-10 16:58:07 +02:00
  • 1d0c77b34a Merge improvement/player-revert-transform: drop ineffective HD hack (v0.36.2) peter 2026-07-10 16:56:24 +02:00
  • 967364b938 chore(release): 0.36.2 peter 2026-07-10 16:56:24 +02:00
  • e678a267ae revert(player): drop the transform-scale HD hack (didn't beat YouTube's cap) peter 2026-07-10 16:56:24 +02:00
  • 92bba3abf2 Merge: promote dev to prod peter 2026-07-10 16:29:30 +02:00
  • 05e6554048 Merge improvement/player-windowed-hd: windowed 1080p + scroll-anywhere volume (v0.36.1) peter 2026-07-10 16:27:43 +02:00
  • 3a25f8341f chore(release): 0.36.1 peter 2026-07-10 16:27:43 +02:00
  • d6ce4a0477 feat(player): unlock 1080p in the windowed player + scroll-anywhere volume peter 2026-07-10 16:27:42 +02:00
  • 1d908cabb2 Merge: promote dev to prod peter 2026-07-10 15:54:24 +02:00