Skip to content

chore(node): update Node.js version to 24.20.0 - #10555

Open
GiladShoham wants to merge 18 commits into
masterfrom
chore/update-nodejs-24
Open

chore(node): update Node.js version to 24.20.0#10555
GiladShoham wants to merge 18 commits into
masterfrom
chore/update-nodejs-24

Conversation

@GiladShoham

@GiladShoham GiladShoham commented Aug 2, 2026

Copy link
Copy Markdown
Member

Update Node.js version to 24.20.0 (latest Node 24 LTS) across the project. This ensures compatibility with the latest features and security patches.

Replaces #9933 (branch renamed from chore/update-nodejs-24-6-0 to chore/update-nodejs-24 and version bumped from 24.13.0 to 24.20.0).

@qodo-free-for-open-source-projects

Copy link
Copy Markdown

PR Summary by Qodo

Update project Node.js baseline to 24.18.1 across CI, Docker, and workspace config

⚙️ Configuration changes 📝 Documentation 🕐 20-40 Minutes

Grey Divider

AI Description

• Bump CI and Docker base images to Node.js 24.18.1 (Node 24 LTS).
• Align workspace engine/tooling constraints to require Node 24.18.1.
• Fix/ignore MDX formatting cases where Prettier escapes JSX comments incorrectly.
Diagram

graph TD
  Dev["Developer"] --> Repo["Repo configs"] --> CI["CircleCI"] --> DockerBuild["Docker build jobs"] --> Registry[("Published images")]
  Repo --> Local["workspace.jsonc (engines)"]
  Repo --> Docs["MDX docs"]
Loading
High-Level Assessment

The following are alternative approaches to this PR:

1. Centralize Node version in a single source-of-truth file
  • ➕ Reduces drift between CircleCI, Dockerfiles, and workspace tooling
  • ➕ Simplifies future version bumps (one change propagates everywhere)
  • ➖ Requires adding a small templating/sync step (CI or repo script)
  • ➖ May add process overhead if contributors expect direct edits in each file
2. Run a CI matrix for Node 22 + Node 24 during transition
  • ➕ Detects regressions earlier if some consumers still use Node 22
  • ➕ Provides safer rollout for ecosystem dependencies
  • ➖ Increases CI time/cost
  • ➖ Adds complexity to workflows and artifact naming

Recommendation: The PR’s approach (directly bumping Node versions in each integration point) is appropriate for a clean cutover to Node 24 LTS. If version bumps are frequent or drift has been a recurring issue, consider adding a single source-of-truth + sync step later; otherwise keep this straightforward change. A dual-version CI matrix is only worth it if you must maintain Node 22 compatibility for downstream users.

Files changed (8) +53 / -53

Documentation (2) +17 / -20
react.mdxNormalize code examples to avoid MDX/Prettier escaping issues +15/-19

Normalize code examples to avoid MDX/Prettier escaping issues

• Reformats TS/TSX code examples (semicolons, trailing commas, inline props typing) to align with formatting expectations and reduce tooling friction. No runtime behavior is changed (documentation-only).

scopes/react/aspect-docs/react/react.mdx

loader-fallback.docs.mdxFix MDX fenced code block to avoid comment/formatter conflicts +2/-1

Fix MDX fenced code block to avoid comment/formatter conflicts

• Adjusts the live code fence delimiter (uses four backticks) and adds a matching closing fence. This prevents MDX/Prettier from mis-parsing the example inside JSX comments.

scopes/react/ui/loader-fallback/loader-fallback.docs.mdx

Other (6) +36 / -33
config.ymlSwitch CircleCI executors and Docker build jobs to Node 24.18.1 +27/-27

Switch CircleCI executors and Docker build jobs to Node 24.18.1

• Updates the default CircleCI Node image and Windows nvm installs to 24.18.1. Renames Docker jobs from node_22 to node_24 and updates Docker build args/tag suffixes (including alpine and server image flows) to publish Node 24.18.1-tagged images.

.circleci/config.yml

