You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
Retire dashboard chartConfig.type / xAxis / yAxis: spec 17.5.0 refuses them and it blocks cloud's framework re-cut #1964
Floor 1 of the cloud framework re-cut (objectstack-ai/cloud#2332, PR objectstack-ai/cloud#2423). The maintainer's ruling recorded on objectstack-ai/cloud#2332 on 2026-09-28 (verbatim) is 「改 HotCRM 再抬版本(推荐)」: fix HotCRM, then move cloud's .hotcrm-sha. Tracked under epic objectstack-ai/cloud#2440.
What breaks
At objectstack main (spec 17.5.0), MetadataPlugin._parseAndRegisterArtifact refuses retired dashboard keys:
`dashboard.widgets[].chartConfig.type` was removed in @objectstack/spec 17.5.0
`dashboard.widgets[].chartConfig.xAxis` was removed in @objectstack/spec 17.5.0
`dashboard.widgets[].chartConfig.yAxis` was removed in @objectstack/spec 17.5.0
Because of that, cloud's blocking gate apps/objectos-ee test:hotcrm-acceptance fails: serve exits during boot with code 1 against the pinned hotcrm 427c98535de3. That is the only red check on PR objectstack-ai/cloud#2423.
Measured on hotcrm main2f7b2326 (2026-09-28)
There are 16 chartConfig: { blocks, all in dashboard sources:
file
blocks
src/sales/dashboards/activity.dashboard.ts
4
src/sales/dashboards/crm.dashboard.ts
3
src/sales/dashboards/sales.dashboard.ts
4
src/service/dashboards/service.dashboard.ts
5
Command: git grep -n "chartConfig: {" origin/main -- src/. The @objectstack/spec dependency is still 17.4.0.
The dev on objectstack-ai/cloud#2332 probed a hosted tenant kernel at the new pin with this artifact. It registered all 5 dashboards, so the refusal sits on the EE composed-artifact boot path only.
Direction
Remove the three retired keys, and any chartConfig block that is left empty or inert, from those widgets. Verify against the spec 17.5.0 dashboard schema at objectstack main which chartConfig keys survive; do not assume. Dataset-bound widgets already take their chart type from the widget itself (see the comment in src/sales/dashboards/shared-widgets.ts). Keep what each dashboard shows unchanged. Do not route around a platform gap inside hotcrm: if a removed key carried behaviour that nothing else can express, stop and report it.
Acceptance
git grep -nE "chartConfig" -- src/ shows none of type / xAxis / yAxis under chartConfig.
hotcrm's own build and tests pass, and the changeset gate is satisfied.
The composed hotcrm artifact boots on objectstack main. The acceptance proof is cloud's test:hotcrm-acceptance passing once cloud's .hotcrm-sha moves to the merge commit, which happens on objectstack-ai/cloud#2332.
Claim: PM loop round 1 (epic objectstack-ai/cloud#2440)
Session: 786273a0-0246-4bb2-b026-bb37ba5d7295
Branch: claude/issue-1964-retire-chartconfig-axis-keys
Worktree: ~/Documents/GitHub/hotcrm-issue-1964
Domain: repo:hotcrm lane (single-lane repo), reserved by the epic via pm:epic
Seat: epic PM for objectstack-ai/cloud#2440 (seat 1)
File surface: src/sales/dashboards/*.dashboard.ts, src/service/dashboards/*.dashboard.ts, related tests and screenshot metadata only if a test pins them, one .changeset/ file (stop on breach; explain in the report)
Container & model: M, mode:subagent, model: opus (default judgment tier)
Clause-②: no
Thread-read: none
Serial constraints cleared: none. No open hotcrm PR touches dashboard sources (hotcrm has no in-flight pm:dispatched card on these files).
Direct dispatch by the maintainer, verbatim: 「使用专题派发解决这些问题」 (epic session, 2026-09-28).
os-dev-report
{
"issue": 1964,
"status": "blocked",
"branch": "claude/issue-1964-retire-chartconfig-axis-keys",
"pr": null,
"session": "786273a0-0246-4bb2-b026-bb37ba5d7295 (PM session; this dev ran as its subagent)",
"premise_still_valid": false,
"summary": "Two premises are false on the tree, so no PR was opened. (1) The removal cannot land at hotcrm's pin: in the installed and latest-published @objectstack/spec 17.4.0 (npm dist-tags latest = 17.4.0, no 17.5.x published) chartConfig.type is REQUIRED (ChartConfigSchema.shape.type is not optional), so dropping it fails pnpm validate (exit 1, 16 issues), typecheck (exit 1, 16 x TS2741) and build (exit 2, no artifact). No chartConfig spelling is legal on both 17.4.0 and objectstack main short of deleting the whole block, which would drop palette, legend, data labels, brush and the SLA target line. (2) The dashboard keys are not the only refusal. On the rig's real EE composed boot at objectstack main, hotcrm main's artifact is refused for three families: chartConfig type/xAxis/yAxis (34), scale on currency fields (23) and page assignedProfiles (6). With only the chart keys stripped (this card's change) it still exits 1; with all three families stripped it serves (HTTP 200 in 9 s). Behind the chart and assignedProfiles half is the ADR-0087 forward-conversion window. Main's spec still carries the version label 17.4.0, which equals the artifact's floor ^17.4.0, so the verdict is authored-current and nothing is replayed. At a runtime labelled 17.5.0 the window converts both families (34 + 6 notices) and only the 23 currency scale refusals remain. The prepared removal is pushed as 4b62046 for the eventual 17.5.x bump PR. It is red at 17.4.0 by construction, and its commit message says so. The card stays OPEN.",
"tests": "Branch 4b62046 at installed spec 17.4.0: pnpm validate EXIT=1 (16 x dashboards.N.widgets.N.chartConfig.type: Invalid value ''); pnpm typecheck EXIT=1 (16 x TS2741 Property 'type' is missing); pnpm build EXIT=2 (no dist); pnpm lint EXIT=1 (same 16); pnpm lint:i18n-gate EXIT=1 (lint JSON carries error, no issues array, downstream of the same refusal); pnpm hygiene EXIT=0; pnpm hygiene:tokens EXIT=0; pnpm test EXIT=1 (122 files failed | 51 passed, every one on StackSchemaInvalidError defineStack validation failed (16 issues)). Baseline main 2f7b232: pnpm build EXIT=0 (1998.3 KB artifact); pnpm test EXIT=1 with 2 unrelated failures (docs-object-term-consistency 5000 ms timeout, docs-revenue-approvals-navigation). Schema probe at 17.4.0: widget chartConfig {showLegend, colors} -> invalid_value at chartConfig.type; {type, showLegend} -> OK. Dispatch recipe: OS_HOTCRM_ARTIFACT=(main artifact) pnpm --filter @objectstack/objectos-ee test:hotcrm-acceptance EXIT=1. Both suites fail with 'Refusing to certify a HotCRM artifact of unknown provenance ... .hotcrm-sha pins 427c985' (assertBuiltFromPin), so the suite cannot certify any artifact that was not built from .hotcrm-sha. I did not forge a stamp. Real suite at the pin: built 427c985 from git archive with its own lockfile (cli/spec 17.4.0) and stamped it truthfully. test:hotcrm-acceptance EXIT=1: multitenant 'serve EXITED during boot with code 1'; the ZodError opens with currency scale refusals and ends with the chartConfig type/xAxis/yAxis refusals; the install-local suite passed (4 passed, 9 skipped). Direct EE boot (the rig's apps/objectos-ee CLI serve with the suite's base env plus OS_COMPOSED_ARTIFACT_URL, community posture, ports 4931-4933, own PIDs only): main artifact exit 1 after 1.8 s (all three families); chart keys stripped exit 1 (currency scale and assignedProfiles); all three families stripped SERVING (HTTP 200) after 9.0 s. The rig's git status stayed clean. Parse probe, the same ObjectStackDefinitionSchema.parse(applyArtifactForwardConversions(...)) that _parseAndRegisterArtifact runs, from objectstack 862b6ce dist: main artifact has 63 issues (16 type, 9 xAxis, 9 yAxis, 23 objects..scale, 6 pages..assignedProfiles), verdict authored-current (runtime 17.4.0, floor 17.4.0). With runtimeSpecVersion '17.5.0' the verdict is converted-forward, with notices dashboard-widget-chart-config-structure-removed 34, page-assigned-profiles-removed 6 and page-component-filter-record-to-rule-array 4; the 23 remaining issues are all objects..scale. Render delta for the future bump PR, read from source at the rig's objectui 35d68c4 (not measured in the UI): DatasetWidget.tsx:1616 merges the authored axes and AdvancedChartImpl.tsx:1765/1837 falls back to compact ticks. Removing the axes drops the axis titles on 9 widgets and turns the value ticks on the 4 widgets with format '0,0' from grouped digits to compact notation. The grid and log-scale values equal the renderer defaults (:1882/:1886). chartConfig.type always equalled the widget type, and every axis field equalled dimensions[0]/values[0]. Ablation: none. No guard or PR was added; the before/after legs are the direct boots above.",
"mcp_calls": "0",
"api_writes": "1 - POST /repos//issues/1964/comments (this os-dev-report). Plus 2 git pushes (the empty branch, then 4b62046). No PR, no PR assignee, no labels, no issue-assignee write.",
"open_questions": [
{
"question": "The route is dead at hotcrm's pin: removing chartConfig.type needs @objectstack/* 17.5.x, which is unpublished. How should this card and the cloud#2423 gate proceed?",
"options": [
"A: Keep this card blocked until objectstack publishes 17.5.x, then land 4b62046 inside hotcrm's 17.5.x upgrade PR. That PR bumps every @objectstack/* package, removes the currency scale and page assignedProfiles keys, runs a browser check and re-captures the sales-dashboard screenshot pair (as meta.yaml requires). Cost: the gate waits for a release.",
"B: Platform (objectstack): open the ADR-0087 window for artifacts authored at the last release while main already refuses keys 'removed in 17.5.0'. Two ways: a prerelease version label on main, or comparing against the retirement's own version rather than the package label. Then a 17.4.0-built artifact converts on cloud-at-main, and hotcrm only owes the currency scale removal. Cost: an objectstack change, but it also fixes every customer artifact built by the published 17.4.0 CLI on a cloud that runs SHA-pinned main.",
"C: Delete the whole chartConfig blocks now, which is legal on both versions. This loses palette, legend, data labels, brush and the SLA target line (test/sla-compliance-gauge.test.ts pins the annotation). It breaks 'keep what each dashboard shows' and routes around the platform inside hotcrm.",
"D: Land only the xAxis/yAxis removal now, which is legal at 17.4.0. It does not move the gate: type is still refused on main, and a 17.5.0-labelled runtime converts all three anyway. AGENTS.md section 2 refuses 'the half we can land now'."
],
"recommendation": "B, with A as hotcrm's half. Real need: the refusal hits any artifact the published 17.4.0 CLI builds with a dashboard chart, because 17.4.0 makes chartConfig.type mandatory. That is every such tenant artifact, not only hotcrm. Long-term soundness: the conversion window is the platform's declared forward path; a hotcrm-side delete (C) is the workaround AGENTS.md section 1 and 2 forbid. Keeping AI from writing broken metadata: newly authored sources are still refused loudly, and only artifacts authored at an older release convert. No scope creep: B adds no surface, and D ships a half that moves nothing. The PM seat should route B to objectstack triage (finding 1 below)."
},
{
"question": "The dispatch said to stop if a removed key carried behaviour nothing else can express. Per-widget axis titles (9 widgets) and the '0,0' value-tick format (4 widgets) are exactly that. Should the future bump PR accept losing them?",
"options": [
"A: Accept it. The platform ruled this loss explicitly (spec semantic entry dashboard-widget-chart-config-structure-refused, maintainer decision batch #121 item 1: axis titles, formats and grid lines are 'NOT expected back'), and AGENTS.md rule 12 forbids re-escalating a recorded ruling.",
"B: Escalate for a dataset-bound axis-title or format channel."
],
"recommendation": "A, because the loss is ruled rather than a platform gap. The dataset measures already carry format '0,0' (total_amount, list_price_sum). The renderer just does not apply a measure's format to axis ticks: read from source, not measured in the UI."
}
],
"out_of_scope_findings": [
"class: a · reach: public door OS_COMPOSED_ARTIFACT_URL (EE composed boot) on objectstack main 862b6ce exits 1 on an artifact built by the published @objectstack/cli 17.4.0, whose spec REQUIRES the chartConfig.type it then refuses; named producer: hotcrm main 2f7b232 · evidence: applyArtifactForwardConversions resolves runtime 17.4.0 (unreleased main's spec package.json) == authored floor ^17.4.0 -> verdict authored-current, so the retired conversions dashboard-widget-chart-config-structure-removed and page-assigned-profiles-removed are not replayed; the same artifact with runtimeSpecVersion 17.5.0 -> converted-forward (34 + 6 notices). Seam: spec:applyArtifactForwardConversions (packages/metadata-core/src/artifact-forward-conversion.ts:301, resolveInstalledSpecVersion) -> runtime:MetadataPlugin._parseAndRegisterArtifact (packages/metadata/src/plugin.ts:894) · dedupe words: forward conversion window, authored-current, unreleased version label, composed artifact refused, chartConfig.type required",
"class: sub-issue of epic cloud#2440 floor 1 (not a hotcrm defect at 17.4.0) · reach: the same EE composed boot, named producer hotcrm main: 23 objects[].fields[].scale on currency fields are refused ('scale is not valid on a currency field') with no mechanical conversion (semantic entry field-currency-scale-refused), so they remain even at a 17.5.0-labelled runtime; 6 pages[].assignedProfiles are refused on main today (converted at a 17.5.0 label) · evidence: the chart-stripped artifact still exits 1; the artifact with all three families stripped serves HTTP 200 · dedupe words: currency scale refused, assignedProfiles removed 17.5.0, hotcrm boot objectstack main, framework re-cut floor 1",
"carrier: the future hotcrm 17.5.x bump PR · noted, not filed: assets/screenshots/hotcrm/sales-dashboard/{en,zh-Hans}.jpg (meta.yaml says re-capture both when format '0,0' goes), the #1822 axis-title note in src/sales/dashboards/index.ts, and AGENTS.md line 268 ('xAxis is a dataset dimension, yAxis[] a measure'; governed path, maintainer merge)",
"carrier: PM · noted: the dispatch's acceptance recipe cannot run for non-pinned artifacts, because assertBuiltFromPin refuses any artifact whose .built-from-sha differs from .hotcrm-sha. A before/after run needs the pin to move (cloud#2332) or a stamped build of that SHA. I substituted direct serve boots with the suite's env."
]
}
Release: session 786273a0-0246-4bb2-b026-bb37ba5d7295 (epic PM for objectstack-ai/cloud#2440). The claim was 5863990258; branch claude/issue-1964-retire-chartconfig-axis-keys is kept at 4b620461.
Review of the os-dev report above: premise disproved, and accepted as such.
At hotcrm's installed and published @objectstack/spec 17.4.0, chartConfig.type is required. Removing it fails validate, typecheck and build. No spelling works on both 17.4.0 and objectstack main short of deleting whole blocks.
The dev's evidence is re-readable in the report (schema probe, runtime-label probe, direct EE boots).
The dev correctly did not force a PR.
Maintainer ruling on the re-route (epic session, 2026-09-28, verbatim): 「平台修转换 + HotCRM 先删 scale(推荐)」
This card's chart-key removal waits for hotcrm's move to @objectstack/* 17.5.x. Commit 4b620461 is prepared for that bump PR.
Disposition of open question 2 (axis titles and 0,0 ticks lost on 9 and 4 widgets): accepted, option A. The loss is already ruled on the platform side (spec semantic entry dashboard-widget-chart-config-structure-refused, maintainer decision batch #121 item 1: "NOT expected back"). It is not a platform gap and is not re-escalated.
Restart-when: @objectstack/spec 17.5.x is published on npm (then land 4b620461 inside hotcrm's 17.5.x upgrade PR, with the screenshot re-capture that assets/screenshots/hotcrm/sales-dashboard/meta.yaml asks for).
It leaves the epic's reservation: pm:epic is removed.
It enters the lane's own flow with the state below, and priority:p1 marks the maintainer's "优先".
It stays a sub-issue of #2440 for tracking only.
What stays: every ruling already recorded on this card remains binding.
Notes for the dispatcher: stays pm:on-hold with its Restart-when: line (@objectstack/spec 17.5.x published); prepared commit 4b620461 is on the branch.
Closed completed: delivered by PR #1970 (284b9e47, merged 2026-09-30), the 17.5.0 upgrade, which removed the 34 retired chartConfig.type / xAxis / yAxis keys.repo:hotcrm seat, session_01ER8ntXZhYebyQ66aXWdjfT, 2026-10-02T22:09Z.
Why it was not released to the queue: the hold's restart condition, 「@objectstack/spec 17.5.x is published」, was met, but the hold-release double-check ② refuses a release when a merged PR landed on the card's work after the hold comment (5864731385). PR chore(deps): upgrade @objectstack/* to 17.5.0 #1970's body says verbatim: "Removed 34 chartConfig.type / xAxis / yAxis keys (8271c81, #19363)".
Verified on origin/maincf422b83: inside all 16 chartConfig: { blocks across the *.dashboard.ts files, no type / xAxis / yAxis key remains. The one type: hit is a reference-line annotation's own type: 'line', not chartConfig.type. Control: src/sales/dashboards/crm.dashboard.ts at 2f7b2326, the base before chore(deps): upgrade @objectstack/* to 17.5.0 #1970, had 4 xAxis / yAxis lines.
Branch cleanup: the prepared branch claude/issue-1964-retire-chartconfig-axis-keys (4b620461) is superseded and was never merged. It is left in place because a seat container cannot delete refs.
For epic objectstack-ai/cloud#2440 (floor 1): hotcrm's half is on main. Moving cloud's .hotcrm-sha is the cloud side's step.
Activity
hotlong commentedon Sep 28, 2026
Claim: PM loop round 1 (epic objectstack-ai/cloud#2440)
Session:
786273a0-0246-4bb2-b026-bb37ba5d7295Branch:
claude/issue-1964-retire-chartconfig-axis-keysWorktree:
~/Documents/GitHub/hotcrm-issue-1964Domain:
repo:hotcrmlane (single-lane repo), reserved by the epic viapm:epicSeat: epic PM for objectstack-ai/cloud#2440 (seat 1)
File surface:
src/sales/dashboards/*.dashboard.ts,src/service/dashboards/*.dashboard.ts, related tests and screenshot metadata only if a test pins them, one.changeset/file (stop on breach; explain in the report)Container & model:
M,mode:subagent,model: opus(default judgment tier)Clause-②: no
Thread-read: none
Serial constraints cleared: none. No open hotcrm PR touches dashboard sources (hotcrm has no in-flight
pm:dispatchedcard on these files).Direct dispatch by the maintainer, verbatim: 「使用专题派发解决这些问题」 (epic session, 2026-09-28).
hotlong commentedon Sep 28, 2026
os-dev-report
{
"issue": 1964,
"status": "blocked",
"branch": "claude/issue-1964-retire-chartconfig-axis-keys",
"pr": null,
"session": "786273a0-0246-4bb2-b026-bb37ba5d7295 (PM session; this dev ran as its subagent)",
"premise_still_valid": false,
"summary": "Two premises are false on the tree, so no PR was opened. (1) The removal cannot land at hotcrm's pin: in the installed and latest-published @objectstack/spec 17.4.0 (npm dist-tags latest = 17.4.0, no 17.5.x published)
chartConfig.typeis REQUIRED (ChartConfigSchema.shape.type is not optional), so dropping it fails pnpm validate (exit 1, 16 issues), typecheck (exit 1, 16 x TS2741) and build (exit 2, no artifact). No chartConfig spelling is legal on both 17.4.0 and objectstack main short of deleting the whole block, which would drop palette, legend, data labels, brush and the SLA target line. (2) The dashboard keys are not the only refusal. On the rig's real EE composed boot at objectstack main, hotcrm main's artifact is refused for three families: chartConfig type/xAxis/yAxis (34),scaleon currency fields (23) and pageassignedProfiles(6). With only the chart keys stripped (this card's change) it still exits 1; with all three families stripped it serves (HTTP 200 in 9 s). Behind the chart and assignedProfiles half is the ADR-0087 forward-conversion window. Main's spec still carries the version label 17.4.0, which equals the artifact's floor ^17.4.0, so the verdict is authored-current and nothing is replayed. At a runtime labelled 17.5.0 the window converts both families (34 + 6 notices) and only the 23 currencyscalerefusals remain. The prepared removal is pushed as 4b62046 for the eventual 17.5.x bump PR. It is red at 17.4.0 by construction, and its commit message says so. The card stays OPEN.","tests": "Branch 4b62046 at installed spec 17.4.0: pnpm validate EXIT=1 (16 x
dashboards.N.widgets.N.chartConfig.type: Invalid value ''); pnpm typecheck EXIT=1 (16 x TS2741 Property 'type' is missing); pnpm build EXIT=2 (no dist); pnpm lint EXIT=1 (same 16); pnpm lint:i18n-gate EXIT=1 (lint JSON carries error, no issues array, downstream of the same refusal); pnpm hygiene EXIT=0; pnpm hygiene:tokens EXIT=0; pnpm test EXIT=1 (122 files failed | 51 passed, every one on StackSchemaInvalidError defineStack validation failed (16 issues)). Baseline main 2f7b232: pnpm build EXIT=0 (1998.3 KB artifact); pnpm test EXIT=1 with 2 unrelated failures (docs-object-term-consistency 5000 ms timeout, docs-revenue-approvals-navigation). Schema probe at 17.4.0: widget chartConfig {showLegend, colors} -> invalid_value at chartConfig.type; {type, showLegend} -> OK. Dispatch recipe: OS_HOTCRM_ARTIFACT=(main artifact) pnpm --filter @objectstack/objectos-ee test:hotcrm-acceptance EXIT=1. Both suites fail with 'Refusing to certify a HotCRM artifact of unknown provenance ... .hotcrm-sha pins 427c985' (assertBuiltFromPin), so the suite cannot certify any artifact that was not built from .hotcrm-sha. I did not forge a stamp. Real suite at the pin: built 427c985 from git archive with its own lockfile (cli/spec 17.4.0) and stamped it truthfully. test:hotcrm-acceptance EXIT=1: multitenant 'serve EXITED during boot with code 1'; the ZodError opens with currencyscalerefusals and ends with the chartConfig type/xAxis/yAxis refusals; the install-local suite passed (4 passed, 9 skipped). Direct EE boot (the rig's apps/objectos-ee CLIservewith the suite's base env plus OS_COMPOSED_ARTIFACT_URL, community posture, ports 4931-4933, own PIDs only): main artifact exit 1 after 1.8 s (all three families); chart keys stripped exit 1 (currency scale and assignedProfiles); all three families stripped SERVING (HTTP 200) after 9.0 s. The rig's git status stayed clean. Parse probe, the same ObjectStackDefinitionSchema.parse(applyArtifactForwardConversions(...)) that _parseAndRegisterArtifact runs, from objectstack 862b6ce dist: main artifact has 63 issues (16 type, 9 xAxis, 9 yAxis, 23 objects..scale, 6 pages..assignedProfiles), verdict authored-current (runtime 17.4.0, floor 17.4.0). With runtimeSpecVersion '17.5.0' the verdict is converted-forward, with notices dashboard-widget-chart-config-structure-removed 34, page-assigned-profiles-removed 6 and page-component-filter-record-to-rule-array 4; the 23 remaining issues are all objects..scale. Render delta for the future bump PR, read from source at the rig's objectui 35d68c4 (not measured in the UI): DatasetWidget.tsx:1616 merges the authored axes and AdvancedChartImpl.tsx:1765/1837 falls back to compact ticks. Removing the axes drops the axis titles on 9 widgets and turns the value ticks on the 4 widgets with format '0,0' from grouped digits to compact notation. The grid and log-scale values equal the renderer defaults (:1882/:1886). chartConfig.type always equalled the widget type, and every axis field equalled dimensions[0]/values[0]. Ablation: none. No guard or PR was added; the before/after legs are the direct boots above.","mcp_calls": "0",
"api_writes": "1 - POST /repos//issues/1964/comments (this os-dev-report). Plus 2 git pushes (the empty branch, then 4b62046). No PR, no PR assignee, no labels, no issue-assignee write.",
"open_questions": [
{
"question": "The route is dead at hotcrm's pin: removing chartConfig.type needs @objectstack/* 17.5.x, which is unpublished. How should this card and the cloud#2423 gate proceed?",
"options": [
"A: Keep this card blocked until objectstack publishes 17.5.x, then land 4b62046 inside hotcrm's 17.5.x upgrade PR. That PR bumps every @objectstack/* package, removes the currency
scaleand pageassignedProfileskeys, runs a browser check and re-captures the sales-dashboard screenshot pair (as meta.yaml requires). Cost: the gate waits for a release.","B: Platform (objectstack): open the ADR-0087 window for artifacts authored at the last release while main already refuses keys 'removed in 17.5.0'. Two ways: a prerelease version label on main, or comparing against the retirement's own version rather than the package label. Then a 17.4.0-built artifact converts on cloud-at-main, and hotcrm only owes the currency
scaleremoval. Cost: an objectstack change, but it also fixes every customer artifact built by the published 17.4.0 CLI on a cloud that runs SHA-pinned main.","C: Delete the whole chartConfig blocks now, which is legal on both versions. This loses palette, legend, data labels, brush and the SLA target line (test/sla-compliance-gauge.test.ts pins the annotation). It breaks 'keep what each dashboard shows' and routes around the platform inside hotcrm.",
"D: Land only the xAxis/yAxis removal now, which is legal at 17.4.0. It does not move the gate: type is still refused on main, and a 17.5.0-labelled runtime converts all three anyway. AGENTS.md section 2 refuses 'the half we can land now'."
],
"recommendation": "B, with A as hotcrm's half. Real need: the refusal hits any artifact the published 17.4.0 CLI builds with a dashboard chart, because 17.4.0 makes chartConfig.type mandatory. That is every such tenant artifact, not only hotcrm. Long-term soundness: the conversion window is the platform's declared forward path; a hotcrm-side delete (C) is the workaround AGENTS.md section 1 and 2 forbid. Keeping AI from writing broken metadata: newly authored sources are still refused loudly, and only artifacts authored at an older release convert. No scope creep: B adds no surface, and D ships a half that moves nothing. The PM seat should route B to objectstack triage (finding 1 below)."
},
{
"question": "The dispatch said to stop if a removed key carried behaviour nothing else can express. Per-widget axis titles (9 widgets) and the '0,0' value-tick format (4 widgets) are exactly that. Should the future bump PR accept losing them?",
"options": [
"A: Accept it. The platform ruled this loss explicitly (spec semantic entry dashboard-widget-chart-config-structure-refused, maintainer decision batch #121 item 1: axis titles, formats and grid lines are 'NOT expected back'), and AGENTS.md rule 12 forbids re-escalating a recorded ruling.",
"B: Escalate for a dataset-bound axis-title or format channel."
],
"recommendation": "A, because the loss is ruled rather than a platform gap. The dataset measures already carry format '0,0' (total_amount, list_price_sum). The renderer just does not apply a measure's format to axis ticks: read from source, not measured in the UI."
}
],
"out_of_scope_findings": [
"class: a · reach: public door OS_COMPOSED_ARTIFACT_URL (EE composed boot) on objectstack main 862b6ce exits 1 on an artifact built by the published @objectstack/cli 17.4.0, whose spec REQUIRES the chartConfig.type it then refuses; named producer: hotcrm main 2f7b232 · evidence: applyArtifactForwardConversions resolves runtime 17.4.0 (unreleased main's spec package.json) == authored floor ^17.4.0 -> verdict authored-current, so the retired conversions dashboard-widget-chart-config-structure-removed and page-assigned-profiles-removed are not replayed; the same artifact with runtimeSpecVersion 17.5.0 -> converted-forward (34 + 6 notices). Seam: spec:applyArtifactForwardConversions (packages/metadata-core/src/artifact-forward-conversion.ts:301, resolveInstalledSpecVersion) -> runtime:MetadataPlugin._parseAndRegisterArtifact (packages/metadata/src/plugin.ts:894) · dedupe words: forward conversion window, authored-current, unreleased version label, composed artifact refused, chartConfig.type required",
"class: sub-issue of epic cloud#2440 floor 1 (not a hotcrm defect at 17.4.0) · reach: the same EE composed boot, named producer hotcrm main: 23
objects[].fields[].scaleon currency fields are refused ('scaleis not valid on acurrencyfield') with no mechanical conversion (semantic entry field-currency-scale-refused), so they remain even at a 17.5.0-labelled runtime; 6pages[].assignedProfilesare refused on main today (converted at a 17.5.0 label) · evidence: the chart-stripped artifact still exits 1; the artifact with all three families stripped serves HTTP 200 · dedupe words: currency scale refused, assignedProfiles removed 17.5.0, hotcrm boot objectstack main, framework re-cut floor 1","carrier: the future hotcrm 17.5.x bump PR · noted, not filed: assets/screenshots/hotcrm/sales-dashboard/{en,zh-Hans}.jpg (meta.yaml says re-capture both when format '0,0' goes), the #1822 axis-title note in src/sales/dashboards/index.ts, and AGENTS.md line 268 ('xAxis is a dataset dimension, yAxis[] a measure'; governed path, maintainer merge)",
"carrier: PM · noted: the dispatch's acceptance recipe cannot run for non-pinned artifacts, because assertBuiltFromPin refuses any artifact whose .built-from-sha differs from .hotcrm-sha. A before/after run needs the pin to move (cloud#2332) or a stamped build of that SHA. I substituted direct serve boots with the suite's env."
]
}
Generated by Claude Code
hotlong commentedon Sep 28, 2026
Release: session
786273a0-0246-4bb2-b026-bb37ba5d7295(epic PM for objectstack-ai/cloud#2440). The claim was 5863990258; branchclaude/issue-1964-retire-chartconfig-axis-keysis kept at4b620461.Review of the os-dev report above: premise disproved, and accepted as such.
@objectstack/spec17.4.0,chartConfig.typeis required. Removing it fails validate, typecheck and build. No spelling works on both 17.4.0 and objectstackmainshort of deleting whole blocks.Maintainer ruling on the re-route (epic session, 2026-09-28, verbatim): 「平台修转换 + HotCRM 先删 scale(推荐)」
scalekeys, which no release converts.@objectstack/*17.5.x. Commit4b620461is prepared for that bump PR.Disposition of open question 2 (axis titles and
0,0ticks lost on 9 and 4 widgets): accepted, option A. The loss is already ruled on the platform side (spec semantic entrydashboard-widget-chart-config-structure-refused, maintainer decision batch #121 item 1: "NOT expected back"). It is not a platform gap and is not re-escalated.Restart-when:
@objectstack/spec17.5.x is published on npm (then land4b620461inside hotcrm's 17.5.x upgrade PR, with the screenshot re-capture thatassets/screenshots/hotcrm/sales-dashboard/meta.yamlasks for).hotlong commentedon Sep 28, 2026
Handoff from epic objectstack-ai/cloud#2440 (session
786273a0-0246-4bb2-b026-bb37ba5d7295) to therepo:hotcrmlane.Maintainer, verbatim (epic session, 2026-09-28): 「除了你在飞的卡,其他卡交给 cloud 项目经理优先处理可以吗」
What changes for this card:
pm:epicis removed.priority:p1marks the maintainer's "优先".What stays: every ruling already recorded on this card remains binding.
Notes for the dispatcher: stays
pm:on-holdwith itsRestart-when:line (@objectstack/spec 17.5.x published); prepared commit4b620461is on the branch.objectstack-fleet commentedon Oct 2, 2026
Closed
completed: delivered by PR #1970 (284b9e47, merged 2026-09-30), the 17.5.0 upgrade, which removed the 34 retiredchartConfig.type/xAxis/yAxiskeys.repo:hotcrmseat,session_01ER8ntXZhYebyQ66aXWdjfT, 2026-10-02T22:09Z.@objectstack/spec17.5.x is published」, was met, but the hold-release double-check ② refuses a release when a merged PR landed on the card's work after the hold comment (5864731385). PR chore(deps): upgrade @objectstack/* to 17.5.0 #1970's body says verbatim: "Removed 34chartConfig.type/xAxis/yAxiskeys (8271c81, #19363)".origin/maincf422b83: inside all 16chartConfig: {blocks across the*.dashboard.tsfiles, notype/xAxis/yAxiskey remains. The onetype:hit is a reference-line annotation's owntype: 'line', notchartConfig.type. Control:src/sales/dashboards/crm.dashboard.tsat2f7b2326, the base before chore(deps): upgrade @objectstack/* to 17.5.0 #1970, had 4xAxis/yAxislines.mainnow pins 17.6.0 (chore(deps): upgrade @objectstack/* to 17.6.0 #1982) and its CI is green. The loader refuses these keys since 17.5.0, so a remaining one would have failed boot.claude/issue-1964-retire-chartconfig-axis-keys(4b620461) is superseded and was never merged. It is left in place because a seat container cannot delete refs.main. Moving cloud's.hotcrm-shais the cloud side's step.Generated by Claude Code