From 95cb13c08db2e0f165c3fbcd0f00e1297f0b98fc Mon Sep 17 00:00:00 2001 From: Mikael Hugo Date: Thu, 7 May 2026 05:54:18 +0200 Subject: [PATCH] fix: isolate backlog db per project --- .../extensions/sf/commands-backlog.js | 7 ++--- .../extensions/sf/tests/backlog-db.test.mjs | 29 +++++++++++++++++++ 2 files changed, 32 insertions(+), 4 deletions(-) diff --git a/src/resources/extensions/sf/commands-backlog.js b/src/resources/extensions/sf/commands-backlog.js index 4d30bbfd3..0f10e8685 100644 --- a/src/resources/extensions/sf/commands-backlog.js +++ b/src/resources/extensions/sf/commands-backlog.js @@ -7,9 +7,9 @@ */ import { existsSync, mkdirSync, readFileSync } from "node:fs"; import { join } from "node:path"; +import { sfRoot } from "./paths.js"; import { addBacklogItem as addBacklogItemToDb, - isDbAvailable, listBacklogItems, openDatabase, removeBacklogItem as removeBacklogItemFromDb, @@ -17,14 +17,13 @@ import { } from "./sf-db.js"; function ensureBacklogDb(basePath) { - if (isDbAvailable()) return true; - const sfDir = join(basePath, ".sf"); + const sfDir = sfRoot(basePath); mkdirSync(sfDir, { recursive: true }); return openDatabase(join(sfDir, "sf.db")); } function legacyBacklogPath(basePath) { - return join(basePath, ".sf", "WORK-QUEUE.md"); + return join(sfRoot(basePath), "WORK-QUEUE.md"); } function parseLegacyBacklog(basePath) { diff --git a/src/resources/extensions/sf/tests/backlog-db.test.mjs b/src/resources/extensions/sf/tests/backlog-db.test.mjs index ca00755e7..f822a9259 100644 --- a/src/resources/extensions/sf/tests/backlog-db.test.mjs +++ b/src/resources/extensions/sf/tests/backlog-db.test.mjs @@ -85,3 +85,32 @@ test("backlog_list_when_legacy_work_queue_exists_imports_once_to_db", async () = assert.equal(items[0].source, "legacy-work-queue"); assert.match(messages.at(-1).message, /999\.7/); }); + +test("backlog_add_when_switching_projects_uses_current_project_db", async () => { + const first = makeProject(); + const second = makeProject(); + mkdirSync(join(first, ".sf"), { recursive: true }); + mkdirSync(join(second, ".sf"), { recursive: true }); + const previousCwd = process.cwd(); + try { + process.chdir(first); + await handleBacklog("add First project item", makeCtx([]), null); + process.chdir(second); + await handleBacklog("add Second project item", makeCtx([]), null); + } finally { + process.chdir(previousCwd); + } + + closeDatabase(); + openDatabase(join(first, ".sf", "sf.db")); + assert.deepEqual( + listBacklogItems().map((item) => item.title), + ["First project item"], + ); + closeDatabase(); + openDatabase(join(second, ".sf", "sf.db")); + assert.deepEqual( + listBacklogItems().map((item) => item.title), + ["Second project item"], + ); +});