Filed unassigned by the #6812 survey seat, while verifying that card's premise that buildValidationRules is the producer of the host-side error prop every field widget's published #3222 slot reads. Recording, not choosing — domain:*, type and grading are triage's to produce.
Dedup before filing. Repo-scoped REST listing of the 249 open issues here (PRs excluded) plus a local regex over title+body: zero hits for InlineFieldInput and for inline edit.*validat|validat.*inline edit. A zero is not a reading on its own, so it was reverse-checked with two controls that must hit — buildValidationRules returned #6812 and #6366, and 3222 returned #6812, #6803, #6778, #6776. The zero stands. Nearest neighbour checked and not a duplicate: #6803 is about NumberField not READING the published error slot; this is about a surface where nothing PRODUCES a value for it.
The fact
On the form surface the chain is complete and was verified end to end:
buildValidationRules(field) is called at packages/plugin-form/src/ObjectForm.tsx:705 and packages/plugin-form/src/sectionFields.ts:131;- its rules reach react-hook-form's
Controller, and the widget's error prop is fieldState.error?.message (packages/components/src/renderers/form/form.tsx:2683).
The inline-edit surface has neither half. packages/plugin-detail/src/InlineFieldInput.tsx (483 lines, rendered by DetailSection.tsx:333 and HeaderHighlight.tsx:192) imports from @object-ui/fields but notbuildValidationRules; grep for validat in that file returns one hit, a comment about backend date handling. DetailSection.tsx has none, and InlineEditSaveBar.tsx has one, also a comment. InlineFieldInput never receives an error prop at all.
⇒ For a record edited in place on a detail page, the #3222 slot has no producer: no required, no minLength/maxLength, no pattern, no email/url, no field-authored validate — and no location, the one stored-value rule the platform has (#6744). The same field, opened in a form, gets all of them.
What is NOT claimed here
- ⛔ No defect is asserted for any specific field. Whether this is reachable depends per case on what the inline surface actually lets a user edit and on whether the server refuses the same write. Nobody has driven it.
- ⛔ Not a claim that inline editing should mirror the form. It might be right that the server is the only gate on that surface; if so, that is a decision worth recording, because today it is an absence rather than a decision.
- ⛔ Not a request to move
buildValidationRules. Where the producer should live is exactly the design question this card exists to hand over, not to answer.
Suggested first step
One reading, not a fix: drive an inline edit of a field carrying each rule kind (a required field cleared, a pattern field violated, and a stored out-of-range location — the #6744 case) and record what the surface does, including whether the write reaches the datasource. That output makes this closable ("the server refuses, and the absence is deliberate") or dispatchable on its own evidence.
Related
Generated by Claude Code
Filed unassigned by the #6812 survey seat, while verifying that card's premise that
buildValidationRulesis the producer of the host-sideerrorprop every field widget's published #3222 slot reads. Recording, not choosing —domain:*,typeand grading are triage's to produce.Dedup before filing. Repo-scoped REST listing of the 249 open issues here (PRs excluded) plus a local regex over title+body: zero hits for
InlineFieldInputand forinline edit.*validat|validat.*inline edit. A zero is not a reading on its own, so it was reverse-checked with two controls that must hit —buildValidationRulesreturned #6812 and #6366, and3222returned #6812, #6803, #6778, #6776. The zero stands. Nearest neighbour checked and not a duplicate: #6803 is aboutNumberFieldnot READING the published error slot; this is about a surface where nothing PRODUCES a value for it.The fact
On the form surface the chain is complete and was verified end to end:
buildValidationRules(field)is called atpackages/plugin-form/src/ObjectForm.tsx:705andpackages/plugin-form/src/sectionFields.ts:131;Controller, and the widget'serrorprop isfieldState.error?.message(packages/components/src/renderers/form/form.tsx:2683).The inline-edit surface has neither half.
packages/plugin-detail/src/InlineFieldInput.tsx(483 lines, rendered byDetailSection.tsx:333andHeaderHighlight.tsx:192) imports from@object-ui/fieldsbut notbuildValidationRules; grep forvalidatin that file returns one hit, a comment about backend date handling.DetailSection.tsxhas none, andInlineEditSaveBar.tsxhas one, also a comment.InlineFieldInputnever receives anerrorprop at all.⇒ For a record edited in place on a detail page, the #3222 slot has no producer: no
required, nominLength/maxLength, nopattern, noemail/url, no field-authoredvalidate— and nolocation, the one stored-value rule the platform has (#6744). The same field, opened in a form, gets all of them.What is NOT claimed here
buildValidationRules. Where the producer should live is exactly the design question this card exists to hand over, not to answer.Suggested first step
One reading, not a fix: drive an inline edit of a field carrying each rule kind (a
requiredfield cleared, apatternfield violated, and a stored out-of-rangelocation— the #6744 case) and record what the surface does, including whether the write reaches the datasource. That output makes this closable ("the server refuses, and the absence is deliberate") or dispatchable on its own evidence.Related
buildValidationRulesvalidates no structured stored value exceptlocation— the other ADR-0104 value-shape classes are unmeasured #6812 — the survey whose premise-check found this; its readings are all taken on the FORM surface, so its scope statement should be read as bounded to that surface.buildValidationRuleshas nolocationbranch, so a STORED out-of-range coordinate is never validated — and adding one falsifies the premise #6714 chose refusal on #6744 — thelocationstored-value branch, the one rule this surface also does not run.errorslot, so an invalid number field is not announced (#3222 gap) #6803 — the consumer-side half on the form surface: a widget that does not read the slot.error,objectui 渲染errorMessage(declared ≠ enforced) #3222 — the published validation slot itself.Generated by Claude Code