Skip to content

feat!: migrate the node.js baseline from lts iron to lts jod - #88

Merged
kurone-kito merged 9 commits into
mainfrom
issue/48-migrate-node-js-baseline-from-lts
Aug 1, 2026
Merged

feat!: migrate the node.js baseline from lts iron to lts jod#88
kurone-kito merged 9 commits into
mainfrom
issue/48-migrate-node-js-baseline-from-lts

Conversation

@kurone-kito

@kurone-kito kurone-kito commented Aug 1, 2026

Copy link
Copy Markdown
Owner

Summary

Named-gap re-import of pnpm-project-template@8c19c5f (2026-07-22):
migrates the Node.js baseline from LTS Iron to LTS Jod, migrates pnpm
config to pnpm 11, enables pnpm 11's global virtual store (gvs), and
imports the AI-agent entry files / config-file renames / ISSUE_TEMPLATE
form set the template also carries. This is the issue #49/#50 blocker
in the IDD adoption roadmap.

Changes

Commit 1 — Node/pnpm baseline (breaking):

  • .node-version/.nvmrc/.tool-versions22.23.1 (Jod), dropping
    the ref:v20.19.5 token upstream also dropped
  • engines.node (root + all 5 packages) →
    ^22.23.1 || ^24.2.0 || >=26.0.0
  • CI matrix 20.x/22.x/24.x22.x/24.x/26.x; root + 5 package
    READMEs' System Requirements sections updated to match
  • packageManagerpnpm@11.15.1; .npmrc deleted, its settings
    (including this repo's own workspace-concurrency rationale)
    migrated into pnpm-workspace.yaml under pnpm 11 camelCase keys
  • gvs enabled (enableGlobalVirtualStore: true) with
    PNPM_CONFIG_ENABLE_GLOBAL_VIRTUAL_STORE: 'false' added to every CI
    job that runs pnpm install; dropped COREPACK_INTEGRITY_KEYS,
    matching upstream's pnpm 11 setup
  • vite-lib-config's build target and example-cli's SEA --node
    flag raised off Node 20
  • biome.jsonbiome.jsonc, cspell.config.yml.cspell.config.yml,
    new .gitmessage, .github/issue_template.md replaced with the
    .github/ISSUE_TEMPLATE/ form set (adapted with this repo's
    multi-language CONTRIBUTING notice)
  • AGENTS.md/CLAUDE.md/GEMINI.md/.github/copilot-instructions.md/
    docs/ai-strategy.md added, describing this monorepo's own packages
    and tooling rather than upstream's generic template prose
  • .vscode/settings.json fixed up for the .npmrc removal and cspell
    rename, extended for the new .gitmessage/AI-agent files

Commit 2 — dev dependency floors (separate, non-breaking): Biome
^2.5.2, commitlint ^21.2.0, cspell + @cspell/cspell-types
^10.0.1, lint-staged ^17.0.8, markdownlint-cli2 ^0.23.0,
TypeScript ~6.0.3. Left the @kurone-kito/*-config lint packages
alone — upstream's current pin for those is a 0.23.0-alpha.x
prerelease, which the issue says not to adopt without a deliberate
decision.

Commit 3 — typedoc fix: enabling gvs broke vite-lib-config's
build:doc — typedoc's own plugin loader resolves
typedoc-plugin-markdown relative to typedoc's install location,
which gvs relocates to a store slot shared across every project on
the machine, so the bare-specifier lookup can't find the plugin
anymore. Added a small script that resolves the plugin's absolute path
from this package (where normal workspace resolution still works) and
passes it to typedoc via --plugin. packages/vite-lib-config/docs
regenerated accordingly (the diff beyond the Node baseline text is
typedoc-plugin-markdown rendering optional params as name? instead
of name in the newer version this lockfile resolves).

Commit 4 — lockfile regen: a straight pnpm install under pnpm 11
only verifies the existing lockfile rather than re-resolving it, so
getting to pnpm 11 required deleting pnpm-lock.yaml and reinstalling
from scratch. That surfaced two more pnpm 11 behaviors, both addressed
in pnpm-workspace.yaml:

  • pnpm 11's new minimum-release-age supply-chain check rejected a
    same-day @babel/parser/@babel/types patch pulled in by
    @vitest/coverage-v8's magicast dependency. Overrode both to
    7.29.7, the prior patch (already satisfies every consumer's range,
    and deduplicates two resolved versions to one). This pin is
    time-boxed
    — the newer patch clears the age check on its own at
    2026-08-01T15:07Z; the override should be dropped and the lockfile
    re-resolved after that.
  • undici-types carries a triple-slash reference to @types/node
    that it never declares as a real dependency, relying on ambient
    node_modules co-location — the same class of gvs limitation as the
    typedoc case, this time breaking test:ts ("Cannot find type
    definition file for 'node'") for every package that doesn't already
    depend on @types/node directly. Fixed with a packageExtensions
    entry declaring the dependency explicitly. Also adopted upstream's
    configDependencies entry for @pnpm/plugin-types-fixer as a
    general safety net for this class of issue — it didn't by itself
    fix this specific case.
  • esbuild now needs explicit allowBuilds approval under pnpm 11;
    added, equivalent to the existing onlyBuiltDependencies entry.
  • Incidental to the from-scratch resolution (not deliberate bumps):
    rimraf 6.0.1→6.1.3, semver 7.8.1→7.8.5.

Deliberately deferred

Verification

From a clean rm -rf node_modules packages/*/node_modules +
pnpm install --frozen-lockfile, all under Node 22.23.1 /
pnpm@11.15.1 with gvs enabled (no opt-out env set, matching a local
developer's default):

  • pnpm install --frozen-lockfile — passes
  • pnpm run lint — passes (Biome, cspell, markdownlint-cli2)
  • pnpm run build — passes (all 5 packages, including
    vite-lib-config's doc generation)
  • git diff --exit-code packages/vite-lib-config/docs — clean
  • pnpm run test (test:ts + vitest run --coverage) — 20 files, 68
    tests pass, 94.01% statement coverage
  • grep -rn 'Iron LTS\|\^20\.11\|node20\|--node=20\|20\.19\.5' over
    tracked files (excluding pnpm-lock.yaml and the
    parseArgs.spec.mts fixture) — no matches
  • CI matrix rows (22.x/24.x/26.x × ubuntu/windows) run on this PR

BREAKING CHANGE: Node 20 (LTS Iron) is no longer a supported engines
range; the >=24 floor is raised to >=24.2.0. pnpm 10 is no longer
the pinned package manager.

Closes #48

Summary by CodeRabbit

  • Documentation

    • Updated supported Node.js versions across project and package documentation to Node.js 22.23.1, 24.2.0, and 26+.
    • Clarified that Vite and Vitest configuration options are optional.
    • Improved documentation build reliability and external reference links.
  • Developer Experience

    • Added structured bug-report and feature-request templates with multilingual guidance.
    • Added repository guidance for setup, conventions, tooling, and AI-assisted contributions.
  • Maintenance

    • Updated development tooling, package management, and release workflows for current Node.js versions.
    • Improved cross-platform test reliability.

idd-skill's minimum supported runtime moved to ^22.22.2 || >=24.2.0,
so this repository can no longer stay on lts iron and pnpm 10 while
adopting idd-skill's workflow (blocking #49). Re-import the named
gaps between this repository and pnpm-project-template@8c19c5f
(2026-07-22) rather than a blind file-for-file resync:

- raise .node-version/.nvmrc/.tool-versions to 22.23.1, drop the
  ref:v20.19.5 token upstream also removed, and widen every
  engines.node field to ^22.23.1 || ^24.2.0 || >=26.0.0
- swap the ci matrix from 20.x/22.x/24.x to 22.x/24.x/26.x (upstream
  dropped 25.x as eol) and update the root and package readmes'
  system requirements sections to match
- pin packageManager to pnpm@11.15.1 and migrate .npmrc into
  pnpm-workspace.yaml under pnpm 11's camelcase keys, carrying over
  this repository's own workspace-concurrency rationale as
  workspaceConcurrency
- enable pnpm 11's global virtual store and opt every ci job that
  runs pnpm install out of it via
  PNPM_CONFIG_ENABLE_GLOBAL_VIRTUAL_STORE, matching upstream; drop
  COREPACK_INTEGRITY_KEYS since upstream's pnpm 11 setup no longer
  needs it
- raise vite-lib-config's build target and example-cli's sea
  --node flag off node 20
- rename biome.json/cspell.config.yml to biome.jsonc/.cspell.config.yml,
  add .gitmessage, and replace the legacy issue_template.md with the
  upstream ISSUE_TEMPLATE form set, adapted with this repository's
  multi-language CONTRIBUTING notice
- import AGENTS.md/CLAUDE.md/GEMINI.md/.github/copilot-instructions.md/
  docs/ai-strategy.md describing this monorepo's own packages and
  tooling instead of upstream's generic template prose
- fix .vscode/settings.json references left dangling by the .npmrc
  removal and cspell rename, and extend its file nesting for the new
  .gitmessage and AI-agent files

Deliberately not carried over: upstream's pnpm-workspace.yaml now
also sets configDependencies for @pnpm/plugin-types-fixer, which is
a new gap beyond this issue's enumerated scope, left for a future
issue. actions/checkout is already v7 and sha-pinned (#55); the
pnpm/action-setup@v6 and actions/setup-node@v6 bumps are left to the
already-open dependabot PRs #81/#79 rather than duplicated here. The
dev dependency floor drift (biome, commitlint, cspell, lint-staged,
markdownlint-cli2, typescript) is reconciled in a following separate
commit, and vite-lib-config/docs/README.md is regenerated once
pnpm install succeeds under pnpm 11, per the issue's own
acceptance criteria.

BREAKING CHANGE: node 20 (lts iron) is no longer a supported engines
range, and the >=24 floor is raised to >=24.2.0. Consumers must
upgrade to node ^22.23.1, ^24.2.0, or >=26.0.0. pnpm 10 is no longer
the pinned package manager; use pnpm 11.15.1 (corepack enable will
pick it up automatically).

Refs #48
pnpm-project-template@8c19c5f raised its own dev dependency floors
since this repository's last import. Bump the root devDependencies
to match: @biomejs/biome ^2.5.2 (and its schema url in biome.jsonc),
@commitlint/cli and @commitlint/config-conventional ^21.2.0, cspell
and its paired @cspell/cspell-types ^10.0.1, lint-staged ^17.0.8,
markdownlint-cli2 ^0.23.0, and typescript ~6.0.3.

Left untouched, deliberately: the @kurone-kito/*-config lint packages
(biome-config, commitlint-config, cspell-config, lint-staged-config,
markdownlint-config), since upstream's current pin for these is a
0.23.0-alpha.x prerelease from kurone-kito/lints-config and adopting
a prerelease range here needs its own deliberate decision, not a
side effect of this floor bump.

Refs #48
Enabling pnpm 11's global virtual store (part of this issue's own
migration) relocates typedoc into a store slot shared across every
project on the machine, so its internal bare-specifier lookup for
typedoc-plugin-markdown can no longer walk up to a node_modules tree
that has the plugin installed as a sibling: `pnpm run build` broke
with "Cannot find package 'typedoc-plugin-markdown'" for this reason
alone. This is a documented pnpm 11 gvs limitation, not something
version-bumping typedoc or the plugin can fix, since typedoc's plugin
loader always resolves relative to its own install location.

Resolve the plugin's absolute path from this package instead, where
normal workspace module resolution still applies, and pass it to
typedoc explicitly via --plugin rather than relying on typedoc.json's
bare-specifier plugin list. Regenerate packages/vite-lib-config/docs
via the fixed build:doc script, per this issue's own acceptance
criteria; the diff beyond the Node baseline System Requirements text
is from typedoc-plugin-markdown rendering optional parameters as
`name?` instead of `name` in this newer version.

Refs #48
Regenerating pnpm-lock.yaml from scratch under pnpm 11.15.1 (deleting
it and reinstalling, since a straight upgrade only verifies the
existing entries rather than re-resolving them) surfaced three pnpm
11 behaviors this repository had not hit before, each addressed in
pnpm-workspace.yaml:

- pnpm 11's new minimum-release-age supply-chain check rejects
  lockfile entries published too recently. magicast (a
  @vitest/coverage-v8 dependency) resolves the newest matching
  @babel/parser and @babel/types on any fresh install, and both
  happened to publish same-day. Override both to 7.29.7, the prior
  patch, which both magicast's ^7.29.7 range and
  @vue/compiler-core's ^7.28.4 range already accept, deduplicating to
  one resolved version instead of two. This pin is time-boxed: drop
  the overrides entry and re-resolve once 2026-08-01T15:07Z passes,
  after which the newer patch clears the age check on its own.
- pnpm 11 requires explicit approval for dependencies with install
  scripts; esbuild had none. Add `allowBuilds: { esbuild: true }`,
  equivalent to the onlyBuiltDependencies entry already present.
- undici-types ships a triple-slash reference to `@types/node` that
  it never declares as a real dependency, relying on ambient
  node_modules co-location to find it. Under the global virtual
  store, undici-types resolves into a slot shared across every
  project on the machine, so that ambient lookup can no longer reach
  any project's own @types/node and `pnpm run test`'s tsc step failed
  with "Cannot find type definition file for 'node'" for every
  package except the two that already depend on @types/node directly.
  This is a documented pnpm 11 gvs limitation. Add a packageExtensions
  entry declaring @types/node as a real dependency of undici-types,
  so it resolves inside undici-types' own store slot instead.

Also adopt upstream's configDependencies entry for
@pnpm/plugin-types-fixer, matching pnpm-project-template, as a general
safety net for @types/* promotion issues under pnpm 11 — it did not
by itself fix the undici-types case above, which needed the
packageExtensions entry on top.

biome.jsonc's $schema now points at 2.5.6 (via `biome migrate`),
matching the patch this lockfile resolves for the ^2.5.2 range bumped
in the prior commit.

Beyond the version ranges this issue and the prior commit changed
directly, this fresh resolution also moved rimraf 6.0.1 -> 6.1.3 and
semver 7.8.1 -> 7.8.5 within their existing ^ ranges; both are
incidental to a from-scratch resolution, not deliberate bumps.

Refs #48
Copilot AI review requested due to automatic review settings August 1, 2026 08:12
@coderabbitai

coderabbitai Bot commented Aug 1, 2026

Copy link
Copy Markdown

Review Change Stack

📝 Walkthrough

Walkthrough

The repository migrates to Node.js 22, 24, and 26 support, upgrades pnpm and development tooling, updates CI, adds agent guidance and issue forms, and changes the Vite documentation build process.

Changes

Repository baseline and tooling

Layer / File(s) Summary
Node.js, pnpm, and CI baseline
.node-version, .nvmrc, .tool-versions, package.json, pnpm-workspace.yaml, .github/workflows/*, README.md, packages/*/package.json, packages/*/README.md
Node.js support moves to 22.23.1, 24.2.0, and 26+. pnpm moves to 11.15.1. Workspace settings, package engines, documentation, and CI matrices are updated.
Vite documentation build
packages/vite-lib-config/package.json, packages/vite-lib-config/scripts/buildDoc.mjs, packages/vite-lib-config/typedoc.json, packages/vite-lib-config/docs/*, packages/vite-lib-config/src/vite.mts
Documentation builds use a Node.js wrapper that resolves the Markdown plugin before invoking TypeDoc. Vite and Vitest documentation marks parameters and properties as optional.
AI-agent guidance
.github/copilot-instructions.md, AGENTS.md, CLAUDE.md, GEMINI.md, docs/ai-strategy.md
Repository setup, validation, coding, commit, pnpm, approval, and security guidance is added for supported AI tools.
Contribution and repository metadata
.github/ISSUE_TEMPLATE/*, .cspell.config.yml, .gitmessage, .vscode/settings.json, biome.jsonc, package.json
Bug and feature request forms, cspell settings, commit guidance, editor nesting, the Biome schema reference, and development dependency versions are updated.

Estimated code review effort: 4 (Complex) | ~45 minutes

Possibly related issues

  • kurone-kito/japanese-law-translation#47 — Similar Node.js, pnpm, CI, and workspace baseline migration.
  • kurone-kito/is-prerelease#11 — Similar Node.js 22, pnpm, package engine, and CI changes.
  • kurone-kito/japanese-law-translation#49 — Similar addition of agent guidance files.

Possibly related PRs

Sequence Diagram(s)

sequenceDiagram
  participant PackageScript
  participant BuildDoc
  participant MarkdownPlugin
  participant TypeDoc
  PackageScript->>BuildDoc: start documentation build
  BuildDoc->>MarkdownPlugin: resolve plugin path
  BuildDoc->>TypeDoc: invoke TypeDoc with plugin path
  TypeDoc-->>PackageScript: return exit status
Loading
🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 inconclusive)

Check name Status Explanation Resolution
Linked Issues check ❓ Inconclusive The visible changes address the linked issue, but lockfile-related requirements cannot be verified because pnpm-lock.yaml was excluded from review. Review pnpm-lock.yaml and confirm the frozen install, dependency resolution, and related acceptance checks before merging.
✅ Passed checks (4 passed)
Check name Status Explanation
Title check ✅ Passed The title clearly identifies the primary change: migrating the Node.js baseline from LTS Iron to LTS Jod.
Description check ✅ Passed The description is detailed and covers the migration scope, implementation changes, deferred work, breaking changes, and verification results.
Out of Scope Changes check ✅ Passed The reviewed changes align with the linked issue objectives, including the Node and pnpm migration, template imports, dependency updates, and compatibility fixes.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch issue/48-migrate-node-js-baseline-from-lts

Warning

Billing warning: we have not been able to collect payment for this subscription for more than 72 hours. Please update the payment method or pay any pending invoices in Billing to avoid service interruption.


Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Pull request overview

This PR performs a template-aligned, breaking toolchain migration for the @kurone-kito/builder-config pnpm-workspace monorepo, moving the supported runtime baseline to Node.js LTS Jod and upgrading the repository’s package-manager/configuration to pnpm 11 (including global virtual store enablement and CI opt-out).

Changes:

  • Raise the Node.js baseline across version files, engines.node, docs, build targets, and CI (drop 20.x; add 26.x).
  • Migrate pnpm configuration to pnpm 11 (pnpm-workspace.yaml settings, build approvals, overrides/extensions) and update root dev dependency floors.
  • Add/rename template-aligned repo meta/docs (AI agent entrypoints, canonical Copilot instructions, issue forms, .gitmessage), plus a typedoc plugin-resolution workaround script for gvs.

Reviewed changes

Copilot reviewed 38 out of 40 changed files in this pull request and generated 2 comments.

Show a summary per file
File Description
README.md Updates documented supported Node.js versions.
pnpm-workspace.yaml Migrates pnpm config to pnpm 11 keys; enables gvs; adds overrides/extensions/build approvals.
packages/vite-lib-config/typedoc.json Removes typedoc plugin config (now provided via CLI wrapper).
packages/vite-lib-config/src/vite.mts Raises Vite/esbuild target to the new Node baseline.
packages/vite-lib-config/scripts/buildDoc.mjs Adds typedoc wrapper to resolve markdown plugin path under gvs.
packages/vite-lib-config/README.md Updates documented supported Node.js versions.
packages/vite-lib-config/package.json Updates engines range; routes doc build through the new wrapper script.
packages/vite-lib-config/docs/README.md Regenerates docs with updated Node support text.
packages/vite-lib-config/docs/interfaces/ViteConfigOptions.md Regenerated typedoc markdown output (optional param rendering).
packages/vite-lib-config/docs/functions/vitestConfig.md Regenerated typedoc markdown output (optional param rendering).
packages/vite-lib-config/docs/functions/viteConfig.md Regenerated typedoc markdown output (optional param rendering).
packages/typescript-config/README.md Updates documented supported Node.js versions.
packages/typescript-config/package.json Updates engines range to the new baseline.
packages/sea-builder/README.md Updates documented supported Node.js versions and --node examples.
packages/sea-builder/package.json Updates engines range to the new baseline.
packages/example-lib/README.md Updates documented supported Node.js versions.
packages/example-lib/package.json Updates engines range to the new baseline.
packages/example-cli/README.md Updates documented supported Node.js versions.
packages/example-cli/package.json Updates SEA build script to use Node 22 baseline; updates engines range.
package.json Updates root engines and packageManager; raises dev dependency floors.
GEMINI.md Adds Gemini CLI entrypoint guidance for repo AI policies.
docs/ai-strategy.md Adds human-facing AI tooling strategy and cross-file maintenance notes.
CLAUDE.md Adds Claude Code entrypoint guidance for repo AI policies.
biome.jsonc Updates Biome schema reference for the newer Biome line.
AGENTS.md Adds Codex/OpenCode entrypoint guidance for repo AI policies.
.vscode/settings.json Updates VS Code nesting/associations for renamed/added meta files and cspell config rename.
.tool-versions Updates Node tool version to 22.23.1 and drops upstream-removed tokens.
.nvmrc Updates Node version and LTS alias to Jod.
.npmrc Removes legacy pnpm-10-style config (migrated to pnpm-workspace.yaml).
.node-version Updates Node version to 22.23.1.
.gitmessage Adds Conventional Commits template and reminders.
.github/workflows/push-feature.yml Updates CI matrix to 22/24/26; sets pnpm gvs opt-out env; keeps SHA-pinned actions.
.github/workflows/common-release.yml Adds pnpm gvs opt-out env to release/publish jobs.
.github/ISSUE_TEMPLATE/feature_request.yml Adds YAML issue form for feature requests.
.github/ISSUE_TEMPLATE/config.yml Disables blank issues.
.github/ISSUE_TEMPLATE/bug_report.yml Adds YAML issue form for bug reports.
.github/issue_template.md Removes legacy issue template (replaced by forms).
.github/copilot-instructions.md Adds canonical, detailed AI agent guidance for the repo.
.cspell.config.yml Adds renamed cspell config file and custom dictionary entries.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment thread pnpm-workspace.yaml Outdated
Comment thread pnpm-workspace.yaml

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Actionable comments posted: 12

🧹 Nitpick comments (1)
.github/workflows/push-feature.yml (1)

23-23: 🗄️ Data Integrity & Integration | 🔵 Trivial | 🏗️ Heavy lift

Add CI coverage for the enabled global virtual store.

pnpm-workspace.yaml sets enableGlobalVirtualStore: true, but push-feature.yml forces PNPM_CONFIG_ENABLE_GLOBAL_VIRTUAL_STORE: 'false' for every Build-Check job, and no workflow uses the default enabled store. Add one Build-Check job or a separate verification job with the environment variable unset/truthy so the default global-store dependency layout and the packages/vite-lib-config/scripts/buildDoc.mjs workaround are covered.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In @.github/workflows/push-feature.yml at line 23, Add CI coverage for the
enabled global virtual store by adding a Build-Check or verification job that
does not set PNPM_CONFIG_ENABLE_GLOBAL_VIRTUAL_STORE to false, allowing
pnpm-workspace.yaml’s enableGlobalVirtualStore setting to apply. Keep the
existing disabled-store jobs intact and ensure the new job exercises the
packages/vite-lib-config/scripts/buildDoc.mjs workaround.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In @.github/ISSUE_TEMPLATE/bug_report.yml:
- Line 44: Add the same redaction warning to the terminal-output/log prompt at
.github/ISSUE_TEMPLATE/bug_report.yml lines 44-44, the
screenshots/additional-context prompt at .github/ISSUE_TEMPLATE/bug_report.yml
lines 66-66, and the corresponding prompt at
.github/ISSUE_TEMPLATE/feature_request.yml lines 42-42, instructing contributors
to remove secrets, credentials, tokens, and personal data before submitting.
- Around line 53-59: Update the required environment textarea configuration in
the bug report template so the example lines are supplied through placeholder
rather than value, leaving the field empty for validation while preserving the
guidance shown to reporters.

In @.nvmrc:
- Around line 1-2: Update the .nvmrc contents to contain only the valid 22.23.1
selector, removing the lts/jod and node lines; do not leave multiple selectors
in the file.

In @.tool-versions:
- Line 1: Update the nodejs entry in .tool-versions to retain the pinned version
22.23.1 and remove unsupported dynamic selectors lts-jod, lts, and latest;
preserve system only if the project requires a system fallback.

In `@packages/example-cli/package.json`:
- Line 26: Ensure SEA Node.js resolution enforces the documented Node 22.23.1
minimum: update resolveNodeVersion to use >=22.23.1, and update the build:sea
script in packages/example-cli/package.json (line 26) plus the corresponding
version ranges in packages/sea-builder/README.md (lines 47-48) so older Node 22
patches cannot be selected.

In `@packages/vite-lib-config/scripts/buildDoc.mjs`:
- Around line 9-11: Update the TypeDoc invocation around pluginPath and
spawnSync to resolve the explicit typedoc/bin/typedoc file path, invoke it
through the Node executable, and set shell to false. Preserve the existing
plugin argument and status handling while avoiding require.resolve on the
unavailable typedoc/bin/typedoc subpath.

In `@packages/vite-lib-config/typedoc.json`:
- Line 3: Update the TypeDoc configuration associated with the entryPoints
setting so external UserConfig and ViteUserConfig return types from vite and
vitest/config render as descriptive text instead of unresolved symbols;
alternatively, add external symbol link mappings for those packages if the
documentation should link to their definitions.

In `@pnpm-workspace.yaml`:
- Line 21: Update the pnpmOnFail configuration in pnpm-workspace.yaml from warn
to download or error so pnpm stops or retrieves the required version when a
package-manager version mismatch occurs, preventing workspace commands from
continuing with an incompatible version.
- Around line 10-11: Remove the obsolete onlyBuiltDependencies configuration
from pnpm-workspace.yaml, retaining allowBuilds.esbuild: true as the sole
build-script approval, then regenerate the pnpm lockfile using pnpm 11.
- Around line 23-26: Update the comment above workspaceConcurrency to accurately
state that the value is intentionally kept at 1 to enforce serial recursive
publish execution, removing the contradictory wording about increasing it.
- Line 7: Update the workspace configuration’s gitChecks setting from false to
true so pnpm publish performs its configured branch, clean-tree, and up-to-date
checks; preserve the existing publish scripts’ explicit --no-git-checks
behavior.

In `@README.md`:
- Around line 26-28: Update the Node.js 26 “Latest” installation instructions to
account for Corepack no longer being bundled: add a userland Corepack
installation step before corepack enable, or document direct installation of
pnpm 11.15.1 for that runtime while preserving the existing instructions for
other Node.js versions.

---

Nitpick comments:
In @.github/workflows/push-feature.yml:
- Line 23: Add CI coverage for the enabled global virtual store by adding a
Build-Check or verification job that does not set
PNPM_CONFIG_ENABLE_GLOBAL_VIRTUAL_STORE to false, allowing pnpm-workspace.yaml’s
enableGlobalVirtualStore setting to apply. Keep the existing disabled-store jobs
intact and ensure the new job exercises the
packages/vite-lib-config/scripts/buildDoc.mjs workaround.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro Plus

Run ID: f9f246a5-7b07-4746-93df-f48f685014dd

📥 Commits

Reviewing files that changed from the base of the PR and between 6fcd6fd and 4c995b6.

⛔ Files ignored due to path filters (1)
  • pnpm-lock.yaml is excluded by !**/pnpm-lock.yaml
📒 Files selected for processing (39)
  • .cspell.config.yml
  • .github/ISSUE_TEMPLATE/bug_report.yml
  • .github/ISSUE_TEMPLATE/config.yml
  • .github/ISSUE_TEMPLATE/feature_request.yml
  • .github/copilot-instructions.md
  • .github/issue_template.md
  • .github/workflows/common-release.yml
  • .github/workflows/push-feature.yml
  • .gitmessage
  • .node-version
  • .npmrc
  • .nvmrc
  • .tool-versions
  • .vscode/settings.json
  • AGENTS.md
  • CLAUDE.md
  • GEMINI.md
  • README.md
  • biome.jsonc
  • docs/ai-strategy.md
  • package.json
  • packages/example-cli/README.md
  • packages/example-cli/package.json
  • packages/example-lib/README.md
  • packages/example-lib/package.json
  • packages/sea-builder/README.md
  • packages/sea-builder/package.json
  • packages/typescript-config/README.md
  • packages/typescript-config/package.json
  • packages/vite-lib-config/README.md
  • packages/vite-lib-config/docs/README.md
  • packages/vite-lib-config/docs/functions/viteConfig.md
  • packages/vite-lib-config/docs/functions/vitestConfig.md
  • packages/vite-lib-config/docs/interfaces/ViteConfigOptions.md
  • packages/vite-lib-config/package.json
  • packages/vite-lib-config/scripts/buildDoc.mjs
  • packages/vite-lib-config/src/vite.mts
  • packages/vite-lib-config/typedoc.json
  • pnpm-workspace.yaml
💤 Files with no reviewable changes (2)
  • .npmrc
  • .github/issue_template.md

Comment thread .github/ISSUE_TEMPLATE/bug_report.yml
Comment thread .github/ISSUE_TEMPLATE/bug_report.yml Outdated
Comment thread .nvmrc
Comment thread .tool-versions
Comment thread packages/example-cli/package.json Outdated
Comment thread pnpm-workspace.yaml
Comment thread pnpm-workspace.yaml Outdated
Comment thread pnpm-workspace.yaml
Comment thread pnpm-workspace.yaml
Comment thread README.md
CI on windows-latest failed after the pnpm 11 upgrade: pnpm 11
apparently propagates `pnpm run --no-bail`'s exit code correctly,
where pnpm 10 silently swallowed it, surfacing a pre-existing,
windows-only bug in this test rather than a regression from this
issue's other changes (confirmed by finding the identical vitest
failure already present, unnoticed, in the immediately prior merged
PR's own windows-latest log).

The fixture passed the literal string `'file:///entry.mjs'` to
`fileURLToPath`, which is not a valid Windows file URL (Windows file
URLs need a drive letter) even though it's a valid POSIX one — a
value `import.meta.url` itself would never actually produce on either
platform, so production code was never affected. Build the entry path
and its URL with `pathToFileURL`/a platform check instead, so the pair
round-trips correctly on both platforms.

Refs #48
@kurone-kito
kurone-kito force-pushed the issue/48-migrate-node-js-baseline-from-lts branch from a4d13eb to b6c750f Compare August 1, 2026 08:41
Four Copilot/CodeRabbit review findings on PR #88's pnpm 11 config:

- pin the packageExtensions entry for undici-types' @types/node to the
  same ^24.6.2 range sea-builder/vite-lib-config already use, instead
  of '*', so a lockfile regeneration cannot resolve a different major
  for different importers
- note in-file that the @babel/parser/@babel/types overrides are a
  time-boxed minimumReleaseAge workaround with the exact date they
  stop being needed, so it isn't forgotten
- remove the onlyBuiltDependencies entry: pnpm 11 no longer reads it
  (consolidated into allowBuilds, which this file already sets for
  esbuild) — dead config now that pnpm 11 is the pinned version
- reword the workspaceConcurrency comment; "we're increasing the
  number from 1" read as if the value would change, when the setting
  intentionally stays at 1 to keep publish serialized

Refs #48
Two CodeRabbit findings on PR #88's typedoc/gvs workaround:

- buildDoc.mjs invoked `typedoc` via `spawnSync(..., { shell: true })`
  with an args array, which node deprecates (DEP0190) since it only
  concatenates the array into a shell string instead of escaping it.
  Resolve typedoc's own bin script path via its package.json's `bin`
  field and spawn node directly against it, shell disabled.
- typedoc.json's build emitted unresolved-symbol warnings for vite's
  UserConfig/mergeConfig (referenced via @link from vitestConfig's own
  re-exported ViteUserConfig alias) since the build only processes
  this package's own entry point. Add externalSymbolLinkMappings so
  those render as links instead of warnings; regenerated docs
  accordingly.

Refs #48
… range

CodeRabbit finding on PR #88: `--node=22` maps to `^22` in sea-builder's
resolveNodeVersion, which still matches Node 22 patches below the
`^22.23.1` engines floor this issue raises the workspace to. Use an
explicit `>=22.23.1` range instead, which resolveNodeVersion passes
through unchanged, so the SEA binary can't embed an older, unsupported
patch.

Refs #48
Three CodeRabbit findings on PR #88:

- the ISSUE_TEMPLATE forms asked for logs/screenshots/context without
  ever telling contributors to strip secrets, credentials, tokens, or
  personal data first. Add one shared warning to each form's intro.
- bug_report.yml's required Environment Details field pre-filled the
  example block via `value`, so `required: true` would still pass on
  an unedited submission. Switch it to `placeholder` so the field is
  actually empty until a reporter fills it in.
- Node.js 26, newly added to this issue's CI matrix, no longer bundles
  Corepack. `corepack enable` alone fails there; document installing
  Corepack from npm first for that runtime.

Refs #48

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Actionable comments posted: 1

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@packages/vite-lib-config/typedoc.json`:
- Around line 3-9: Add a “vitest/config” entry to the externalSymbolLinkMappings
object in typedoc.json, mapping ViteUserConfig to the appropriate vitest/config
documentation URL while preserving the existing vite mappings.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro Plus

Run ID: 3df17ef8-0933-4f5e-b5c9-3ad09356f0fb

📥 Commits

Reviewing files that changed from the base of the PR and between 4c995b6 and fbaeb16.

⛔ Files ignored due to path filters (1)
  • pnpm-lock.yaml is excluded by !**/pnpm-lock.yaml
📒 Files selected for processing (10)
  • .github/ISSUE_TEMPLATE/bug_report.yml
  • .github/ISSUE_TEMPLATE/feature_request.yml
  • README.md
  • packages/example-cli/package.json
  • packages/sea-builder/src/utils/runIfMain.spec.mts
  • packages/vite-lib-config/docs/functions/viteConfig.md
  • packages/vite-lib-config/docs/functions/vitestConfig.md
  • packages/vite-lib-config/scripts/buildDoc.mjs
  • packages/vite-lib-config/typedoc.json
  • pnpm-workspace.yaml
🚧 Files skipped from review as they are similar to previous changes (7)
  • .github/ISSUE_TEMPLATE/feature_request.yml
  • packages/vite-lib-config/docs/functions/viteConfig.md
  • packages/vite-lib-config/scripts/buildDoc.mjs
  • packages/example-cli/package.json
  • packages/vite-lib-config/docs/functions/vitestConfig.md
  • .github/ISSUE_TEMPLATE/bug_report.yml
  • pnpm-workspace.yaml

Comment thread packages/vite-lib-config/typedoc.json
@kurone-kito
kurone-kito merged commit d97a3d7 into main Aug 1, 2026
23 checks passed
@kurone-kito
kurone-kito deleted the issue/48-migrate-node-js-baseline-from-lts branch August 1, 2026 10:29
kurone-kito added a commit that referenced this pull request Aug 10, 2026
Chatgpt-codex flagged the shared Breaking entry on PR #114: it only
described dropping Node.js 20, hiding that #88 also raised the floor
within Node.js 22/24 and dropped Node.js 25 entirely, verified
against the actual engines.node diff in all three package.json
files. State the exact before/after ranges in each of the three
CHANGELOGs.

Refs #107
kurone-kito added a commit that referenced this pull request Aug 10, 2026
Chatgpt-codex flagged a second breaking change from #88 on PR #114,
distinct from the engines.node floor: packages/vite-lib-config/src/
vite.mts's shared viteConfig raised its Vite build target from
node20.11 to node22.23, verified against the actual diff. This
affects the compiled output syntax of every package built through
that shared config, including this repository's own sea-builder,
independent of which Node.js version runs the build itself.

Refs #107
kurone-kito added a commit that referenced this pull request Aug 10, 2026
Proactively audited every entry-bearing PR (#19, #41, #42, #44, #66,
#70-#76, #88) against actual package.json diffs, applying the same
"runtime dep / breaking config / vague wording" lens Codex used across
five prior review rounds, instead of waiting for another round-trip.

Found: #19 also bumped cpy-cli and typescript devDependencies in all
three target packages (plus type-fest and undici for sea-builder),
none previously recorded under 0.21.0. Also replaced the vague
"grouped Dependabot update (#44)" wording in sea-builder and
vite-lib-config with the actual packages/versions it bumped, matching
this backfill's established granularity for every other dependency
bump entry.

Refs #107
kurone-kito added a commit that referenced this pull request Aug 10, 2026
Chatgpt-codex flagged three more gaps in the reviewed release notes,
each verified against the actual PR diff before accepting:

- typescript-config's peerDependencies still advertises `>=5.7.x`,
  but erasableSyntaxOnly (enabled in #19) requires TypeScript 5.8+;
  noted the effective floor so consumers on 5.7 know to upgrade.
- #88 also fixed vite-lib-config's TypeDoc build (resolving
  typedoc-plugin-markdown under pnpm's virtual store) and added
  working external link mappings for Vite symbols in the generated
  docs, previously undocumented.
- #70's JSDoc fix entry only mentioned the shebang/library-mode
  branch inversion; broadened it to cover the filtered-entries and
  mixed-entries behavior it also documented, and vitestConfig's
  wholesale rewrite from a copy-pasted, incorrect description to its
  actual test.environment merge behavior.

Refs #107
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.

Re-import pnpm-project-template: migrate the Node.js baseline from LTS Iron to LTS Jod

2 participants