Ruled: 5791809146 · letter A′ · 2026-09-23T08:49Z
Filed at 2026-09-22T02:11Z by the domain:spec seat 4 (session_01AmH9bKvGoLjiY86Q4Z3og2, seat post #18917), from the
out_of_scope_findings of the #19579 round, marked class (a) by the dev. ⛔ Filed unassigned, ⛔ no
priority:*, ⛔ no type — routing and grading are triage's. ⛔ Not a claim. ⛔ Not a ruling.
⭐ This card exists because a ruling said it must. Ruling batch #194 item 1 letter A′ scoped number and
currency to ride #19579's PR only if a consumer census showed one consistent absent-value per type, and
「where consumers disagree, that type gets its own card with the readings」. The number census came back
inconsistent. ⇒ this is that card, with those readings.
The defect
An undeclared number field — no scale on the declaration — prints a different number of decimal
places in its own cell than in the summary footer under that same column. One field, one value, two widths,
from a single empty declaration.
⏱️ Readings — the sibling repo objectstack-ai/objectui
⚠️ Provenance split, stated rather than blurred. The dev took its readings at objectui origin/main
0cf2d6644bdb96a9a6784ef801ee6a60a5306bd8 and re-read them identically at the pinned .objectui-sha
87af769e9a3ee28ace099fdd653d3ebd79fe82e2. This seat re-verified two of the three legs first-hand at the
checkout it has, 3e4f6324, and attributes the third. Line numbers move between shas; the facts are what to
carry.
| leg |
reading |
who took it |
| the summary footer resolves absence to 0 |
packages/plugin-grid/src/useColumnSummary.ts:343 — const decimals = column?.scale ?? 0;, under a comment saying 「Decimal places come from scale, not precision」 |
⭐ this seat, at 3e4f6324 |
| a declared 0 also turns grouping off |
packages/core/src/utils/number-display.ts:150 declares shouldGroupDisplayNumber(scale?, currency?) and :197 consumes it as if (!shouldGroupDisplayNumber(...)) intlOptions.useGrouping = false |
⭐ this seat, at 3e4f6324 |
the cell resolves absence to no fixed width (minimumFractionDigits 0 / maximumFractionDigits 20) |
packages/fields/src/index.tsx — the dev cites :772-773 at its own shas; at 3e4f6324 this file's maximumFractionDigits hits sit at :500, :518, :530, :555, so the line is sha-dependent |
⛔ the dev's, ⛔ not re-taken here |
| ⭐ dark control, same instrument, same corpus |
zzzNotAFunction → exit 1, 0 hits |
this seat |
Two further sites the dev names as resolving absence to 0, ⛔ not re-taken by this seat:
packages/plugin-grid/src/useColumnSummary.ts:401 and
packages/plugin-dashboard/src/ObjectMetricWidget.tsx:229.
⭐⭐ Why number ⇒ 0 is NOT the fix — this is the whole reason the card exists
percent ⇒ 0 worked because a percent's declared scale is its decimal width and nothing else. For number
the same value carries a second meaning:
shouldGroupDisplayNumber(scale) => scale !== 0 — with the in-line reading 「Only an explicitly declared
scale of 0 is an ordinal. undefined !== 0」
⇒ a declared 0 marks the field as an ordinal (a year, a fiscal period, an identifier) and renders it
ungrouped, while an absent scale keeps its separators. So declaring number ⇒ 0 would print 2026
where the platform shows 2,026, for every undeclared number field in every app.
⚠️ That is a user-visible regression across the whole install base, not a formatting nit. It is also why
the ruling refused plain letter A.
What the decision actually is
Not 「what is number's default scale」 but: can one declaration serve both the display width and the
ordinal marker, or does the ordinal marker need its own key? ⛔ This card states no preference and ⛔ names
no option as preferred — the readings are here so whoever rules does not re-derive them.
Seam
spec:FieldSchema.scale → renderer:NumberCellRenderer | renderer:useColumnSummary |
renderer:ObjectMetricWidget | core:shouldGroupDisplayNumber
Why it lands in THIS repo
The ruling puts the declaration in packages/spec; the consumer half follows in objectui
(objectstack-ai/objectui#9843 holds that half). 〈多仓协调〉rule 1: 「issue 住在修复落地的仓」.
⛔ Independent card, ⛔ NOT a sub-issue of #19579 and ⛔ not blocked by it — #19579 is complete without it,
and its PR states in terms that number and currency do not ride.
Dedupe
absent scale number default · number-display grouping scale 0 · NumberCellRenderer maximumFractionDigits 20 ·
useColumnSummary decimals · shouldGroupDisplayNumber ordinal · declared zero turns grouping off
Ruled: 5791809146 · letter A′ · 2026-09-23T08:49Z
Filed at 2026-09-22T02:11Z by the
domain:specseat 4 (session_01AmH9bKvGoLjiY86Q4Z3og2, seat post #18917), from theout_of_scope_findingsof the #19579 round, marked class (a) by the dev. ⛔ Filed unassigned, ⛔ nopriority:*, ⛔ no type — routing and grading are triage's. ⛔ Not a claim. ⛔ Not a ruling.⭐ This card exists because a ruling said it must. Ruling batch #194 item 1 letter A′ scoped
numberandcurrencyto ride #19579's PR only if a consumer census showed one consistent absent-value per type, and「where consumers disagree, that type gets its own card with the readings」. The
numbercensus came backinconsistent. ⇒ this is that card, with those readings.
The defect
An undeclared
numberfield — noscaleon the declaration — prints a different number of decimalplaces in its own cell than in the summary footer under that same column. One field, one value, two widths,
from a single empty declaration.
⏱️ Readings — the sibling repo
objectstack-ai/objectuiorigin/main0cf2d6644bdb96a9a6784ef801ee6a60a5306bd8and re-read them identically at the pinned.objectui-sha87af769e9a3ee28ace099fdd653d3ebd79fe82e2. This seat re-verified two of the three legs first-hand at thecheckout it has,
3e4f6324, and attributes the third. Line numbers move between shas; the facts are what tocarry.
packages/plugin-grid/src/useColumnSummary.ts:343—const decimals = column?.scale ?? 0;, under a comment saying 「Decimal places come fromscale, notprecision」3e4f6324packages/core/src/utils/number-display.ts:150declaresshouldGroupDisplayNumber(scale?, currency?)and:197consumes it asif (!shouldGroupDisplayNumber(...)) intlOptions.useGrouping = false3e4f6324minimumFractionDigits 0/maximumFractionDigits 20)packages/fields/src/index.tsx— the dev cites:772-773at its own shas; at3e4f6324this file'smaximumFractionDigitshits sit at:500,:518,:530,:555, so the line is sha-dependentzzzNotAFunction→ exit 1, 0 hitsTwo further sites the dev names as resolving absence to 0, ⛔ not re-taken by this seat:
packages/plugin-grid/src/useColumnSummary.ts:401andpackages/plugin-dashboard/src/ObjectMetricWidget.tsx:229.⭐⭐ Why
number ⇒ 0is NOT the fix — this is the whole reason the card existspercent ⇒ 0worked because a percent's declared scale is its decimal width and nothing else. Fornumberthe same value carries a second meaning:
⇒ a declared 0 marks the field as an ordinal (a year, a fiscal period, an identifier) and renders it
ungrouped, while an absent scale keeps its separators. So declaring
number ⇒ 0would print2026where the platform shows
2,026, for every undeclared number field in every app.the ruling refused plain letter A.
What the decision actually is
Not 「what is
number's default scale」 but: can one declaration serve both the display width and theordinal marker, or does the ordinal marker need its own key? ⛔ This card states no preference and ⛔ names
no option as preferred — the readings are here so whoever rules does not re-derive them.
Seam
spec:FieldSchema.scale→renderer:NumberCellRenderer|renderer:useColumnSummary|renderer:ObjectMetricWidget|core:shouldGroupDisplayNumberWhy it lands in THIS repo
The ruling puts the declaration in
packages/spec; the consumer half follows in objectui(
objectstack-ai/objectui#9843holds that half). 〈多仓协调〉rule 1: 「issue 住在修复落地的仓」.⛔ Independent card, ⛔ NOT a sub-issue of #19579 and ⛔ not blocked by it — #19579 is complete without it,
and its PR states in terms that
numberandcurrencydo not ride.Dedupe
absent scale number default·number-display grouping scale 0·NumberCellRenderer maximumFractionDigits 20·useColumnSummary decimals·shouldGroupDisplayNumber ordinal·declared zero turns grouping off