From fc078f0676d07fdc82e730c5c1bbc1f54ab6457b Mon Sep 17 00:00:00 2001 From: Cursor Agent Date: Wed, 29 Jul 2026 11:13:21 +0000 Subject: [PATCH 1/3] fix: use prebuilt sqlite bindings on Node 26 Co-authored-by: Kent C. Dodds --- package.json | 3 +++ 1 file changed, 3 insertions(+) diff --git a/package.json b/package.json index d90269d..19c6f78 100644 --- a/package.json +++ b/package.json @@ -44,6 +44,9 @@ "exercises/*/*", "extra/*" ], + "overrides": { + "better-sqlite3": "13.0.2" + }, "engines": { "node": ">=24.0.0", "npm": ">=8.16.0", From c5de28946b2afad7758024836fba21b3c02f9105 Mon Sep 17 00:00:00 2001 From: Cursor Agent Date: Wed, 29 Jul 2026 11:23:12 +0000 Subject: [PATCH 2/3] fix: make deploy validation installs deterministic Co-authored-by: Kent C. Dodds --- .github/workflows/validate.yml | 3 ++- epicshop/post-set-playground.js | 2 ++ epicshop/pre-set-playground.js | 1 + package.json | 3 +++ 4 files changed, 8 insertions(+), 1 deletion(-) diff --git a/.github/workflows/validate.yml b/.github/workflows/validate.yml index 1f702fa..df692a3 100644 --- a/.github/workflows/validate.yml +++ b/.github/workflows/validate.yml @@ -35,6 +35,7 @@ jobs: env: # Kept getting npm ECOMPROMISED errors on windows. This fixed it. npm_config_cache: ${{ runner.temp }}/npm-cache + npm_config_package_lock: false SKIP_PLAYWRIGHT: true SKIP_PLAYGROUND: true run: | @@ -86,7 +87,7 @@ jobs: node-version: 26 - name: 📦 Install dependencies - run: npm ci + run: npm install --package-lock=false - name: 🎭 Install Playwright browser if: ${{ hashFiles('epicshop/test.js') != '' }} diff --git a/epicshop/post-set-playground.js b/epicshop/post-set-playground.js index 6e43b7c..70635fb 100644 --- a/epicshop/post-set-playground.js +++ b/epicshop/post-set-playground.js @@ -1,8 +1,10 @@ // Runs AFTER epicshop copies an exercise over the playground. Restores the .env // and prisma/data.db that pre-set-playground.js stashed, so the student's API key // and database survive every move between exercises. +import console from 'node:console' import fs from 'node:fs' import path from 'node:path' +import process from 'node:process' const playgroundDir = process.env.EPICSHOP_PLAYGROUND_DEST_DIR if (playgroundDir) { diff --git a/epicshop/pre-set-playground.js b/epicshop/pre-set-playground.js index 595e592..9d4f02f 100644 --- a/epicshop/pre-set-playground.js +++ b/epicshop/pre-set-playground.js @@ -5,6 +5,7 @@ // persist across the whole workshop. import fs from 'node:fs' import path from 'node:path' +import process from 'node:process' const playgroundDir = process.env.EPICSHOP_PLAYGROUND_DEST_DIR if (playgroundDir) { diff --git a/package.json b/package.json index 19c6f78..2076152 100644 --- a/package.json +++ b/package.json @@ -45,6 +45,9 @@ "extra/*" ], "overrides": { + "@sentry/node": "10.68.0", + "@sentry/profiling-node": "10.68.0", + "@sentry/react-router": "10.68.0", "better-sqlite3": "13.0.2" }, "engines": { From 3579a34fbdf7612656b8983f77997313825e8f3a Mon Sep 17 00:00:00 2001 From: Cursor Agent Date: Wed, 29 Jul 2026 11:24:24 +0000 Subject: [PATCH 3/3] fix: pin complete Sentry runtime graph Co-authored-by: Kent C. Dodds --- epicshop/package.json | 6 ++++++ package.json | 1 + 2 files changed, 7 insertions(+) diff --git a/epicshop/package.json b/epicshop/package.json index caf0e89..829189b 100644 --- a/epicshop/package.json +++ b/epicshop/package.json @@ -13,5 +13,11 @@ }, "devDependencies": { "@types/fs-extra": "11.0.4" + }, + "overrides": { + "@sentry/core": "10.68.0", + "@sentry/node": "10.68.0", + "@sentry/profiling-node": "10.68.0", + "@sentry/react-router": "10.68.0" } } diff --git a/package.json b/package.json index 2076152..62cadcd 100644 --- a/package.json +++ b/package.json @@ -45,6 +45,7 @@ "extra/*" ], "overrides": { + "@sentry/core": "10.68.0", "@sentry/node": "10.68.0", "@sentry/profiling-node": "10.68.0", "@sentry/react-router": "10.68.0",