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

  • Migrate from GitLab to GitHub (73ea246)
  • Migrate from GitLab to GitHub (e390302)

🐛 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

  • (sonarr) Add show-level-only evaluation toggle (1949a90) — reported by @tomislavf (#8)

🐛 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)