• Notify Bridge 0.10.0
    Release / test-backend (push) Successful in 2m17s
    Release / release (push) Successful in 1m0s
    Stable

    alexei.dolgolyov released this 2026-06-05 21:04:57 +03:00 | 0 commits to master since this release

    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 TimeListEditor replaces 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 an untrack guard (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 invalidTimeList string was removed (8065e6e)

    Bug Fixes

    • Server-side *_times normalization. The tracking_configs API now normalizes scheduled_times / periodic_times / memory_times on 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.14 in the backend test install. aioresponses 0.7.8 (latest) does not pass the stream_writer keyword argument that aiohttp 3.14 made required on ClientResponse, so every aioresponses-mocked HTTP test failed to construct a response. notify-bridge-core declares aiohttp>=3.9 with no upper bound, so CI floated to 3.14.0 — the pin keeps the test environment reproducible in both build.yml and release.yml until aioresponses ships an aiohttp-3.14-compatible release (11593ea)

    Refactoring

    • Shared time-list service. A new services/time_list.py exposes normalize_time_list (raising TimeListError) and a lenient parse_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.toml enabling semantic embeddings, call-graph, BM25, and auto-update for the vex code-search index (d01e519)

    All Commits
    • 8065e6efeat(immich): multi-time-point scheduling for scheduled/periodic/memory (alexei.dolgolyov)
    • 11593eafix(ci): pin aiohttp<3.14 in backend test deps (alexei.dolgolyov)
    • d01e519chore: add vex semantic-search config (alexei.dolgolyov)

    Changelog

    6877c4d chore: release v0.10.0
    d01e519 chore: add vex semantic-search config
    11593ea fix(ci): pin aiohttp<3.14 in backend test deps
    8065e6e feat(immich): multi-time-point scheduling for scheduled/periodic/memory

    Downloads