Repository navigation
chore(deps): move the CLI to @oclif/core 5, with plugin-help 7 and plugin-plugins 7 in one commit (#21125) - #21212
Conversation
…in-plugins 7.0.3 All three ranges move in one commit in packages/cli/package.json: @oclif/core ^5.1.2 (dependencies), @oclif/plugin-help ^7.0.2 and @oclif/plugin-plugins ^7.0.3 (devDependencies). Both plugins depend on @oclif/core ^5.0.0, so the lockfile resolves exactly one core copy. pnpm-lock.yaml regenerated with `pnpm install --lockfile-only`; only the oclif subtree moves (ejs 3 -> 6 with jake/filelist gone, is-wsl 2 -> wsl-utils 0.4, npm 11.19.0 -> 11.21.0 under plugin-plugins), and no resolved version goes down against the merge base. Claude-Session: https://claude.ai/code/session_018gA1pE6eJtwHhqx72G8U9X Co-authored-by: Claude <noreply@anthropic.com>
….1.2 Every behaviour the tree recorded as measured against @oclif/core 4.13.3 was re-measured on the 5.1.2 the lockfile now resolves, and each holds: - `lib/execute.js` is byte-identical across 4.13.3, 5.0.0 and 5.1.2, so the `execute()` inlined in bin/run.js and bin/run-dev.js is still verbatim apart from the added lines. - `tsPath()` still reads `settings.enableAutoTranspile` ahead of `isProd()`, `isProd()` keeps its body (now at `lib/util/util.js:65`), and `Config.load()` on this package resolves `dist/commands` for an unset or `production` NODE_ENV and `src/commands` for `development` and `test`, the same four rows. - The integer flag parser is unchanged (`/^-?\d+$/`), and driving `Parser.parse` reproduces the port-contract table row for row: a flag's `parse` and `min`/`max` never run over a `default`, and do run over argv and the `env:` option. - A command module that fails to load or exports no command class still produces a `module/task/plugin/root/(code)/message` warning detail. The two `module:` lines in unbuilt-workspace-lead.test.ts are transcripts of a 4.13.3 run and stay as recorded; the docblock now says why. Adds the patch changeset for @objectstack/cli. Claude-Session: https://claude.ai/code/session_018gA1pE6eJtwHhqx72G8U9X Co-authored-by: Claude <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_018gA1pE6eJtwHhqx72G8U9X Co-authored-by: Claude <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_018gA1pE6eJtwHhqx72G8U9X Co-authored-by: Claude <noreply@anthropic.com>
📓 Docs Drift Check
What this run could not see
Coarse fallback — 25 page(s) merely mention a changed package (the pre-#9192 predicate, kept for the deliberately-wide backstop): |
Review: ACCEPT, PR #21212 (head
|
Fixes #21125
Clause-②: no
What this does
Moves
@objectstack/clito the@oclif/core5 line, under the maintainer's ruling:7649ab48b), all inpackages/cli/package.json:@oclif/core^4.13.3→^5.1.2independencies, and@oclif/plugin-help^6.2.58→^7.0.2and@oclif/plugin-plugins^5.4.87→^7.0.3indevDependencies.pnpm-lock.yamlis regenerated, not hand-edited. It was produced withpnpm install --lockfile-onlyon top oforigin/mainand then installed with--frozen-lockfile.20b92f56d). The premise held at every site. The readings are below..changeset/21125-oclif-core-5.md: apatchfor@objectstack/clisaying that the exported Command classes now build on@oclif/core5 and that Node 22 or later is required.oclif.pluginsinpackages/cli/package.jsonis unchanged; that question is with the maintainer. Both plugins stay indevDependencies.Lockfile against the merge base (
0d421041d)The
pnpm-lock.yamldiff is +45/-65. Inimporters, only the threepackages/clientries move. The resolved packages compare like this:@oclif/core@oclif/plugin-help@oclif/plugin-pluginsejsjake,filelistejs3 only)is-wsl,is-docker@oclif/core4's only)wsl-utilspowershell-utilsnpm@oclif/plugin-plugins7, which asks for^11.19.1)@oclif/corecopy, 5.1.2.nodemailerdoes not move: it is 10.0.13 on both sides.Item 3: the premise holds, so the bump lands
The premise was verified before any site was touched.
Upstream. The changelog from 4.13.3 to 5.1.2 lists one BREAKING change, in 5.0.0: "require Node >=22, drop EOL Node versions". After that come
OCLIF_STDIN_TIMEOUT_MSin 5.1.0 (the default stays 10 ms) and lint-driven refactors. Every 5.x release declaresengines.node>=22.0.0, andpackages/clialready declares the same floor.Packages. I diffed the npm tarballs of 4.13.3 and 5.1.2 file by file: 33
lib/*.jsfiles differ. Apart from the Node floor, these are the behavioural changes. None of them touches a surface this tree depends on.ejs6 instead of 3.is-wslis replaced by a dynamicimport('wsl-utils'), which makesgetPlatform()andgetShell()async. Neither is in the package'sexportsmap.readStdin()resolvesundefinedinstead ofnull.loadHelpClass()now falls back to the compiled path. This CLI configures nohelpClass.Pluginholds the value of the warning'smodule:line in a#privatefield.Per-site readings
Each probe was run from this package on 4.13.3 (base
fbcc05f40) and on 5.1.2, with the same source tree.bin/run.js:8,bin/run-dev.js:8execute()is verbatim apart from the added lineslib/execute.jsis byte-identical in 4.13.3, 5.0.0 and 5.1.2 (sha2565ef58b0a…)bin/run.js:34;published-entry-node-env-source-reroute.test.ts:9; the threeserve-*.e2e.test.tsdocblocks;check-cli-test-child-env.mjs:187,1093,1600tsPath()skips the lookup only whenisProd();enableAutoTranspileis read ahead of it; four-rowNODE_ENVtableConfig.load()on this package resolvesdist/commandsfor an unset orproductionNODE_ENVandsrc/commandsfordevelopmentandtest, identical to 4.13.3. TheisProd()body is identical. Ints-path.jsonly onesplit('.', 1)changed.util.js:66to:65.port-contract.ts:38,98,104parseand itsmin/maxnever run over adefault(seven-row table)Parser.parsereproduces all seven rows.parse.js:420-426is unchanged.port-contract.ts:375/^-?\d+$/lib/flags.jsandlib/args.jsare byte-identical. 18Flags.integerreadings (14 inputs, 4 of them also againstmin/max) and 7Parser.parselegs come out identical, for example03000→ 3000.check-cli-command-ids.mjs:385Warning: Errorwith module, task, plugin and message linesmodule: @oclif/core@5.1.2unbuilt-workspace-lead.test.ts:62,160module:line of two transcriptsaddErrorScopediffers only in_base→#base). The classifier readsmessage:only.bin/run-dev.js:470-476(no version stamp)displayWarnings()runs before the firstawaitinConfig.load()load()still opens with it.run-dev-unbuilt-workspace.e2eis green.bin/run.js:89-92(no version stamp)oclif.pluginsloads fromdependenciesonly, soos --helplists nopluginsloadCorePluginsis identical, and the root help lists neitherpluginsnorhelpHelp output. All 139 rendered help pages are byte-identical between 4.13.3 and 5.1.2: the root page, 64 commands and 74 topics, rendered in process from the same tree. This also covers the
ejs3 → 6 change.Published entry (
node bin/run.js). Six invocations return the same exit code, stdout sha256 and stderr sha256 on both versions:--version--helpdev --no-ui(exit 2, with the INVOCATION ERROR lead)serve --port abc(exit 1)serve --port 3e3(exit 1)Packed tarball.
pnpm packwrites@oclif/core^5.1.2,^7.0.2and^7.0.3into the tarball's manifest. Run from the extracted package,bin/run.js --versionand--helpboth exit 0. The install-from-tarball smoke belongs toneeds:pack-smoke.Tests and gates
7649ab48b(basefbcc05f40):pnpm --filter @objectstack/cli typecheckis green. The test-layer ledger holds at 3 files, 28 errors and 6 signatures.--project unit: 242 files, 3435 tests, all pass.--project integration: 68 of 69 files pass. The 1 red is the environment-only CONTROL leg described below.OS_TEST_TIERS=nightly(the e2e tier): 76 files, 775 tests, all pass.cdfd7fd72:--project unit: 242 files, 3436 tests, all pass.--project integration: 69 of 70 files pass, includingvalidate-lint-mapping-connector-source.test.ts. The 1 red is the same CONTROL leg.serve-*files,build-json-undeclared-key-parity,run-dev-unbuilt-workspaceandserve-node-env-production-default.ee3dbc6b4. Its merge brought nopackages/cli, lockfile orpnpm-workspace.yamlchange.dispatch-gates --commandsderives 95 commands. All 95 exit 0.--ranreconciles them as 95 derived, 95 run, 0 NOT-MEASURED, 0 UNRUN.20b92f56dreadcheck:dual-build-cjs-loadsandcheck:i18n-coverageas PREREQUISITE NOT MET (exit 3). Both turned green after a full build, and both are green on this head.Acceptance notes
published-entry-node-env-source-reroute.test.ts, the leg "CONTROL: neutralising the declaration in the child reproduces the card verbatim". It fails identically on basefbcc05f40, which runs@oclif/core4.13.3, with 1 failed and 4 passed and the same assertion.registerTsx()in oclif importstsx/dist/esm/api/index.cjs. Itsregister()throwsERR_MODULE_NOT_FOUNDfor…/tsx/dist/esm/api/esm/index.mjs, so tsx is never registered and the trap is never reached. The CLI prints its version and exits 0.packages/cli/src/commands. CI's reading of this leg decides. Nothing was filed for it.oclif.pluginsis untouched. It still lists two plugins that are onlydevDependencies, so neither ever loads. That question is with the maintainer.Generated by Claude Code