Repository navigation
fix(spec): chart drillDown mode guidance names object-data-table, not TABLE/PIVOT/METRIC - #20211
Conversation
… TABLE/PIVOT/METRIC object-metric (objectui#9002/PR objectui#10681, merged) and object-pivot (objectui#10685/PR objectui#10710, merged) both refuse drillDown.mode at their TypeScript door now. Only object-data-table still reads it. The published refusal text an author sees for drillDown.mode on a chart sent them to all three blocks, two of which now refuse the same key on arrival. Reword the guidance to name the one block that actually reads mode, and move its pin. The neighbouring `report` guidance entry is left alone — out of scope for this card. Co-authored-by: Claude <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01QcAS3qiYYZNezaxZxaUdMV
patch — the guidance sentence ships as source (chart.zod.ts is in
@objectstack/spec's published src/**/*.zod.ts) and as a runtime string in
dist/ui/index.{js,mjs}; no accept/reject behaviour moves.
Co-authored-by: Claude <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01QcAS3qiYYZNezaxZxaUdMV
📓 Docs Drift Check1 anchor(s) derived from 1 changed package(s); no hand-written page names any of them, so this run has nothing to list — not a clean bill of health. This check sees only pages that NAME a derived anchor: one that documents this change in prose, or enumerates it in an authoring dialect, names none and stays invisible to it on every run. What this run could not see
Coarse fallback — 136 page(s) merely mention a changed package (the pre-#9192 predicate, kept for the deliberately-wide backstop): Which tree this was computed onThis run read A worktree cut from an older # while this PR is open — GitHub drops the merge commit once it closes
git fetch origin 4878f7912a258ae06e12caebb71d94c2a02c8e5f && git checkout 4878f7912a258ae06e12caebb71d94c2a02c8e5f
# afterwards, rebuild it from the two parents, which stay fetchable
git fetch origin 1c8b320a894b31dcfc76c33c8e7a62b8986d893a 8c243371dc73f932ed9bba532b86e22b6426c49a && git checkout -B drift-repro 1c8b320a894b31dcfc76c33c8e7a62b8986d893a && git merge --no-ff 8c243371dc73f932ed9bba532b86e22b6426c49a
node scripts/docs-audit/affected-docs.mjs --json 1c8b320a894b31dcfc76c33c8e7a62b8986d893a |
Contract reviewServed-tier: 111/111 ① Derived judgments
② Semver level
③ Boundary flags
Implemented-by: VERDICT: PASS |
Fixes #20152
Clause-②: no
What changed
ChartDrillDownSchema'sguidanceentry formode(packages/spec/src/ui/chart.zod.ts) told an author who wrotedrillDown.modeon a chart that the key belonged on a "TABLE / PIVOT / METRIC" widget. Two of those three blocks now refuse the same key on arrival:object-metricrefusesdrillDown.modeat its TypeScript door since objectui#9002 (PR objectui#10681, merged) — the ruling this card follows (objectui#9002 comment5643445104, B).object-pivotrefuses it at its TypeScript door since objectui#10685 (PR objectui#10710, merged).Measured on objectui
origin/main(0896838): neitherobject-metric's norobject-pivot's renderer ever readmode; onlyobject-data-tabledoes (ObjectDataTableSchema.drillDown/plugin-dashboard/src/ObjectDataTable.tsx). So the old sentence sent an author straight into a second refusal on two of the three blocks it named, and a stored config that lands onobject-pivot(no zod mirror there) is silently ignored with no diagnostic.The guidance now names the one block that actually reads
mode:The reasoning clause and "Delete the key" are unchanged. Its pin at
packages/spec/src/ui/chart.test.ts:707and the mirror pin atpackages/lint/src/validate-react-page-props.test.ts:1033moved with the wording.Out of scope on this card's own evidence (triage note 3, comment
5851546523): the neighbouringreportguidance entry ("a METRIC / PIVOT widget capability") is left untouched — its blocks were not remeasured here.Premise check (H1)
Re-verified on objectui
origin/main(0896838, PR objectui#10710 merged):ObjectMetricDrillDownConfigand the newObjectPivotDrillDownConfigboth carrymode?: nevertombstones;object-data-tableis the sole reader (isDrillEnabledguards it,'record'opens the row,'filter'turns the drill off). Premise holds in both the pre- and post-#10710 state, sopremise_still_valid: true.Ships, so this carries a changeset
@objectstack/spec's publishedfiles[]includes bothdistandsrc/**/*.zod.ts;chart.zod.tsships as source verbatim, and the sentence is also a runtime string indist/ui/index.js/dist/ui/index.mjs(measured after a rebuild: 1 occurrence of the new wording in each, 0 of the old "TABLE / PIVOT / METRIC" spelling)..changeset/20152-chart-drilldown-mode-guidance.md—patch, no accept/reject behaviour changes.Verification
pnpm --filter @objectstack/spec build— clean; new wording present indist/ui/index.{js,mjs}, old wording absent.pnpm --filter @objectstack/spec check:generated— all 15 generated artifacts up to date (no regeneration needed for a guidance-text-only change).pnpm --filter @objectstack/spec test— 541 test files / 15896 tests passed.pnpm --filter @objectstack/spec typecheck— clean.pnpm --filter @objectstack/lint test— 108 test files / 4169 tests passed, after building lint's workspace dependency closure (@objectstack/formula,@objectstack/spec,@objectstack/sdui-parser— none were built in the fresh worktree).pnpm --filter @objectstack/lint typecheck— clean.node scripts/pm/dispatch-gates.mjs --repo objectstack-ai/objectstack --commands, re-derived after adding the changeset → 83 derived families; ran all 83 and reconciled with--ran: 78 run (all green), 5 NOT MEASURED, 0 UNRUN. The 5 NOT MEASURED (check:doc-formula-expressions,check:docs-transcript-drift,check:dual-build-cjs-loads,check:lean-entry-closure,check:type-check-debt) each exit 3PREREQUISITE NOT MET— they read a whole-treepnpm buildthis local verification's scope does not owe (CI'sBuild Corejob covers it).check-changeset-fixed,check:meta-url-spelling,check:spec-changes,check:authz-resolver,check:error-code-casing,check:filter-alias-parity— all green.Generated by Claude Code