.prettierignoreIgnore MDX files that break under Prettier JSX comment escaping +4/-1

Ignore MDX files that break under Prettier JSX comment escaping

• Adds specific MDX documentation files to .prettierignore due to JSX comment escaping issues. Also fixes newline/formatting around an existing ignored path.

.prettierignore

Dockerfile-bitBump Docker base ARG to node:24.18.1 +1/-1

Bump Docker base ARG to node:24.18.1

• Updates the BASE_IMAGE build argument to pull Node 24.18.1 as the default base image for the Bit CLI container build.

scripts/docker-teambit-bit/Dockerfile-bit

Dockerfile-bit-alpineBump Alpine Docker base ARG to node:24.18.1-alpine +1/-1

Bump Alpine Docker base ARG to node:24.18.1-alpine

• Updates the BASE_IMAGE build argument to Node 24.18.1 Alpine for the alpine variant container build.

scripts/docker-teambit-bit/Dockerfile-bit-alpine

Dockerfile-bit-non-rootBump non-root Docker base ARG to node:24.18.1 +1/-1

Bump non-root Docker base ARG to node:24.18.1

• Updates the BASE_IMAGE build argument to Node 24.18.1 for the non-root Bit CLI image variant.

scripts/docker-teambit-bit/Dockerfile-bit-non-root

workspace.jsoncAlign workspace Node version and bvm node setting to 24.18.1 +2/-2

Align workspace Node version and bvm node setting to 24.18.1

• Updates the workspace-level nodeVersion to 24.18.1 and aligns the bvm.node field accordingly. This enforces Node 24.18.1 as the supported baseline for local development/tooling.

workspace.jsonc

@qodo-free-for-open-source-projects

qodo-free-for-open-source-projects Bot commented Aug 2, 2026

Copy link
Copy Markdown

Code Review by Qodo

🐞 Bugs (4) 📘 Rule violations (0) 📜 Skill insights (0)

Grey Divider


Action required

1. Dangling CircleCI job refs 🐞 Bug ☼ Reliability
Description
CircleCI workflow harmony_deploy_manual still invokes
docker_build_node_22/docker_non_root_build_node_22/server_docker_build_node_22, but this PR
renames those jobs to *_node_24, leaving the manual deploy workflow referencing undefined jobs and
failing configuration validation/execution.
Code

.circleci/config.yml[1203]

+  docker_build_node_24:
Evidence
The PR adds/defines the Node 24 docker jobs, but the manual deploy workflow at the bottom of the
file still references the old Node 22 job names. Since the old job definitions were renamed (not
kept as aliases), those workflow steps point to undefined jobs.

.circleci/config.yml[1202-1247]
.circleci/config.yml[1636-1676]

Agent prompt
The issue below was found during a code review. Follow the provided context and guidance below and implement a solution

## Issue description
CircleCI jobs were renamed from `*_node_22` to `*_node_24`, but the `harmony_deploy_manual` workflow still references the old job names, which no longer exist.
## Issue Context
The renamed job definitions exist as `docker_build_node_24`, `docker_non_root_build_node_24`, and `server_docker_build_node_24`.
## Fix Focus Areas
- .circleci/config.yml[1636-1676]
- .circleci/config.yml[1202-1248]
## Implementation notes
- In `harmony_deploy_manual`, replace:
- `docker_build_node_22` -> `docker_build_node_24`
- `docker_non_root_build_node_22` -> `docker_non_root_build_node_24`
- `server_docker_build_node_22` -> `server_docker_build_node_24`
- Update `requires:` references accordingly (e.g., `server_docker_build_node_24` should require `docker_build_node_24`).
- Run CircleCI config validation after the change.

ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools



Remediation recommended

2. Chunked warnings evade filtering 🐞 Bug ☼ Reliability ⭐ New
Description
The stderr handler filters each arbitrary stream chunk independently, so a Node warning split across
chunks may not match the ignore pattern and its errors text still fails the clean-startup
assertion. Splitting and rejoining every chunk also discards trailing newlines, corrupting adjacent
stderr output.
Code

