4.2 KiB
4.2 KiB
v0.10.0 (2026-06-05)
Multi-time-point scheduling for Immich. The single comma-separated "times" text box is replaced with an add/remove list of native HH:MM pickers for the scheduled assets, periodic summary, and memory slots — entering several fire times per day is now discoverable, and the read/write path is hardened end to end. This release also pins aiohttp<3.14 in the backend test environment so the suite stays green against the current aioresponses. No breaking changes; no migrations required.
User-facing changes
Features
- Immich multi-time scheduling UI. A new
TimeListEditorreplaces the comma-separated text box with an add/remove list of native HH:MM pickers for the scheduled-assets, periodic-summary, and memory slots. It dedupes and sorts on save, enforces a per-day cap, collapses on-screen duplicates, and gives each row an aria-label. Keyboard entry is no longer clobbered mid-edit — it syncs from the value prop only on external changes via anuntrackguard (8065e6e) - Per-section save guard. An enabled feature section (scheduled / periodic / memory) must now have at least one time before it can be saved, enforced in the provider descriptor (8065e6e)
- Refreshed copy. New en/ru i18n keys and updated help text for the editor; the dead
invalidTimeListstring was removed (8065e6e)
Bug Fixes
- Server-side
*_timesnormalization. Thetracking_configsAPI now normalizesscheduled_times/periodic_times/memory_timeson every write (validate, dedup, sort, cap at 24), returns 422 on malformed input, and refuses to enable a slot whose times list is empty (8065e6e) - Restored scheduler observability. The scheduler now warns when an enabled slot has zero or dropped fire times, restoring the visibility that was lost when the old per-call warning was removed (8065e6e)
Development / Internal
CI/Build
- Pin
aiohttp<3.14in the backend test install.aioresponses0.7.8 (latest) does not pass thestream_writerkeyword argument that aiohttp 3.14 made required onClientResponse, so every aioresponses-mocked HTTP test failed to construct a response.notify-bridge-coredeclaresaiohttp>=3.9with no upper bound, so CI floated to 3.14.0 — the pin keeps the test environment reproducible in bothbuild.ymlandrelease.ymluntil aioresponses ships an aiohttp-3.14-compatible release (11593ea)
Refactoring
- Shared time-list service. A new
services/time_list.pyexposesnormalize_time_list(raisingTimeListError) and a lenientparse_hhmm_list; the scheduler drops its private parser copy in favour of the shared one (8065e6e)
Tests
- Time-list coverage. New tests for time-list normalization and parsing (including non-ASCII and odd-shaped input) and for the "enabled implies at least one time" validation (8065e6e)
Chores
- Checked-in vex config. A
.vex.tomlenabling semantic embeddings, call-graph, BM25, and auto-update for the vex code-search index (d01e519)