Carried out of #15325 per its triage (comment 5546724278): the reporter observed this while upgrading hotcrm, and triage ruled it a different defect that must not close with that card. Filed unassigned for triage; #15325 is not addressed here and this card is not addressed there.
Observed (reporter, 17.3.0 runtime)
os migrate meta --from 17
Chain: protocol 17 → 17 (runtime 17.0.0)
Where it comes from (re-derived on origin/main at 0c5e97368)
-
packages/cli/src/commands/migrate/meta.ts:353 — printInfo(\Chain: protocol ${fromMajor} → ${toMajor} (runtime ${PROTOCOL_VERSION})`)`
- the
--json path, same file line 330 — runtime: PROTOCOL_VERSION
-
PROTOCOL_VERSION is '17.0.0' in packages/spec/src/kernel/protocol-version.ts:18, and PROTOCOL_MAJOR is derived from it. It is the protocol major padded to a semver string. It is not, and never tracks, the installed @objectstack/cli / runtime package version.
Why it misleads
The word in front of it is runtime, and it prints next to real package versions in the same upgrade session (npm view, os info, the changelog). On a 17.3.0 install a reader takes runtime 17.0.0 as "your runtime is 17.0.0" — an apparent downgrade or a stale install, neither of which is true. The --json field runtime carries the same ambiguity to machine consumers, which is the worse half: an agent scripting the upgrade has no prose to disambiguate.
Options (for triage, not decided here)
A and C are independent; B is optional on top of A.
Scope fence
Not a security, data or correctness defect — a labelling defect in a diagnostic line and one JSON field name. @objectstack/cli migrate meta only; the spec constant is correct as a protocol version and should not move.
Carried out of #15325 per its triage (comment
5546724278): the reporter observed this while upgrading hotcrm, and triage ruled it a different defect that must not close with that card. Filed unassigned for triage; #15325 is not addressed here and this card is not addressed there.Observed (reporter, 17.3.0 runtime)
Where it comes from (re-derived on
origin/mainat0c5e97368)packages/cli/src/commands/migrate/meta.ts:353—printInfo(\Chain: protocol ${fromMajor} → ${toMajor} (runtime ${PROTOCOL_VERSION})`)`--jsonpath, same file line 330 —runtime: PROTOCOL_VERSIONPROTOCOL_VERSIONis'17.0.0'inpackages/spec/src/kernel/protocol-version.ts:18, andPROTOCOL_MAJORis derived from it. It is the protocol major padded to a semver string. It is not, and never tracks, the installed@objectstack/cli/ runtime package version.Why it misleads
The word in front of it is
runtime, and it prints next to real package versions in the same upgrade session (npm view,os info, the changelog). On a 17.3.0 install a reader takesruntime 17.0.0as "your runtime is 17.0.0" — an apparent downgrade or a stale install, neither of which is true. The--jsonfieldruntimecarries the same ambiguity to machine consumers, which is the worse half: an agent scripting the upgrade has no prose to disambiguate.Options (for triage, not decided here)
(protocol 17.0.0)— or, since the chain line already saysprotocol 17 → 17, drop the padded semver from the human line entirely. Human-only, zero consumer impact.@objectstack/cli's ownversion, read through the now-resolvable@objectstack/cli/package.jsononce 17.3.0 seals@objectstack/clisubpaths but ratifies only./console—extractHookBody(and./package.json) have no public entry, and an app's hook-body fidelity harness breaks with no replacement #15325 lands) beside the protocol major, so both facts are on the line and neither impersonates the other.--json, renameruntime→protocolVersion(or addprotocolVersionand keepruntimeone release with a deprecation note).A and C are independent; B is optional on top of A.
Scope fence
Not a security, data or correctness defect — a labelling defect in a diagnostic line and one JSON field name.
@objectstack/climigrate metaonly; the spec constant is correct as a protocol version and should not move.