e2e/http-helper.ts[R110-113]

+        this.stderr += str
+          .split('\n')
+          .filter((line) => !this.shouldIgnoreHttpError(line))
+          .join('\n');
Evidence
The handler receives stderr through data events but immediately splits and filters each event
independently. The ignore regex only recognizes a complete Node warning header, while the E2E tests
directly assert that the accumulated filtered value contains no error, exception, or
unhandled, so a warning divided across events can produce a false failure.

e2e/http-helper.ts[103-117]
e2e/http-helper.ts[226-231]
e2e/harmony/ui-start.e2e.ts[58-62]
e2e/harmony/ui-start.e2e.ts[128-130]

Agent prompt
The issue below was found during a code review. Follow the provided context and guidance below and implement a solution

## Issue description
The stderr filter processes each stream chunk as if it contains complete lines. Since chunks can split warning lines at arbitrary positions, ignored Node warnings can leak into `this.stderr`, and rejoining each chunk can remove line boundaries.

## Issue Context
`this.stderr` is checked for error-related words while the raw `stderrData` remains available for diagnostics. Filtering should therefore preserve complete-line semantics regardless of stream chunk boundaries.

## Fix Focus Areas
- e2e/http-helper.ts[103-118]
- e2e/http-helper.ts[226-231]
- e2e/harmony/ui-start.e2e.ts[58-62]
- e2e/harmony/ui-start.e2e.ts[128-130]

ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools


3. E2E stays on Node 22 🐞 Bug ☼ Reliability
Description
The workspace now resolves dependencies for Node 24.18.1, but the GitHub Actions workflow
exclusively running the offloaded commands/doctor/flows E2E suites still sets up Node 22.22.0. Those
suites therefore cannot catch Node-24-specific runtime regressions even though they are excluded
from CircleCI's E2E run.
Code

workspace.jsonc[731]

+    "nodeVersion": "24.18.1",
Evidence
The workflow says it mirrors CircleCI and runs E2E_DIRS containing commands, doctor, and flows,
then pins setup-node to 22.22.0 and executes those tests with node; its header also states these
directories are excluded from CircleCI. Meanwhile the changed workspace configuration passes
nodeVersion 24.18.1 through the package-manager implementation, so this isolated test path remains
on the old runtime.

.github/workflows/e2e-tests.yml[1-6]
.github/workflows/e2e-tests.yml[21-25]
.github/workflows/e2e-tests.yml[42-45]
.github/workflows/e2e-tests.yml[94-102]
workspace.jsonc[731-732]
scopes/dependencies/pnpm/pnpm.package-manager.ts[209-222]

Agent prompt
The issue below was found during a code review. Follow the provided context and guidance below and implement a solution

## Issue description
The offloaded GitHub Actions E2E suites still run on Node 22.22.0 while the workspace dependency target and primary CI runtime have moved to Node 24.18.1.
## Issue Context
Update the GitHub Actions setup-node pin so these suites validate the runtime this PR adopts.
## Fix Focus Areas
- .github/workflows/e2e-tests.yml[42-45]
- workspace.jsonc[731-732]

ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools


4. Node engines not aligned 🐞 Bug ☼ Reliability
Description
The PR standardizes the project toolchain on Node 24.18.1 (CI images and workspace nodeVersion), but
the root package.json still declares engines.node as ">=22.13.0", so tools/users may continue
running Node 22 despite the project moving to Node 24. This leaves the supported Node version
ambiguous and increases the chance of local/CI environment drift.
Code

workspace.jsonc[R732-733]

+    "nodeVersion": "24.18.1",
"engineStrict": true,
Evidence
The PR explicitly pins Node 24.18.1 in the workspace configuration, while the repository’s root
package metadata still allows Node 22. This mismatch is visible in the checked-in configs and can
cause developers/tools to pick a Node version that no longer matches the project’s standardized
CI/tooling runtime.

