What's Changed
- fix(migration-073): purge orphaned rows before table recreation (d0c4894)
- fix(quick-6): flush stdout after each migration upgrade() call (21dd040)
- fix(quick-5-01): rewrite migration 067 using idempotent 048/073 pattern (69a09ce)
- fix(quick-4): add ondelete="CASCADE" to DeleteArchiveJob.repository_id ForeignKey (0ba9675)
- feat(quick-4): add migration 073 with ON DELETE CASCADE for delete_archive_jobs FK (732468f)
- fix(quick-3): translate untranslated strings in es.json (f1a9bf3)
- fix(quick-3): translate untranslated strings in de.json (866f8f0)
- chore: fix test (45a17ae)
- docs(quick-2): complete add-missing-localisation-to-python-api-f plan (f590eda)
- feat(quick-2): migrate all hardcoded HTTPException detail strings to locale key dicts (e5edb64)
- feat(quick-2): add missing i18n locale keys for all backend API error sections (68ed953)
- chore: move tests (c86733d)
- chore: fix backend tests (0930b08)
- style: apply Prettier formatting to frontend components and tests (30b4e37)
- fix(06-01): migrate borg_errors.py and backup_service.py raw English paths to locale keys (4470022)
- feat(06-02): translate JSON key string error_message in RestoreJobCard Alert blocks (2ced875)
- test(06-02): add failing tests for JSON key string error_message in RestoreJobCard (3ee8b14)
- fix(06-01): remove raw-stderr ternary in restore_service.py line 451 (ab0c1c9)
- feat(05-03): add real German translations for 12 placeholder backend.* keys in de.json (17af911)
- feat(05-03): add real Spanish translations for 12 placeholder backend.* keys in es.json (52a3fe7)
- fix(05-02): add 17 missing keys to es.json and de.json for locale parity (fbdbdbc)
- feat(05-01): produce Phase-5-only de.json with 2047 keys matching committed en.json (d29894d)
- chore(05-02): track scripts/check-locale-parity.js in git (c7eb039)
- feat(05-01): produce Phase-5-only es.json with 2047 keys matching committed en.json (1195505)
- feat(05-02): add locale parity check step to test-frontend CI job (6e8ae4f)
- feat(05-02): add check:locales npm script to frontend/package.json (3005e91)
- feat(04-05): migrate 13 raw English message fields in ssh_keys.py to locale key strings (f2da6ee)
- fix(04-06): migrate settings.py/filesystem.py/scripts_library.py message fields to locale keys (a0dc603)
- feat(04-06): add backend.success.filesystem and backend.success.scripts locale domains (02df27f)
- feat(04-04): migrate service layer to json.dumps key format; update ErrorDetailsDialog (6c2e47f)
- feat(04-04): add backend.errors.service locale domain with 13 keys (1005aff)
- feat(04-03): migrate remaining 9 API files to translation key dict format (538b0b8)
- feat(04-03): add new locale keys for archives, mounts, activity, filesystem, browse, packages, notifications, scripts domains (26ee565)
- feat(04-02): migrate ssh_keys.py and settings.py HTTPException.detail strings to translation keys (be9b834)
- feat(04-02): add SSH and settings locale keys to all three locale files (cc464e3)
- feat(04-01): migrate restore.py and schedule.py HTTPException.detail strings to translation keys (082bfcc)
- feat(04-01): add 11 new restore and schedule locale keys to all 3 locale files (3b52803)
- feat(03-04): migrate 8 remaining raw English HTTPException.detail strings in repositories.py (946a628)
- feat(03-04): add 6 new backend.errors.repo locale keys for gap closure (ae2ce37)
- feat(03-03): migrate repositories.py user-facing HTTPException.detail strings to translation keys (f43b838)
- feat(03-03): add 13 new backend.errors.repo and backend.success.repo locale keys (5cf9a79)
- fix(03-01): migrate remaining inactiveUser strings in security.py to translation keys (243140e)
- feat(03-01): migrate security.py and add notEnoughPermissions locale key (8ff085a)
- feat(03-02): migrate backup.py user-facing strings to translation keys (0dd52b0)
- feat(03-01): migrate auth.py detail and message strings to translation keys (ebfb2bd)
- feat(02-01): enable missingKeyHandler in i18n.ts for development key detection (787e787)
- feat(02-01): add backend translation namespace to all three locale files (1c04120)
- fix(01-04): remove hardcoded English third-position fallbacks from stderr assignments (0ef78fc)
- fix: resolve react-hooks/exhaustive-deps lint warnings (545cbaa)
- chore: prettier fix (dc77afd)
- test: initialize i18n in test setup and update test expectations for i18n (a677a69)
- test: update test expectations to match i18n locale values (0ec6ea5)
- feat(01-04): wire analytics transparency notice through i18next (5d2ac06)
- feat(01-03): add missing locale fallback keys for remaining error sites (c41f014)
- feat(01-02): add toast locale keys to en.json, es.json, and de.json (3d8b6d5)
- feat(01-03): wire translateBackendKey to all remaining detail and message sites (5f0fff9)
- feat(01-02): replace hardcoded toast strings and wire detail sites in 5 page components (2756f56)
- feat(01-01): add common.errors.unexpectedError to all locale files (3a035b4)
- feat(01-01): implement translateBackendKey utility (34099fc)
- test(01-01): add failing tests for translateBackendKey utility (e3fa3ec)
- chore: prettier fix (903c112)
- feat: add i18next dependencies and initialize i18n in app entry (90baea7)
- feat: add i18n translations to all remaining components (d7991db)
- feat: add Spanish and German translations with language switcher (08451c3)
- docs: add reverse proxy guide and remove unsupported BASE_PATH references (58426fa)
- fix: make migration 048 idempotent against extra ssh_connections columns (af21eb6)
- test: add unit tests for SSH connection deletion FK cleanup (367b055)
- fix: null out FK references before deleting an SSH connection (e7fafab)
- chore: prettier fix (9c0a278)
- fix: guard against stale ssh_connections_new table in migration 048 (de4b24e)
- fix: MQTT settings tab UI alignment and icon visibility (4932f77)
- fix: add missing mqtt_base_topic column to MQTT migration (5d51175)
- feat: add MQTT & Home Assistant integration (beta) (ef1739c)
- fix: update keyfile integration tests for new storage location and naming (811ac87)
- fix: update test selector to match added keyfile caption text (4c02a1f)
- docs: clarify /local is a convention, not a requirement (12654d5)
- feat: keyfile import/export improvements and notification fix (723df80)
- fix: add missing timeout settings to backup service test fixtures (e5e561c)
- fix: replace passlib with direct bcrypt calls for bcrypt 5.x compatibility (464e4bb)
- fix: bump coverage to 7.10.7 for pytest-cov 7.0.0 compatibility (c7e6335)
- fix: increase source size timeout and improve current file update frequency (e64adb8)
- chore(deps): bump bcrypt from 4.0.1 to 5.0.0 (6d2057e)
- chore(deps): bump psutil from 5.9.6 to 7.2.2 (ac1f18e)
- chore(deps): bump ajv from 6.12.6 to 6.14.0 in /frontend (5f9d156)
- chore: prettier fix (d609dd3)
- feat: track unique Matomo users via hashed installation ID (5e2c607)
- docs: fix misleading /local mount description in usage guide (570bc08)
- docs: restructure installation guide for clarity (1564886)
- feat: enable original location restore for SSH destinations and fix restore preview paths (1e5b678)
- fix: resolve TypeScript linting errors (91d011a)
- fix: sanitize SSH URLs in notifications to prevent @ mentions (738e5a1)
- chore(deps): bump @types/node from 24.10.1 to 25.2.3 in /frontend (#286) (1d10916)
- chore: add test (0af4ccb)
- feat: restrict break lock functionality to admin users only (0cfe8ec)
- fix: add pull-requests write permission for security workflow PR comments (5d99935)
- docs: add comprehensive OIDC/proxy authentication documentation (4e626d7)
- chore(deps): bump gunicorn from 23.0.0 to 25.1.0 (33b78ec)
- chore(deps): bump croniter from 1.4.1 to 6.0.0 (c551872)
- fix: backend test failures for auth status codes and mount integration (7ced091)
- test: add comprehensive tests to reach 70% branch coverage (db64451)
- fix: update auth tests and add coverage for uncovered components (442e55a)
- fix: update notification tests to match text badge format (f6f3f1b)
- fix: TypeScript linting errors in unused catch variables (7153d64)
- fix: logs not displaying for restore jobs with completed_with_warnings status (2a28dac)
- fix: add missing parameters to send_backup_success signature (5c8c53a)
- improve: enhance notification system with professional design and metrics (e3aef6a)
- Revert "refactor: replace rsync with SSHFS for local→SSH restore" (3af3d07)
- refactor: replace rsync with SSHFS for local→SSH restore (f98053f)
- fix: SSH key permission errors causing rsync/restore failures (d6d5cab)
- fix: remove double slash in SSH custom path preview (0bacfd4)
- fix: restore UI issues - missing slash in SSH paths and false failure on exit code 1 (9c9523e)
- improve: replace archive filter tabs with dropdown and hide SSH mounts for SSH repos (88a9398)
- fix: restore failing with 'Repository' object has no attribute 'ssh_connection_id' (82829ad)
- feat: add archive grouping, sorting, and filtering to improve navigation (2ddaa09)
- feat: add bypass_lock_on_list beta setting for concurrent read operations (4bb18ac)
- fix: prevent critical mount shadowing bug causing data loss on remote servers (f6f5bdc)
- feat: add proxy authentication support (SSO integration) (9b2ac5c)
- chore(deps-dev): bump jsdom from 27.0.1 to 28.1.0 in /frontend (92af899)
- chore(deps): bump structlog from 23.2.0 to 25.5.0 (70b4fb7)
- chore(deps): bump redis from 5.0.1 to 7.1.1 (951a26c)
- chore(deps): bump pytest-cov from 4.1.0 to 7.0.0 (1bc7d86)
- ci(deps): bump peter-evans/dockerhub-description from 4 to 5 (27787dd)
- ci(deps): bump actions/download-artifact from 4 to 7 (c19aaa6)
- ci: add Dependabot configuration for automated dependency updates (5133a31)
- chore(deps): bump cryptography from 44.0.1 to 46.0.5 (b39fb3a)
- fix: update dependencies to resolve security vulnerabilities (071f1ab)
- chore: update CI workflow to use new test_app.py path (5c73f03)
- chore: update CI workflow to use new test_app.py path (4708e19)
- chore: remove outdated documentation files (7f5db92)
- chore: organize repository structure (ce04991)
- fix: remove keep_daily parameter from PruneJob test creation (970b9bf)
- fix: update test mocks to match run_script_from_library signature (9ca5e67)
- feat: add remote restore functionality with SSH support (7d996bc)
- test: add mount service integration tests (6e4f2f9)
- fix: add CASCADE delete to script_executions foreign key (2b6a038)
- fix: add BORG_UI_ variables to schedule-level script execution (8100108)
- fix: prevent system variables from being overwritten by parameter processing (6632018)
- fix: filter system variables from API responses and fix test endpoint (e9344fe)
- fix: update SYSTEM_VARIABLES to only include BORG_UI_ prefixed vars (8604088)
- fix: set BORG_UI_ prefixed variables in get_system_variables() (03a59a0)
- chore: fix prettier check (7732aac)
- chore: temporarily disable SSH path prefix UI field (c85c192)
- fix: include ssh_path_prefix in get_ssh_connections response (6c4b211)
- fix: save ssh_path_prefix when updating existing SSH connections (629374a)
- fix: exclude pattern browser now matches data source type (b2d37eb)
- fix: exclude system variables from required parameters (f38ca9c)
- fix: pass backup_status to get_system_variables in script execution (df48c88)
- feat: add SSH path prefix UI to connection management (1fb1e9b)
- feat: add SSH path prefix support to backend (9a60f02)
- feat: add migration for SSH path prefix (4b843ca)
- fix: BackupJob uses repository path not repository_id (416972c)
- fix: RestoreJob uses repository path not repository_id (1ad2a50)
- test: add comprehensive tests for repository deletion (72cb0de)
- fix: repository deletion blocked by foreign key constraints (6572d34)
- feat: add View Logs button to running backup jobs (f0ac04a)
- fix: command preview now correctly shows parent directory mounts for files (f8ae0c2)
- fix: resolve mount cleanup hanging and duplicate unmount attempts (26bc2fb)
- chore: fix prettier (4a80712)
- fix: resolve mount cleanup and file selection issues (c31d919)
- fix: resolve schedule duplicate repository and deletion issues (1804625)
- chore: remove old screenshots (7a2cfb0)
- fix: resolve CI linting errors - add missing imports and fix type annotations (6107fe0)
- fix: simplify lock error UX - remove intrusive modal, add dialog to break lock button (624bf2e)
- docs: add comprehensive Borg exit code documentation (1ed8ad5)
- fix: remove fuzzy text matching for lock detection, use only exit codes (348156f)
- fix: correct Borg lock error exit codes (70-75, not 15) (2a0dae3)
- debug: add borg exit code logging for lock errors (4db45b7)
- fix: CI frontend test and TypeScript errors (15bc92c)
- chore: fix prettier (7abe6e8)
- fix: webhook notifications showing repository path instead of name (b92e9cc)
- feat: add edit functionality for package install scripts (f91881e)
- fix: distinguish empty log buffer from non-existent buffer (3a48efc)
- fix: handle race condition when deleting pending jobs (bcd5e61)
- feat: add comprehensive logging for schedule creation debugging (efd150d)
- fix: allow deleting pending jobs in backend API (402fced)
- feat: show logs icon for running backups (83d2fdc)
- fix: prevent empty backups when mounting multiple SSH paths (f35c65b)
- feat: add pagination to archives list (6ded6db)
- style: apply prettier formatting to extracted components (afe7d64)
- feat: add beta toggle to show/hide legacy Restore tab (1bf7218)
- fix: improve RestoreJobCard alignment and duration display (0f3cc00)
- refactor: extract 8 reusable components from Archives page (638465d)
- docs: fix Redis password authentication instructions (8ba4ba5)
- Update logo in README (c6529db)
- chore: update image (982960c)
- chore: add logo with name white color (87dc0f9)
- chore: add logo with name (e484c2d)
- chore: use actual logo (c3b3fea)
- docs: simplify documentation and add logo to README (b80d6b5)
- chore: fix prettier (dd40af7)
- feat: add Schedule Wizard with step-based UI and component extraction (f32c0d1)
- fix: properly handle Borg exit code 1 as warnings instead of failures (780d2b9)
- test: update generate_description tests to match new behavior (ff67213)
- fix: replace 'any' types with proper TypeScript types in BackupJobsTable (5498d02)
- fix: show raw parameter names and improve description filtering (7717713)
- fix: resolve 'repository_id is not defined' error in script execution (2adb234)
- fix: remove Type icon and hide auto-generated parameter descriptions (06ab420)
- fix: improve script parameters implementation (31c5bfd)
- feat: Add script parameters support (#245) (bc910d6)
- docs: Add more documentation for borg fuse support. (#231) (22a3040)
- chore: fix tsc (d2cb93b)
- feat: persist rows per page setting per tab in localStorage (d587ad5)
- fix: apply text ellipsis to repository name when path is used as fallback (144d4f9)
- fix: reduce column widths to prevent table overflow and scrolling (0a5eb80)
- fix: implement fixed table layout to prevent column width shifts (d3117f0)
- fix: remove 10-item limit and improve pagination styling (df7f87e)
- fix: make pagination permanent and fix vertical alignment (57dd26a)
- feat: implement optimistic UI updates and pagination for activity tables (bcaada4)
- feat: add pagination to DataTable component (b935fe3)
- fix: implement optimistic UI updates for job deletion (1b6954e)
- security: update fastapi to 0.118.0 to fix starlette CVEs (8b8558a)
- fix: ignore Python 3.10+ packages in Dependabot (2a445bc)
- fix: ignore known Python 3.9 vulnerabilities in pip-audit (b4120ee)
- fix: resolve security workflow permissions and exit codes (6f3e9c5)
- feat: add automated dependency management and security scanning (19e2bb6)
- security: update vulnerable dependencies to fixed versions (33b303c)
- fix: enable keyfile upload for repository import (c0433cb)
- chore: fix tests (be11d51)
- fix: update last_login timestamp when users log in (6920f7c)
- fix: allow deleting pending backup jobs to clean up stuck jobs (9fc0c76)
- fix: handle root directory (/) path in SSHFS remote backups (f5f2235)
- fix: consistent 16px padding in filter bar to match rest of UI (838f830)
- chore: fix prettier check (332ecde)
- fix: improve group by options and remove icon clutter in sort dropdown (21bf2b8)
- feat: add repository sorting, grouping, and search functionality (c9191d9)
- fix: show exclude patterns for remote sources in repository wizard (7b02f65)
- fix: preserve original paths in SSHFS remote backups to fix exclude patterns (1875801)
- fix: prevent duplicate repository IDs in schedule dialog (6bee1fb)
- docs: enhance screenshot descriptions and update Discord invite (d53cef8)
- Update README with new images and sections (d1afb47)
- docs: restructure README and change license to AGPL-3.0 (9bcc2ef)
- fix: resolve scheduled jobs stuck in pending with NULL timestamps (db7211f)
- feat: add Prometheus metrics endpoint for monitoring with Grafana (1868247)
- feat: add beta setting to enable bypass-lock for all borg info commands (7c6f587)
- fix: resolve React Hook rules violation and lint errors in tests (59ed68a)
- fix: resolve duplicate React key warnings and TypeScript errors in log viewer (e3472d6)
- fix: resolve duplicate React key warnings in restore jobs lists (a741012)
- fix: show view/download logs icons and adjust column widths in restore jobs table (a0da03f)
- test: add missing useAuth mock in Restore speed-eta tests (614d178)
- feat: add actions (view/download logs, error info) to restore jobs table (a1f71c6)
- fix: restore logs accessibility in Activity page and API (55748d6)
- test: add comprehensive tests for restore speed and ETA tracking (404d6c9)
- feat: add speed and ETA tracking to restore jobs (1ff8c82)
- feat: add per-connection SFTP mode configuration for SSH key deployment (b8f4c65)
- fix: escape Liquid template syntax in notifications.md (a5c020a)
- chore: fix prettier check (9573d93)
- fix: resolve frontend test linting issues (8e44ea5)
- fix: resolve Jekyll build issues in notifications.md (f98486b)
- chore: fix prettier check (18223e2)
- feat: add job name support to backup and restore notification calls (97da3e9)
- feat: add admin-only job deletion functionality (eb1cbf3)
- feat: simplify notification JSON feature - automatic for json:// webhooks (b6f54f1)
- chore: fix prettier check (cbef155)
- fix: add node types to tsconfig for test file system access (c3a8090)
- docs: add secure SSHFS configuration alternatives to privileged mode (fd1969e)
- test: add comprehensive functional updater verification (ec2c888)
- fix: stale closure bug in Schedule multi-repository management (61c11a8)
- refactor: use connection_id as single source of truth for SSH repositories (a43b8dc)
- refactor: centralize dialog components and internalize table actions (73d9a8d)
- fix: add bypass-lock support for file downloads and restores from read-only repos (a6e5e7c)
- feat: initialize borg repository when changing path to non-existent location (d617e18)
- fix: command preview shows incorrect path when switching repository location to SSH (1879df9)
- chore: add react import (c6f1bec)
- fix: SSH repository path corruption when editing via wizard (f3bd62e)
- Fix DetachedInstanceError in multi-repo schedules and add integration test (36cd1e4)
- fix: resolve repository wizard editing issues with type updates and remote-to-remote prevention (dd0d30b)
- fix: resolve type mismatches in repository interfaces (df5670a)
- refactor: extract wizard steps into separate components with comprehensive tests (36213c5)
- feat: prevent mixed local/remote source directories in repository forms (4445cf8)
- fix: allow importing relocated repositories (f3f173f)
- fix: resolve pytest-asyncio event loop closed errors in CI (5dd15d4)
- feat: add environment variables for pre/post backup scripts (54b7e08)
- test: add comprehensive frontend component tests (46e8cac)
- fix: dashboard repo health filtering and stats refresh time format (55b1c81)
- fix: wizard step mapping and add comprehensive tests (4c75321)
- fix: support restricted shells for SSH storage info collection (d0e114e)
- fix: add padding to wizard content to prevent label clipping (2a8cc27)
- chore: fix prettier check (4f10ad9)
- test: add CommandPreview tests to meet branch coverage threshold (a6554ba)
- fix: add missing React imports for CI linting (7b929e2)
- chore: prettier formatting fixes and bump version to 1.53.0 (8e13871)
- feat: improve remote-to-local backup with SSHFS mount and cleaner archive paths (8991158)
- feat: add comprehensive CronBuilder with proper timezone handling (a349d36)
- Add unit tests for utils (datetime, process) (ff8e217)
- fix: respect analytics opt-out and implement privacy-first defaults (fab6b2c)
- chore: undo event loop fixture (b035d6a)
- chore: remove empty space above dashboard tab (bac8170)
- chore: prettier fix (65406bc)
- Fix integration test event loop and frontend lint (0d27816)
- Fix frontend lint errors (unused variables) (6e13674)
- Update screenshot link in README.md (37d018f)
- Fix integration tests and add unit tests (24d54bc)
- test: add comprehensive tests for API interceptor logic (898b493)
- chore: add test for notification service (734ae6c)
- fix: improve script usage count and delete error messages (5e4523f)
- feat(tests): add backend restore integration tests and fix event loop cleanup (813e566)
- chore: fix prettier (ed5a590)
- chore: add restore integration tests (7b01f05)
- test: add comprehensive tests for script usage_count bug fix (8a954a4)
- fix: count unique repositories in script usage_count, not total associations (1ac1880)
- fix: allow deleting scripts with orphaned repository associations (68ed7ba)
- fix: clean up orphaned script associations when repository is deleted (8c0b7c5)
- chore: fix type errors (0cc1c75)
- chore: fix db session issue (e7bc0f2)
- chore: fix prettier (7d296ad)
- chore: add backup integration test (8891fe6)
- Chore: Configure pre-commit hooks and fix test types (9de16b6)
- Test: Improve coverage for DataTable and StatusBadge, fix accessibility (5edf6b6)
- Auto-format frontend code with Prettier (50ed267)
- Refactor: Unify duplicated types and fix build errors (2b79dc9)
- Fix all remaining frontend lint errors (88eeca4)
- fix: use cwd parameter to create archive with relative paths (b7d22aa)
- fix: create archive with correct directory structure (91275ff)
- fix: use observe mode for test_archive_directory_browsing (69d2f77)
- feat: enhance test_archive_directory_browsing to actually run tests (f8bd2ce)
- fix: use repository path instead of ID for backup API (cf376f5)
- fix: correct backup API endpoint in test_multiple_source_dirs (f7cc966)
- fix: use relative imports for test_helpers in integration tests (031ca64)
- fix: use shared DockerPathHelper for environment detection in integration tests (db58ac9)
- chore: reduce tab in sidebar sizes (afbc088)
- feat: add helper script to fix Docker test permissions (9378edf)
- fix: improve Docker backend detection for integration tests (ff69495)
- perf: parallelize CI tests and fix environment detection (dbbfb4a)
- style: fix prettier formatting in Layout.tsx (877f092)
- fix: add Docker container support and permission troubleshooting (7a4b8bc)
- fix: add automatic cleanup of existing test repositories (8b243e5)
- refactor: redesign sidebar with improved categorization and collapsible settings (cb01163)
- feat: add detailed error logging to archive contents test (80a310d)
- fix: resolve all ESLint errors and TypeScript type issues (b66da5a)
- fix: add missing required fields to repository creation in archive contents test (b10139c)
- fix: rename postcss config to .cjs for ES module compatibility (b469e47)
- fix: update event action assertions to match actual constants (482deae)
- style: fix prettier formatting in frontend test files (4200bd6)
- fix: resolve TypeScript errors in frontend tests (1392d56)
- test: add integration tests for scheduled jobs and maintenance operations (0f835b8)
- fix: correct .gitignore patterns for local test files (7c3eba0)
- chore: remove unnecessary documentation files and update gitignore (9b85d4e)
- test: add comprehensive frontend testing infrastructure (7ab2f9b)
- feat: UX improvements to FilePicker in Edit Repository (#199) (2a0a714)
- fix: export scheduled jobs for repositories using new ID-based format (07a0563)
- feat: add duplicate functionality for scheduled jobs (54a7ce0)
- fix: apply --bypass-lock flag for observe-only repositories on read-only storage (60f4ecc)
- fix: handle orphaned script associations and UI improvements (8cd50c6)
- docs: add Discord community link to README (80b5a21)
- style: fix prettier formatting in Layout.tsx (99a5bd4)
- feat: add bypass-lock for observe-only repos and stats refresh scheduler (8d7aaf0)
- fix: show analytics consent banner only once per user (0a45b89)
- refactor: reorganize sidebar with section headings (c033d70)
- feat: add configurable operation timeouts with source indicators (2dae95e)
- feat: add configurable operation timeouts in System Settings (2720a7f)
- fix: increase mount timeout for large repositories (90694b2)
- fix: exclude observe-only repos from health and maintenance alerts (990e2f8)
- fix: add client-side validation for browse limits (8af9bab)
- feat: add helpful error message with link for archive size limit (69621cb)
- fix: rename items to files and update error message paths (6e0ebbf)
- refactor: move browse limits to new System Settings tab (7f6d89f)
- refactor: format size as readable in analytics labels (32d4ce7)
- feat: add analytics opt-in consent banner (6295c40)
- fix: hide empty state messages when no repositories exist (acd45b3)
- feat: add development environment with hot reload (754071c)
- chore: update package json with scripts (bebb789)
- chore: add release script (314c8ae)
- feat: send size data with analytics events (41ea1d4)
- feat: send app version in analytics events as custom dimension (93d35b3)
- fix: analytics opt-out not working and add opt-out tracking (265eed8)
- test: skip flaky tests that require complex mocking or running server (8d5346c)
- feat: add comprehensive analytics tracking across all pages (ec65b91)
- fix: disable IP tracking, cookies, and user identification in analytics (be0879e)
- test: skip mount service tests for unimplemented _verify_mount_writable (0f41495)
- fix: remove unused Storage import from RepositoryCard (6681e9b)
- fix: remove 'View Mounts' button from repository cards (b4ac912)
- feat: add comprehensive analytics tracking with user opt-out (5c5db19)
- CRITICAL FIX: Remove dangerous write test from mount verification (3b54e9a)
- refactor: rename 'Command Center' to 'Dashboard' (91858b7)
- fix: optimize storage breakdown - remove confusing archive count, show total in header (8fc4146)
- fix: match card heights and reduce items for better alignment (1dc4089)
- refactor: reorganize dashboard - health/system top, storage/maintenance second row (71dff0e)
- refactor: reorganize dashboard layout with better visual hierarchy (d7b79c5)
- refactor: make repository health section more compact and less alarming (15508f9)
- fix: parse storage sizes correctly by checking longer units first (63e4ab4)
- feat: improve dashboard with storage breakdown and health grouping (434caec)
- fix: remove unused recharts imports (d05c10b)
- refactor: improve dashboard UX based on feedback (2dbb540)
- fix: correct data destructuring in DashboardNew (cae666c)
- fix: use correct SSHConnection.status field instead of is_active (da2ade0)
- fix: remove space_freed field from CompactJob activity (4f00aed)
- fix: correct Schedule model usage in dashboard overview (12f1781)
- fix: remove unused imports in DashboardNew (3556206)
- feat: redesign dashboard with Command Center layout (f85f929)
- style: apply prettier formatting to frontend components (71819c0)
- docs: fix Telegram URL scheme in notifications documentation (9850b81)
- fix: update archive deletion tests for background job API (0d767d0)
- docs: update SSH keys guide with new features (cdc371d)
- feat: add background archive deletion and schedule filters (v1.46.0) (78ad9e5)
- remove commented code (2b7332c)
- fix: prevent error logging backup_job.id for multi-repo schedules (8b1a8dd)
- feat: add runtime Beta features toggle in Settings (e68f255)
- fix: use Material-UI FolderOpen icon for consistency (30dc640)
- feat: add new repository wizard with remote backup orchestration (069f418)
- Feat: Added support for connecting to Redis using a Unix socket (#181) (e406c40)
- fix: properly set socket timeout for Apprise notifications (e66a370)
- fix: increase notification timeout to 60s for slow services like Signal (b5d0f46)
- feat: add verbose flag to compact command for freed space summary (dc0218a)
- fix: display directory sizes in archive browser (9ce7dd0)
- fix: properly display directory sizes in archive browser (e747b51)
- feat: display directory sizes in archive browser (3ebbd5e)
- fix: disable prune button during check/compact operations (33e0d5e)
- chore: release v1.44.0 (b53aaae)
- feat: implement file-based logging for check jobs and improve cache UI (a004330)
- fix: force English locale for SSH commands to support non-English systems (ebc4161)
- chore: release v1.43.1 (42c156f)
- chore: update apprise to latest version 1.9.6 (#152) (3467924)
- feat: add Redis connection testing and improve archive browser UX (2f7686e)
- docs: improve cache config clarity and add complete docker-compose example (edafcc9)
- fix: match cache tab padding and remove verbose info section (71c7632)
- fix: set fixed height for archive browser dialog (38fd11f)
- fix: improve archive browser dialog height behavior (c5ffa6c)
- fix: improve Redis fallback and archive browser UX (cd0330d)
- docs: add comprehensive Redis cache configuration guide (44b0712)
- feat: add UI configuration for external Redis URL (f10d431)
- feat: add support for external Redis instances via URL (7343dda)
- fix: make migration 034 idempotent to prevent duplicate column errors (e75eef2)
- feat: add Redis-based archive caching system for 600x faster browsing (bc4c6ee)
- chore: remove debug logging from schedule create endpoint (1a9f43d)
- test: update tests for cron-based check scheduling migration (135ab8b)
- fix: add pristine/touched state to MultiRepositorySelector validation (150549e)
- fix: deduplicate repository IDs in backend to prevent duplicate entries (87a299a)
- Revert: undo all MultiRepositorySelector changes due to state pollution bug (9bb4e6a)
- fix: prevent maintenance_status from getting stuck in 'running' state (80bbf5c)
- fix: force Dialog and MultiRepositorySelector remount to prevent state pollution (bf258e3)
- debug: add console logging to track repository selection state (37a7ac2)
- fix: simplify MultiRepositorySelector onChange to prevent state inconsistencies (ce78597)
- fix: prevent duplicate repositories in multi-repo schedule configuration (89834b0)
- Revert "fix: add milliseconds to archive names to prevent collisions in rapid backups" (d0eec08)
- fix: add milliseconds to archive names to prevent collisions in rapid backups (6578fb6)
- fix: improve validation UX for repository selection in schedule creation (915fa53)
- feat: add duplicate button to notification settings (439f71a)
- feat: migrate check scheduling from interval-based to cron expressions with timezone support (0d7b56f)
- fix: improve notification service repository lookup and display (ef00f43)
- fix: ensure repositories data is safely extracted with fallback in Schedule and NotificationsTab (85ea0fc)
- fix: ensure repositories is always an array in Schedule.tsx to prevent undefined errors (178a620)
- fix: add null safety to repositories.find in BackupJobsTable (03f4324)
- fix: remove --stats flag from prune dry-run operations (db9e2d0)
- fix: Schedule tab crash due to undefined repositories array (8017399)
- docs: emphasize UI-first workflow for SSH key deployment (2695fc8)
- docs: update SSH keys documentation to reflect single-key system (788fb25)
- docs: use generic examples for timeout configuration (97d3c2c)
- feat: add configurable timeouts via environment variables for large repositories (4bc355d)
- Revert "feat: add configurable timeouts for Borg operations" (f9895a1)
- feat: add configurable timeouts for Borg operations (3ee0846)
- fix: use --keep-3monthly for borg 1.4.x compatibility in prune service (330ddbd)
- feat: add repository-level notification filtering and reusable MultiRepositorySelector (2701f3e)
- chore: remove obsolete migration files that used old format (0a633fd)
- fix: skip extended attributes when extracting files to prevent NFS4 ACL errors (f768e5b)
- fix: use compact_service for scheduled compacts to get proper logs (15e8a36)
- fix: resolve scheduled job runtime errors (dc5ce4f)
- fix: update repository last_compact timestamp for scheduled compacts (GitHub #138) (5aed713)
- fix: resolve auto compression causing job failures (GitHub #138) (ccd9120)
- feat: add keyfile upload support, LOCAL_MOUNT_POINTS, and fix archive navigation (401d136)
- fix: resolve multi-repo schedule issues and UI improvements (3dcb1f5)
- fix: remove schedule_name requirement for activity grouping (ecf985a)
- fix: edit form repository selection and activity feed refresh (bf324d4)
- feat: add repository reordering and fix script dropdown heights (9b2e74c)
- fix: resolve SQLAlchemy DetachedInstanceError in multi-repo schedule execution (7e3e57d)
- fix: resolve multi-repo schedule display and execution issues (1154604)
- feat: add multi-repository schedule support (frontend - part 1: state) (bf2d0a9)
- feat: add multi-repository schedule support (backend - part 2: API) (9346bf9)
- feat: add multi-repository schedule support (backend - part 1) (606dfcb)
- feat: extract archives directly to destination (no temp directory) (d2dc7e8)
- style: apply prettier formatting to Layout.tsx (b2a13fb)
- fix: correct logo container left padding to 16px for sidebar alignment (1c3cad6)
- fix: set logo Toolbar left padding to 16px to align with sidebar icons (8258e27)
- fix: restore Toolbar wrapper for logo with slightly reduced size (9f8d656)
- fix: proper log storage and trigger type tracking for compact jobs (21ea48c)
- fix: properly override MUI toolbar padding using responsive breakpoints (890c8c4)
- fix: use !important to override MUI default toolbar padding (fa2f994)
- style: reduce gap between welcome text and button to 16px (6d7aaa5)
- style: add 48px right padding to toolbar for proper button spacing (8f2ca6d)
- style: increase spacing between welcome text and logout button to 48px (4ccdc87)
- style: replace user menu dropdown with flat header layout (5c3d024)
- fix: use prune_service for scheduled prune operations with proper logging (590212d)
- fix: make prune operations synchronous to show results immediately (0c65f81)
- fix: store prune job log file paths for proper log download (8b31a69)
- perf: optimize log file buffering to reduce disk I/O (3036818)
- fix: capture full logs to file during backup for complete download (c477612)
- style: increase sidebar padding and restore logo size (5f180c2)
- fix: align Settings label icon spacing with other items (5f7894f)
- fix: handle HTTPException validation errors correctly in settings API (d48fac9)
- style: modernize nested Settings sidebar - remove indentation, keep background (10406e8)
- style: modernize nested Settings sidebar items (255057d)
- fix: remove visual hierarchy from nested Settings items (f426840)
- refactor: modernize sidebar with better logo alignment and nested item styling (9444ecf)
- fix: properly remove only BASE_PATH from docker-compose.yml (6f99772)
- fix: show manual prune jobs with correct trigger type in Activity feed (453fc0b)
- fix: implement manual prune job tracking to show in Activity feed (fixes #131) (3e5dafa)
- fix: update test assertions for log manager tests (8d4c626)
- test: add comprehensive tests for log management system (1684731)
- feat: implement log cleanup on startup with configurable setting (2c0a460)
- fix: improve indentation for nested Settings menu items (daa4c22)
- fix: restore log management API methods for LogManagementTab (c68daac)
- Revert "fix: remove LogManagementTab references from Settings page" (666cdd9)
- fix: remove LogManagementTab references from Settings page (5c91bf8)
- revert: remove all BASE_PATH functionality (1b4f0aa)
- fix: add base tag for correct asset path resolution on deep routes (205be9f)
- fix: revert to manual BASE_PATH prefixing for maximum compatibility (6c8913e)
- refactor: use FastAPI root_path properly for BASE_PATH support (5b4850b)
- Revert "fix: add trailing slash redirect middleware for frontend routes" (3682ded)
- fix: add trailing slash redirect middleware for frontend routes (b302ee2)
- feat: make BASE_PATH work without rebuilding - runtime detection (73f8756)
- fix: correct parameter type for handleDownloadLogs in Backup page (01b67d9)
- chore: remove implementation and session summary files (9638a3e)
- fix: apply exclude patterns to directory size calculation for accuracy (59c0f1e)
- style: apply prettier formatting to Backup.tsx (7e3dd4e)
- fix: add optional chaining for TypeScript null safety in ETA display (b6a61f2)
- fix: remove arbitrary 5s ETA threshold and fix random '0' rendering bug (6fe7a3c)
- style: apply prettier formatting to frontend files (a60bad2)
- fix: resolve backup notification error and missing ETA/speed fields (917e003)
- fix: set has_logs flag and add verbose logging for size calculation failures (5412ff3)
- fix: replace auto-fit grid with explicit responsive columns to prevent empty cells (8a08a3c)
- fix: only show ETA when estimated time remaining is greater than 5 seconds (d47be9c)
- refactor: remove 'Choose a repository above' info message from Backup tab (5d3a0c3)
- fix: remove unused FormLabel import from LogManagementTab (42920d5)
- refactor: improve LogManagementTab UI layout and spacing (7dbf1ec)
- fix: remove unused Computer and Wifi icon imports in Repositories.tsx (497a43c)
- feat: simplify repository creation UI and add Logs tab to Settings (473801e)
- fix: normalize BASE_PATH environment variable to prevent double slashes in routes (3939356)
- style: apply prettier formatting to frontend files (f7a04f2)
- docs: add comprehensive reverse proxy guide and clean up docker-compose (0bd674a)
- feat: add BASE_PATH support for reverse proxy subfolder deployments (bbf0403)
- fix: optimize column widths for better space utilization in Activity and Dashboard (54e5ae5)
- fix: increase directory size calculation timeout and run in background (7fee562)
- fix: adjust table column widths to prevent overflow in Activity tab (67ca5f7)
- feat: add visible Trigger column to Dashboard and Activity tabs (42f02ab)
- feat: add Restore button to Archives view and improve restore icon clarity (e557a1e)
- fix: hide Backup Now button for observe-only repos and reset scroll position on navigation (074c8e1)
- feat: add quick action buttons to repository cards (65b381e)
- feat: support SSH connections without mount points in file browser (f2b825c)
- feat: simplify repository creation by removing all manual SSH connection fields and relying solely on browse dialog with auto-detection (6b30518)
- feat: simplify repository creation UX by removing redundant type dropdown and auto-detecting SSH connection details from paths (a1538e0)
- fix: prevent /data/ prefix on SSH repository paths by validating repository_type matches path format (cf28107)
- fix: close repository modal automatically after successful creation/import (b86eb59)
- fix: create clean archive paths by mounting SSH URLs to basename directories (e044ca6)
- fix: use borg -C option for mounted paths to exclude mount point from archive (5a66b5a)
- fix: don't wait for SSHFS process, verify mount with retry loop (eaa1808)
- fix: replace idmap=user with explicit uid/gid in SSHFS mount (cb7974e)
- fix: handle SSHFS daemonization properly to prevent timeout (d5d7e46)
- feat: add compact date format for archive contents view (6976f29)
- fix: add SSHFS compatibility workarounds and increase timeout (c2c6e49)
- fix: enable privileged mode for FUSE mounting (027fb1b)
- fix: create fuse group before adding borg user to it (136e763)
- fix: enable non-root FUSE mounting for SSHFS in container (3c8ce60)
- feat: enable FUSE support by default in docker-compose.yml (bb7a024)
- feat: add SSHFS and FUSE support for remote-to-remote backups (66caad1)
- fix: center AlertCircle icon in empty archive view and add SSHFS support for remote-to-remote backups (a40f690)
- fix: add Expected Size to scheduled backup notifications for SSH paths (118c599)
- style: apply prettier formatting to Layout.tsx and SSHConnectionsSingleKey.tsx (4815b14)
- fix: robust df output parsing for Hetzner storage box (8f3f8c9)
- feat: transform SSH Connections into Remote Machines with card layout (0a478f2)
- feat: rename SSH Connections to Remote Machines in UI (6c201d1)
- feat: add storage tracking and mount points to SSH connections (5024baa)
- style: apply prettier formatting to api.ts (d510f1f)
- feat: add timestamp prefix to exported configuration filenames (693c8a7)
- feat: make Borg UI logo/title clickable to navigate to dashboard (f8400a7)
- fix: properly encode special characters in login credentials (cfdbc55)
- fix: add proper capitalization for 'Prune' job type in Activity feed (fca44a3)
- style: apply prettier formatting to frontend files (3b7de56)
- fix: wrap raw SQL strings with text() in migration 027 (eff599b)
- fix: use local variable for captured exit code instead of job.exit_code attribute (02efb2d)
- feat: add PruneJob tracking and comprehensive compact/prune logging for scheduled operations (48bf16f)
- fix: capture exit code 105 from borg log messages for proper warning status (0dd5bbb)
- refactor: extract borg command generation to reusable utility (95c52ff)
- fix: add proper spacing between custom flags and repository path in backup command (e46677f)
- refactor: extract reusable BackupJobsTable component (57eebda)
- fix: only show error icon for failed jobs, not completed_with_warnings (aa86daa)
- fix: remove redundant 'Completed Logs' indicator from TerminalLogViewer (db1885e)
- fix: include custom flags in Backup operations command preview (cd56daf)
- chore: apply prettier formatting (b81deb4)
- fix: add missing check job notification fields to API schemas (f0fd156)
- feat: move Activity tab from Settings submenu to main navigation (d39ace6)
- fix: preserve repository path for check and compact jobs even after repo deletion (3a194f8)
- fix: correct token retrieval for authentication in logs endpoints (0407f89)
- fix: resolve issues in Dashboard, Backup, Schedule, and Activity tabs (7b804f3)
- refactor: enhance logs viewing and repository display consistency (4985343)
- refactor: standardize UI - reorder columns and implement functional actions (8a4924f)
- fix: restore required imports that are still in use (ae80b7b)
- fix: remove unused imports and references (378d9bb)
- refactor: streamline UI consistency across all backup views (e95c370)
- fix: resolve TypeScript compilation errors (b451dc0)
- feat: standardize UI across Activity, Schedule, and Dashboard views (b552274)
- fix: handle completed_with_warnings status in Dashboard (1bd7e85)
- feat: add continue_on_error option for pre-backup scripts (2a99ac6)
- chore: fix phantom directories and restoration issues (1e65b4f)
- feat: add 'completed_with_warnings' status for backup jobs (a18e3ba)
- chore: fix prettier formatting (8da31c5)
- chore: upgrade to Python 3.10 for Borg 1.4.3 compatibility (5087a52)
- chore: update to Borg 1.4.3 (d67d298)
- fix: use correct token key for activity log downloads (b88b6bd)
- feat: move Activity to Settings submenu and add log download functionality (3a01cd6)
- chore: ui fixes for settings (2ab74b6)
- chore: make script test result dialog large (ff63826)
- chore: update add script dropdown height (1a0dafc)
- feat: restore execution order badge display (fe42702)
- fix: revert dropdown to proper height like repositories dropdown (193a4c7)
- remove: delete non-functional reorder buttons (up/down arrows) (ba2e267)
- fix: add tooltips to disabled Add buttons + fix dropdown text cutoff (77a4c4b)
- fix: show Add buttons in Create/Import modals (disabled until created) (fe586f4)
- fix: React hooks error + implement Option B for library scripts after creation (f108855)
- fix: use useLayoutEffect to prevent React error #310 (00a4777)
- refactor: create reusable RepositoryScriptsSection component + remove horizontal tabs from Settings (3318044)
- fix: change execution_order column type from Integer to Float (15f912b)
- feat: major UI improvements - reordering, dropdown, warning, inline script clearing (5b7cbf3)
- fix: increase dropdown height from 400px to 600px (67dfc8e)
- fix: accept float for execution_order in reorder endpoint (c2d133f)
- fix: add pre/post_hook_timeout to API response + more reorder debugging (79d1078)
- fix: remove caption text and add debugging for script reordering (1a60c7a)
- feat: hide inline button when library scripts exist + style Add button (7c90589)
- fix: revert dialog size change and increase dropdown height instead (3cbde39)
- fix: use SQLAlchemy connection API in migration 028 (77443a1)
- feat: split hook_timeout into separate pre/post timeouts + increase assign dialog height (7803ce2)
- refactor: reduce spacing in scripts section for more compact layout (b57ef6d)
- refactor: group scripts by timing (pre/post) instead of type (inline/library) (dae3bea)
- refactor: merge inline and library scripts into unified interface (cbbba3c)
- refactor: simplify script UI and remove confusing options (fba04e6)
- fix: restore backward compatibility for legacy inline scripts (c213a07)
- refactor: further reduce spacing in Backup Scripts section (784d95a)
- refactor: tighten spacing in script section for more compact layout (50c58e8)
- refactor: simplify script assignment UI in repository modal (1815e92)
- feat: reorganize navigation with nested Settings in sidebar (d45df27)
- fix: clean up script UI - single section per context (ac0833a)
- Revert routing changes - back to modal approach (b4d2fe6)
- fix: remove unused parseCompressionString and fix sshConnections array (ca57fd0)
- fix: TypeScript errors in RepositoryForm and Repositories (0972979)
- refactor: move repository forms to sub-routes with reusable component (01fda9e)
- fix: remove unused imports in RepositoryScriptsTab (ee2b653)
- feat: add repository script assignment UI (7a6745b)
- fix: remove unused imports in Scripts.tsx (083ab0b)
- docs: add comprehensive session summary (49d1666)
- feat: add script management UI (8ab4464)
- docs: update implementation status - Phase 2 complete (c1688e9)
- feat: integrate script library with backup service (0890593)
- docs: update implementation status after Phase 1 removal (fcd3f9a)
- refactor: remove redundant Phase 1 code (002ef86)
- feat: implement script management system (Phase 1 & 2) (c1f4c38)
- docs: fix SSH key storage location documentation (78a010a)
- fix: allow saving 0 for prune settings in schedule (1804dbd)
- test: add comprehensive script executor tests (c9f031d)
- refactor: extract shared script executor service (16381f4)
- fix: explicitly use /bin/bash for hook execution (c2dfbe8)
- chore: fix prettier formatting for Schedule.tsx (ba92dfa)
- chore: fix prettier formatting and bump version to 1.27.1 (06a4e03)
- refactor: remove borg_ui_metadata and improve export filenames (4a20b3d)
- fix: prevent duplicate 'auto' in compression string (4abcdea)
- fix: default to not including Borg UI metadata in exports (d592de8)
- fix: support ssh:// URL format in import and proper file download (fa2c244)
- fix: support object format in repositories list for import (a11a584)
- fix: ensure metadata included for multi-repo export filenames (f8e85ec)
- fix: add default shebang for hooks and update tests for new borgmatic format (3a1962c)
- fix: multiple borgmatic export/import and UI fixes (5ea8cee)
- fix: respect shebang in backup hooks (fixes #80) (cb207ab)
- fix: borgmatic export - fix malformed SSH repository paths (d115e10)
- fix: allow setting prune hourly/quarterly retention to 0 (69638b6)
- fix: restore Import Existing button to Repositories page (8c10cf3)
- fix: remove unused TypeScript imports and functions (d0c0ee1)
- fix: remove Preview Import button from borgmatic import (32f103c)
- fix: properly get repository size from borg info with passphrase (39f404d)
- fix: remove Import Existing button and add debug logging for stats (cdfb128)
- fix: get total size from borg list cache stats (b7e76dd)
- fix: restore stats update with proper error handling (ca54f98)
- fix: remove blocking stats update from repository imports (80a76d4)
- fix: update function name reference in archives.py after rename (3ea17e0)
- fix: update repository stats (archive count and size) after importing (c4ff401)
- fix: add missing prune_keep_hourly and prune_keep_quarterly fields to schedule API (2a194ae)
- fix: remove useless ssh_command and add ZIP import support (e334f51)
- fix: remove metadata from single file export when not requested (2963f0c)
- fix: export separate borgmatic config per repository instead of merging (748d49a)
- fix: SSH key export - use placeholder path instead of non-existent attribute (8c464e3)
- fix: export strict borgmatic format with passphrases included (c4ddbdc)
- fix: export config in proper borgmatic-compatible format (2196e7f)
- fix: correct import path for get_current_user dependency (afedee2)
- fix: resolve TypeScript errors in export/import components (0f9a61c)
- feat: add configuration export/import in borgmatic format (9148e7e)
- style: run prettier formatting on modified files (c8109bb)
- fix: improve scheduled checks UI and fix React Query cache conflicts (68b4d56)
- feat: add check notifications and scheduled checks (Issue #76) (dd67787)
- docs: add job system architecture documentation (c605b22)
- fix: improve cache lock cleanup for borg 1.4+ lock types (16b9573)
- feat: add hourly and quarterly prune retention settings (8c28d59)
- fix: correct notification behavior with pre/post backup hooks (8ae2cc8)
- fix: correct notification behavior with pre/post backup hooks (a84da17)
- fix: restore path handling and ownership preservation (e2016a2)
- feat: add auto and obfuscate compression modes (4fffdc9)
- style: fix prettier formatting in Activity.tsx (ba63c93)
- refactor: use reusable DataTable component in Activity page (4032076)
- fix: remove redundant padding from Activity page for consistent layout (fcc0bd2)
- fix: display actual logs for failed/cancelled backups instead of file reference (85e85d1)
- style: fix prettier formatting in Activity and TerminalLogViewer (94e7928)
- fix: restore logs not displaying due to missing log_file_path attribute (351b997)
- feat: add unified activity page with performance optimizations (28e5ca8)
- feat: add unified Activity/Jobs page with log viewing (c8b7aa0)
- fix: increase timeout for SSH repository operations to 200 seconds (e6a54b0)
- style: apply prettier formatting to NotificationsTab (59c7653)
- fix: make category icons theme-aware for dark mode support (cc8cdf9)
- ui: reorganize notification settings into categorized sections (836ffbe)
- fix: correct _send_to_service() call parameters in send_backup_start (a930f48)
- fix: correct parameter names for backup start notification (fc474d6)
- feat: add backup start notification event (a199a86)
- fix: use moving average for accurate backup speed calculation (a8717ce)
- fix: allow 0 value for unlimited repository check timeout (822cc07)
- fix: improve ArchiveBrowserDialog dark theme colors (a412fa8)
- feat: add selective file/folder restore from archives (8e09ce4)
- fix: update login page dark mode to match application theme (57aa0dd)
- fix: make login page follow dark mode theme (7208094)
- fix: change file browser initial path from /local to / (e1d363f)
- Update README.md (1388d95)
- docs: update docker-hooks to use UI package installation (75ab867)
- fix: add SSH key symlink for root user (PUID=0) (8982b5b)
- fix: add -s flag to ssh-copy-id for Hetzner Storage Box compatibility (e4acb3d)
- fix: resolve docker group GID conflict causing container crash loop (25df520)
- fix: correct archive count on import and enable restore tab for all repositories (f725511)
- Create FUNDING.yml (b3c66ad)
- style: fix prettier formatting issues (9a09e5a)
- feat: add package management and settings sub-routes (99de0ea)
- chore: mount docker.sock for development (21d1e61)
- fix: remove misleading sandbox warning from script test dialog (c609c93)
- fix: use authenticated API client for script testing (cfec7e5)
- feat: add script editor dialog with test run capability (00200f1)
- style: run prettier formatting on FileExplorerDialog and Archives (e20f722)
- refactor: replace hardcoded theme colors with MUI palette tokens (ef662a7)
- feat: add TypeScript type check and Prettier formatting to CI pipeline (a6e2178)
- Feat: Enable theme switcher (light and dark) in Settings (#42) (388f877)
- fix: remove SSH URL reconstruction in backup command preview (9f5a87a)
- fix: add relative_files to coverage config for GitHub Actions (ec9ea07)
- fix: critical bug - SSH repository path duplication (e14fc5b)
- fix: correct Telegram URL scheme in notification examples (9acdc24)
- fix: prevent shell initialization output in SSH sessions (Aurora Linux fix) (baa7fe8)
- fix: properly use remote_path as BORG_REMOTE_PATH for SSH repositories (a3dca70)
- fix: use remote_path for SSH repositories in backup operations (0872cda)
- fix: add missing default_path to connectionForm reset (9a25500)
- fix: return remote_path and SSH fields in GET repositories endpoint (7c47080)
- refactor: move default_path from SSH key to SSH connection (608c4a6)
- feat: add UI for SSH key default_path configuration (5f316eb)
- feat: add default_path to SSH keys for Hetzner Storage Box compatibility (c5f3769)
- fix: upgrade Node.js version to 22 for Vite compatibility (6e443c2)
- fix: match compression settings title spacing in edit dialog (8288586)
- refactor: move remote_path to Advanced Options section (5882266)
- chore: update gitignore to prevent root node_modules (8650504)
- feat: add custom flags support and command preview improvements (#32) (5584c11)
- feat: add command preview to import and edit dialogs with remote_path support (d75ab03)
- fix: include --remote-path argument in borg init command (5482bfe)
- fix: hide backup-related fields for observability-only mode in edit dialog (bfeac98)
- feat: add repository mode dropdown to edit dialog (ca681c6)
- chore: fix security vulnerabilities in frontend dependencies (833478d)
- chore: upgrade frontend dependencies to latest major versions (ecc64ab)
- chore: update Dockerfile to use Node.js 22 for Vite 7 compatibility (9cae60b)
- chore: upgrade Vite from v4 to v7 (1843584)
- chore: update frontend dependencies (fa0703d)
- chore: migrate from react-query v3 to @tanstack/react-query v5 (6fbc47e)
- docs: add development transparency section to build trust (9d1d573)
- docs: update index, security, and usage-guide with secure volume patterns (2c5ab7a)
- docs: update configuration guide with secure volume mount patterns (11f2e1b)
- docs: update installation guide with secure volume mount examples (fdc0055)
- fix: simplify volume mount paths and clarify customization (9b25442)
- fix: keep root mount default in docker-compose for testing (d3ae969)
- security: improve default volume mount configuration (f2ed1cf)
- refactor: integrate DataTable component across all remaining pages (8d4dcdd)
- refactor: integrate DataTable component in Dashboard page (161661d)
- refactor: integrate unified DataTable component in Backup page (3755078)
- feat: add observability-only repository mode and unified DataTable component (2b42425)
- docs: fix PR template to align with GPL v3.0 license (a53dda8)
- fix: use theme-aware background for Recent Jobs table header (5048650)
- feat: add edit and delete functionality for SSH connections (58365bb)
- docs: add Docker container management hooks documentation (6f482d6)
- fix: replace shell operators with compatible commands for restricted shells (943d409)
- fix: use 'pwd' instead of 'echo' for SSH connection tests (4e35b92)
- fix: remove unused archive and repository queries in Backup.tsx (ce84371)
- fix: remove unused imports and variables in Backup.tsx (dee8118)
- fix: remove incorrect Backup Statistics section from Backup tab (816b217)
- refactor: replace all .replace(tzinfo).isoformat() with serialize_datetime() (690c6c4)
- refactor: remove unused RealTimeStatus component (794eee2)
- refactor: remove Z append logic and centralize datetime handling (eaf1fbd)
- fix: use dateUtils consistently across frontend pages (51ee3eb)
- refactor: standardize datetime serialization across backend API (673b841)
- refactor: remove unused SSH connection component files (3029b08)
- ui: change all icon stroke colors to white in SSHConnectionsSingleKey page (9210549)
- ui: add circular backgrounds with white icon strokes in SSH Connections statistics cards (6f3338e)
- ui: add strokeWidth={1.5} to all icons in SSH Connections page (36e6fe9)
- docs: add TZ environment variable to README and .env.example (fb931a2)
- docs: add comprehensive timezone configuration guide (af67c61)
- feat: add TZ environment variable for explicit timezone configuration (bcf7a62)
- fix: properly handle timezone-aware timestamps for archives and filesystem (aa56ee2)
- fix: treat dates without timezone as local time in frontend (9726a41)
- feat: add markdown support for chat services (Slack, Discord, Telegram) (c153a11)
- fix: use local time and correct completion timestamps in notifications (c3bc429)
- ui: make email notifications more compact (cdbcd1b)
- feat: beautiful HTML email notifications (953040f)
- ui: show default archive name template in scheduled job forms (673d4f6)
- feat: add customizable archive naming for scheduled backups (#34) (3111e34)
- ui: add cancel button for running scheduled backups (096d0e8)
- feat: add manual cancel functionality for backup and restore jobs (30013bd)
- fix: cleanup orphaned backup and restore jobs on container restart (bfc7a3c)
- docs: remove internal test and analysis documentation (87c41fe)
- docs: add sidebar navigation with Just the Docs theme (e9f2904)
- docs: rebuild homepage with comprehensive information (40e0b88)
- fix: correct GitHub Pages URLs and add Jekyll front matter (979dcca)
- docs: update index.md to link to new documentation pages (1eb2521)
- docs: add comprehensive documentation pages (01ec21d)
- fix: update contributing guidelines to match GPL 3.0 license (c225cf9)
- docs: streamline README and add comprehensive notifications guide (1990598)
- feat: improve notification formatting and add customizable title prefix (984a80b)
- fix: improve notification test error messages with diagnostic info (beee07e)
- fix: improve notification test error messages with examples (6588b3b)
- fix: correct datetime serialization in notification API response (e4a70f6)
- feat: add notification settings UI (frontend) (6ac1f3b)
- feat: implement notification system with Apprise integration (backend) (210b7c2)
- docs: add comprehensive Unraid installation guide (b6d1228)
- feat: add smart compression UI with full Borg specification support (6ab5402)
- fix: remove remote Borg installation check for SSH repositories (abb350c)
- Revert "feat: add support for restricted SSH environments (Hetzner Storagebox, rsync.net)" (4e95ff3)
- fix: remove SSH key requirement for local repositories (b463bcd)
- feat: add support for restricted SSH environments (Hetzner Storagebox, rsync.net) (e7fc57d)
- test: fix flaky delete nonexistent archive test (0241608)
- test: remove backup/restore integration tests (architectural limitation) (f1c2be9)
- test: refactor test suite with proper unit/integration segregation (1eb59f6)
- fix: improve error handling and add SystemSettings model (0a75273)
- fix: resolve test authentication failures by fixing fixture issues (eb2720a)
- refactor: consolidate duplicate test files and improve test organization (5f34222)
- fix: correct 21 failing tests by investigating root causes (7fc4a14)
- test: improve code coverage from 27.58% to 34.45% (+6.87%) (fdf1283)
- test: add comprehensive repository API tests (199bbf1)
- test: improve code coverage and add API testing documentation (78ca075)
- fix: add Codecov token to workflow for coverage upload (ce73ff1)
- fix: pass repository passphrase when deleting archives (7a5e9d1)
- fix: improve archive count updates after prune/delete operations (7fd6fec)
- fix: correct archive deletion API endpoint format (619bab3)
- Revert "feat: add release bundle build and publish scripts" (7ee4a9b)
- feat: add release bundle build and publish scripts (03b2680)
- fix: update elapsed time every second for real-time display (d79a0f6)
- feat: add elapsed time display for running check/compact operations (cea549d)
- docs: add borg_cache volume to all installation methods (e6c5ce0)
- docs: update GitHub Pages with borg_cache volume (2c2e581)
- fix: persist Borg cache across container updates (eb70226)
- refactor: remove percentage from check/compact button text (c3b550f)
- style: change compact button to blue when running (cdbf50d)
- docs: add release process to project settings (9e8c465)
- fix: apply same progress message fix to compact service (d5f2792)
- style: add padding and blue color to check/compact progress message (90ac70b)
- fix: keep operation counts but skip them on empty phase transition messages (fce547a)
- fix: remove confusing operation counts from check progress display (843f1a8)
- fix: remove config_file column from ScheduledJob model (22f9c67)
- refactor: remove legacy config_file parameter from APIs and database (54ea685)
- fix: add --repository-only flag when using --max-duration in check (603e241)
- fix: make migrations idempotent to prevent duplicate column errors (0a78ce1)
- feat: add graceful fallback for orphaned check/compact jobs (0af0dd9)
- feat: implement check/compact operations with progress tracking and enhancements (adfe221)
- perf: remove unnecessary repository lock manager (6a26cea)
- chore: clean up unused documentation and improve lock dialog spacing (94cccd6)
- fix: use borg info to get actual repository ID for cache lock breaking (33ba203)
- fix: break both repository and cache locks to prevent stale cache lock issues (70a9f65)
- docs: add release notes for v1.6.0 (1d92c75)
- feat: add lock error handling to Backup and Restore pages (dead879)
- feat: add lock error handling to repository info dialog (c923f00)
- feat: add lock error dialog UI with user-initiated breaking (de3ae36)
- feat: add user-initiated lock breaking with confirmation prompt (ad6276a)
- perf: reduce lock timeout from 3 minutes to 20 seconds (1d9e709)
- feat: add automatic stale lock breaking on timeouts (f1a0041)
- fix: remove health endpoint references from integration tests (7467834)
- test: remove tests for deleted health check endpoint (71ad7c0)
- feat: add loading indicator for repository info in Archives page (706d244)
- fix: lazily initialize asyncio.Lock to prevent event loop error at import time (1295e5e)
- feat: implement repository-level lock manager to prevent concurrent Borg operation conflicts (a863b83)
- refactor: remove unused backup_status from dashboard endpoint (a784483)
- fix: remove unused health check endpoint and fix BackupStatus validation (ec7bfb6)
- fix: remove non-existent get_repository_status calls (017024f)
- fix: add retry logic for repository info lock timeout errors (55556dd)
- fix: center-align Create Schedule button with header (41e6ddf)
- feat: enhance backup history UI and remove archive notice (f3468c5)
- feat: add visual feedback for prune and compact operations (bb9abaf)
- feat: add prune and compact options to scheduled jobs UI (7b9b618)
- feat: add scheduled prune and compact to automated backups (d4896af)
- refactor: improve UX for manual SSH key deployment with two-button approach (2040dd3)
- feat: add manual SSH key deployment option (c3b75de)
- Revert "feat: add manual SSH key deployment workflow" (c5c9236)
- feat: add manual SSH key deployment workflow (0518df5)
- ci: add concurrency controls to GitHub Actions workflows (43b49a6)
- fix: resolve SSH repository lock timeout issues (50d3a62)
- fix: prevent error flash when closing repository info modal (157de67)
- refactor: use version constraint for Borg auto-updates (cbfe59f)
- chore: upgrade Borg to latest stable version 1.4.2 (c9d4fc4)
- fix: implement proper must_change_password flow (7aeb59f)
- refactor: simplify login success message (1f13515)
- fix: login error display and add user self-password change (846742e)
- fix: reset password endpoint expects JSON body not query param (698f178)
- refactor: reduce overly permissive test assertions (31fcc4f)
- refactor: improve API error handling and add specific tests (0f1af6e)
- feat: add GitHub Release automation workflow (86a403a)
- fix: make test assertions more lenient to handle various API responses (b70e921)
- chore: revert docker file update (4f1324e)
- feat: improve security and update Borg to 1.4.2 (1902762)
- test: add 52 additional comprehensive unit tests (3a11c1c)
- test: add 46 new unit tests for API endpoints and borg utilities (85c59b7)
- fix: copy frontend build to app/static for integration tests (e839563)
- fix: set required environment variables for CI integration tests (33d5c23)
- fix: correct uvicorn import path and test file paths in CI workflow (7a9eab1)
- fix: make static files mounting conditional on directory existence (c8a6cdb)
- test: reorganize test suite with proper structure and add comprehensive tests (5209efc)
- fix: correct health check endpoint in CI workflow (2da63bf)
- fix: update GitHub Actions and expand test coverage (412d2be)
- feat: add comprehensive testing infrastructure with CI/CD (3c1ea07)
- fix: improve archive display with timezone and empty state handling (18d4c2e)
- perf: add in-memory caching for archive browsing (8e25bbd)
- fix: infinite local directory loop in archive browsing (ff3baad)
- refactor: rename archive browsing API for clarity (96dbadb)
- chore: establish controlled release process (030f49d)
- fix: remove invalid path argument from borg list command (50e7dbc)
- fix: use correct API endpoint for archive contents browsing (d4d0100)
- fix: refactor Archives page to use on-demand directory browsing (d512e7c)
- chore: save claude instructions (8169ea6)
- fix: source directory browser now always browses local machine (b9c5d9b)
- feat: add comprehensive test suite and fix archive contents bug (4501304)
- debug: add logging for archive contents parsing (f009fd0)
- fix: simplify SSH ls parsing to handle standard output format (1c6838c)
- debug: add detailed logging for SSH ls parsing (a6b5969)
- fix: improve SSH filesystem parsing and add duplicate detection (fc6fa5c)
- fix: restore better padding balance in Monaco editor (745b569)
- fix: reduce excessive spacing in Monaco editor (5837156)
- fix: decrypt SSH keys from database for filesystem browsing (f035dcf)
- refactor: consolidate Create and Import repository dialogs (867d1df)
- fix: prevent layout shift on code editor focus (45e6c26)
- fix: remove unused placeholder parameter in CodeEditor (7c5fae2)
- chore: update package lock (42742a1)
- feat: add Monaco code editor for backup hook scripts (3754f44)
- fix: add hook fields to repositories API and log hook output (a307fba)
- ui: use monospace font for backup script fields (07a695c)
- fix: correct fetchone() logic in migration 010 (2b4b722)
- fix: add missing hook fields in openCreateModal (a9a670e)
- feat: add frontend UI for backup hooks configuration (0b7d533)
- feat: add pre/post backup hooks for custom scripts (0704dae)
- fix: correct timezone handling for all datetime fields (55c7533)
- fix: make source directories mandatory for import repository (3803682)
- feat: add import existing repository feature and make source directories mandatory (31ce5f3)
- Update README.md (091dcd7)
- docs: add comprehensive security guidance for volume mount configuration (24ba4ce)
- fix: resolve archive file download issues and improve UX (8fb169c)
- fix: add archive file download functionality and improve UI (05a0dc7)
- fix: update download endpoint path to match frontend URL structure (eb5ede0)
- feat: implement file download from archives (595630b)
- chore: simplify license section in README and docs (45066df)
- chore: change license from MIT to GPL-3.0 for copyleft protection (892ec93)
- feat: change license from proprietary to MIT for open source adoption (3825de6)
- fix: use asyncio.create_task to prevent blocking response when starting restore (1c4b858)
- feat: add database migration for restore_jobs table (a83984a)
- fix: remove await to prevent UI blocking, let polling handle updates (f25ae55)
- fix: replace optimistic updates with immediate refetch after job creation (94fc5ed)
- fix: override staleTime to enable real-time polling for restore jobs (1e558c4)
- fix: show pending jobs in active restores section (6726357)
- fix: use optimistic updates to show restore jobs immediately in UI (a211d9e)
- fix: add double refetch strategy to show restore jobs immediately (5f1ae00)
- fix: remove await from refetchQueries to prevent UI hang (997808b)
- fix: track file count and force immediate UI update on restore start (e00e596)
- fix: handle borg progress output with carriage returns (\r) (3a5a3e8)
- feat: implement restore functionality with progress tracking and UI improvements (e43779c)
- feat: enable restore tab in navigation (2248e89)
- feat: implement comprehensive restore functionality (7f5c9d7)
- refactor: use InputAdornment for all browse buttons (14ab440)
- fix: move browse button inside Path TextField as end adornment (0895db0)
- fix: improve browse button size and add file explorer to edit repository dialog (96bc072)
- fix: adjust browse button size next to Path field (451ad25)
- feat: make file explorer compact with minimal spacing (fad6097)
- fix: remove unused FolderOpen import causing TypeScript build error (1476753)
- feat: redesign file explorer UI for better aesthetics and usability (9d80f62)
- fix: correct API endpoint path and reduce icon size in file explorer (32c22c1)
- feat: add visual file explorer for directory selection (897ddea)
- docs: improve README structure and organization (48ba082)
- fix: update archive_count after prune and delete operations (9634f15)
- fix: add passphrase support to check/compact/prune operations (c04acac)
- feat: add prune results display in dialog (d0d24bd)
- feat: add comprehensive prune functionality and improve compact/prune UX (fb389d4)
- feat: redesign repository info modal with cute, minimalist UI (7c86e40)
- feat: redesign Repositories page with clean, minimalistic UI (7e82d94)
- fix: improve repository statistics display and formatting (fa00d3c)
- feat: redesign Archives page with repository statistics and minimalist UI (0b209e6)
- fix: center icon, remove refresh button, and sort archives by date (b277733)
- feat: add interactive file browser to archive contents modal (db8b933)
- feat: redesign Archives page to match Borgitory UI style (dc3f5c9)
- fix: add bounds check to formatBytes for large values (8fce31e)
- chore: remove unused utils (2a2d6b1)
- fix: revert UTC timezone handling - backend stores local times (304d711)
- fix: replace duration display with creation timestamp in Archives (9ed2e94)
- fix: resolve multiple UI and timezone issues (f6fbbfe)
- docs: reduce screenshot sizes from 1512px to 800px width (c87cc71)
- refactor: remove non-functional SSE and use 1-second polling (d2db448)
- fix: correct 1-hour offset in timezone conversion (78a0d86)
- fix: resolve SSE reconnection loop and optimize polling strategy (6008452)
- feat: implement timezone-aware scheduling for cron jobs (a1d7829)
- docs: simplify usage guide - remove manual directory creation (81be78a)
- Update README.md (1f3047b)
Docker Images
Published to Docker Hub:
docker pull ainullcode/borg-ui:1.73.0
docker pull ainullcode/borg-ui:latest
Full Changelog: v1.72.4...v1.73.0