Repository navigation
Commit a666e94
docs(data-modeling): stop crediting field
Fixes #19764
Clause-②: no
Two hand-written data-modeling pages credited a field's `format` key
with validation. The write-time record validator keys its email / url /
phone shape checks on the field `type` and reads a field's `format` zero
times; three rows also declared a `format` default that does not exist.
Every rewritten row now names only behaviour a reader delivers.
Refs read: objectstack `245e161a` (base `71ef2219`), objectui pin
`87af769e9a3e` (the `.objectui-sha` on `main` when this was worked).
## Rows: old text, new text, the reader that makes the new text true
| # | Row | Old | New | Reader |
|---|---|---|---|---|
| 1 | `field-types.mdx` `### text`, `format` | "Validation format
pattern" | Display hint, not validation; the server runs no check from
it. Lists the word set the UI resolver maps (`phone`/`tel`/`telephone`,
`email`, `url`/`uri`/`link`, `currency`/`money`,
`percent`/`percentage`); any other word renders as plain text; to reject
malformed values use the field `type` or a `format` validation rule |
objectui `packages/fields/src/index.tsx:2915` `FORMAT_TO_RENDERER`,
`:2929` `TEXTUAL_BASE_TYPES`, `:2943-2944` promotion; pinned by
`packages/plugin-grid/src/__tests__/formatHintedColumnRenderer-8920.test.tsx:135`.
No-server-check: `packages/objectql/src/validation/record-validator.ts`
reads `def.format` 0 times. Spec agreement:
`packages/spec/src/data/field.zod.ts:1090` describe |
| 2 | `field-types.mdx` `### phone`, `format` | "Phone format pattern" |
Row removed | No reader: the resolver promotes only textual base types
(`:2943`), and objectui `packages/fields/src/widgets/PhoneField.tsx`
mentions `format` 0 times; record-validator `:752` checks `t ===
'phone'` with a fixed `PHONE_RE` (`:108`) |
| 3 | `validation-rules.mdx` `### text`, `format` | "Validates against
format pattern (e.g., regex)" | **Not validated**; a regex here is
accepted and ignored; on `text` it is a display hint (links to the
gallery); to constrain shape use the `email`/`url`/`phone` type or a
`format` validation rule | Same as row 1; the real regex enforcer is the
`format` validation rule,
`packages/objectql/src/validation/rule-validator.ts:2765` `checkFormat`,
documented at `content/docs/data-modeling/validation.mdx:146` |
| 4 | `validation-rules.mdx` `### email`, `format` default `email` |
"Validates a basic `local@domain` shape" | Row replaced by `maxLength` /
`minLength`; the Default constraints line adds that the check keys on
`type: 'email'` and a field-level `format` is not read |
record-validator `:746` (`t === 'email'`), `:91` `EMAIL_RE`; bounds
`:693` `BOUNDED_STRING_FIELD_TYPES` branch, `:696` / `:699`; `email` is
in that set (`field.zod.ts:136`) |
| 5 | `validation-rules.mdx` `### url`, `format` default `url` |
"Validates URL format (protocol required)" | Same shape as row 4, keyed
on `type: 'url'` | record-validator `:749`, `:107` `URL_RE`; bounds as
row 4 |
| 6 | `validation-rules.mdx` `### phone`, `format` default `phone` |
"Validates a permissive phone-number character set" | Same shape as row
4, keyed on `type: 'phone'`, plus a pointer to a `format` validation
rule with a `regex` for a stricter shape | record-validator `:752`,
`:108` `PHONE_RE`; bounds as row 4; `checkFormat` as row 3 |
| 7 (beyond the six) | `validation-rules.mdx` Quick Validation Summary,
`text` Key Constraints | "`maxLength`, `minLength`, `format`,
`valueDomain`" | "`maxLength`, `minLength`, `valueDomain` (`format` is a
display hint, not a constraint)" | As rows 1 and 3 |
Six was a floor. Instrument for the census: `git grep -nE` for a
backticked `format`, for `format: 'email|url|phone|tel'`, and for
`Field.text({ ... format` over `content/docs/**` minus `references/` and
`releases/` (14 files hit). Control: backticked `maxLength` hits 14
times in `validation-rules.mdx`. Rows in the two pages: the six plus row
7 above. Autonumber: neither page documents the `format` reading on
`autonumber` (both document `autonumberFormat`), so that meaning is
untouched and nothing here contradicts `field.zod.ts:1091`.
The spec wins where they meet. These rows now agree with the landed
`format` describe (`field.zod.ts:1090-1094`): no vocabulary, no server
check off `autonumber`, a display hint the UI owns, and constrain values
through `type` or a `format` validation rule.
## Changeset
Docs-only. `content/docs/**` ships in no package's `files[]`, so this is
`skip-changeset` territory. Per the dispatch, no label write from this
seat.
## Verification (at `245e161a`)
`node scripts/pm/dispatch-gates.mjs --repo objectstack-ai/objectstack
--commands` derived 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-examples` and `check:docs-transcript-drift`. After building
`@objectstack/spec`, the `@objectstack/lint` closure,
`@objectstack/formula` and `@objectstack/client-react`, they exited 0
when re-run. `--ran` reconciliation: "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 includes `check:doc-anchors` (0) and
`check: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_FORMAT` Fix line)
says to match "the field's `format` constraint". 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:229` lists `format` among "object schema
validators". It is ambiguous: it may name the `format` validation rule,
which is real. Noted only.
- `textarea` is in the resolver's `TEXTUAL_BASE_TYPES`, but its tables
list no `format` row. No false claim, so nothing was added.
---
_Generated by [Claude
Code](https://claude.ai/code/session_01VDtqoecgES7ScQYGbFVDRv)_
Co-authored-by: Claude <noreply@anthropic.com>format with validation (#19847)1 parent 67ebc84 commit a666e94
2 files changed
Lines changed: 12 additions & 10 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
21 | 21 | | |
22 | 22 | | |
23 | 23 | | |
24 | | - | |
| 24 | + | |
25 | 25 | | |
26 | 26 | | |
27 | 27 | | |
| |||
68 | 68 | | |
69 | 69 | | |
70 | 70 | | |
71 | | - | |
72 | 71 | | |
73 | 72 | | |
74 | 73 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
43 | 43 | | |
44 | 44 | | |
45 | 45 | | |
46 | | - | |
| 46 | + | |
47 | 47 | | |
48 | 48 | | |
49 | 49 | | |
| |||
61 | 61 | | |
62 | 62 | | |
63 | 63 | | |
64 | | - | |
| 64 | + | |
| 65 | + | |
65 | 66 | | |
66 | | - | |
| 67 | + | |
67 | 68 | | |
68 | 69 | | |
69 | 70 | | |
70 | 71 | | |
71 | 72 | | |
72 | | - | |
| 73 | + | |
| 74 | + | |
73 | 75 | | |
74 | | - | |
| 76 | + | |
75 | 77 | | |
76 | 78 | | |
77 | 79 | | |
78 | 80 | | |
79 | 81 | | |
80 | | - | |
| 82 | + | |
| 83 | + | |
81 | 84 | | |
82 | | - | |
| 85 | + | |
83 | 86 | | |
84 | 87 | | |
85 | 88 | | |
| |||
515 | 518 | | |
516 | 519 | | |
517 | 520 | | |
518 | | - | |
| 521 | + | |
519 | 522 | | |
520 | 523 | | |
521 | 524 | | |
| |||
0 commit comments