Ruled: 5865890672 · letter A · 2026-09-28T08:02Z
Source
This surfaced on objectstack-ai/hotcrm#1964 (floor 1 of the cloud framework re-cut, objectstack-ai/cloud#2332 / PR objectstack-ai/cloud#2423) and is tracked under epic objectstack-ai/cloud#2440.
Maintainer ruling in the epic session, 2026-09-28 (verbatim): 「平台修转换 + HotCRM 先删 scale(推荐)」. The platform fixes the forward conversion. hotcrm only removes what no release can convert.
What breaks
objectstack main (measured at 862b6ce8) already refuses keys that the retirement ledger marks "removed in @objectstack/spec 17.5.0". But packages/spec on main still carries the version label 17.4.0, and 17.5.x is not published (npm latest = 17.4.0).
applyArtifactForwardConversions (packages/metadata-core/src/artifact-forward-conversion.ts ~301, resolveInstalledSpecVersion) therefore reads runtime 17.4.0 == the artifact's authored floor ^17.4.0 and returns authored-current. The retired conversions are then not replayed, and MetadataPlugin._parseAndRegisterArtifact (packages/metadata/src/plugin.ts ~894) refuses the artifact.
Consequence: any artifact built by the published @objectstack/cli 17.4.0 that contains a dashboard chart cannot boot on a runtime that runs unreleased main. At 17.4.0, chartConfig.type is required, and main refuses it. Such a runtime is the EE composed boot through OS_COMPOSED_ARTIFACT_URL, as cloud does when it pins a framework SHA. No source spelling of chartConfig is legal on both versions short of deleting the block.
Measured (hotcrm#1964 dev report, 2026-09-28)
Probe: the same ObjectStackDefinitionSchema.parse(applyArtifactForwardConversions(...)) from objectstack 862b6ce dist, run on hotcrm main's artifact:
| runtime label |
verdict |
conversions applied |
issues left |
17.4.0 (actual label on main) |
authored-current |
none |
63: 16 chartConfig.type, 9 xAxis, 9 yAxis, 23 objects..scale, 6 pages..assignedProfiles |
forced 17.5.0 |
converted-forward |
dashboard-widget-chart-config-structure-removed ×34, page-assigned-profiles-removed ×6, page-component-filter-record-to-rule-array ×4 |
only the 23 currency scale issues (no conversion exists; hotcrm is removing them) |
Direct EE boot of the same artifact on main: exit 1. With all three key families stripped: serves (HTTP 200).
Direction (for triage and the owning lane)
Make the conversion window open for artifacts authored at the last published release whenever the runtime already enforces a later retirement. The dev named two shapes; picking one is the owning lane's design call:
- Option a.
main carries a prerelease label (e.g. 17.5.0-next) as soon as it contains a 17.5 retirement.
- Option b. The window compares the artifact's authored version against the retirement's own version instead of the package label.
Acceptance
- An artifact built by the published 17.4.0 CLI with dashboard charts and page
assignedProfiles boots on main, and the conversion notices are logged.
- Newly authored sources that use the retired keys are still refused loudly.
- A regression test pins the "unreleased main, artifact at last release" case.
Ruled: 5865890672 · letter A · 2026-09-28T08:02Z
Source
This surfaced on objectstack-ai/hotcrm#1964 (floor 1 of the cloud framework re-cut, objectstack-ai/cloud#2332 / PR objectstack-ai/cloud#2423) and is tracked under epic objectstack-ai/cloud#2440.
Maintainer ruling in the epic session, 2026-09-28 (verbatim): 「平台修转换 + HotCRM 先删 scale(推荐)」. The platform fixes the forward conversion. hotcrm only removes what no release can convert.
What breaks
objectstack
main(measured at862b6ce8) already refuses keys that the retirement ledger marks "removed in @objectstack/spec 17.5.0". Butpackages/speconmainstill carries the version label17.4.0, and 17.5.x is not published (npmlatest= 17.4.0).applyArtifactForwardConversions(packages/metadata-core/src/artifact-forward-conversion.ts~301,resolveInstalledSpecVersion) therefore reads runtime17.4.0== the artifact's authored floor^17.4.0and returns authored-current. The retired conversions are then not replayed, andMetadataPlugin._parseAndRegisterArtifact(packages/metadata/src/plugin.ts~894) refuses the artifact.Consequence: any artifact built by the published
@objectstack/cli17.4.0 that contains a dashboard chart cannot boot on a runtime that runs unreleasedmain. At 17.4.0,chartConfig.typeis required, andmainrefuses it. Such a runtime is the EE composed boot throughOS_COMPOSED_ARTIFACT_URL, as cloud does when it pins a framework SHA. No source spelling ofchartConfigis legal on both versions short of deleting the block.Measured (hotcrm#1964 dev report, 2026-09-28)
Probe: the same
ObjectStackDefinitionSchema.parse(applyArtifactForwardConversions(...))from objectstack862b6cedist, run on hotcrmmain's artifact:17.4.0(actual label on main)chartConfig.type, 9xAxis, 9yAxis, 23objects..scale, 6pages..assignedProfiles17.5.0dashboard-widget-chart-config-structure-removed×34,page-assigned-profiles-removed×6,page-component-filter-record-to-rule-array×4scaleissues (no conversion exists; hotcrm is removing them)Direct EE boot of the same artifact on
main: exit 1. With all three key families stripped: serves (HTTP 200).Direction (for triage and the owning lane)
Make the conversion window open for artifacts authored at the last published release whenever the runtime already enforces a later retirement. The dev named two shapes; picking one is the owning lane's design call:
maincarries a prerelease label (e.g.17.5.0-next) as soon as it contains a 17.5 retirement.Acceptance
assignedProfilesboots onmain, and the conversion notices are logged.