Commit graph

  • 05180afa80 Merge: promote dev to prod main npeter83 2026-07-12 03:51:36 +02:00
  • 56dfa9b427 release: v0.39.0 dev npeter83 2026-07-12 03:49:55 +02:00
  • 776fb38b9b harden(auth): SA3 review follow-ups — IPv6-mapped match + no-proxy-headers guardrail npeter83 2026-07-12 03:49:08 +02:00
  • 7297dbd2a8 feat(auth): SA3 — trusted-proxy X-Forwarded-For for rate limiting npeter83 2026-07-12 03:42:41 +02:00
  • 2eca56d68a Merge feature/auth-security: SB3 + SA4 (SA3 deferred) npeter83 2026-07-12 03:25:54 +02:00
  • 07dba4da9e fix(auth): address SA4 review findings (WS epoch check, commit ordering, verify guard) npeter83 2026-07-12 03:07:13 +02:00
  • 95d1549570 feat(auth): SA4 — server-side session revocation via per-user session epoch npeter83 2026-07-12 03:00:16 +02:00
  • a65915ea11 fix(auth): SB3 — keep reset/verify tokens out of URL query strings npeter83 2026-07-12 02:48:40 +02:00
  • f3d5269c40 Merge: promote dev to prod npeter83 2026-07-12 02:26:55 +02:00
  • 9375b46bc8 release: v0.38.0 npeter83 2026-07-12 02:26:42 +02:00
  • b2c9897001 Merge chore/code-hygiene: Phase 4 guardrails (noUnusedLocals + dead-code sweep + ruff.toml) npeter83 2026-07-12 02:16:07 +02:00
  • 4dd1327b93 chore(hygiene): Phase 4 guardrails — noUnusedLocals/Parameters + dead-code sweep npeter83 2026-07-12 02:15:52 +02:00
  • 6a1001b7fa Merge chore/code-hygiene: Plex filter-sidebar collapse button npeter83 2026-07-12 01:55:25 +02:00
  • b481de0e48 feat(plex): collapse button in the expanded Plex filter sidebar npeter83 2026-07-12 01:55:10 +02:00
  • 0404f176ed Merge chore/code-hygiene: Phase 3 — jscpd clones to zero npeter83 2026-07-12 00:50:09 +02:00
  • b59ad00fac chore(ui): dedup last 3 jscpd clones → 0 (collapsed rail, video-card text block, subs column) npeter83 2026-07-12 00:46:52 +02:00
  • eba1c8f01a Merge chore/code-hygiene: Phase 3 — extract shared inputCls + btnCls to ui/form.tsx npeter83 2026-07-12 00:35:48 +02:00
  • 1efd089749 chore(ui): extract shared inputCls + btnCls to ui/form.tsx npeter83 2026-07-12 00:29:04 +02:00
  • 1df6ddd154 Merge chore/code-hygiene: fix Plex infinite-scroll dead after drill-in→Back npeter83 2026-07-12 00:16:54 +02:00
  • 8cbaf1d731 fix(plex): infinite-scroll dead after drill-in → Back (stale sentinel observer) npeter83 2026-07-12 00:09:19 +02:00
  • 6cd14f1077 Merge chore/code-hygiene: Phase 2 #9 Plex backend pass (watch_sync bugs + backend dedup) npeter83 2026-07-11 23:53:29 +02:00
  • 28061353ec Plex backend pass (#9): watch_sync bugs + backend dedup npeter83 2026-07-11 23:48:35 +02:00
  • 358142ca9a Merge chore/code-hygiene: Phase 2 #9 Plex follow-up (frontend player bugs + FE dedup) npeter83 2026-07-11 23:22:54 +02:00
  • f90c12beaa fix(plex): player marker-skip reset, lang-switch reload, tracks wheel, sidebar badge clamp npeter83 2026-07-11 23:13:10 +02:00
  • 97088d5393 chore(plex): dedup frontend formatters + LS key, drop dead wasPlaying pref npeter83 2026-07-11 23:10:24 +02:00
  • 1595580e12 Merge chore/code-hygiene: Phase 2 #9 Plex (first pass — transcode config-drift + safe cleanups) npeter83 2026-07-11 21:53:25 +02:00
  • f17bad9870 chore(plex): drop dead _enabled guard, dedup watch-toggle, remove dead i18n npeter83 2026-07-11 21:53:24 +02:00
  • 3c7a8c7a14 fix(plex): honor the admin "max concurrent transcodes" setting (config drift) npeter83 2026-07-11 21:53:24 +02:00
  • 41a915f23c Merge chore/code-hygiene: Phase 2 #8 Auth security fixes (contained batch) npeter83 2026-07-11 21:26:39 +02:00
  • e92751dbce fix(auth): security hardening — token encryption, timing, adoption + isolation npeter83 2026-07-11 21:26:39 +02:00
  • f5fac09833 fix(auth): last-admin guard counts only ACTIVE admins (prevents lockout) npeter83 2026-07-11 21:26:39 +02:00
  • ab92831879 Merge chore/code-hygiene: clear E2EE key on logout (user-approved) npeter83 2026-07-11 20:57:30 +02:00
  • 7e562c6cb5 fix(e2ee): clear the device's private key on logout (user-approved: every logout) npeter83 2026-07-11 20:57:30 +02:00
  • 01d55f3029 Merge chore/code-hygiene: Phase 2 #7 Messages (E2EE crypto fix + UI bugs) npeter83 2026-07-11 20:48:38 +02:00
  • 5441ad203d fix(messages-ui): surface silent send failures, stop scroll/render churn (+cleanup) npeter83 2026-07-11 20:16:14 +02:00
  • 40ddaa2c92 fix(e2ee): stop reusing the AES-GCM nonce in setup; drop redundant key_check oracle npeter83 2026-07-11 20:16:14 +02:00
  • f6cfd4028e Merge chore/code-hygiene: Phase 2 #6 Admin/Settings/Scheduler (cleanup + bugs) npeter83 2026-07-11 19:45:09 +02:00
  • 3d00d75863 fix(admin-ui): Plex library toggle inversion + Purge-discovery confirm (+ cleanups) npeter83 2026-07-11 19:44:53 +02:00
  • a6ffcf9577 chore(scheduler): dedup token-user query + drop pointless rss lambda npeter83 2026-07-11 19:44:53 +02:00
  • 4e68bdf920 fix(config): honor DB-overridable download layout + retention (env-vs-DB drift) npeter83 2026-07-11 19:44:53 +02:00
  • 5550f9ac89 Merge chore/code-hygiene: Phase 2 #5 YouTube player (1 bug + cleanups) npeter83 2026-07-11 18:50:06 +02:00
  • 31c1284eb7 fix(player): short-video auto-watch + player cleanups npeter83 2026-07-11 18:49:56 +02:00
  • a84cb991e7 Merge chore/code-hygiene: Phase 2 #4 Playlists (cleanup + bug fixes) npeter83 2026-07-11 18:33:28 +02:00
  • c0e941bc0c fix(playlists-ui): surface YouTube 403s + rollback remove; drop dup name/import npeter83 2026-07-11 18:33:16 +02:00
  • ecb2e0b749 fix(playlists): reorder position collision + dedup remove helper npeter83 2026-07-11 18:33:16 +02:00
  • 2ebaa23f10 Merge chore/code-hygiene: Phase 2 #3 Channels (cleanup + 2 bug fixes) npeter83 2026-07-11 18:11:37 +02:00
  • 970e725d39 fix(channels): ChannelPage subscribe — surface 403 + fix stale caches npeter83 2026-07-11 18:11:23 +02:00
  • ee601363c2 chore(channels-ui): Phase 2 #3 frontend cleanup — dedup 403 handler, count cell, LS keys, dead i18n npeter83 2026-07-11 18:11:23 +02:00
  • 8fb41383e6 chore(channels): Phase 2 #3 backend cleanup — extract blocked + summary helpers npeter83 2026-07-11 18:11:23 +02:00
  • 58aac9e8ec Merge chore/code-hygiene: Downloads FE follow-up + Phase 2 #2 Feed (cleanup + 2 bug fixes) npeter83 2026-07-11 17:44:11 +02:00
  • 94417ada72 fix(feed): repair 2 bugs found in the Phase 2 #2 review npeter83 2026-07-11 17:43:18 +02:00
  • 3cbb420ece chore(feed-ui): Phase 2 #2 frontend cleanup — hoist, drop wrapper, dedup caches npeter83 2026-07-11 17:37:52 +02:00
  • 505f0e5650 chore(feed): Phase 2 #2 backend cleanup — dead return, dup helpers, shared const npeter83 2026-07-11 17:37:52 +02:00
  • 477056bfa8 chore(downloads-ui): FE-C4 follow-up cleanup npeter83 2026-07-11 17:10:15 +02:00
  • 94fd7ba9a6 fix(downloads-ui): editor tail no-op + persisted-tab fallback (+ dead ternary) npeter83 2026-07-11 16:37:57 +02:00
  • aee1bdc85d Merge branch 'dev' into chore/code-hygiene npeter83 2026-07-11 16:22:39 +02:00
  • 0da65985d0 Merge bugfix/downloads: repair 5 Downloads backend bugs (B1-B5) npeter83 2026-07-11 16:22:22 +02:00
  • 7a6f351e64 fix(downloads): repair 5 confirmed backend bugs (B1-B5) npeter83 2026-07-11 16:15:12 +02:00
  • cac5526399 chore(downloads): C3-C6 — DRY the source-URL, filename, and serialize helpers npeter83 2026-07-11 05:47:51 +02:00
  • 2a44db04d8 chore(downloads): C1+C2 — drop dead target_ext; centralize path-traversal guard npeter83 2026-07-11 05:41:43 +02:00
  • c2a2c98f16 chore: Phase 1 hygiene — drop unused imports/exports/types (behavior-neutral) npeter83 2026-07-11 04:47:08 +02:00
  • 4e09dfc09b Merge: promote dev to prod npeter83 2026-07-11 03:52:32 +02:00
  • bf8d4b94a0 release: v0.37.0 — unified library, series view, adaptive filters, collections picker npeter83 2026-07-11 03:50:34 +02:00
  • a9edc48cb4 Merge feature/plex-series-view into dev npeter83 2026-07-11 03:42:50 +02:00
  • 4423e8464e fix(plex): genre facet offers only co-occurring genres in AND mode npeter83 2026-07-11 03:41:17 +02:00
  • 5759deac20 feat(plex): restore Collections filter as a cross-library union picker npeter83 2026-07-11 03:30:33 +02:00
  • b3af04a997 perf(plex): batch bulk pushes, cache show enrichment; remove dead code + DRY (F6/F8/F10) npeter83 2026-07-11 03:10:02 +02:00
  • 9f8e410033 fix(plex): address code-review findings (F1-F3, F5, F9) npeter83 2026-07-11 02:25:14 +02:00
  • 186fdbb0e5 fix(plex): series-page UX fixes from UAT (7 items) npeter83 2026-07-11 01:34:30 +02:00
  • 46d5572e47 feat(plex): series-page polish — season/episode quick actions + glassy art backdrop npeter83 2026-07-11 01:01:34 +02:00
  • fe024ab29d fix(plex): facet + sort refinements npeter83 2026-07-11 00:45:05 +02:00
  • 017be5f8ca feat(plex): adaptive (faceted) filters — each filter narrows the others npeter83 2026-07-11 00:31:47 +02:00
  • 736db017e4 feat(plex): unify movies + shows into one cross-library browser npeter83 2026-07-11 00:15:49 +02:00
  • 11b7558c6c feat(plex): Plex-web-style 3-level series view (Phase 2 of series view) npeter83 2026-07-10 22:08:04 +02:00
  • 569d31235d feat(plex): TV-show metadata sync + series filters (Phase 1 of series view) npeter83 2026-07-10 21:43:09 +02:00
  • 5998a80ae3 Merge: promote dev to prod npeter83 2026-07-10 18:16:15 +02:00
  • f0bab315ad Merge improvement/player-drop-hd-experiment: drop HD flash, clean notes (v0.36.4) npeter83 2026-07-10 18:14:32 +02:00
  • f76b80a946 revert(player): drop the experimental HD-unlock fullscreen flash npeter83 2026-07-10 18:14:32 +02:00
  • a11d3aa158 Merge: promote dev to prod npeter83 2026-07-10 17:32:43 +02:00
  • 5d3dce6214 Merge improvement/player-hd-unlock-flash: experimental windowed-HD unlock (v0.36.3) npeter83 2026-07-10 17:30:50 +02:00
  • 50cef1a552 chore(release): 0.36.3 npeter83 2026-07-10 17:30:50 +02:00
  • ca00644698 feat(player): experimental one-time fullscreen flash to unlock windowed HD npeter83 2026-07-10 17:30:49 +02:00
  • 397afb4c01 Merge: promote dev to prod npeter83 2026-07-10 16:58:07 +02:00
  • 8856553981 Merge improvement/player-revert-transform: drop ineffective HD hack (v0.36.2) npeter83 2026-07-10 16:56:24 +02:00
  • 86ef4ad64c chore(release): 0.36.2 npeter83 2026-07-10 16:56:24 +02:00
  • 71e0a40481 revert(player): drop the transform-scale HD hack (didn't beat YouTube's cap) npeter83 2026-07-10 16:56:24 +02:00
  • 0dadfb1585 Merge: promote dev to prod npeter83 2026-07-10 16:29:30 +02:00
  • 42f112d4df Merge improvement/player-windowed-hd: windowed 1080p + scroll-anywhere volume (v0.36.1) npeter83 2026-07-10 16:27:43 +02:00
  • efd7a3d09d chore(release): 0.36.1 npeter83 2026-07-10 16:27:43 +02:00
  • c4d8258065 feat(player): unlock 1080p in the windowed player + scroll-anywhere volume npeter83 2026-07-10 16:27:42 +02:00
  • ac11ff2f01 Merge: promote dev to prod npeter83 2026-07-10 15:54:24 +02:00
  • a1dfa033a9 Merge improvement/player-quality-native-controls: native YT menu access + higher quality (v0.36.0) npeter83 2026-07-10 15:52:43 +02:00
  • cf204e18a8 chore(release): 0.36.0 npeter83 2026-07-10 15:52:34 +02:00
  • 9af0b90816 feat(player): open YouTube's native settings menu fully + push higher quality npeter83 2026-07-10 15:52:34 +02:00
  • e12da81082 Merge: promote dev to prod npeter83 2026-07-10 00:50:10 +02:00
  • a2de72420b chore(release): 0.35.0 — two-way Plex watch sync (Phase B + C) npeter83 2026-07-10 00:47:55 +02:00
  • 20c71c0b01 Merge: Plex watch-state sync Phase C (incremental + full reconcile, 2-way complete) npeter83 2026-07-10 00:46:22 +02:00
  • bbbcf4ff5a feat(plex): Phase C — incremental + full Plex↔Siftlode watch reconcile npeter83 2026-07-10 00:46:22 +02:00
  • bdf35c3375 Merge: Plex watch-state sync Phase B (Siftlode→Plex push) + auto-advance watched-mark fix npeter83 2026-07-10 00:18:54 +02:00
  • 363b4d17fc fix(plex): mark the finished episode on the correct id when auto-advancing npeter83 2026-07-10 00:18:44 +02:00