Project
Changelog
3.3.2 - 2026-04-19
🐛 Bug Fixes
- (emby) Use dedicated TagService endpoints for label management (fc8a46a)
3.3.1 - 2026-04-19
🐛 Bug Fixes
- (sunset) Use sunset threshold for byte budget calculation (5a99db7)
3.3.0 - 2026-04-17
🚀 Features
- (integrations) Add per-integration import exclusion setting (43c653f)
3.2.7 - 2026-04-16
🐛 Bug Fixes
- (library) Resolve Firefox table view rendering and scrollbar issues (314a045)
- (library) Use file-level dates for time-in-library accuracy (603cee5)
- (ci) Add --ignore-registry-errors to pnpm audit for npm 410 (7c90917)
3.2.6 - 2026-04-13
🐛 Bug Fixes
- (dashboard) Render both queued and deleted sparkline series for mixed per-disk-group modes (2d301e5)
3.2.5 - 2026-04-13
🐛 Bug Fixes
- (dashboard) Derive mode indicators from per-disk-group modes (daacd5b) — reported by @dimitarmanov (#22)
3.2.4 - 2026-04-10
🐛 Bug Fixes
- (lint) Use MediaTypeEpisode constant to satisfy goconst (dac2b1b)
- (ci) Replace golangci-lint-action with Docker image to match Makefile (5afd4a2)
3.2.3 - 2026-04-10
🐛 Bug Fixes
- (nav) Add mobile navigation dropdown menu (e0930e8) — reported by @kiwi3007 (#20)
- (jellyfin) Base64-encode poster image uploads (ca117b1) — reported by @yannolerobot (#21)
3.2.2 - 2026-04-10
🐛 Bug Fixes
- (plex) Use session history API for multi-user play counts (25b84ac)
3.2.1 - 2026-04-07
🐛 Bug Fixes
- (schema) Prevent AutoMigrate from resetting disk group thresholds (81586b0)
3.2.0 - 2026-04-06
🚀 Features
- (diskgroup) Add soft deletion with configurable grace period (b3e1f19)
🐛 Bug Fixes
- (deletion) Centralise deletion ordering by score in DeletionService (3a25d91)
- (diskgroup) Seed sunset threshold default when switching to sunset mode (efa9bf2)
3.1.1 - 2026-04-06
🐛 Bug Fixes
- (poller) Preserve disk group thresholds when integrations are unreachable (d1a1f37)
3.1.0 - 2026-04-06
🚀 Features
- (sunset) Add virtual show-level-only override for sunset mode (78d321a)
- (help) Add show-level evaluation help section and fix sunset details (b78f343)
- (ui) Show integration instance names in disk group pill badges (e21e7f0)
- (ci) Add rolling
and Docker image tags for pre-release channels (a1ff4c9) - (integrations) Add automatic recovery with exponential backoff probing (7c8e31f)
- (notifications) Replace boolean toggles with tier-based notification levels (217a05c)
- (sunset) Add display style preference for overlay text (69b51f8)
- Add automatic database backup and startup schema validation (3dce322)
🐛 Bug Fixes
- (ui) Sunset mode UI polish and i18n fixes (5b4b33e)
- (ui) Rearrange sunset settings card into logical groups (7656a5b)
- (ui) Replace browser confirm dialogs with UiDialog (f0dff0b)
- (rules) Show-level-only hides TV shows from deletion priority (7534a67)
- (rules) Restore score-based sort order in deletion priority view (53d55ab)
- (deps) Add pnpm overrides for site/ transitive dependency vulnerabilities (d1d95e7)
- (integrations) Handle Tautulli numeric rating_key fields (2273684)
- (integrations) Preserve HTTP method across redirects in *arr API calls (2cefd57)
- (integrations) Handle Tautulli fractional watched_status field (01047ac)
- (integrations) Add flexInt64 type for loose-typed API numeric fields (87a90c8)
- Comprehensive audit remediation and codebase cleanup (d422322)
- (audit) Restore score display for deleted and cancelled history entries (5dc3103)
- (sunset) Show 'Saved by popular demand' on poster cards (b3f1576)
2.3.2 - 2026-03-30
🚀 Features
- Add sunset mode with per-disk-group execution, media server labels, and poster overlays (169af52)
- Multi-feature improvements — PATCH settings, sunset saved mode, poster overlays, and bug fixes (f19fc81)
🐛 Bug Fixes
- (sunset) Resolve queue persistence, label ID resolution, poster overlays, and settings race condition (d641ab2)
- Clear all bypasses rate limiter and show-level preview displays correctly (a880ba4)
2.3.1-rc.2 - 2026-03-28
🐛 Bug Fixes
- (ci) Use consistent DISCORD_WEBHOOK_URL env var name (23aa85a)
- Resolve snooze queue, batch progress, sparkline, and approval queue bugs (f451886)
- (dashboard) Wrap VChart sparklines in explicit height containers (20468ae)
- (announcements) Correct GHCR registry URL typo (e49682b)
2.3.0 - 2026-03-28
🚀 Features
- (enrichment) Add media server label enrichment (2f5e911)
- (ui) Improve poster card readability and visual polish (3127155)
- (ui) Add announcement banner system and normalize localStorage keys (e4b6edf)
🐛 Bug Fixes
- (deps) Resolve node-forge and happy-dom security vulnerabilities (d47680a)
- (events) Use structured JSON marshal for SSE, regex-based CSP nonce, sync.Map factory (8c887fe)
- (ci) Prevent root-owned node_modules from Docker bind mounts (5da7878)
- (ci) Pin Gitleaks version to v8.30.1 for Makefile parity (a20900b)
🛡️ Security
- Remove Dependabot version updates (743a93d)
- (deps) Upgrade Node.js 22→24 and remove corepack (c337fd8)
2.2.2-rc.1 - 2026-03-27
🚀 Features
🐛 Bug Fixes
- (lint) Remove invalid golangci-lint v2 config fields (dd107bc)
- (lint) Add config verify to all golangci-lint Makefile targets (eda7ea0)
- (ci) Use correct trivy-action version tag (eac53db)
- (site) Handle pnpm install in Cloudflare build environment (cf66833)
- (site) Fix pnpm detection in Cloudflare build (6985449)
- (site) Use Cloudflare's built-in pnpm instead of corepack (d69f42c)
- (site) Self-install pnpm when not available in build env (68cc05c)
- (site) Simplify build script — install pnpm unconditionally (2eb7481)
- (site) Update remaining GitLab references and fix link rewriting (7efefdf)
- (site) Correct Quick Start link path on landing page (31dc9ae)
- (site) Use neutral color for GitHub icon in RepoStats (b0b6b41)
- (ci) Lowercase GHCR repository name in release workflow (1d4217e)
2.2.1 - 2026-03-26
🐛 Bug Fixes
- (changelog) Reclassify feat(docs) commits as docs in git-cliff (3815406)
- (integrations) Use correct v-model binding for modal switches (2b14373) — reported by @tomislavf (#8)
2.2.0 - 2026-03-26
🚀 Features
- (collections) Multi-source collection deletion with approval grouping (7cae95f)
- (integrations) Add Tracearr integration support (a4a3e43) — reported by @tomislavf (#10)
🐛 Bug Fixes
- (library) Make Shows filter display seasons grouped by show (4ad6cae) — reported by @tomislavf (#9)
- (library) Improve shows/seasons UX across library management (71a779c) — reported by @tomislavf (#9)
- (ui) Misc UI fixes — filters, selection, score colors, deletion priority (9915978) — reported by @tomislavf (#9)
- (ui) Resolve poster dimming in deletion priority grid view (961a880) — reported by @tomislavf (#10)
- (library) Filter media type buttons by configured integrations (169959a) — reported by @tomislavf (#9)
- (engine) Exclude scoring factors when integrations are broken (e757024)
- (engine) Only count enricher errors toward capability failure (ae71000)
- (engine) Remove Layer 2 from RequestPopularityFactor (f7573c9)
- (seerr) Fix connection test and request count aggregation (cb4b4c9)
- (integrations) Add collection autocomplete for Jellyfin and Emby (e626b75) — reported by @tomislavf
- (tracearr) Use correct Public API endpoints verified from source (b4bf49f) — reported by @tomislavf
🛡️ Security
- Full codebase audit — security, docs, and code quality (5701438)
2.1.0 - 2026-03-24
🚀 Features
🐛 Bug Fixes
- (deletion) Clear queue on execution mode change (bfa5a21)
- (engine) Exclude inapplicable scoring factors from evaluation (420dfc9) — reported by @tomislavf (#6) (#7)
- (jellystat) Use x-api-token header instead of Authorization Bearer (42d9731) — reported by @tomislavf (#5)
🛡️ Security
- (deps) Pin all Docker images and eliminate curl-pipe-to-shell (04ab628)
- Comprehensive codebase audit (d07346f)
2.0.0 - 2026-03-24
🚀 Features
- (db) breaking Replace 1.x incremental migrations with 2.0 baseline schema (dbd9e3b)
- (integrations) Define capability interfaces for 2.0 (c4af106)
- (integrations) Add IntegrationRegistry with capability-based discovery (f78e2e5)
- (services) Add LibraryService with threshold resolution (6f75afe)
- (engine) Add pluggable scoring factors with ScoringFactor interface (93a5824)
- (integrations) Add pluggable enrichment pipeline (9ea631e)
- (engine) Extract reusable Evaluator from poller (1204bfc)
- (integrations) Implement WatchlistProvider and RequestProvider on clients (904b408)
- (services) Add AnalyticsService and WatchAnalyticsService with API routes (e328622)
- (routes) Add Library CRUD API endpoints (d2da99d)
- (integrations) Add plugin-style factory registration (6bb490e)
- (services) Add BuildIntegrationRegistry using factory+capability pattern (35bac22)
- (rules) Add rule impact preview with API endpoint (83417a1)
- (frontend) Replace ApexCharts with ECharts (Phase 3 start) (8900e4e)
- (frontend) Add DashboardCard component for analytics pages (f8e0b6e)
- (frontend) Add Insights page with three-tab layout (Phase 4) (dbed697)
- (frontend) Add Insights nav link and i18n keys (c64cff2)
- (migration) Add 1.x → 2.0 one-way data import (Phase 7) (cee90b7)
- (ui) Add CreatableCombobox component with create-on-type (5d802ce)
- (frontend) Add virtual scrolling to dashboard activity feed (da1fb43)
- (events) Add analytics_updated SSE event on preview cache refresh (65123a5)
- (frontend) Complete Phase 4 frontend restructuring (615ad0f)
- (frontend) Wire Phase 6 frontend UI to backend APIs (38cfa4b)
- (migration) Wire Phase 7 migration CLI, API, and frontend (1c03b82)
- (dashboard) Add score column, startup poll, deletion queue SSE, chart upgrades (a603e76)
- (insights) Redesign insights page with capacity-focused visualizations (d7f3fe9)
- (approval) Add per-cycle queue reconciliation and threshold-triggered engine runs (b52b43f)
- (deletion) Add grace period, snooze, and clear queue (Phase 3) (a2f6811)
- (ui) Always-visible deletion queue card with mode-specific empty states (9ad5f89)
- (deletion) Return dry-deleted approval items to pending status (dce5533)
- (rules) Add combined rule context endpoint and extract field definitions (6aaeef7)
- (rules) Add edit custom rules UI with card state-swap pattern (71aa48b)
- (ui) V-motion presets, virtual scrolling, disk group sparkline (8e27ef6)
- (ui) Replace disk group bar+sparkline with gauge arc (347f391)
- (ui) Add target/threshold pointer markers on gauge arc (417cca1)
- (ui) Gauge pulse fix, responsive disk group grid (93f768e)
- (integrations) Add Jellystat integration for Jellyfin analytics (22efe4a)
- (enrichment) Add enrichment observability and match rate logging (d02d236)
- (backup) Rework import modes to merge/sync with per-item sync (ef5791c)
- (backup) Add full-section import preview with field-level diffs (9151009)
- (backup) Add stepper import flow with inline diff view (9aa097a)
- (collections) Add collection deletion data model and Radarr resolver (7bf240a)
- (collections) Add collection expansion in poller and deletion pipeline (8e74e3a)
- (collections) Add collection enrichment from Plex, Jellyfin, and Emby (41472e6)
- (collections) Add collection indicators to frontend components (3dce7f3)
- (collections) Add integration settings toggle for collection deletion (ebd129d)
- (collections) Add collection context to notification digest (d59230a)
- (migration) Trigger engine run after 1.x → 2.0 migration (b6e7be3)
- (dashboard) Reorder queue cards — deletion first (c83ce18)
- Mode-aware sparkline with ghost series, evaluated band, pulse (4e173d0)
- (sonarr) Add show-level-only evaluation toggle (e2e138c) — reported by @tomislavf (#8)
- (collections) Multi-source collection deletion with approval grouping (7dbbbfc)
- (integrations) Add Tracearr integration support (13088bc) — reported by @tomislavf (#10)
- Migrate from GitLab to GitHub (0e11ecb)
- Migrate from GitLab to GitHub (9fc924b)
- (ui) Add CreatableCombobox component with create-on-type (1b78b18)
- (frontend) Add virtual scrolling to dashboard activity feed (c169605)
- (events) Add analytics_updated SSE event on preview cache refresh (a2dd0cf)
- (frontend) Complete Phase 4 frontend restructuring (7decba0)
- (frontend) Wire Phase 6 frontend UI to backend APIs (db534e1)
- (migration) Wire Phase 7 migration CLI, API, and frontend (234c6b4)
- (dashboard) Add score column, startup poll, deletion queue SSE, chart upgrades (c7bbda2)
- (insights) Redesign insights page with capacity-focused visualizations (05c25b8)
- (approval) Add per-cycle queue reconciliation and threshold-triggered engine runs (35617bc)
- (deletion) Add grace period, snooze, and clear queue (Phase 3) (6822971)
- (ui) Always-visible deletion queue card with mode-specific empty states (0ce2e72)
- (deletion) Return dry-deleted approval items to pending status (771ee12)
- (rules) Add combined rule context endpoint and extract field definitions (5504677)
- (rules) Add edit custom rules UI with card state-swap pattern (c693a9a)
- (ui) V-motion presets, virtual scrolling, disk group sparkline (0076e13)
- (ui) Replace disk group bar+sparkline with gauge arc (f67f70e)
- (ui) Add target/threshold pointer markers on gauge arc (7870189)
- (ui) Gauge pulse fix, responsive disk group grid (730ee1b)
- (integrations) Add Jellystat integration for Jellyfin analytics (fb1c12f)
- (enrichment) Add enrichment observability and match rate logging (647c779)
- (backup) Rework import modes to merge/sync with per-item sync (204d9e4)
- (backup) Add full-section import preview with field-level diffs (92f81f6)
- (backup) Add stepper import flow with inline diff view (ee30ad6)
- (collections) Add collection deletion data model and Radarr resolver (750def3)
- (collections) Add collection expansion in poller and deletion pipeline (ad89d2a)
- (collections) Add collection enrichment from Plex, Jellyfin, and Emby (8340d05)
- (collections) Add collection indicators to frontend components (78ef10f)
- (collections) Add integration settings toggle for collection deletion (dc5ba91)
- (collections) Add collection context to notification digest (856a5c4)
- (migration) Trigger engine run after 1.x → 2.0 migration (e957ffc)
- (dashboard) Reorder queue cards — deletion first (a6ccfd6)
- Mode-aware sparkline with ghost series, evaluated band, pulse (d94076c)
🐛 Bug Fixes
- (frontend) Complete overseerr to seerr rename in frontend (5ae3e16)
- (migration) Redesign 1.x → 2.0 migration workflow (e5249cb)
- (insights) Resolve chart color parsing and remove unusable charts (5a1dca4)
- (preview) Persist media cache to database for restart recovery (91531a4)
- (poller) Fix approval queue population and ClearQueue cross-contamination (6ba18d9)
- (poller) Use EventBus for run triggers and reset timer on settings change (9322636)
- (db) Merge media_cache migration into v2 baseline (4d572b0)
- (rules) Extract shared validation and fix Update() missing validation (fc7446f)
- Resolve goconst and prettier lint issues (5ac40e6)
- (rules) Remove global rules concept and add radio group component (21da2a1)
- (integrations) Fix error display, add enable toggle, remove unfinished features (a217649)
- (ui) Adaptive sparkline y-axis, label collision, date range sync (84c2222)
- (ui) Register GaugeChart in ECharts plugin (e3a70b7)
- (ui) Replace speedometer pointers with small triangle carets (b9bd4f8)
- (ui) Replace speedometer pointers with subtle arc nubs (46fe3e5)
- (ui) Space threshold markers on inner/outer edges of gauge arc (f7b7f25)
- (ui) Push outer threshold triangle further from arc edge (bfb2a84)
- (ui) Remove threshold triangle markers from gauge (88dac02)
- (ui) Use rgba for gauge pulse animation instead of oklch var (a539863)
- (enrichment) Aggregate watch data across all Jellyfin/Emby users and match by TMDb ID (4baecbc) — reported by @Thundernerd (#3)
- (enrichment) Wire Tautulli enricher via TMDb→RatingKey map (72ba1bf)
- (db) Add missing TableName() for MediaCache singleton (a2eb2e4)
- (rules) Fix CreatableCombobox dropdown in edit mode (d77e8be)
- (rules) Preserve enabled state when editing a rule (9f95829)
- (engine) Show run completion time instead of start time (dcdf120)
- (integrations) Resolve poster URLs against *arr base URL (d4b6582)
- (approval) Await engineFetchStats before fetching approval queue (023fbce)
- (enrichment) Aggregate episode watch data into parent series for Jellyfin and Emby (52a469a) — reported by @Thundernerd (#4)
- (migration) Persist 1.x scoring weights to scoring_factor_weights table (80770d1)
- (ci) Resolve noctx lint violations and Makefile CI parity (733cbdf)
- (site) Correct broken dashboard image reference (8a0c5ab)
- (ui) Use invisible pseudo-element for switch touch targets (9d3eb3e)
- (frontend) Resolve browser console errors and warnings (2b07205)
- (migration) Overhaul 1.x→2.0 migration safety and correctness (ea1be22)
- (dashboard) Move axisPointer cross config to tooltip (d04a85f)
- Add post-migration schema fixup for existing databases (569d7e7)
- (dashboard) Replace auto-refresh timer with SSE-driven updates (f983140)
- (notifications) Add dry-run digest subscription gate (0348ba1)
- (db) Resolve SQLite 'database is locked' errors with WAL mode (293ff6d)
- (ci) Use correct trivy image from ghcr.io (343f618)
- (deletion) Clear queue on execution mode change (ddb3575)
- (engine) Exclude inapplicable scoring factors from evaluation (9f8e677) — reported by @tomislavf (#6) (#7)
- (jellystat) Use x-api-token header instead of Authorization Bearer (dc4466e) — reported by @tomislavf (#5)
- (library) Make Shows filter display seasons grouped by show (d693205) — reported by @tomislavf (#9)
- (library) Improve shows/seasons UX across library management (2481a30) — reported by @tomislavf (#9)
- (ui) Misc UI fixes — filters, selection, score colors, deletion priority (f7ee6ca) — reported by @tomislavf (#9)
- (ui) Resolve poster dimming in deletion priority grid view (b1c4c5b) — reported by @tomislavf (#10)
- (library) Filter media type buttons by configured integrations (63a306b) — reported by @tomislavf (#9)
- (engine) Exclude scoring factors when integrations are broken (e73b3f4)
- (engine) Only count enricher errors toward capability failure (41f96b0)
- (engine) Remove Layer 2 from RequestPopularityFactor (40554e6)
- (seerr) Fix connection test and request count aggregation (d8fde58)
- (integrations) Add collection autocomplete for Jellyfin and Emby (51293e4) — reported by @tomislavf
- (tracearr) Use correct Public API endpoints verified from source (b6fe029) — reported by @tomislavf
- (changelog) Reclassify feat(docs) commits as docs in git-cliff (93f5017)
- (integrations) Use correct v-model binding for modal switches (e19149a) — reported by @tomislavf (#8)
- (lint) Remove invalid golangci-lint v2 config fields (9d7cf60)
- (lint) Add config verify to all golangci-lint Makefile targets (1ee653f)
- (ci) Use correct trivy-action version tag (66bfb7b)
- (site) Handle pnpm install in Cloudflare build environment (3eec191)
- (site) Fix pnpm detection in Cloudflare build (f40c0af)
- (site) Use Cloudflare's built-in pnpm instead of corepack (22792dd)
- (site) Self-install pnpm when not available in build env (ae25d56)
- (site) Simplify build script — install pnpm unconditionally (4bb3eba)
- (site) Update remaining GitLab references and fix link rewriting (4ed55ef)
- (site) Correct Quick Start link path on landing page (89bca13)
- (site) Use neutral color for GitHub icon in RepoStats (20fde09)
- (site) Remove npm install -g pnpm from site build script (20733f1)
- (frontend) Complete overseerr to seerr rename in frontend (2e10f85)
- (migration) Redesign 1.x → 2.0 migration workflow (43c3a1e)
- (insights) Resolve chart color parsing and remove unusable charts (729a7e8)
- (preview) Persist media cache to database for restart recovery (5240db4)
- (poller) Fix approval queue population and ClearQueue cross-contamination (10cb4fb)
- (poller) Use EventBus for run triggers and reset timer on settings change (1ec2582)
- (db) Merge media_cache migration into v2 baseline (54b7330)
- (rules) Extract shared validation and fix Update() missing validation (92358a9)
- Resolve goconst and prettier lint issues (b85226d)
- (rules) Remove global rules concept and add radio group component (36956f6)
- (integrations) Fix error display, add enable toggle, remove unfinished features (529acfa)
- (ui) Adaptive sparkline y-axis, label collision, date range sync (6acdebe)
- (ui) Register GaugeChart in ECharts plugin (efb9eea)
- (ui) Replace speedometer pointers with small triangle carets (ccd08e7)
- (ui) Replace speedometer pointers with subtle arc nubs (0d72a24)
- (ui) Space threshold markers on inner/outer edges of gauge arc (7c46460)
- (ui) Push outer threshold triangle further from arc edge (abe5849)
- (ui) Remove threshold triangle markers from gauge (75fb0d9)
- (ui) Use rgba for gauge pulse animation instead of oklch var (69a1c9c)
- (enrichment) Aggregate watch data across all Jellyfin/Emby users and match by TMDb ID (e3fb52a) — reported by @Thundernerd (#3)
- (enrichment) Wire Tautulli enricher via TMDb→RatingKey map (1da5b75)
- (db) Add missing TableName() for MediaCache singleton (0dec246)
- (rules) Fix CreatableCombobox dropdown in edit mode (cfb197f)
- (rules) Preserve enabled state when editing a rule (01980a7)
- (engine) Show run completion time instead of start time (af4d915)
- (integrations) Resolve poster URLs against *arr base URL (42807f9)
- (approval) Await engineFetchStats before fetching approval queue (439910d)
- (enrichment) Aggregate episode watch data into parent series for Jellyfin and Emby (9bf19f7) — reported by @Thundernerd (#4)
- (migration) Persist 1.x scoring weights to scoring_factor_weights table (207670d)
- (ci) Resolve noctx lint violations and Makefile CI parity (cd64073)
- (site) Correct broken dashboard image reference (cad7a50)
- (ui) Use invisible pseudo-element for switch touch targets (9b73a6c)
- (frontend) Resolve browser console errors and warnings (febdad8)
- (migration) Overhaul 1.x→2.0 migration safety and correctness (acda87b)
- (dashboard) Move axisPointer cross config to tooltip (e937dc6)
- Add post-migration schema fixup for existing databases (416c046)
- (dashboard) Replace auto-refresh timer with SSE-driven updates (83080a6)
- (notifications) Add dry-run digest subscription gate (dec21f3)
- (db) Resolve SQLite 'database is locked' errors with WAL mode (10ec06f)
- (ci) Use correct trivy image from ghcr.io (a574858)
🛡️ Security
- (phase-8) Complete Phase 8 polish, testing & documentation (a7f68fa)
- (security) Add pre-release OWASP ZAP baseline for v2.0.0 (2adadcf)
- (deps) Pin all Docker images and eliminate curl-pipe-to-shell (4775b59)
- Comprehensive codebase audit (8ad40b2)
- Full codebase audit — security, docs, and code quality (b6eadc1)
- (phase-8) Complete Phase 8 polish, testing & documentation (2bbce07)
- (security) Add pre-release OWASP ZAP baseline for v2.0.0 (14a28fc)
Refactor
- (integrations) breaking Rename overseerr → seerr (ebe7cc5)
1.10.0 - 2026-03-18
🚀 Features
- (approval) Add dismiss and clear queue endpoints (2eae821)
- (approval) Allow force-delete in dry-run mode (29a54b2)
- (preview) Remove deleted items from library in real-time via SSE (0c94fcf)
- (preview) Add queue status indicators to library and deletion priority views (8982f0d)
- (deletion) Add queue cancellation and listing API (f1a1bbe)
- (ui) Split approval queue into separate approval and deletion cards (1894f92)
- (ui) Replace poster queue status pill with full-width banner (01103f1)
🐛 Bug Fixes
- (security) Override h3 to >=1.15.6 for SSE injection and path traversal CVEs (218da0e)
1.9.0 - 2026-03-17
🚀 Features
- (rules) Add rule filter and manual force-delete (59fa846)
- (library) Add Library Management page with force-delete UI (ba0affd)
- (library) Replace pagination with virtual scrolling and add sort controls (d62caf4)
- (settings) Expand poll interval options from 1m to 24h (4a12385)
🐛 Bug Fixes
- (rules) Use model-value for checkbox state in rule filter (89599c4)
- (rules) Add selection UI to both grid and table view modes (6e992da)
- (integrations) Map tmdbId, originalLanguage, and releaseDate from *arr APIs (fcba26a) — reported by @avikingr (#2)
- (scoring) Normalize all ratings to 0–10 scale (11cf6de)
- (library) Use UiDialog instead of missing UiAlertDialog for force-delete confirmation (03e914d)
1.8.0 - 2026-03-16
🚀 Features
- (ci) Add Discord release notification and settings tab persistence (ee5b8f7)
🐛 Bug Fixes
- (ci) Remove static release header so git-cliff notes are used (81fcd7f)
- (ui) Set page title to Capacitarr (603a0c0)
1.7.0 - 2026-03-16
🚀 Features
- (backup) Overhaul import robustness with upsert, validation, and interactive resolution (17d2915)
🐛 Bug Fixes
- (ui) Use modelValue instead of checked for reka-ui v2 Checkbox (2eb84e9)
- (login) Remove misleading placeholder text from login form (5c2cf71)
🛡️ Security
- Comprehensive code audit — service layer, modularization, consistency (31776b7)
- (security) Update ZAP DAST baseline to 2026-03-16 (87b24d0)
1.6.0 - 2026-03-16
🚀 Features
- (disk-groups) Add user-defined disk size override (31c8f9c)
- (dashboard) Add contextual empty states and integration error banner (07929f8)
- (rules) Add PB (petabyte) unit option for disk size override (248a889)
- (disk-groups) Extract DiskGroupService, add integration badges, fix orphan cleanup (fda8c00)
🐛 Bug Fixes
- (dashboard) Compact override input, auto-save clear, error banner redesign (12f86cb)
- (dashboard) Move error banner to app layout, verify hero cards (650c155)
- (settings) Fix GORM nil handling when clearing disk size override (2b4bb01)
- (rules) Fix override clear not updating UI without page refresh (5ea1aac)
- (ui) Move integration error banner below page titles (a415390)
- (poller) Clean orphan disk groups when all integrations fail (f4c134b)
- (integrations) Clear stale error on update, refresh banner via SSE (b746345)
1.5.3-rc.3 - 2026-03-15
🐛 Bug Fixes
- (site) Resolve mermaid diagram overlap on pages with multiple diagrams (34a8cca)
- (site) Replace ELK layout engine with dagre to fix diagram overlap (67af9fd)
- (poller) Normalize Windows backslash paths from *arr APIs (75839c2)
1.5.2 - 2026-03-10
🐛 Bug Fixes
- (docs) Remove breakout layout, fix edge label pills, split large diagrams (d7719cf)
1.5.1 - 2026-03-10
🐛 Bug Fixes
- (site) Rename ProseCode to ProsePre for Nuxt UI v4 and strip duplicate headings (64a352e)
- (site) Scale mermaid diagrams to full width and remove duplicate descriptions (16aab9e)
- (site) Strip inline SVG dimensions for responsive mermaid diagrams (3af3462)
- (security) Add nonce-based CSP for inline scripts (7769920)
- (site) Restore code block styling and add mermaid breakout layout (c0eed01)
1.5.0 - 2026-03-10
🚀 Features
- (deletion) Add SSE deletion progress events (15e9741)
- (ui) Add real-time deletion progress indicator and sparkline updates (ec52ce1)
- (notifications) breaking Add Apprise support and remove Slack (fd255df)
- (ui) Add Apprise notification channel support and remove Slack (5100fd1)
- (backup) Add settings export/import and remove rules portability (ddd1c04)
- (ui) Add settings backup/restore and remove rules import/export (39bcf31)
- (enrichment) Add watchlist/favorites enrichment from Plex, Jellyfin, and Emby (2ecb823)
- (rules) Add collection name rule field with autocomplete (81a35ef)
- (pwa) Add Progressive Web App support for mobile home screen install (02ca05a)
- (ui) Add per-integration scoring weight override mockup (b245527)
- (site) Add sidebar navigation ordering and fix security/ naming conflict (77da624)
🐛 Bug Fixes
- (ci) Increase Node.js heap for pages job (6dd994e)
- (site) Badge spacing, grouping, and duplicate heading on docs page (1f3afb4)
- (site) Center badges, add donation hearts, add custom favicon (933ebbe)
- (site) Badge centering, duplicate header, favicon 404 (fa0dac3)
- (engine) Attribute approval-mode deletions to engine run stats (98a81c9)
- (ci) Harden lint config, add typecheck, make security scans blocking (b67d388)
🛡️ Security
- (docker) Harden Alpine runtime image (25dc821)
- (security) Add security headers, scanning tools, response limits, clean tests (df9b6e8)
- (security) Add Trivy image scan, security regression tests, test server hardening (922bbdf)
- (security) Add OWASP ZAP DAST scanning (51c268b)
- (security) Add ZAP baseline report, DAST section, security badge (d2877d1)
- (site) Auto-discover docs and sync root project files (0fa9474)
1.4.0 - 2026-03-09
🚀 Features
- (site) Add mermaid rendering, search, and screenshot refresh (eb9c5d6)
🐛 Bug Fixes
- (auth) Align cookie path with BASE_URL for subdirectory deployments (29a9a9a)
- (ui) Sort seasons by number instead of lexicographically (9085445)
1.3.0 - 2026-03-08
🚀 Features
- (ui) Add donation popover to app navbar (593fb69)
- (ui) Use random cat/dog icon for donation button (71ca3eb)
🐛 Bug Fixes
- (site) Badges, about section, footer icons, donation popover (4bb429a)
- (auth,approval) BASE_URL login redirect and approval queue threshold clearing (e5a34ac)
- (ci) Disable BuildKit provenance to remove unknown/unknown manifest entry (e61a090)
1.2.2 - 2026-03-08
🐛 Bug Fixes
- (ci) Use alpine+crane for Docker mirror jobs (b3548e0)
1.2.1 - 2026-03-08
🐛 Bug Fixes
- (ci) Use POSIX sh for Docker CI scripts (02eab40)
1.2.0 - 2026-03-08
🚀 Features
- (ci) Add multi-registry Docker publishing to Docker Hub and GHCR (fa3e1ac)
🐛 Bug Fixes
- (docs) Constrain shields.io badge sizing on pages site (e9f6579)
- Runtime subdirectory reverse proxy support via HTML rewriting (a1668f2)
- (frontend) Resolve subdirectory proxy cosmetic issues (95c974a)
1.1.0 - 2026-03-08
🚀 Features
- Fix engine mode switching, add social links, notification triggers, shields.io badges (6494d44)
1.0.0 - 2026-03-07
🚀 Features
- (notifications) Make in-app notifications always-on (735c234)
- Add features and polish (Phase 3) (5705d53)
- Complete 1.0.0 pre-release cleanup (phases 2-5) (08ed33f)
- Complete all remaining plan steps (6b9907a)
🛡️ Security
- 1.0.0 pre-release cleanup (14cae5d)
1.0.0-rc.12 - 2026-03-07
🐛 Bug Fixes
- (notifications) Gate approval-mode cycle digest by OnApprovalActivity (53434a9)
1.0.0-rc.11 - 2026-03-07
🚀 Features
- (notifications) Add event system foundation for notification overhaul (9a8e319)
- (notifications) Implement notification overhaul (Phase 1.6-7) (a50a8e6)
- (notifications) Add approval activity toggle and toggle descriptions (a5e7cf6)
🐛 Bug Fixes
- (frontend) Remove @click.prevent on MediaPosterCard component emits (a6aafb4)
- (notifications) Persist OnApprovalActivity toggle and report freed bytes in approval mode (94a4121)
🛡️ Security
- (plans) Mark service layer remediation plan as complete (Phases 7-10) (b4a3d9d)
1.0.0-rc.9 - 2026-03-07
🚀 Features
- (ui) Add NumberField and Combobox shadcn-vue components (805d893)
- (rules) Add custom rules import/export (b3e8a35)
🐛 Bug Fixes
- (ui) Use zone colors on threshold slider instead of primary gradient (50be5e4)
- (ui) Raise slider thumb z-index above zone color overlays (36c8f94)
- (ui) Correct target thumb selector and enlarge threshold thumbs (1669982)
- (security) Upgrade Go 1.25 → 1.26 to resolve 4 stdlib vulnerabilities (3ab190c)
⚡ Performance
- (ci) Add Docker volume caching for Go and Node dependencies (7709e63)
🛡️ Security
- Add make ci gate to release script (1ad7882)
1.0.0-rc.8 - 2026-03-06
🐛 Bug Fixes
- (lint) Use NewRequestWithContext in test files (277f558)
1.0.0-rc.7 - 2026-03-06
🚀 Features
- Add poster URL plumbing for grid view (Phase 1) (5f01060)
- (frontend) Add grid/list view toggle with poster cards (Phase 2) (72eedd8)
- (frontend) Add selection checkboxes and season badges to grid cards (Phase 3) (7fbcd58)
- (frontend) Add season popover for show cards in grid view (Phase 3) (dcc2e9d)
- (frontend) Add deletion line divider and season popovers to preview grid (50ecccb)
- (enrichment) Add Plex as watch history enrichment source (31c44b4)
- (version) Add Check Now button to update popup (bf72c7a)
🐛 Bug Fixes
- (frontend) Reposition card overlays to avoid title overlap (605a817)
- (frontend) Snoozed grid unsnooze actions and preview infinite scroll (2fa8bf2)
1.0.0-rc.6 - 2026-03-06
🚀 Features
- (events) Add event bus infrastructure and 34 typed event structs (b284237)
- (events) Add activity persister subscriber (f830168)
- (services) Add core service layer — ApprovalService, DeletionService, AuditLogService, EngineService (101082f)
- (services) Add secondary services and registry (6b91961)
- (events) Add SSE broadcaster for real-time event streaming (8905f0e)
- Add frontend SSE composable, activity pruning to 7-day retention (86002a9)
- (notifications) Add event bus subscriber for notification dispatch (d1a9cc5)
- (frontend) Update types and API endpoints for new schema (d00c7ad)
- (frontend) Add icon/color mapping for all 34 event types (1e35936)
- (approval) Add section jump navigation to approval queue (197d716)
🐛 Bug Fixes
- (events) Fix deadlock in concurrency stress test (00b50c1)
Refactor
- (db) breaking Replace 18 incremental migrations with single clean baseline (fafa409)
1.0.0-rc.5 - 2026-03-05
🚀 Features
- (navbar) Always-visible update icon with breathing animation (b0c0980)
🐛 Bug Fixes
- (test) Resolve flaky test failures in routes package (14d3e08)
- (dashboard) Shrink activity scroll area to match sparkline height (65ebcfa)
- (dashboard) Constrain activity scroll area height properly (18f6579)
- (plex) Use getRandomValues for UUID in non-secure contexts (d281d5a) — reported by @wulfe (#1)
1.0.0-rc.4 - 2026-03-05
🚀 Features
- (version) Add update check endpoint with 6h cache (2adf50c)
- (navbar) Add update check indicator and Serenity slogan (01fc236)
- (engine) Track deleted count per run with run-stats-ID approach (a00b42e)
- (engine) Add history endpoint, remove audit/activity (7b6f708)
- (dashboard) Consolidate sparklines onto engine history data (ba92422)
- (approval) Block approvals when deletions disabled, add orphan recovery (cf9a3e5)
🐛 Bug Fixes
- (deps) Override svgo and tar to resolve pnpm audit vulnerabilities (7c20356)
- (data) Preserve disk group thresholds during data reset (ea7f73b)
- (frontend) Replace bare catch blocks with console.warn logging (b653de0)
- Use Find+Limit instead of First for optional queries (0c51f8b)
- (dashboard) Use dateRange dropdown for sparkline labels and improve color contrast (9c03735)
- (navbar) Inline Serenity SVG so currentColor inherits text color (837c651)
- (dashboard) Display sparkline timestamps in browser local timezone (43edd0d)
- Sparkline accuracy, tooltips, and visual quality (e48d60c)
1.0.0-rc.3 - 2026-03-05
🐛 Bug Fixes
- Resolve golangci-lint issues and align local linting with CI (975bf6d)
1.0.0-rc.2 - 2026-03-05
🚀 Features
- (ui) Truncate API keys and reposition effect badge (23a98e4)
- (auth) Add auth status endpoint and first-login setup UX (ec7f68a)
- (ui) Add DateDisplay component with date toggle and settings control (c69af7e)
- (plex) Reimplement OAuth flow client-side and remove backend proxy (a239c73)
- (rules) Add lastplayed, requestedby, incollection, watchedbyreq rule fields with date-aware operators (75b787d)
- (approval) Add approval queue with approve/reject endpoints and UI column (d707eaf)
- (approval) Add snooze mechanism with configurable duration and auto-clear (48dab85)
- (approval) Add snooze states and undo UI for approval workflow (8fa13f5)
- Readarr full support, fix undo/run-now/capacity-chart, approval card enhancements (23a95ff)
- (approval) Move checkboxes to right of snooze icon and add season-level selection (392b8f8)
- (approval) Add approve/snooze buttons to individual season rows (e045bc8)
- (engine) Prefer season-level audit entries over show-level for granular approval (148268c)
- (site) Add GitLab repo stats widget to header (df19889)
🐛 Bug Fixes
- Resolve TypeScript strict mode issues from Phase 7 review (be6399d)
- (i18n) Disable optimizeTranslationDirective to suppress deprecation warning (8a45e67)
- (rules) Include lastplayed in conflict detection and map date-aware operators (3c76126)
- (rule-builder) Replace combobox with free-text input and suggestion dropdown (8a5a26f)
- (settings) Group exact dates toggle with timezone and clock format (2f83b52)
- (approval) Reorder v-if chain to check snooze before pending approval (9a8fe97)
- (approval) Simplify snooze display to compact icons without timestamp (720bb22)
- (rules) Skip snoozed items when calculating deletion line index (14d25ee)
- Normalize dry_run to dry-run across frontend and backend (6f7bd8c)
- (settings) Show masked API key placeholder when key exists but is hashed (5b2002e)
- Standardize error responses, fix cache lifecycle, improve error logging (77ce154)
- (approval) Show season approve/snooze buttons and align size column (87f13e3)
- Correct site and docs content accuracy (e116e51)
- (site) Replace Nuxt UI Docs TOC link with GitLab repo link (e7c262d)
1.0.0-rc.1 - 2026-03-03
🐛 Bug Fixes
- (deps) Update golang.org/x/net to v0.51.0 (GO-2026-4559) (164d22d)
- Include package-lock.json and frontend version in release script (37eabc2)
0.1.2 - 2026-03-03
🐛 Bug Fixes
- (ci) Add release_notes.md to .gitignore (3bc13cc)
0.1.1 - 2026-03-03
🐛 Bug Fixes
- (ci) Use goreleaser v2 hook syntax (strings, not maps) (e1db455)
0.1.0 - 2026-03-03
🚀 Features
- Complete Phase 2 Core Backend Engine (7f5ec46)
- Complete Phase 3 Data Aggregation & Logic (e9de2cd)
- Complete Phase 4 Frontend Foundation (cbbdceb)
- Complete Phase 5 Premium Data Visualization (9947f82)
- Complete Phase 6 Deployment and multi-stage container (3c04908)
- Complete Phase 1 Real Data (e2b2bfe)
- (db) Replace AutoMigrate with Goose migration framework (f3b296b)
- Add reverse proxy & auth header support (628f3e8)
- Add configurable poll interval and restructure settings into tabs (c577844)
- (auth) Add password change endpoint (13e8b89)
- (auth) Add API key authentication support (b7aae55)
- Wire integrations enrichment and add service-specific rule fields (ecab144)
- (audit) Add show/season grouping with collapsible tree view (e26b848)
- (ui) Comprehensive visual design polish (b0897d9)
- (settings) Add per-integration contextual help (691ee23)
- Add branded splash screen during app load (30fd8ce)
- Add version display in navbar and API version endpoint (4fc3b8b)
- (settings) Refactor into 4 tabs with Advanced and Security (157d2fc)
- (navbar) Add engine control popover with mode toggle + run now (150ef05)
- Add Readarr, Jellyfin, and Emby integration support (acebf60)
- (engine) Redesign indicator to separate mode from status (08ab89d)
- (engine) Persist engine run stats to SQLite (8aec436)
- Implement Phase 1 cascading rule builder (151c466)
- (rules) Add value autocomplete and conflict indicators (Phase 2 + 3) (7762f2f)
- (rules) Add 'takes effect on next run' note to card description (648b869)
- (rules) Show service type in rule list (e.g. 'Radarr: selene') (6fbfa52)
- Add search and filter capabilities to Live Preview and Audit Log (bfe1b43)
- (rules) Improve effect color distinction with wider spectrum and emoji icons (4eca960)
- (tables) Add sticky headers and sortable columns to preview and audit tables (d77fe3b)
- Move execution mode and tiebreaker to settings, add preset descriptions (4bc8a92)
- (preview) Add deletion priority line and disk context to live preview (298211f)
- (settings) Add clear all scraped data button to Advanced tab (8c95a08)
- (ui) Increase navbar opacity, rename Availability to Series Status, add About popover (549c249)
- (dashboard) Reorder layout, enhance engine activity card (3a54e10)
- (dashboard) Add lifetime stats scorecards with cumulative counters (2374f8b)
- Remove item limits, add progressive scroll, wire Jellyfin/Emby enrichment (697b1b5)
- (ui) Add tagline to navbar brand (a94a8dd)
- (security) Add rate limiting to login endpoint (6c8f63c)
- (logging) Add component tags and structured error fields to all slog calls (16c20fb)
- (logging) Add comprehensive debug logging to engine, integrations, and cache (6b395cf)
- (logging) Add request ID generation, propagation, and startup config logging (3c7141d)
- (api) Add cleanup history endpoint for sparkline chart (83beb40)
- (ui) Add cleanup sparkline chart to dashboard engine activity card (4222db9)
- (a11y) Add ARIA labels, focus-visible styles, and semantic landmarks (f7b075c)
- (ui) Add rule order disclaimer and navbar language selector (e117c02)
- (i18n) Add 18 new language translations and complete existing ones (1533d57)
- Complete all remaining plan items (344ae48)
- UI polish pass — conflict detection, connection banner, i18n, and UX improvements (dd7a5d1)
- Polish pass round 2 — deletion toggle fix, about card, backup docs (855b222)
- Comprehensive UI polish pass (be538ad)
- (site) Replace MkDocs with Nuxt UI v4 project site (5f97a4a)
- (site) Complete project site with visual polish and custom domain support (f79562c)
- Add linux/arm64 multi-arch Docker support (ad85fc7)
🐛 Bug Fixes
- (poller) Add atomic concurrency guard to prevent overlapping poll runs (edf9769)
- (db) Fix baseline migration for existing databases (64ae743)
- (fonts) Use @fontsource/geist-sans and geist-mono instead of geist (aea30a7)
- (ui) Fix score bars, slider track, card borders, and sparkline colors (b41268c)
- (ui) Comprehensive visual polish overhaul (a38f44e)
- Resolve broken design system and add touch support (2501d99)
- (toast) Raise z-index to z-100 to render above dialogs (8800fdc)
- Safety guards and UX feedback fixes (94b52ec)
- Engine mode switch, overseerr error msg, and follow-up fixes (74a8f41)
- (db) Add goose annotations to migration 00005 (2ee5c66)
- (rules) Add rule numbers and type prefix to service dropdown (7e17199)
- (preview) Improve show/season grouping and left-align season chevron (9734aa7)
- (preview) Hide show entries with no seasons in preview (068cb84)
- (preview) Collapse seasons by default in live preview (ceb29bd)
- (poller) Deduplicate audit log entries across engine runs (5b5bb86)
- (audit) Move season chevron next to title, matching live preview layout (5e0444b)
- (ui) Unify disk group color logic between dashboard and scoring engine (45b22bb)
- (preview) Dynamic item limit based on bytesToFree (2b8498b)
- (auth) Increase bcrypt cost to 12 for stronger brute-force resistance (99d4504)
- (auth) Prevent first-user bootstrap race condition (de1fb3e)
- (security) Hash API keys instead of storing plaintext (dffe869)
- (security) Sanitize error responses, add input validation and warnings (9a646f6)
- (frontend) Eliminate all any types with proper TypeScript interfaces (159b18d)
- (frontend) Remove console.error statements from production code (75994b8)
- (css) Eliminate !important overrides using specificity (91cbbc0)
- (lint) Resolve all ESLint warnings and errors (3203bf8)
- (ui) Update about card with correct repo link, author, and version info (787e6fd)
- (i18n) Correct langDir path for @nuxtjs/i18n module (170ef19)
- Align help page factor name with rules page slider label (aa945a8)
- Mask integration API keys on edit, preserve on save (cd103ff)
- Show masked API key as text in edit modal, clear on focus (f303671)
- Add debug logging to rule creation, ensure new rules enabled by default (c295adf)
- Ensure rule value sent as string, use debug log level for validation errors (4f66638)
- Add log level dropdown, deletion safety status, combobox UX improvements (0af06c3)
- Deletion safety button shows correct state-dependent text and variant (d9b5029)
- Improve deletion safety toggle language (5bdce0d)
- Prepend 'Current status:' to deletion safety messages (57aa2db)
- Wrap deletion toggle to prevent visual flip before confirmation (6a49dd6)
- Deletion toggle uses @update:checked with nextTick for dialog (91af28b)
- (ui) Use model-value instead of checked for UiSwitch components (cf57e30)
- (rules) Conflict detection should not flag rules on different fields (b2957ea)
- Use 'Series Status' (with space) for score factor display name (44e87f4)
- Revert popover/dropdown to opaque bg, add CSS Ukraine flag to about card (adc51a8)
- Notification popup scrolling — replace UiScrollArea with native overflow-y-auto div, simplify Ukraine flag to emoji only (1014031)
- Use Twemoji SVG for Ukraine flag (bundled locally), replace UiScrollArea with native scroll div for notifications (19de2dd)
- Deep code audit — fix broken tests, remove dead code, correct docs (a3dfdfd)
- (css) Replace oklch relative color syntax with color-mix (9d21e37)
- (ci) Fix lint job failures and add tag pipeline rules (89f6904)
- (ci) Remove typecheck linter and pin golangci-lint version (d578bfa)
- (ci) Add git to changelog/goreleaser containers and fix job ordering (d3ee867)
- (ci) Use correct package manager for git-cliff (Debian) and add GIT_DEPTH: 0 (628a73d)
- (ci) Migrate golangci-lint config to v2 format (9d9fa4f)
- Resolve all ESLint errors and warnings (c5f4d6e)
- Add commit preprocessor to normalize git revert format (d78b3fa)
- (ci) Create embed placeholder for Go jobs and normalize revert commits (6e40594)
- (backend) Resolve all 105 golangci-lint v2 issues (63f4f1e)
- Add go:embed placeholder to make check target (e917633)
- (ci) Remove -race flag from Go tests and add vue as dev dependency (c79462e)
🛡️ Security
- Add GitLab CI pipeline with lint, test, build, and security stages (e544a68)
◀️ Revert
- Fix: deletion toggle uses @update:checked with nextTick for dialog (e530030)