-
Notify Bridge 0.2.0
StableRelease / release (push) Successful in 1m20sreleased this
2026-04-22 01:35:24 +03:00 | 112 commits to master since this releasev0.2.0 (2026-04-22)
First feature release since the initial
v0.1.0cut: a broad polish pass across
the backend, frontend, and schema, plus two fixes landed on top.Features
Immich commands & tracking
- Per-chat album scope for Immich commands (
/search,/latest,/memory, etc.) with a new Edit album scope modal on command-tracker listeners (inherit or explicit multiselect) (a7a2b4e) /searchand/findaccept a trailing page number; Immich clientsearch_smart/search_metadatatake apageparam (a7a2b4e)- Auto-organize rules now set the target album's thumbnail to the first added image (falls back to any asset type) when the album has none (a7a2b4e)
Dashboard & status
- Action events (
action_success/action_partial/action_failed) are emitted on every non-dry-run and surfaced on the dashboard with icons, filters, and colors (a7a2b4e) - Clear-events button + confirm modal on the dashboard (
DELETE /api/status/events, scoped to the current user) (a7a2b4e) - Event rows render live tracker/provider/action names via FK join, with snapshot fallback when an entity has been deleted (a7a2b4e)
Backup & restore
- Full backup restore flow: prepare-restore writes a pending marker, a restart banner offers Apply-now / Apply-later, and the lifespan hook applies on next startup and archives under
data/applied_restores/(a7a2b4e) - Manual Create backup button on the Backup page (
POST /api/backup/files, same format as scheduled) (a7a2b4e) apply-restartsends SIGTERM so the lifespan shutdown runs;NOTIFY_BRIDGE_SUPERVISEDenv var gates the button (a7a2b4e)
Users & deletion protection
PATCH /api/users/{id}for username and role changes with a last-admin guard, plus an Edit user modal on the Users page (a7a2b4e)- Deletion protection now returns structured
{message, entity, blocked_by};ApiErrorcarries.blockedByand the newBlockedByModalis wired into 8 deletion flows (a7a2b4e)
Telegram
- Per-receiver locale for Telegram test messages (resolves
TelegramChat.language_overrideper chat instead of applying the first receiver's locale to everyone) (a7a2b4e) - Telegram poller detects the "webhook is active" 409 and auto-calls
deleteWebhookfor bots whose DBupdate_modeis polling (throttled per bot) (a7a2b4e) - New
TelegramClient.get_chatandset_album_thumbnailhelpers (CLAUDE.md rule 6 — all Bot API calls go throughTelegramClient) (a7a2b4e)
Form UX
- Auto-select first available tracking / template / command / config + bot on create forms (trackers, command-trackers, targets, template/command configs) (a7a2b4e)
- Global provider selector is visible even when there is only one provider (a7a2b4e)
- Telegram target
disable_url_previewdefaults totrue(a7a2b4e)
Bug Fixes
- Telegram target list: load chats/listeners before expanding so the slide animation computes the right height (cf4976d)
- Test dispatch falls back to tracker defaults for tracking/template config (matching
load_link_data), distinguishes "no template config linked" vs. "slot missing in linked config", and the frontendtestTrackerTargetnow treats{success:false,error:...}in a 2xx body as a failure instead of flashing a success snack (80c034d) - Immich person-asset lookup switched from the removed
GET /api/people/{id}/assetstoPOST /api/search/metadatawithpersonIds— fixes/personand auto-organize rules silently returning zero candidates on Immich 1.106+ (a7a2b4e) add_assets_to_albumnow surfaces the Immich error body on non-2xx responses (a7a2b4e)- Immich tracker "Checking links" parallelised (concurrency cap 6) (a7a2b4e)
Development / Internal
Schema / Migrations
event_log: adduser_id,action_id,action_name(+ defensive migration and backfill ofuser_idfromnotification_tracker) (a7a2b4e)command_tracker_listener: addallowed_album_ids(a7a2b4e)
Refactors & Internals
- Bounded concurrency (semaphores) in
NotificationDispatcher._preload_asset_dataand_refresh_telegram_chat_titles; chat-title sweep extended to 24h sincesave_chat_from_webhookcovers active chats opportunistically (a7a2b4e) - Periodic-summary test path reuses the shared
collect_scheduled_assetsprimitive (limit=0) so test and production go through one path (a7a2b4e) - New
fetchAuthhelper for multipart/binary calls (reusesapi()'s refresh +ApiErrormapping) (a7a2b4e) parseDatehelper for consistent UTC date rendering (a7a2b4e)
Seeds
- Rename "Default Commands" → "Default Immich Commands";
track_assets_removednow defaults toFalse(a7a2b4e)
All Commits
Hash Message Author cf4976d fix(telegram): load chats/listeners before expanding to fix slide animation height alexei.dolgolyov 80c034d fix(test-dispatch): fall back to tracker defaults, surface soft errors alexei.dolgolyov a7a2b4e feat: large polish pass — UX fixes, per-chat scope, restore/backup, action events alexei.dolgolyov Changelog
fe92b20chore: release v0.2.0
cf4976dfix(telegram): load chats/listeners before expanding to fix slide animation height
80c034dfix(test-dispatch): fall back to tracker defaults, surface soft errors
a7a2b4efeat: large polish pass — UX fixes, per-chat scope, restore/backup, action eventsDownloads
- Per-chat album scope for Immich commands (