From 9eac5ecf01e4d26b769403e30188064e0c669857 Mon Sep 17 00:00:00 2001 From: Codeman maintainer Date: Thu, 5 Nov 2026 00:21:12 +0100 Subject: [PATCH 1/3] test: wait for the first read before starting the other edit history sessions The gate belonged to whichever read arrived first, and sessions load their stores independently, so under CI timing another session took it, the loop never reached release() and the test timed out (master, CI run 41930703100). The code cannot block one session on another: sync() only waits on its own slot. Co-Authored-By: Claude Opus 5.5 --- test/edit-history-sync.test.ts | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/test/edit-history-sync.test.ts b/test/edit-history-sync.test.ts index 4a9f6266..60cd745b 100644 --- a/test/edit-history-sync.test.ts +++ b/test/edit-history-sync.test.ts @@ -428,14 +428,20 @@ describe('EditHistorySync', () => { host.append('main', editLine('t1', T0, '/w/a.ts')); const orig = host.read; let first = true; + let inRead!: () => void; + const reachedRead = new Promise((r) => (inRead = r)); host.read = async (...a) => { if (first) { first = false; + inRead(); await gate; } return orig(...a); }; const slow = sync.sync(local); + // Only once s1 holds the gate: the sessions load their stores independently, so a later one + // could reach the read first, take the gate and hang the loop below before `release()`. + await reachedRead; for (let i = 1; i <= MAX_LOADED_STORES + 1; i++) await sync.sync({ ...local, id: `s1-${i}` }); release(); expect(await slow).toEqual({ state: 'ok' }); From aa463d9d28a4be9b5d07eecadd210c186a6afdb3 Mon Sep 17 00:00:00 2001 From: Codeman maintainer Date: Thu, 5 Nov 2026 14:15:43 +0100 Subject: [PATCH 2/3] ci: pin the browser suite to ubuntu-24.04 ubuntu-latest moved to 26.04 and the locked Playwright 1.60.0 refuses to install chromium there (support starts at 1.61.0), so the nightly stopped before running a test. Pin to the image of the last green run, so a failure now points at our code rather than at a new OS and Chromium. Unpin when Playwright is bumped. Co-Authored-By: Claude Opus 5.5 --- .github/workflows/browser-suite.yml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/.github/workflows/browser-suite.yml b/.github/workflows/browser-suite.yml index caadba59..9dea6cbc 100644 --- a/.github/workflows/browser-suite.yml +++ b/.github/workflows/browser-suite.yml @@ -21,7 +21,9 @@ permissions: jobs: browser: name: Playwright browser suite - runs-on: ubuntu-latest + # Pinned, not ubuntu-latest: that moved to 26.04 on 2026-11-05 and the locked Playwright 1.60.0 + # refuses to install there (support starts at 1.61.0). Unpin when Playwright is bumped. + runs-on: ubuntu-24.04 timeout-minutes: 60 steps: From 46b85fa6d0c4892873453d75dd60a2306609c500 Mon Sep 17 00:00:00 2001 From: Codeman maintainer Date: Thu, 5 Nov 2026 14:22:41 +0100 Subject: [PATCH 3/3] chore: bump Playwright to 1.64.1 and unpin the browser suite Playwright supports Ubuntu 26.04 from 1.61.0, so the browser suite can go back to ubuntu-latest. Raises the floor in package.json as well, because the old ^1.58.0 still admitted versions that refuse to install on the image every workflow now runs on. Bundled Chromium moves from 148 to 156. Co-Authored-By: Claude Opus 5.5 --- .github/workflows/browser-suite.yml | 4 +-- package-lock.json | 38 ++++++++--------------------- package.json | 2 +- 3 files changed, 12 insertions(+), 32 deletions(-) diff --git a/.github/workflows/browser-suite.yml b/.github/workflows/browser-suite.yml index 9dea6cbc..caadba59 100644 --- a/.github/workflows/browser-suite.yml +++ b/.github/workflows/browser-suite.yml @@ -21,9 +21,7 @@ permissions: jobs: browser: name: Playwright browser suite - # Pinned, not ubuntu-latest: that moved to 26.04 on 2026-11-05 and the locked Playwright 1.60.0 - # refuses to install there (support starts at 1.61.0). Unpin when Playwright is bumped. - runs-on: ubuntu-24.04 + runs-on: ubuntu-latest timeout-minutes: 60 steps: diff --git a/package-lock.json b/package-lock.json index 56a2e9bb..ff1b96da 100644 --- a/package-lock.json +++ b/package-lock.json @@ -63,7 +63,7 @@ "exceljs": "4.4.0", "fflate": "0.8.3", "pixelmatch": "^6.0.0", - "playwright": "^1.58.0", + "playwright": "^1.64.1", "pngjs": "^7.0.0", "postcss": "^8.5.15", "prettier": "^3.4.0", @@ -9736,50 +9736,32 @@ } }, "node_modules/playwright": { - "version": "1.60.0", - "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.60.0.tgz", - "integrity": "sha512-hheHdokM8cdqCb0lcE3s+zT4t4W+vvjpGxsZlDnikarzx8tSzMebh3UiFtgqwFwnTnjYQcsyMF8ei2mCO/tpeA==", + "version": "1.64.1", + "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.64.1.tgz", + "integrity": "sha512-HCrVhHr5QQuwYoswEUGTb7gGp522yflbv/ST8nF4sFWGuLjQCt17Q/EubpGGSNKYn1tsTCPZxqHhHCfVURu7UA==", "dev": true, "license": "Apache-2.0", "dependencies": { - "playwright-core": "1.60.0" + "playwright-core": "1.64.1" }, "bin": { "playwright": "cli.js" }, "engines": { - "node": ">=18" - }, - "optionalDependencies": { - "fsevents": "2.3.2" + "node": ">=20" } }, "node_modules/playwright-core": { - "version": "1.60.0", - "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.60.0.tgz", - "integrity": "sha512-9bW6zvX/m0lEbgTKJ6YppOKx8H3VOPBMOCFh2irXFOT4BbHgrx5hPjwJYLT40Lu+4qtD36qKc/Hn56StUW57IA==", + "version": "1.64.1", + "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.64.1.tgz", + "integrity": "sha512-BC4s8y6SEVA6Q1rSxZTto8hI1KUI3xXlHGZgvGqP4IqPdI/a6FX9H29IDNz7vKo9l21b6LfYosScPL6M3xxyDQ==", "dev": true, "license": "Apache-2.0", "bin": { "playwright-core": "cli.js" }, "engines": { - "node": ">=18" - } - }, - "node_modules/playwright/node_modules/fsevents": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", - "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", - "dev": true, - "hasInstallScript": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + "node": ">=20" } }, "node_modules/pngjs": { diff --git a/package.json b/package.json index 653b835c..d468ef30 100644 --- a/package.json +++ b/package.json @@ -133,7 +133,7 @@ "exceljs": "4.4.0", "fflate": "0.8.3", "pixelmatch": "^6.0.0", - "playwright": "^1.58.0", + "playwright": "^1.64.1", "pngjs": "^7.0.0", "postcss": "^8.5.15", "prettier": "^3.4.0",