You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
The frontend workflow is red on master. The job that fails is node-next-test, not the real test job — Test app passes in the same run. As far as I can tell the job has never been able to pass, so this is a CI configuration problem rather than a broken frontend.
node-next-test runs a matrix of Node 16, 18 and 20. None of them satisfy 14.x, so npm install refuses on every entry.
This is not a regression from #847. The job was added on 2023-08-25 in 52e7d984, "Add CI for next Node versions for fun", and at that commit engines.node was already "12.22.6 || ^14" with engine-strict=true — which Node 16, 18 and 20 do not satisfy either. So no combination of matrix entry and engines value on master has ever worked.
Why it only looks broken sometimes
The job sits behind a paths filter (frontend/**, .github/workflows/**). Most merges to master do not touch those paths, so the job is skipped and the workflow reports success in about 10 seconds. #847 was the first change in a while that did touch them, so the job actually ran, and failed. The same thing happened at #815 in November 2025.
So the badge flips green and red based on whether the job ran, not on whether anything works. That is worth fixing on its own, because it makes the signal meaningless.
Options
Make it non-blocking — continue-on-error: true on the job. This matches what it was for; the commit that added it says "for fun", i.e. a forward-compatibility probe, not a gate.
Delete it, and reintroduce it as part of an actual Node upgrade.
Do the Node upgrade. There is already an unmerged node-upgrade branch (9a8f8754, "bot changes for node 14 to 20") that sets engines to {"node": ">=18.x", "npm": ">=8.x"} along with a large package-lock.json regeneration. That is the real fix, and much the biggest of the three.
Options 1 and 2 stop master being red today; option 3 is the actual goal.
Related: the Node versions named in the repo do not agree
The four that the frontend actually uses agree on 14, so local setup is fine —
asdf reads the nearest .tool-versions, which in frontend/ pins 14.21.3. It is
the repo-level documentation that is stale: the root .tool-versions and the
README Environment list still say 12.22.6, which is not the version the frontend
has used since #472. Minor, but worth correcting whenever this area is touched.
Found while looking at the CI badges in #871, which is a separate docs-only problem. Neither is related to #870.
The
frontendworkflow is red onmaster. The job that fails isnode-next-test, not the real test job —Test apppasses in the same run. As far as I can tell the job has never been able to pass, so this is a CI configuration problem rather than a broken frontend.What fails
Run 29792737096, on the merge of #847, all three matrix entries:
It never reaches
npm run test— it dies atnpm install.Why
Two settings combine:
frontend/.npmrcsetsengine-strict=true, which turns anenginesmismatch from a warning into a hard error. Added 2021-10-12 in Downgrade Node to work around runtime issue #472.frontend/package.jsondeclares"engines": {"bower": "1.x", "node": "14.x", "npm": "6.x"}.node-next-testruns a matrix of Node16,18and20. None of them satisfy14.x, sonpm installrefuses on every entry.This is not a regression from #847. The job was added on 2023-08-25 in
52e7d984, "Add CI for next Node versions for fun", and at that commitengines.nodewas already"12.22.6 || ^14"withengine-strict=true— which Node 16, 18 and 20 do not satisfy either. So no combination of matrix entry andenginesvalue onmasterhas ever worked.Why it only looks broken sometimes
The job sits behind a paths filter (
frontend/**,.github/workflows/**). Most merges tomasterdo not touch those paths, so the job is skipped and the workflow reports success in about 10 seconds. #847 was the first change in a while that did touch them, so the job actually ran, and failed. The same thing happened at #815 in November 2025.So the badge flips green and red based on whether the job ran, not on whether anything works. That is worth fixing on its own, because it makes the signal meaningless.
Options
continue-on-error: trueon the job. This matches what it was for; the commit that added it says "for fun", i.e. a forward-compatibility probe, not a gate.node-upgradebranch (9a8f8754, "bot changes for node 14 to 20") that setsenginesto{"node": ">=18.x", "npm": ">=8.x"}along with a largepackage-lock.jsonregeneration. That is the real fix, and much the biggest of the three.Options 1 and 2 stop
masterbeing red today; option 3 is the actual goal.Related: the Node versions named in the repo do not agree
frontend/.tool-versions14.21.3frontend/package.jsonengines14.xfrontend/Dockerfile14.21.3-bullseyefrontend.ymlTest appjob14.tool-versions, README Environment list, CLAUDE.md12.22.6The four that the frontend actually uses agree on 14, so local setup is fine —
asdf reads the nearest
.tool-versions, which infrontend/pins 14.21.3. It isthe repo-level documentation that is stale: the root
.tool-versionsand theREADME Environment list still say 12.22.6, which is not the version the frontend
has used since #472. Minor, but worth correcting whenever this area is touched.
Found while looking at the CI badges in #871, which is a separate docs-only problem. Neither is related to #870.