Filed unassigned by the dev seat implementing #6714, as an out-of-scope finding. Recording, not choosing.
Dedup before filing: repo-scoped REST list of open issues updated since 2026-08-18 (239 issues), grepped for LocationField / aria-invalid / silent-refusal and feedback wordings — nothing matched.
What
packages/fields/src/widgets/LocationField.tsx REFUSES to emit for input it cannot accept, and says nothing when it does. Two refusals now share that silence:
In both cases onChange is simply not called. The box is a CONTROLLED input showing "lat, lng", so the typed text sits in the DOM until the next re-render and then snaps back to the stored value — with no error text, and with aria-invalid reading "false" throughout (measured: driving a real ObjectForm and typing 999, 999, the control's aria-invalid was "false" and the field rendered only its label).
The widget does wire the published validation slot from objectui#3222 — aria-invalid={!!error} — but error is a prop the HOST produces. buildValidationRules has no branch for location, so nothing ever produces one for either refusal. The slot is wired to a producer that does not exist for this field.
Why it may matter
The user's edit disappears and nothing explains why. That is the same "silence after a refusal" shape objectui#4989 defects 2/3/5 were about on the submit-redirect path, where the recorded consequence was the submitter re-trying the action.
⚠️ This is NOT a request to reverse #6714. Triage there weighed "refuse the emission" against "emit and mark invalid" and the implementer chose refusal on a measurement (nothing downstream rejects or repairs the value, so an emission is a write). This card is about telling the user a refusal HAPPENED — which is compatible with refusing, and which the format refusal has needed since well before that card.
What is NOT measured
- Whether the fix belongs in the widget (computing its own invalid state and OR-ing it into the slot it already reads) or at the form renderer (teaching
buildValidationRules a location branch so the existing host-produced error path lights up). The second keeps a single producer for validation messages, which is the direction FieldWidgetComponentProps' doc comment argues for required; the first is local but gives the slot a second author. That choice is triage's, and it is a shared-surface decision rather than a widget one.
- Whether the snap-back on re-render is itself worth changing.
Related
#6714 (the range refusal, which added the second silent case) · objectui#3222 (the validation slot this widget already reads) · objectui#4989 (silence after a refusal, same shape)
Generated by Claude Code
Filed unassigned by the dev seat implementing #6714, as an out-of-scope finding. Recording, not choosing.
Dedup before filing: repo-scoped REST list of open issues updated since 2026-08-18 (239 issues), grepped for
LocationField/aria-invalid/ silent-refusal and feedback wordings — nothing matched.What
packages/fields/src/widgets/LocationField.tsxREFUSES to emit for input it cannot accept, and says nothing when it does. Two refusals now share that silence:not a coordinate);LocationFieldemits out-of-range coordinates the spec rejects #6714, e.g.999, 999).In both cases
onChangeis simply not called. The box is a CONTROLLED input showing"lat, lng", so the typed text sits in the DOM until the next re-render and then snaps back to the stored value — with no error text, and witharia-invalidreading"false"throughout (measured: driving a realObjectFormand typing999, 999, the control'saria-invalidwas"false"and the field rendered only its label).The widget does wire the published validation slot from objectui#3222 —
aria-invalid={!!error}— buterroris a prop the HOST produces.buildValidationRuleshas no branch forlocation, so nothing ever produces one for either refusal. The slot is wired to a producer that does not exist for this field.Why it may matter
The user's edit disappears and nothing explains why. That is the same "silence after a refusal" shape objectui#4989 defects 2/3/5 were about on the submit-redirect path, where the recorded consequence was the submitter re-trying the action.
What is NOT measured
buildValidationRulesalocationbranch so the existing host-producederrorpath lights up). The second keeps a single producer for validation messages, which is the directionFieldWidgetComponentProps' doc comment argues forrequired; the first is local but gives the slot a second author. That choice is triage's, and it is a shared-surface decision rather than a widget one.Related
#6714 (the range refusal, which added the second silent case) · objectui#3222 (the validation slot this widget already reads) · objectui#4989 (silence after a refusal, same shape)
Generated by Claude Code