Skip to content

platform: drop EOL Node 18 from engines, add Nuxt engines, test 22+24, pin publish (#174)#313

Merged
IgorShevchik merged 1 commit into
mainfrom
claude/wizardly-archimedes-w3n7v1
Jul 3, 2026
Merged

platform: drop EOL Node 18 from engines, add Nuxt engines, test 22+24, pin publish (#174)#313
IgorShevchik merged 1 commit into
mainfrom
claude/wizardly-archimedes-w3n7v1

Conversation

@IgorShevchik

Copy link
Copy Markdown
Collaborator

Closes #174.

The SDK advertised runtimes it never tested (including two EOL lines) and built the published artifact on a floating lts/* that CI never validated — silent compatibility drift in both directions.

Changes (non-breaking hygiene)

The genuinely breaking move — dropping Node 20 — is deferred to the next major and tracked in #312.

  • packages/jssdk engines: ^18.0.0 || ^20.0.0 || >=22.0.0^20.0.0 || >=22.0.0 (drop EOL Node 18).
  • packages/jssdk-nuxt: add engines.node: "^20.0.0 || >=22.0.0" (it had none).
  • ci.yml test job: run the unit suite on a Node 22 + 24 matrix (fail-fast: false) so the advertised runtimes are actually exercised. The node-agnostic pnpm audit is gated to the 22 leg so it still runs exactly once.
  • Both npm-publish workflows: pin node-version from floating lts/*22 — the lowest supported + CI-validated line, so the published artifact is built on the floor (consumable by every supported consumer) with a deterministic runtime.

Docs / consistency synced

The engines string in 4.nodejs.md, the "Node.js 18+" floor in 12 example pages, README-AI.md, the b24jssdk-core skill, and the local docker-compose.yml smoke matrix (test-node18/2022/24) all now reflect the supported set. CHANGELOG.md [Unreleased] › Changed records the drop.

Why pin publish to 22 (not 24)

The artifact should build on the lowest runtime we still support and validate, not the newest — so nothing that only breaks on an older-but-supported runtime slips through. Both 22 and 24 are now in CI; 22 is the conservative, fully-validated choice. (lts/* currently resolves to 24, so this also removes the float.)

Known gap (tracked)

engines still advertises Node 20 (EOL) but CI tests only 22 + 24 — adding a soon-to-be-removed line to the matrix wasn't worth the runner minutes. The gap is closed by removing 20 in #312, not by growing the matrix backward.

Verification

  • pnpm --filter @bitrix24/b24jssdk typecheck — clean · pnpm run lint — 0 errors
  • pnpm run package-jssdk:test:run-unit377 passed
  • pnpm run lint:md — 0 errors · node scripts/docs-lint.mjs --strict — 0/0
  • All 3 workflow YAMLs + both package.json parse clean

Reviewed by a 5-perspective pass (CI-correctness, platform/semver, docs/consistency, supply-chain/publish, tech-director). Their findings are folded in: publish pinned to 22 (tech-director), the CHANGELOG entry added (all), and 3 doc stragglers fixed (docs reviewer: README-AI.md, SKILL.md, docker-compose.yml).

Note on required checks: this turns test into test (22) / test (24). The required status check is the ci aggregator (which contains(needs.*.result, 'failure') across matrix legs), so this doesn't affect branch protection.

🤖 Generated with Claude Code

https://claude.ai/code/session_01H6MQtPUx9MZjXY2rbLZhbv


Generated by Claude Code

…, pin publish (#174)

The SDK advertised runtimes it never tested (including two EOL lines) and built
the published artifact on a floating `lts/*` CI never validated — drift in both
directions.

Non-breaking hygiene (the Node 20 drop is breaking → deferred to the next major,
tracked in #312):
- packages/jssdk `engines.node`: `^18.0.0 || ^20.0.0 || >=22.0.0` →
  `^20.0.0 || >=22.0.0` (drop end-of-life Node 18).
- packages/jssdk-nuxt: add `engines.node: "^20.0.0 || >=22.0.0"` (it had none).
- ci.yml `test` job: run the unit suite on a Node `22 + 24` matrix
  (fail-fast:false) so the advertised runtimes are actually exercised; the
  node-agnostic `pnpm audit` is gated to the 22 leg so it runs once.
- Both npm-publish workflows: pin `node-version` from floating `lts/*` to `22` —
  the lowest supported + CI-validated line, so the published artifact is built on
  the floor (consumable by every supported consumer) with a deterministic runtime.

Docs / consistency synced: the engines string in 4.nodejs.md, the "Node.js 18+"
floor in 12 example pages, README-AI.md, the b24jssdk-core skill, and the local
docker-compose smoke matrix (test-node18/20 → 22/24) all now reflect the
supported set. CHANGELOG `[Unreleased]` records the drop.

Node 20 stays in `engines` for now (EOL but removing it is breaking) — its
removal, and the fact that CI does not test 20, is tracked in #312.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01H6MQtPUx9MZjXY2rbLZhbv
@IgorShevchik IgorShevchik merged commit 4178b75 into main Jul 3, 2026
10 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

platform: engines advertise EOL Node 18/20, CI tests only 22, publish builds on lts/* (24); jssdk-nuxt has no engines at all

2 participants