From 591f4317e862b688ca2627ed1cbf0822da1057c4 Mon Sep 17 00:00:00 2001 From: John McLear Date: Wed, 27 May 2026 13:11:31 +0100 Subject: [PATCH] =?UTF-8?q?test(ci):=20probe=20K=20=E2=80=94=20Node=2022?= =?UTF-8?q?=20added=20to=20Windows-no-plugins=20matrix=20as=20comparator?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Probe A (PR #7855) ruled out Defender, and the captured tasklist showed the dying node.exe was completely healthy 1 second before death with no Application/System/Defender event entry — fingerprint matches __fastfail. ProcDump JIT debugger (probe G, PR #7862) catches that, but only IF the flake fires. Meanwhile bisecting against Node version costs ~1 extra job per push and gives a clean signal: - Win-no-plugins (Node 24): the current matrix entry, ~20-30% flake - Win-no-plugins (Node 22): comparator. If flake rate drops to ~0 → Node 24 specific (libuv IOCP regression or similar between v22 and v24). If unchanged → Node version ruled out, look at something else. Scoped to Win-no-plugins only because that matrix is the cheapest (no plugin install step). The Node 22 entry gets `engines-strict=false` appended to .npmrc just before pnpm install, since Etherpad's `engines.node: >=24` would otherwise refuse the install. Frozen lockfile resolution is unaffected — pnpm-lock.yaml is engine-agnostic. Co-Authored-By: Claude Opus 4.7 (1M context) --- .github/workflows/backend-tests.yml | 21 +++++++++++++++++++-- 1 file changed, 19 insertions(+), 2 deletions(-) diff --git a/.github/workflows/backend-tests.yml b/.github/workflows/backend-tests.yml index 08c8e58e240..55785f7614f 100644 --- a/.github/workflows/backend-tests.yml +++ b/.github/workflows/backend-tests.yml @@ -179,8 +179,12 @@ jobs: strategy: fail-fast: false matrix: - # Etherpad requires Node >= 24 (see package.json engines.node). - node: ${{ fromJSON('[24]') }} + # PROBE K — Node 22 added as comparator vs 24. If 22 doesn't + # exhibit the silent ELIFECYCLE flake, we have a clear bisection + # target between the two; if it does, Node version isn't the + # cause. engines-strict relaxed for Node 22 via the per-step + # `.npmrc` override below. + node: ${{ fromJSON('[22, 24]') }} name: Windows without plugins runs-on: windows-latest steps: @@ -203,6 +207,19 @@ jobs: with: node-version: ${{ matrix.node }} cache: pnpm + - + # PROBE K — relax engines-strict for the Node 22 comparator matrix + # entry. Etherpad's src/package.json declares `engines.node: >=24`, + # which pnpm enforces. We want to compare flake rate on Node 22 vs + # Node 24 as a bisection probe; override on a per-job basis so the + # rest of the matrix stays strict. + name: Relax engines-strict for Node ${{ matrix.node }} + if: matrix.node != 24 + shell: bash + run: | + echo "engine-strict=false" >> .npmrc + echo "engines-strict=false" >> .npmrc + cat .npmrc - name: Install all dependencies and symlink for ep_etherpad-lite run: pnpm install --frozen-lockfile