d422f7103e
hermes backup freezes mid-archive when a .db file under HERMES_HOME is locked by another process — e.g. a live Chromium profile database held with an exclusive lock by a running browser. sqlite3.Connection.backup() retries SQLITE_BUSY indefinitely and never honors the connection's busy timeout, while a plain statement on the same source fails cleanly after ~5s with "database is locked". Fixes: - Probe the source with a cheap read before snapshotting, so a locked database fails fast instead of hanging the whole backup. - Add a watchdog that interrupts the source connection after 15 minutes as a last resort for pathological cases. - Exclude browser-profiles/ from full backups: the CDP browser profile is live, regenerable (cache + re-login), and unsafe to snapshot while running. On a real install this cut the backup from 28,396 files / 1.1 GB to ~4,000 files / 548 MB, completing in ~33s instead of hanging. The pre-update automatic backup shares this code path and was equally at risk. Adds a regression test that holds an EXCLUSIVE transaction in a separate process and asserts _safe_copy_db returns False in bounded time.