From 0d6e658dae0c2ef23c1bb62737534b246f203482 Mon Sep 17 00:00:00 2001 From: Test User Date: Sat, 23 May 2026 09:30:18 +0530 Subject: [PATCH 1/2] fix: make landing smoke heading selector exact --- e2e/landing.spec.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/e2e/landing.spec.js b/e2e/landing.spec.js index db1fd5d8e..55a83be5c 100644 --- a/e2e/landing.spec.js +++ b/e2e/landing.spec.js @@ -3,7 +3,7 @@ import { expect, test } from "@playwright/test"; test("landing page renders GitHub sign-in entrypoint", async ({ page }) => { await page.goto("/"); - await expect(page.getByRole("heading", { name: "DevTrack" })).toBeVisible(); + await expect(page.getByRole("heading", { name: "DevTrack", exact: true })).toBeVisible(); await expect( page.getByRole("link", { name: "Sign in with GitHub" }), ).toHaveAttribute("href", /\/api\/auth\/signin\/github\?callbackUrl=\/dashboard/); From 1d74b4bf2dd679c8078a6115da142c9f18272e54 Mon Sep 17 00:00:00 2001 From: Test User Date: Sat, 23 May 2026 10:23:50 +0530 Subject: [PATCH 2/2] fix: use database transaction for local coding sync to prevent partial failures --- e2e/landing.spec.js | 2 +- src/app/api/local-coding/sync/route.ts | 10 ++++++---- 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/e2e/landing.spec.js b/e2e/landing.spec.js index 55a83be5c..6610bae78 100644 --- a/e2e/landing.spec.js +++ b/e2e/landing.spec.js @@ -18,4 +18,4 @@ test("dashboard stays protected for unauthenticated users", async ({ page }) => await expect(page).toHaveURL(/\/$/); await expect(page.getByRole("link", { name: "Sign in with GitHub" })).toBeVisible(); -}); +}); \ No newline at end of file diff --git a/src/app/api/local-coding/sync/route.ts b/src/app/api/local-coding/sync/route.ts index 56df39a34..c1c22940c 100644 --- a/src/app/api/local-coding/sync/route.ts +++ b/src/app/api/local-coding/sync/route.ts @@ -122,10 +122,12 @@ export async function POST(req: NextRequest) { project_count: session.projectCount || 0, })); - for (const record of records) { - await supabaseAdmin - .from("local_coding_sessions") - .upsert(record, { onConflict: "user_id,date" }); + const { error: upsertError } = await supabaseAdmin + .from("local_coding_sessions") + .upsert(records, { onConflict: "user_id,date" }); + + if (upsertError) { + return Response.json({ error: "Failed to sync sessions" }, { status: 500 }); } return Response.json({