Skip to content

Commit 94885d1

Browse files
committed
chore: bump version to 0.37.0-beta
1 parent 58fdf4a commit 94885d1

File tree

2 files changed

+38
-1
lines changed

2 files changed

+38
-1
lines changed

CHANGELOG.md

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,43 @@ All notable changes to Sublarr are documented in this file.
55
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
66
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
77

8+
## [0.37.0-beta] - 2026-03-31
9+
10+
### BREAKING CHANGE — Database Migration Required
11+
12+
**All timestamp columns have been migrated from plain TEXT to `DateTime(timezone=True)`.**
13+
The Alembic migration `b0c1d2e3f4a5` reformats stored timestamps from ISO 8601 (`2024-01-15T10:30:00+00:00`) to SQLAlchemy's SQLite format (`2024-01-15 10:30:00`). This runs automatically on startup (`flask db upgrade`). **No manual action required for Docker deployments** — the migration is applied automatically.
14+
15+
Use `scripts/check_datetime_migration.py --db /config/sublarr.db --mode before/after` to verify migration integrity.
16+
17+
### Added
18+
- **ConfirmModal component** — replaces all `window.confirm()` calls with an accessible, styled modal dialog
19+
- **StatisticsRepository** — extracted all statistics queries from route handlers into a dedicated repository
20+
- **`services/retranslation.py`** — business logic for item re-translation extracted from route handlers
21+
- **`scripts/check_datetime_migration.py`** — standalone pre/post migration DB consistency checker (70 columns, 29 tables, row-count snapshot comparison)
22+
- **`useDebounce` hook** — extracted reusable debounce hook into `frontend/src/hooks/useDebounce.ts`
23+
- **`configUtils.ts`** — shared frontend config helpers extracted from settings pages
24+
- **`settingsShared.ts`** — consolidated duplicate `inputStyle` and shared settings UI constants
25+
26+
### Changed
27+
- **TranslationTab refactor** — split 1989-line `TranslationTab.tsx` into 8 focused sub-files under `pages/Settings/translation/` (`TranslationBackendsTab`, `BackendCard`, `PromptPresetsTab`, `GlobalGlossaryPanel`, `TranslationQualitySection`, `TranslationMemorySection`, `OllamaPullSection`, `TemplatePickerModal`)
28+
- **SeriesDetail performance** — episode wanted-items now filtered server-side by `series_id`; eliminates the previous 9999-item full-list fetch
29+
- **`wanted_scanner.py`** moved to `services/wanted_scanner.py` for consistent service-layer placement
30+
- **Session timeout** — now enforced at 8 h by default (was Flask's 31-day default); configurable via `session_timeout_minutes`
31+
32+
### Fixed
33+
- **Security — command injection** — replaced `subprocess(shell=True)` with `shlex.split()` in all subprocess calls
34+
- **Security — IP allowlist**`allowed_ip_ranges` setting now enforced in `before_request` hook for all non-exempt routes
35+
- **Security — SSRF**`validate_service_url()` now applied to plugin install URLs and plugin registry fetch
36+
- **Security — webhook auth** — requests are now rejected immediately when no API key is configured
37+
- **Security — path traversal**`is_safe_path()` added to OCR batch-extract endpoint; corrected reversed argument order in `cleanup_sidecars`
38+
- **Security — health endpoint** — returns HTTP 503 when required services are down (was always 200)
39+
- **`subtitle_processor` route** — removed erroneous `.isoformat()` call when writing to `updated_at` DateTime column
40+
- **Silent error suppression** — replaced bare `except Exception: pass` blocks with `logger.warning()`/`logger.debug()` throughout backend
41+
- **Alembic revision conflict** — resolved duplicate revision ID `a1b2c3d4e5f6`
42+
43+
---
44+
845
## [0.36.4-beta] - 2026-03-30
946

1047
### Fixed

backend/VERSION

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
0.36.4-beta
1+
0.37.0-beta

0 commit comments

Comments
 (0)