workspace.jsonc[729-734]
package.json[1-8]
scopes/dependencies/dependency-resolver/dependency-resolver.main.runtime.ts[712-742]
scopes/dependencies/dependency-resolver/dependency-installer.ts[356-396]

Agent prompt
The issue below was found during a code review. Follow the provided context and guidance below and implement a solution

## Issue description
The repo is now configured to build/test with Node 24.18.1, but `package.json` still advertises Node 22 compatibility (`engines.node: ">=22.13.0"`). This makes it easy for developers/automation to keep using Node 22 even though CI/workspace tooling is pinned to Node 24.
## Issue Context
- CI and workspace config are updated to Node `24.18.1`.
- Bit’s dependency installer passes `nodeVersion`/`engineStrict` from workspace config down into package-manager install options; however, the repository’s public/standard compatibility contract for developers is typically the root `package.json` `engines` field.
## Fix Focus Areas
- package.json[1-8]
- workspace.jsonc[729-734]
### Suggested change
Update `package.json -> engines.node` to reflect the intended supported runtime (e.g. `>=24.18.1` or `^24.18.0`), so local environments are forced to match the Node version this PR standardizes on.

ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools



5. Unmatched MDX fence ✓ Resolved 🐞 Bug ≡ Correctness
Description
loader-fallback.docs.mdx adds a standalone four-backtick fence (````) after the JSX comment, which
is not paired with an opening fence outside the comment and can cause the doc to be parsed/rendered
incorrectly (e.g., starting an unterminated code block).
Code

scopes/react/ui/loader-fallback/loader-fallback.docs.mdx[46]

+````
Evidence
The file now ends with a  ``  line outside the JSX comment, while the earlier  ``tsx live 
appears inside the JSX comment. This leaves an unmatched markdown fence at the document level.

scopes/react/ui/loader-fallback/loader-fallback.docs.mdx[24-46]

Agent prompt
The issue below was found during a code review. Follow the provided context and guidance below and implement a solution

