docs(data-modeling): stop crediting field format with validation - #19847
Draft
objectstack-fleet[bot] wants to merge 1 commit into
Draft
objectstack-fleet[bot] wants to merge 1 commit into
objectstack-fleet[bot] wants to merge 1 commit into
Conversation
The write-time record validator keys its email/url/phone shape checks on the field `type` and never reads a field's `format`. Six hand-written rows (plus the quick-summary `text` row) said otherwise, and three declared a `format` default that does not exist. - `text` rows now say what the key is: a display hint read by the UI's cell-renderer resolver for a small word set, with no server-side check. - The `phone` gallery row promised a pattern nothing implements; removed. - `email` / `url` / `phone` validation tables list the bounds the validator does enforce and say the shape check keys on `type`. Claude-Session: https://claude.ai/code/session_01VDtqoecgES7ScQYGbFVDRv Co-authored-by: Claude <noreply@anthropic.com>
This was referenced Sep 23, 2026
Contributor
Author
Contract reviewServed-tier: ① Derived judgments
② Semver levelDocs-only ③ Boundary flags
Implemented-by: VERDICT: PASS Isolated at-tier reviewer, adopted by the Generated by Claude Code |
This branch has not been deployed
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Fixes #19764
Clause-②: no
Two hand-written data-modeling pages credited a field's
formatkey with validation. The write-time record validator keys its email / url / phone shape checks on the fieldtypeand reads a field'sformatzero times; three rows also declared aformatdefault that does not exist. Every rewritten row now names only behaviour a reader delivers.Refs read: objectstack
245e161a(base71ef2219), objectui pin87af769e9a3e(the.objectui-shaonmainwhen this was worked).Rows: old text, new text, the reader that makes the new text true
field-types.mdx### text,formatphone/tel/telephone,email,url/uri/link,currency/money,percent/percentage); any other word renders as plain text; to reject malformed values use the fieldtypeor aformatvalidation rulepackages/fields/src/index.tsx:2915FORMAT_TO_RENDERER,:2929TEXTUAL_BASE_TYPES,:2943-2944promotion; pinned bypackages/plugin-grid/src/__tests__/formatHintedColumnRenderer-8920.test.tsx:135. No-server-check:packages/objectql/src/validation/record-validator.tsreadsdef.format0 times. Spec agreement:packages/spec/src/data/field.zod.ts:1090describefield-types.mdx### phone,format:2943), and objectuipackages/fields/src/widgets/PhoneField.tsxmentionsformat0 times; record-validator:752checkst === 'phone'with a fixedPHONE_RE(:108)validation-rules.mdx### text,formattextit is a display hint (links to the gallery); to constrain shape use theemail/url/phonetype or aformatvalidation ruleformatvalidation rule,packages/objectql/src/validation/rule-validator.ts:2765checkFormat, documented atcontent/docs/data-modeling/validation.mdx:146validation-rules.mdx### email,formatdefaultemaillocal@domainshape"maxLength/minLength; the Default constraints line adds that the check keys ontype: 'email'and a field-levelformatis not read:746(t === 'email'),:91EMAIL_RE; bounds:693BOUNDED_STRING_FIELD_TYPESbranch,:696/:699;emailis in that set (field.zod.ts:136)validation-rules.mdx### url,formatdefaulturltype: 'url':749,:107URL_RE; bounds as row 4validation-rules.mdx### phone,formatdefaultphonetype: 'phone', plus a pointer to aformatvalidation rule with aregexfor a stricter shape:752,:108PHONE_RE; bounds as row 4;checkFormatas row 3validation-rules.mdxQuick Validation Summary,textKey ConstraintsmaxLength,minLength,format,valueDomain"maxLength,minLength,valueDomain(formatis a display hint, not a constraint)"Six was a floor. Instrument for the census:
git grep -nEfor a backtickedformat, forformat: 'email|url|phone|tel', and forField.text({ ... formatovercontent/docs/**minusreferences/andreleases/(14 files hit). Control: backtickedmaxLengthhits 14 times invalidation-rules.mdx. Rows in the two pages: the six plus row 7 above. Autonumber: neither page documents theformatreading onautonumber(both documentautonumberFormat), so that meaning is untouched and nothing here contradictsfield.zod.ts:1091.The spec wins where they meet. These rows now agree with the landed
formatdescribe (field.zod.ts:1090-1094): no vocabulary, no server check offautonumber, a display hint the UI owns, and constrain values throughtypeor aformatvalidation rule.Changeset
Docs-only.
content/docs/**ships in no package'sfiles[], so this isskip-changesetterritory. Per the dispatch, no label write from this seat.Verification (at
245e161a)node scripts/pm/dispatch-gates.mjs --repo objectstack-ai/objectstack --commandsderived 40 commands for this diff. All 40 exit 0. Four first exited 3 with PREREQUISITE NOT MET, which is not a measurement:check:doc-formula-expressions,check:doc-security-posture,check:skill-examplesandcheck:docs-transcript-drift. After building@objectstack/spec, the@objectstack/lintclosure,@objectstack/formulaand@objectstack/client-react, they exited 0 when re-run.--ranreconciliation: "40 derived famil(ies) accounted for — 40 run, 0 NOT-MEASURED (a DERIVED zero — all 40 recorded an exit code and none of them is 3)". It includescheck:doc-anchors(0) andcheck:nul-bytes(0). NOT MEASURED locally: the CI-only lanes the tool lists outside the 40, including Build Docs and the type-check lanes.Acceptance notes
content/docs/api/error-catalog.mdx:201(INVALID_FORMATFix line) says to match "the field'sformatconstraint". That is the same false claim on another page. Out of this card's file surface, so it is not edited here. Class (b); dedupe words:INVALID_FORMAT,error-catalog,field format constraint.content/docs/ui/forms.mdx:229listsformatamong "object schema validators". It is ambiguous: it may name theformatvalidation rule, which is real. Noted only.textareais in the resolver'sTEXTUAL_BASE_TYPES, but its tables list noformatrow. No false claim, so nothing was added.Generated by Claude Code