From f12500545e2f185fedd474bd2a9de76e2c12b0aa Mon Sep 17 00:00:00 2001 From: Ashish Huddar Date: Sun, 5 Apr 2026 17:42:59 +0530 Subject: [PATCH] Infer terminal PR state without SCM --- .../src/lib/__tests__/dashboard-page-data.fast-path.test.ts | 5 +++-- packages/web/src/lib/dashboard-page-data.ts | 5 +++-- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/packages/web/src/lib/__tests__/dashboard-page-data.fast-path.test.ts b/packages/web/src/lib/__tests__/dashboard-page-data.fast-path.test.ts index d653b9916..9fd6b8221 100644 --- a/packages/web/src/lib/__tests__/dashboard-page-data.fast-path.test.ts +++ b/packages/web/src/lib/__tests__/dashboard-page-data.fast-path.test.ts @@ -59,9 +59,9 @@ describe("getDashboardPageData fast path", () => { hoisted.listDashboardOrchestratorsMock.mockReturnValue([{ id: "orch-1", projectId: "docs", projectName: "Docs" }]); }); - it("runs fast enrichment, uses cache-only PR hydration, and infers merged state for terminal cache misses", async () => { + it("runs fast enrichment, uses cache-only PR hydration, and infers merged state for terminal cache misses even without SCM", async () => { const noPrCore = { id: "session-no-pr", status: "working", pr: null }; - const noScmCore = { id: "session-no-scm", status: "working", pr: { number: 2 } }; + const noScmCore = { id: "session-no-scm", status: "merged", pr: { number: 2 } }; const mergedCore = { id: "session-merged", status: "merged", pr: { number: 3 } }; const allSessions = [noPrCore, noScmCore, mergedCore]; @@ -100,6 +100,7 @@ describe("getDashboardPageData fast path", () => { mergedCore.pr, { cacheOnly: true }, ); + expect(dashboardNoScm.pr.state).toBe("merged"); expect(dashboardMerged.pr.state).toBe("merged"); expect(pageData.sessions).toEqual([dashboardNoPr, dashboardNoScm, dashboardMerged]); }); diff --git a/packages/web/src/lib/dashboard-page-data.ts b/packages/web/src/lib/dashboard-page-data.ts index 372be3525..994395667 100644 --- a/packages/web/src/lib/dashboard-page-data.ts +++ b/packages/web/src/lib/dashboard-page-data.ts @@ -75,8 +75,9 @@ export const getDashboardPageData = cache(async function getDashboardPageData(pr if (!core.pr) continue; const projectConfig = resolveProject(core, config.projects); const scm = getSCM(registry, projectConfig); - if (!scm) continue; - await enrichSessionPR(pageData.sessions[i], scm, core.pr, { cacheOnly: true }); + if (scm) { + await enrichSessionPR(pageData.sessions[i], scm, core.pr, { cacheOnly: true }); + } // For terminal sessions with cache-miss PRs, infer state from session status // to avoid showing merged/closed PRs as "open" until client refresh