Filed unassigned by the dev seat implementing objectui#6755, as an out-of-scope finding. Recording, not choosing.
Dedup before filing: repo-scoped REST list of all 252 open issues (3 pages, state=open), title+body grepped for 6715 / residue / refusedResidue / is not a number / plain decimals — no match. Control: grepping the same corpus for LocationField returns objectui#6755, so the read was live rather than empty.
What
objectui#6755 ruled (2026-08-29, maintainer) that a widget's own refusal sentence goes through useFieldTranslation + FIELD_DEFAULTS, and locked scope to three sentences: ObjectField's Invalid JSON and LocationField's two refusal sentences.
LocationField now has three. The card was measured on 2026-08-29 06:24 and the ruling written at 14:53; objectui#6715 added a third refusal arm — residue, for a half that is only partly a number (12abc, 34) — whose sentence is built by refusedResidueMessage() in packages/fields/src/widgets/LocationField.tsx:
`Not saved: ${named} ${verb}. Enter plain decimals (example: 30.2741, 120.1551).`
with verb being is not a number / are not numbers and named being latitude "12abc"-style. It is a string literal in the source, exactly like the two the ruling keyed.
Why it is filed rather than folded into the #6755 PR
The ruling says 「范围锁定这 3 句」 and names one same-class instance (objectui#4752) that must NOT ride along. This is a fourth sentence the ruling could not have seen — but reading a scope lock as "except when I find one more" is the dev seat's call to make, not mine. So the #6755 PR keys the three ruled sentences and leaves this one, and no test in that PR pins the residue arm's English text (pinning it would read as endorsement).
The measured consequence of leaving it
All three arms render through the SAME <p> element and the same refusalError state. After #6755 lands, that one line speaks the reader's language when the format or range arm fired and English when the residue arm did — the same shape objectui#4028 was reported for ("four Chinese labels around one English one"), inside a single widget.
Cost if it is ruled in
Mechanically identical to what the #6755 PR already does, one arm wider: one key (fields.location.refusedResidue — an interpolated one: the half names and the quoted text are data), ten pack entries, and it becomes bound by check:i18n-drift like the other three. The English default stays byte-identical, so objectui#6715's own pins and plugin-form's ObjectForm.locationResidue.test.tsx are unaffected.
Not measured: whether the interpolation should carry named/verb as holes or be keyed per arity (_one / _other). That is a real authoring choice — verb is grammar, and a pack whose plural rules differ cannot use an English verb form as a hole — and it is why this is not a two-line copy of the other two keys.
Related
objectui#6755 (the ruling and the PR that keys the other two) · objectui#6715 (added this arm) · objectui#6716 (added the first two) · objectui#4752 (the same class in @object-ui/components, still its own card)
Filed unassigned by the dev seat implementing objectui#6755, as an out-of-scope finding. Recording, not choosing.
Dedup before filing: repo-scoped REST list of all 252 open issues (3 pages,
state=open), title+body grepped for6715/residue/refusedResidue/is not a number/plain decimals— no match. Control: grepping the same corpus forLocationFieldreturns objectui#6755, so the read was live rather than empty.What
objectui#6755 ruled (2026-08-29, maintainer) that a widget's own refusal sentence goes through
useFieldTranslation+FIELD_DEFAULTS, and locked scope to three sentences:ObjectField'sInvalid JSONandLocationField's two refusal sentences.LocationFieldnow has three. The card was measured on 2026-08-29 06:24 and the ruling written at 14:53; objectui#6715 added a third refusal arm —residue, for a half that is only partly a number (12abc, 34) — whose sentence is built byrefusedResidueMessage()inpackages/fields/src/widgets/LocationField.tsx:with
verbbeingis not a number/are not numbersandnamedbeinglatitude "12abc"-style. It is a string literal in the source, exactly like the two the ruling keyed.Why it is filed rather than folded into the #6755 PR
The ruling says 「范围锁定这 3 句」 and names one same-class instance (objectui#4752) that must NOT ride along. This is a fourth sentence the ruling could not have seen — but reading a scope lock as "except when I find one more" is the dev seat's call to make, not mine. So the #6755 PR keys the three ruled sentences and leaves this one, and no test in that PR pins the residue arm's English text (pinning it would read as endorsement).
The measured consequence of leaving it
All three arms render through the SAME
<p>element and the samerefusalErrorstate. After #6755 lands, that one line speaks the reader's language when the format or range arm fired and English when the residue arm did — the same shape objectui#4028 was reported for ("four Chinese labels around one English one"), inside a single widget.Cost if it is ruled in
Mechanically identical to what the #6755 PR already does, one arm wider: one key (
fields.location.refusedResidue— an interpolated one: the half names and the quoted text are data), ten pack entries, and it becomes bound bycheck:i18n-driftlike the other three. The English default stays byte-identical, so objectui#6715's own pins andplugin-form'sObjectForm.locationResidue.test.tsxare unaffected.Not measured: whether the interpolation should carry
named/verbas holes or be keyed per arity (_one/_other). That is a real authoring choice —verbis grammar, and a pack whose plural rules differ cannot use an English verb form as a hole — and it is why this is not a two-line copy of the other two keys.Related
objectui#6755 (the ruling and the PR that keys the other two) · objectui#6715 (added this arm) · objectui#6716 (added the first two) · objectui#4752 (the same class in
@object-ui/components, still its own card)