## Issue description
A trailing ` ```` ` line was added outside the JSX comment block, creating an unmatched fenced-code delimiter in the MDX document.
## Issue Context
The opening ` ````tsx live ` is inside a JSX comment (`{/* ... */}`), so it does not act as a real markdown fence at the document level. The newly added trailing ` ```` ` is outside the comment and *does* act as markdown.
## Fix Focus Areas
- scopes/react/ui/loader-fallback/loader-fallback.docs.mdx[24-46]
## Implementation notes
Choose one:
1) Keep the example commented out:
- Remove the trailing standalone ` ```` ` line (and optionally revert the inner opener back to ``` for consistency inside the comment).
2) Show the example as a real fenced block:
- Remove the `{/* ... */}` wrappers and use a normal fenced block with matching open/close (either ```...``` or ````...```` consistently).

ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools


Grey Divider

Tip of the day
💡 Did you know, you can describe a rule in plain language on the Rules page and Qodo drafts it for you

More tips ↗ | Customize Qodo ↗ | Qodo docs ↗

Grey Divider

Previous reviews

Review updated until commit f9e58c2 ⚖️ Balanced

Results up to commit N/A


🐞 Bugs (3) 📘 Rule violations (0) 📎 Requirement gaps (0) 🎨 UX issues (0) 🔗 Cross-repo conflicts (0) 📜 Skill insights (0)


Action required
1. Dangling CircleCI job refs 🐞 Bug ☼ Reliability
Description
CircleCI workflow harmony_deploy_manual still invokes
docker_build_node_22/docker_non_root_build_node_22/server_docker_build_node_22, but this PR
renames those jobs to *_node_24, leaving the manual deploy workflow referencing undefined jobs and
failing configuration validation/execution.
Code

.circleci/config.yml[1203]

+  docker_build_node_24:
Evidence
The PR adds/defines the Node 24 docker jobs, but the manual deploy workflow at the bottom of the
file still references the old Node 22 job names. Since the old job definitions were renamed (not
kept as aliases), those workflow steps point to undefined jobs.

.circleci/config.yml[1202-1247]
.circleci/config.yml[1636-1676]

Agent prompt
The issue below was found during a code review. Follow the provided context and guidance below and implement a solution

## Issue description
CircleCI jobs were renamed from `*_node_22` to `*_node_24`, but the `harmony_deploy_manual` workflow still references the old job names, which no longer exist.
## Issue Context
The renamed job definitions exist as `docker_build_node_24`, `docker_non_root_build_node_24`, and `server_docker_build_node_24`.
## Fix Focus Areas
- .circleci/config.yml[1636-1676]
- .circleci/config.yml[1202-1248]
## Implementation notes
- In `harmony_deploy_manual`, replace:
- `docker_build_node_22` -> `docker_build_node_24`
- `docker_non_root_build_node_22` -> `docker_non_root_build_node_24`
- `server_docker_build_node_22` -> `server_docker_build_node_24`
- Update `requires:` references accordingly (e.g., `server_docker_build_node_24` should require `docker_build_node_24`).
- Run CircleCI config validation after the change.

ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools



Remediation recommended
2. E2E stays on Node 22 🐞 Bug ☼ Reliability
Description
The workspace now resolves dependencies for Node 24.18.1, but the GitHub Actions workflow
exclusively running the offloaded commands/doctor/flows E2E suites still sets up Node 22.22.0. Those
suites therefore cannot catch Node-24-specific runtime regressions even though they are excluded
from CircleCI's E2E run.
Code

workspace.jsonc[731]

+    "nodeVersion": "24.18.1",
Evidence
The workflow says it mirrors CircleCI and runs E2E_DIRS containing commands, doctor, and flows,
then pins setup-node to 22.22.0 and executes those tests with node; its header also states these
directories are excluded from CircleCI. Meanwhile the changed workspace configuration passes
nodeVersion 24.18.1 through the package-manager implementation, so this isolated test path remains
on the old runtime.

.github/workflows/e2e-tests.yml[1-6]
.github/workflows/e2e-tests.yml[21-25]
.github/workflows/e2e-tests.yml[42-45]
.github/workflows/e2e-tests.yml[94-102]
workspace.jsonc[731-732]
scopes/dependencies/pnpm/pnpm.package-manager.ts[209-222]

Agent prompt
The issue below was found during a code review. Follow the provided context and guidance below and implement a solution

## Issue description
The offloaded GitHub Actions E2E suites still run on Node 22.22.0 while the workspace dependency target and primary CI runtime have moved to Node 24.18.1.
## Issue Context
Update the GitHub Actions setup-node pin so these suites validate the runtime this PR adopts.
## Fix Focus Areas
- .github/workflows/e2e-tests.yml[42-45]
- workspace.jsonc[731-732]

ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools


3. Node engines not aligned 🐞 Bug ☼ Reliability
Description
The PR standardizes the project toolchain on Node 24.18.1 (CI images and workspace nodeVersion), but
the root package.json still declares engines.node as ">=22.13.0", so tools/users may continue
running Node 22 despite the project moving to Node 24. This leaves the supported Node version
ambiguous and increases the chance of local/CI environment drift.
Code

workspace.jsonc[R732-733]

+    "nodeVersion": "24.18.1",
"engineStrict": true,
Evidence
The PR explicitly pins Node 24.18.1 in the workspace configuration, while the repository’s root
package metadata still allows Node 22. This mismatch is visible in the checked-in configs and can
cause developers/tools to pick a Node version that no longer matches the project’s standardized
CI/tooling runtime.

workspace.jsonc[729-734]
package.json[1-8]
scopes/dependencies/dependency-resolver/dependency-resolver.main.runtime.ts[712-742]
scopes/dependencies/dependency-resolver/dependency-installer.ts[356-396]

Agent prompt
The issue below was found during a code review. Follow the provided context and guidance below and implement a solution

## Issue description
The repo is now configured to build/test with Node 24.18.1, but `package.json` still advertises Node 22 compatibility (`engines.node: ">=22.13.0"`). This makes it easy for developers/automation to keep using Node 22 even though CI/workspace tooling is pinned to Node 24.
## Issue Context
- CI and workspace config are updated to Node `24.18.1`.
- Bit’s dependency installer passes `nodeVersion`/`engineStrict` from workspace config down into package-manager install options; however, the repository’s public/standard compatibility contract for developers is typically the root `package.json` `engines` field.
## Fix Focus Areas
- package.json[1-8]
- workspace.jsonc[729-734]
### Suggested change
Update `package.json -> engines.node` to reflect the intended supported runtime (e.g. `>=24.18.1` or `^24.18.0`), so local environments are forced to match the Node version this PR standardizes on.

ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools


4. Unmatched MDX fence ✓ Resolved 🐞 Bug ≡ Correctness
Description
loader-fallback.docs.mdx adds a standalone four-backtick fence (````) after the JSX comment, which
is not paired with an opening fence outside the comment and can cause the doc to be parsed/rendered
incorrectly (e.g., starting an unterminated code block).
Code

scopes/react/ui/loader-fallback/loader-fallback.docs.mdx[46]

+````
Evidence
The file now ends with a  ``  line outside the JSX comment, while the earlier  ``tsx live 
appears inside the JSX comment. This leaves an unmatched markdown fence at the document level.

scopes/react/ui/loader-fallback/loader-fallback.docs.mdx[24-46]

Agent prompt
The issue below was found during a code review. Follow the provided context and guidance below and implement a solution

## Issue description
A trailing ` ```` ` line was added outside the JSX comment block, creating an unmatched fenced-code delimiter in the MDX document.
## Issue Context
The opening ` ````tsx live ` is inside a JSX comment (`{/* ... */}`), so it does not act as a real markdown fence at the document level. The newly added trailing ` ```` ` is outside the comment and *does* act as markdown.
## Fix Focus Areas
- scopes/react/ui/loader-fallback/loader-fallback.docs.mdx[24-46]
## Implementation notes
Choose one:
1) Keep the example commented out:
- Remove the trailing standalone ` ```` ` line (and optionally revert the inner opener back to ``` for consistency inside the comment).
2) Show the example as a real fenced block:
- Remove the `{/* ... */}` wrappers and use a normal fenced block with matching open/close (either ```...``` or ````...```` consistently).

ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools


Grey Divider

Qodo Logo

Comment thread .circleci/config.yml

# ========== Docker Jobs ==========
docker_build_node_22:
docker_build_node_24:

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Action required

1. Dangling circleci job refs 🐞 Bug ☼ Reliability

CircleCI workflow harmony_deploy_manual still invokes
docker_build_node_22/docker_non_root_build_node_22/server_docker_build_node_22, but this PR
renames those jobs to *_node_24, leaving the manual deploy workflow referencing undefined jobs and
failing configuration validation/execution.
Agent Prompt
## Issue description
CircleCI jobs were renamed from `*_node_22` to `*_node_24`, but the `harmony_deploy_manual` workflow still references the old job names, which no longer exist.

## Issue Context
The renamed job definitions exist as `docker_build_node_24`, `docker_non_root_build_node_24`, and `server_docker_build_node_24`.

## Fix Focus Areas
- .circleci/config.yml[1636-1676]
- .circleci/config.yml[1202-1248]

## Implementation notes
- In `harmony_deploy_manual`, replace:
  - `docker_build_node_22` -> `docker_build_node_24`
  - `docker_non_root_build_node_22` -> `docker_non_root_build_node_24`
  - `server_docker_build_node_22` -> `server_docker_build_node_24`
- Update `requires:` references accordingly (e.g., `server_docker_build_node_24` should require `docker_build_node_24`).
- Run CircleCI config validation after the change.

ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools

Comment thread scopes/react/ui/loader-fallback/loader-fallback.docs.mdx Outdated
@qodo-free-for-open-source-projects

Copy link
Copy Markdown

Code review by qodo was updated up to the latest commit aaaf52a

