diff --git a/packages/db/src/backup-lib.ts b/packages/db/src/backup-lib.ts index 4a2ca64a..c148b8ba 100644 --- a/packages/db/src/backup-lib.ts +++ b/packages/db/src/backup-lib.ts @@ -228,7 +228,11 @@ export function createBufferedTextFileWriter(filePath: string, maxBufferedBytes stream.destroy(); await pendingWrite.catch(() => {}); if (existsSync(filePath)) { - unlinkSync(filePath); + try { + unlinkSync(filePath); + } catch { + // Preserve the original backup failure if temporary file cleanup also fails. + } } }, }; diff --git a/ui/src/lib/keyboardShortcuts.test.ts b/ui/src/lib/keyboardShortcuts.test.ts index 90d4281a..7fa66bc3 100644 --- a/ui/src/lib/keyboardShortcuts.test.ts +++ b/ui/src/lib/keyboardShortcuts.test.ts @@ -33,6 +33,13 @@ describe("keyboardShortcuts helpers", () => { expect(hasBlockingShortcutDialog(document.createElement("div"))).toBe(false); }); + it("ignores non-dialog elements that happen to be aria-modal", () => { + const root = document.createElement("div"); + root.innerHTML = `
`; + + expect(hasBlockingShortcutDialog(root)).toBe(false); + }); + it("archives only the first clean y press", () => { const button = document.createElement("button"); diff --git a/ui/src/lib/keyboardShortcuts.ts b/ui/src/lib/keyboardShortcuts.ts index 0983e218..7007ea69 100644 --- a/ui/src/lib/keyboardShortcuts.ts +++ b/ui/src/lib/keyboardShortcuts.ts @@ -19,7 +19,7 @@ export function isKeyboardShortcutTextInputTarget(target: EventTarget | null): b } export function hasBlockingShortcutDialog(root: ParentNode = document): boolean { - return !!root.querySelector("[role='dialog'], [aria-modal='true']"); + return !!root.querySelector("[role='dialog'][aria-modal='true']"); } export function isModifierOnlyKey(key: string): boolean {