Skip to content

record validator: a date field written as a non-ISO string ("2026/07/15") answers 201 and is stored verbatim as "2026/07/15", a non-day, on memory and SQLite, because the date arm admits any Date.parse-readable string #20481

Description

@objectstack-fleet

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

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, searchbugSomething isn't workingdomain:enginepriority:p2Medium: important, M3

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions