Conversation
Upgrade Node.js runtime across the monorepo: .nvmrc, package.json engines, Docker Compose images (node:24.14.0-alpine3.23), Dockerfiles, and CI workflows. Impact study results: - npm install: clean (npm 11.11.0) - All 4 app builds pass (api, frontend, cli, mcp-server) - All tests pass with --no-experimental-strip-types - All 29 lint targets pass - Known issue: Node 24 native TS stripping conflicts with Jest config loading Includes migrate-24_11.md with backport guide for proprietary repo. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Greptile SummaryThis PR upgrades the Node.js runtime from 22.17.0 to 24.14.0 across the entire monorepo — touching Key observations:
Confidence Score: 4/5
Important Files Changed
Flowchart%%{init: {'theme': 'neutral'}}%%
flowchart TD
PR[Pull Request / Push] --> Build[Stage 1: Build & Test\nbuild.yml\nNode 24.14.0\n--no-experimental-strip-types]
Build --> Quality[Stage 2: Quality & Security\nquality.yml\nNode 24.14.0]
Build --> Docker
Quality --> Docker[Stage 3: Docker Build+Scan\ndocker.yml\nALL branches now]
Docker --> PushMain{github.ref\n== main?}
Docker --> PushRelease{release/*\ntag?}
PushMain -->|Yes| SHAPush[Push SHA-tagged images\nto Docker Hub]
PushRelease -->|Yes| MultiPlatform[Multi-platform build\n+ push version+latest tags]
PushRelease -->|Yes| PublicImages[Build & push\npublic OSS images]
Docker --> ScanOnly[Build + CVE Scan only\nno push on feature branches]
subgraph DockerImages [Docker Base Images]
API[Dockerfile.api\nnode:24.14.0-alpine3.23\nopenssl unpinned ⚠️]
MCP[Dockerfile.mcp\nnode:24.14.0-alpine3.23\nopenssl unpinned ⚠️]
end
|
| profiles: | ||
| - dev | ||
| image: node:22.17.0-alpine3.21 | ||
| image: node:24.14.0-alpine3.23 |
There was a problem hiding this comment.
Node version inconsistency:
24.14.1 vs 24.14.0 in Docker images
.nvmrc, package.json, apps/api/docker-package.json, and all CI workflow inputs specify 24.14.1, but every Docker image reference in docker-compose.yml, docker-compose.production.yml, Dockerfile.api, and Dockerfile.mcp uses node:24.14.0-alpine3.23.
If node:24.14.1-alpine3.23 exists on Docker Hub, the Docker images should be updated to match the pinned runtime version exactly. A mixed 24.14.0/24.14.1 environment could hide subtle ABI or behavior differences.
This same mismatch is present in docker-compose.production.yml and both Dockerfiles.
… workflow Node 24 enables native TypeScript stripping by default, which conflicts with Jest's own TS config loading (require() in .ts files, extensionless imports). Append --no-experimental-strip-types to all NODE_OPTIONS in build.yml to restore previous behavior. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- Docker image node:24.14.1-alpine3.23 does not exist - Align all config files with the available 24.14.0 image Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
The pinned version openssl=3.5.5-r0 does not exist in Alpine 3.23, causing Docker builds to fail at the apk add step. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- Remove branch gate on docker job in main.yml - Remove job-level if condition in docker.yml - Push steps retain their own ref guards (main/release only) Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Remove phantom workspace references to non-existent packages/linter-ast/parsers/* and regenerate lockfile with npm 11.9.0 (Node 24.14.0) to fix "invalid or damaged lockfile" CI errors. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- Rename SiNuxtdotjs to SiNuxt (react-icons API change) - Fix Chakra UI variant type mismatches in PMLink, PMButton, PMIconButton, and PMHeading using Omit + cast pattern for custom variants not in Chakra's base types Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
|



Explanation
Upgrade Node.js runtime from 22.17.0 to 24.14.0 across the entire monorepo: version pins, Docker images, CI workflows, and Dockerfiles.
Type of Change
Affected Components
NODE_OPTIONS="--no-experimental-strip-types"for test runsTesting
Test Details:
npm install(npm 11.11.0)nx build api[DEP0180] fs.Stats deprecatedwarning)nx build frontend[MODULE_TYPELESS_PACKAGE_JSON]warning)nx build packmind-clinx build mcp-server--no-experimental-strip-typesKnown issue: Node 24 enables
--experimental-strip-typesby default, which conflicts with Jest's TypeScript config loading. Workaround:NODE_OPTIONS="--no-experimental-strip-types". This needs to be added to CI test jobs.TODO List
--no-experimental-strip-typesto CI test workflowsReviewer Notes
migrate-24_11.mdcontains the backport guide for the proprietary repopackage-lock.jsondiff is minimal (engine field + some optional peer dep cleanup by npm 11)🤖 Generated with Claude Code