2a6140a6b1
Pre-push code review flagged the inline `with suppress(OperationalError)` ALTERs as silently eating real errors. The project still uses inline init_db migrations (CLAUDE.md aspires to Alembic but the runtime path is inline), so as a minimum: add a `_try_migrate` helper that distinguishes already-applied (debug log) from genuine failures (warning log). Apply it to the Zigbee-related migrations only — the legacy ALTERs above remain unchanged in this commit's scope.