diff --git a/frontend/eslint.config.js b/frontend/eslint.config.js index a56c710b..88aa8a53 100644 --- a/frontend/eslint.config.js +++ b/frontend/eslint.config.js @@ -82,6 +82,17 @@ export default defineConfig( "CallExpression[callee.object.name='vi'][callee.property.name='mock'] > Literal[value=/^pdfjs-dist/]", message: "Banned: vi.mock('pdfjs-dist', factory) causes a birpc teardown race in browser-mode specs — see ADR 012. Use the libLoader prop injection pattern instead." + }, + { + // ADR 012 / #553. The named mechanism: an async vi.mock factory whose + // body performs `await import(...)` produces a late birpc roundtrip + // during worker teardown. The factory body must be synchronous; if + // you need to share state between the spec and the mock, use + // `vi.hoisted` (see DropZone.svelte.spec.ts). + selector: + "CallExpression[callee.object.name='vi'][callee.property.name='mock'][arguments.1.type='ArrowFunctionExpression'][arguments.1.async=true]:has(AwaitExpression > ImportExpression)", + message: + 'Banned: vi.mock(..., async () => { await import(...) }) causes a birpc teardown race in browser-mode specs — see ADR 012. Use a synchronous factory + vi.hoisted instead.' } ] }