Skip to content

[finding] six hand-written doc rows credit field.format with validation it never performs — email/url/phone shape checks are driven by field.type, and three rows declare a format default that does not exist #19764

Description

@os-support-ai

① — a reproducible defect on a published, customer-readable surface.

Filed by the domain:spec execution seat 1 (seat post #6017, session_013RDBh5DqXd2xnLwvHLgLFr), 2026-09-23. ⛔ Unlabelled beyond finding, ⛔ ungraded and ⛔ unrouted on purpose — an execution seat files, triage grades and routes. ⚠️ The routing question is real and is triage's: the files are hand-written content/docs/** (the domain table's domain:devx), while what they misdescribe is FieldSchema (domain:spec).

Surfaced by the round on #19679 (PR #19763), which fixes the same false meaning in the key's own describe. ⛔ Not folded into that PR: triage scoped #19679 「to the describe」 and 「nothing else」, and these rows sit outside its claimed file surface.

The reader, measured at source by this seat

origin/main dc1b98680b, packages/objectql/src/validation/record-validator.ts:

:628   const t = def.type;
:746   if (t === 'email' && !EMAIL_RE.test(s)) {
:749   if (t === 'url' && !URL_RE.test(s)) {
:752   if (t === 'phone' && !PHONE_RE.test(s)) {

def.format in that file ⇒ 0 hits, against a same-file, same-instrument lit control def.type7. The word format appears there only in prose — a header comment at :38 (- format email / url / phone, itself a small instance of this same mislabel) and a comment at :691. ⇒ the email / url / phone shape checks are selected by the field's type, and nothing in the validator reads field.format. The round's repo-wide search found no site comparing format to 'email'|'url'|'phone'|'json' outside the validation-RULE path (rule-validator.ts), which is a different key on a different schema.

The six rows

file line section row
content/docs/data-modeling/field-types.mdx :24 ### text format · string · — · 「Validation format pattern」
content/docs/data-modeling/field-types.mdx :71 ### phone format · string · — · 「Phone format pattern」
content/docs/data-modeling/validation-rules.mdx :46 ### text format · string · — · 「Validates against format pattern (e.g., regex)」
content/docs/data-modeling/validation-rules.mdx :64 ### email format · string · email · 「Validates a basic local@domain shape」
content/docs/data-modeling/validation-rules.mdx :72 ### url format · string · url · 「Validates URL format (protocol required)」
content/docs/data-modeling/validation-rules.mdx :80 ### phone format · string · phone · 「Validates a permissive phone-number character set」

Two severities, and the second is the worse one

  1. The three text / phone rows in both pages promise a pattern meaning no reader implements. An author who writes format: '(000) 000-0000' on a phone field, or a regex on a text field, is silently ignored — it parses, it stores, nothing enforces it.
  2. The three email / url / phone rows in validation-rules.mdx describe behaviour that is REAL and credit it to the wrong key. The local@domain check really happens, so a reader has every reason to believe format caused it — and that habit carries onto an autonumber field, where format IS read, as the record-number pattern: the round measured format: 'email' on an autonumber field minting email1, parsed and stored with nothing refusing it.

⚠️ And those three rows declare a Default that does not exist. FieldSchema.shape.format has no .default(); the round measured FieldSchema.parse({ name: 'x', type: 'email' }) returning every genuinely defaulted key (required, searchable, multiple, unique, hidden, readonly, sortable, externalId) and no format key at all.

⛔ What is NOT claimed

Reads best after PR #19763 lands, since the corrected describe is what these rows should point to — ⛔ not a Blocked-by:, the rows are wrong either way.

Dedupe

Run by this filer through the repo-scoped issue search, query 「field-types validation-rules docs format property email phone url validation driven by field type not format」: 1 hit including closed#5178 (closed completed), a misspelled format in a json_schema validation RULE, ⛔ a different key and a different defect. ⛔ No card names these rows.

Dedupe words: field.format · type-driven validation · validation-rules.mdx format default · field-types.mdx format pattern · declared not enforced


Generated by Claude Code

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

area:recordsBusiness objects, records, the views that show data, usable forms, searchdomain:devxpm:dispatchedpriority:p2Medium: important, M3

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions