From e77f416403671253ba0578f6761d1fd9655b2ca6 Mon Sep 17 00:00:00 2001 From: elkaix Date: Sat, 19 Sep 2026 20:26:18 -0400 Subject: [PATCH 1/2] fix: stabilize legacy workspace session_count test Seed split buckets on a fresh home, then restart so boot projection sees both dirs before asserting the folded session_count. --- .../agent-gateway/test/workspaces.test.ts | 59 ++++++++++++++++--- 1 file changed, 51 insertions(+), 8 deletions(-) diff --git a/packages/agent-gateway/test/workspaces.test.ts b/packages/agent-gateway/test/workspaces.test.ts index 1e2643f46..d37a0bb33 100644 --- a/packages/agent-gateway/test/workspaces.test.ts +++ b/packages/agent-gateway/test/workspaces.test.ts @@ -68,6 +68,44 @@ describe('server-v2 /api/v1/workspaces', () => { delete process.env['PYTHINKER_CODE_WATCH']; }); + async function restartWithFreshHome(): Promise { + if (server !== undefined) { + await server.close(); + server = undefined; + } + if (home !== undefined) { + await new Promise((resolve) => setTimeout(resolve, 25)); + await rm(home, { recursive: true, force: true, maxRetries: 5, retryDelay: 50 } as never); + } + home = await mkdtemp(join(tmpdir(), 'pythinker-server-v2-workspaces-')); + process.env['PYTHINKER_CODE_WATCH'] = '1'; + server = await startServer({ + hostIdentity: TEST_HOST_IDENTITY, + host: '127.0.0.1', + port: 0, + homeDir: home, + logLevel: 'silent', + }); + base = `http://127.0.0.1:${server.port}`; + } + + async function restartSameHome(): Promise { + if (server !== undefined) { + await server.close(); + server = undefined; + } + process.env['PYTHINKER_CODE_WATCH'] = '1'; + server = await startServer({ + hostIdentity: TEST_HOST_IDENTITY, + host: '127.0.0.1', + port: 0, + homeDir: home as string, + logLevel: 'silent', + }); + base = `http://127.0.0.1:${server.port}`; + } + + async function postJson( path: string, body?: unknown, @@ -206,6 +244,7 @@ describe('server-v2 /api/v1/workspaces', () => { }); it('sums session_count across legacy split buckets of one root', async () => { + await restartWithFreshHome(); const typedRoot = 'C:\\Users\\Foo\\Proj'; const lowerRoot = 'c:\\users\\foo\\proj'; const typedId = encodeWorkDirKey(typedRoot); @@ -246,14 +285,18 @@ describe('server-v2 /api/v1/workspaces', () => { }; await seedBucket(typedId, 's-typed', {}); await seedBucket(lowerId, 's-lower', { archived: true, updatedAt: 2 }); - - await vi.waitFor(async () => { - const { body } = await getJson('/api/v1/workspaces'); - expect(body.code).toBe(0); - const unions = body.data.items.filter((w) => [typedId, lowerId].includes(w.id)); - expect(unions).toHaveLength(1); - expect(unions[0]?.session_count).toBe(2); - }); + await restartSameHome(); + + await vi.waitFor( + async () => { + const { body } = await getJson('/api/v1/workspaces'); + expect(body.code).toBe(0); + const unions = body.data.items.filter((w) => [typedId, lowerId].includes(w.id)); + expect(unions).toHaveLength(1); + expect(unions[0]?.session_count).toBe(2); + }, + { timeout: 10_000 }, + ); }); it('adds an additional directory and persists it by default', async () => { From f3dfd4c30d80a2f8d56aa6646b773543347cb165 Mon Sep 17 00:00:00 2001 From: elkaix Date: Sat, 19 Sep 2026 20:45:46 -0400 Subject: [PATCH 2/2] fix: drop unnecessary as never on workspace test rm --- packages/agent-gateway/test/workspaces.test.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/agent-gateway/test/workspaces.test.ts b/packages/agent-gateway/test/workspaces.test.ts index d37a0bb33..bc4b8f73d 100644 --- a/packages/agent-gateway/test/workspaces.test.ts +++ b/packages/agent-gateway/test/workspaces.test.ts @@ -75,7 +75,7 @@ describe('server-v2 /api/v1/workspaces', () => { } if (home !== undefined) { await new Promise((resolve) => setTimeout(resolve, 25)); - await rm(home, { recursive: true, force: true, maxRetries: 5, retryDelay: 50 } as never); + await rm(home, { recursive: true, force: true, maxRetries: 5, retryDelay: 50 }); } home = await mkdtemp(join(tmpdir(), 'pythinker-server-v2-workspaces-')); process.env['PYTHINKER_CODE_WATCH'] = '1';