Filing gate: ① a product defect with a named landing site and a reach:. Finding class (a). reach: is a public door: REST POST /api/v1/data/:object, measured on memory and SQLite by the #20264 dev at PR #20469's head 311ce0640.
Filed by the domain:engine execution seat 1 (session_01N8TPEsoJxPsdSdNKGnNGEN, os-warren) from the #20264 dev's out_of_scope_findings[1] (os-dev-report on #20264, PR #20469). The readings are the dev's. ⛔ Filed bare: routing and grading belong to triage. ⛔ Not a claim.
What happens
A date field written as "2026/07/15" answers 201 and reads back "2026/07/15". That is not the YYYY-MM-DD day the field's storage form promises, and it sorts and compares as text beside real days.
Where
packages/objectql/src/validation/record-validator.ts, the date / datetime arm, admits any Date.parse-readable string.
packages/core/src/utils/temporal-storage-form.ts, temporalStorageForm(value, 'date'), keeps a string with no leading YYYY-MM-DD unchanged.
It is the same mechanism as #20264's position 3 (an extended-year date stored verbatim), inside the year range, where #20264's ruling does not reach.
Suggested shape (⛔ not a ruling)
The date write door stores a day or refuses. Either it canonicalises any unambiguous calendar spelling to YYYY-MM-DD, or it refuses a string that is not ISO with VALIDATION_FAILED / 400 (invalid_date). Which one is triage's call: the spec's date storage form and the accepted input spellings. Pin through REST on memory, SQLite and PostgreSQL.
Dedupe
search_issues "date field write non-ISO string 2026/07/15 stored verbatim not YYYY-MM-DD record validator Date.parse" in objectstack-ai/objectstack, open and closed: 1 hit, #20240 (closed, the year-padding arm). None is this.
Dedupe words: date write non-ISO string stored verbatim · record-validator date Date.parse leading YYYY-MM-DD · date field 2026/07/15 201
Filing gate: ① a product defect with a named landing site and a
reach:. Finding class (a).reach:is a public door: RESTPOST /api/v1/data/:object, measured on memory and SQLite by the #20264 dev at PR #20469's head311ce0640.Filed by the
domain:engineexecution seat 1 (session_01N8TPEsoJxPsdSdNKGnNGEN,os-warren) from the #20264 dev'sout_of_scope_findings[1](os-dev-report on #20264, PR #20469). The readings are the dev's. ⛔ Filed bare: routing and grading belong to triage. ⛔ Not a claim.What happens
A
datefield written as"2026/07/15"answers 201 and reads back"2026/07/15". That is not theYYYY-MM-DDday the field's storage form promises, and it sorts and compares as text beside real days.Where
packages/objectql/src/validation/record-validator.ts, thedate/datetimearm, admits anyDate.parse-readable string.packages/core/src/utils/temporal-storage-form.ts,temporalStorageForm(value, 'date'), keeps a string with no leadingYYYY-MM-DDunchanged.It is the same mechanism as #20264's position 3 (an extended-year
datestored verbatim), inside the year range, where #20264's ruling does not reach.Suggested shape (⛔ not a ruling)
The
datewrite door stores a day or refuses. Either it canonicalises any unambiguous calendar spelling toYYYY-MM-DD, or it refuses a string that is not ISO withVALIDATION_FAILED/ 400 (invalid_date). Which one is triage's call: the spec'sdatestorage form and the accepted input spellings. Pin through REST on memory, SQLite and PostgreSQL.Dedupe
search_issues"date field write non-ISO string 2026/07/15 stored verbatim not YYYY-MM-DD record validator Date.parse" inobjectstack-ai/objectstack, open and closed: 1 hit, #20240 (closed, the year-padding arm). None is this.Dedupe words:
date write non-ISO string stored verbatim·record-validator date Date.parse leading YYYY-MM-DD·date field 2026/07/15 201