From f9669cee33dbc38095de47bbd9d141d8fe6e9dd9 Mon Sep 17 00:00:00 2001 From: ozymandiashh <234437643+ozymandiashh@users.noreply.github.com> Date: Tue, 4 Aug 2026 04:00:39 +0300 Subject: [PATCH] test: absorb the teardown write race in the context-tree API suite server.close() only stops new connections; an in-flight fire-and-forget cache save can land a file mid-recursive-rm, surfacing as ENOTEMPTY on slower runners (run #5). fs.rm's built-in retries absorb the window. --- tests/context-tree-api-prefix.test.ts | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/tests/context-tree-api-prefix.test.ts b/tests/context-tree-api-prefix.test.ts index f95ee09..2c7f0d1 100644 --- a/tests/context-tree-api-prefix.test.ts +++ b/tests/context-tree-api-prefix.test.ts @@ -56,8 +56,12 @@ describe('web dashboard /api/context/tree: session id prefix', () => { afterEach(async () => { await new Promise((resolve) => server.close(() => resolve())) - await rm(homeDir, { recursive: true, force: true }) - await rm(cacheDir, { recursive: true, force: true }) + // close() only stops new connections; a request handler's fire-and-forget + // cache save can still land a file mid-recursive-rm, which surfaces as + // ENOTEMPTY on slower runners. fs.rm's built-in retries absorb exactly + // that window. + await rm(homeDir, { recursive: true, force: true, maxRetries: 10, retryDelay: 50 }) + await rm(cacheDir, { recursive: true, force: true, maxRetries: 10, retryDelay: 50 }) }) it('resolves a full session id (control case)', async () => {