GiladShoham added a commit that referenced this pull request Aug 2, 2026
Prettier incorrectly escapes JSX comment markers (\`/* */\` → \`\/*
*\/\`) inside these two MDX files' code blocks, breaking the comment
syntax. Excludes both files from prettier and fixes the existing bad
escaping.

Split out of the Node 24 branch (#10555), where it was an unrelated
change picked up along the way.
Comment thread workspace.jsonc Outdated
Comment on lines 732 to 733
"nodeVersion": "24.18.1",
"engineStrict": true,

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Remediation recommended

1. Node engines not aligned 🐞 Bug ☼ Reliability

The PR standardizes the project toolchain on Node 24.18.1 (CI images and workspace nodeVersion), but
the root package.json still declares engines.node as ">=22.13.0", so tools/users may continue
running Node 22 despite the project moving to Node 24. This leaves the supported Node version
ambiguous and increases the chance of local/CI environment drift.
Agent Prompt
## Issue description
The repo is now configured to build/test with Node 24.18.1, but `package.json` still advertises Node 22 compatibility (`engines.node: ">=22.13.0"`). This makes it easy for developers/automation to keep using Node 22 even though CI/workspace tooling is pinned to Node 24.

## Issue Context
- CI and workspace config are updated to Node `24.18.1`.
- Bit’s dependency installer passes `nodeVersion`/`engineStrict` from workspace config down into package-manager install options; however, the repository’s public/standard compatibility contract for developers is typically the root `package.json` `engines` field.

## Fix Focus Areas
- package.json[1-8]
- workspace.jsonc[729-734]

### Suggested change
Update `package.json -> engines.node` to reflect the intended supported runtime (e.g. `>=24.18.1` or `^24.18.0`), so local environments are forced to match the Node version this PR standardizes on.

ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools

@qodo-free-for-open-source-projects

Copy link
Copy Markdown

Code review by qodo was updated up to the latest commit 6ec1d09

@qodo-free-for-open-source-projects

Copy link
Copy Markdown

Code review by qodo was updated up to the latest commit 12f9871

@GiladShoham GiladShoham added the v3 prs to merge for bit v3 label Aug 18, 2026
@qodo-free-for-open-source-projects

Copy link
Copy Markdown

Code review by qodo was updated up to the latest commit 0069657

@qodo-free-for-open-source-projects

Copy link
Copy Markdown

Code review by qodo was updated up to the latest commit c1f1900

Comment thread workspace.jsonc Outdated
"@pnpm/config.nerf-dart": "1.0.1"
},
"nodeVersion": "22.22.0",
"nodeVersion": "24.18.1",

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Remediation recommended

1. E2e stays on node 22 🐞 Bug ☼ Reliability

The workspace now resolves dependencies for Node 24.18.1, but the GitHub Actions workflow
exclusively running the offloaded commands/doctor/flows E2E suites still sets up Node 22.22.0. Those
suites therefore cannot catch Node-24-specific runtime regressions even though they are excluded
from CircleCI's E2E run.
Agent Prompt
## Issue description
The offloaded GitHub Actions E2E suites still run on Node 22.22.0 while the workspace dependency target and primary CI runtime have moved to Node 24.18.1.

## Issue Context
Update the GitHub Actions setup-node pin so these suites validate the runtime this PR adopts.

## Fix Focus Areas
- .github/workflows/e2e-tests.yml[42-45]
- workspace.jsonc[731-732]

ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools

@qodo-free-for-open-source-projects

Copy link
Copy Markdown

Code review by qodo was updated up to the latest commit bbf91ab

@GiladShoham GiladShoham changed the title chore(node): update Node.js version to 24.18.1 Aug 30, 2026
@qodo-free-for-open-source-projects

Copy link
Copy Markdown

Code review by qodo was updated up to the latest commit bb963fc

@GiladShoham

GiladShoham commented Sep 1, 2026

Copy link
Copy Markdown
Member Author

e2e_test CI failure investigation

Dug into the e2e_test failures on this branch (via the CircleCI CLI, comparing against master's passing runs).

The ui-start.e2e.ts false positive (Node 24's DEP0169 url.parse() warning tripping the "clean stderr" assertion) is fixed in 1bbd4bf.

deps-graph*.e2e.ts OOM kills (Killed, exit 123) — not yet fixed

Several parallel e2e_test executions die with a bare Killed (OS OOM kill, not a JS error) during bit tag --skip-tests --build in the "dependencies graph data" test files. This reproduces on every single CI run on this branch since the original Node 24 bump back in June, always in the same spot.

Clean A/B against master:

  • e2e/harmony/deps-graph*.e2e.ts is byte-identical between master and this branch.
  • Same .circleci/config.yml job otherwise: resource_class: medium, NODE_OPTIONS=--max-old-space-size=5000, parallelism: 40.
  • Only the Node major version differs (cimg/node:22.22.0 vs cimg/node:24.20.0), and only this branch OOMs. master runs the same tests reliably.

I tried to pin down the exact mechanism by profiling one of the failing scenarios locally (deps-graph.e2e.ts, "two components exported with different peer dependencies using the same env") under both Node 22.22.0 and Node 24.14.0, sampling RSS of the bit tag --build process throughout. Result: no meaningful difference (peak RSS 2098MB on Node 22 vs 2111MB on Node 24, Node 24 if anything slightly faster). So it isn't simply "Node 24 makes this process heavier" at the single-process level — the actual mechanism (cumulative memory across the 4 files that share one mocha process per CI shard, or a difference in the cimg/node base image itself) is still open.

Given NODE_OPTIONS=--max-old-space-size=5000 is already close to or above medium's ~4GB total RAM, and the config already has a commented-out escape hatch for exactly this class of problem:

e2e_test:
  <<: *defaults
  # changing from medium to large, doesn't affect the performance
  # resource_class: large

bumping e2e_test to resource_class: large looks like the pragmatic fix regardless of the exact mechanism, but it increases CI compute cost on every run (job runs at parallelism: 40), so flagging here rather than pushing it unilaterally.

…rr assertions

Node 24's DEP0169 url.parse() warning contains the word "errors" in its
message, which false-positives the ui-start.e2e.ts "clean stderr" check.
Wires up the previously-unused shouldIgnoreHttpError() to filter Node's
own (node:PID) [DEPxxx] warning lines.
@qodo-free-for-open-source-projects

qodo-free-for-open-source-projects Bot commented Sep 1, 2026

Copy link
Copy Markdown

Code Review by Qodo

Grey Divider

New Review Started

This review has been superseded by a new analysis

Grey Divider

Qodo Logo

Comment thread e2e/http-helper.ts
Comment on lines +110 to +113
this.stderr += str
.split('\n')
.filter((line) => !this.shouldIgnoreHttpError(line))
.join('\n');

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Remediation recommended

1. Chunked warnings evade filtering 🐞 Bug ☼ Reliability

The stderr handler filters each arbitrary stream chunk independently, so a Node warning split across
chunks may not match the ignore pattern and its errors text still fails the clean-startup
assertion. Splitting and rejoining every chunk also discards trailing newlines, corrupting adjacent
stderr output.
Agent Prompt
## Issue description
The stderr filter processes each stream chunk as if it contains complete lines. Since chunks can split warning lines at arbitrary positions, ignored Node warnings can leak into `this.stderr`, and rejoining each chunk can remove line boundaries.

## Issue Context
`this.stderr` is checked for error-related words while the raw `stderrData` remains available for diagnostics. Filtering should therefore preserve complete-line semantics regardless of stream chunk boundaries.

## Fix Focus Areas
- e2e/http-helper.ts[103-118]
- e2e/http-helper.ts[226-231]
- e2e/harmony/ui-start.e2e.ts[58-62]
- e2e/harmony/ui-start.e2e.ts[128-130]

ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools

@qodo-free-for-open-source-projects

Copy link
Copy Markdown

Code review by qodo was updated up to the latest commit f9e58c2

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

v3 prs to merge for bit v3

4 participants