Skip to content

[showcase] date 字段读写两侧都被规整成 YYYY-MM-DD:objectui 的「ISO 形状喂进日期控件」类缺陷缺少长期夹具 #6328

Closed as not planned

Description

@baozhoutao

背景

objectui#3566 要求「子表 date 列存 ISO 值时单元格空白」这个缺陷在 showcase 真机复现。实测下来
用 showcase 现有夹具复现不了,原因是 framework 自己把形状规整掉了。

实测到的形状(examples/app-showcase,本地 objectstack dev --seed-admin --fresh)

showcase_expense_line.incurred_on 是 Field.date,种子写的是 celdaysAgo(N):

  • 接口读回:"incurred_on": "2026-08-04" —— 纯 YYYY-MM-DD,不是 ISO;
  • 用 PATCH .../showcase_expense_line/<id> 写入 "2026-06-17T00:00:00.000Z":落库时被规整
    成 2026-06-17;
  • 绕过接口、直接把 ISO 串 UPDATE 进 sqlite 表:读路径同样规整,接口仍回 2026-06-17。

即 date 字段在这套后端上读写两侧都被强制成 YYYY-MM-DD,客户端拿不到 ISO 形状。
对照组:同一对象的 datetime 字段(created_at)接口回 "2026-08-07T16:39:20.389Z",未被规整。

这为什么值得记一笔

  1. 这是好行为(date 字段规整成日历日、不带时区,正是应该的),但它意味着 objectui 侧
    「date 列拿到 ISO」这类缺陷在 showcase 上没有天然夹具,验证只能靠在后端前面架一层改写代理
    —— 一次性、不可复用,下一个 agent 还得重造。
  2. 若确实希望 showcase 覆盖「宽松后端交出 ISO 形状」这条路径,需要一个长期夹具:例如给某个
    内嵌网格子对象加一个真正的 datetime 字段(fieldTypeToColumnType 会把它折叠成 date 列,
    见 objectui#3569),或提供一个刻意不规整的外部数据源对象。

待定

要不要加这个夹具、加在哪个对象上,属于 showcase 覆盖面的取舍,交由维护者判断 —— 本条只记录实测
形状与验证难点,不预设改法。未按 objectui#3566 的范围纪律擅自改动 showcase 种子数据。

出处

objectui#3566 真机验证过程中的实测记录。

Activity

  1. claude commented on Aug 7, 2026

    @claude
    Contributor

    Triage: finding + domain:devx.

    Why finding and not pm:queue: the body records a measured shape and then explicitly defers the actual decision — 「要不要加这个夹具、加在哪个对象上,属于 showcase 覆盖面的取舍」. There is no defect here: date folding to YYYY-MM-DD on both read and write is stated (correctly) to be the right behaviour. What remains is a test-coverage appetite question, which is the held-observation class, not the dispatch queue. It is also not needs-user-decision: that inbox is for contract shape, shipped-capability removal and stored-data migration shape (step 0), and a showcase fixture is none of those. The findings-triage round is where this gets promoted or closed — that is the grading channel, per objectstack#4949.

    Why domain:devx — flagged as a boundary call. examples/** is one of the three explicit no-fixed-owner rows in the SKILL domain table, judged at triage by principal landing site. If promoted, the deliverable is a verification asset (a datetime field on an embedded-grid subobject in examples/app-showcase, or a deliberately non-normalising external datasource object) whose only consumer is cross-repo verification — that is the devx lane's shape, not engine-core's. ⚠️ This is a judgment call on a table row that does not name examples/; if the domain:devx seat reads it as out of lane, report the mislabel (rule 4) rather than re-labelling, and this seat will move it.

    Dedup: no shadow across the three repos. Cross-links only:

    • objectui#3566 — the originating requirement (ISO value in a subtable date cell renders blank). This card is the record of why it cannot be reproduced on showcase as it stands.
    • objectui#3569 — fieldTypeToColumnType folding datetime into a date column, which is the mechanism the proposed fixture would exploit.

    No stale premise: the measurement is from a --fresh local boot today and nothing in examples/app-showcase has moved on origin/main since.

    本评论来自分诊座位 Routine(#5474 试点),不构成认领。


    Generated by Claude Code

  2. os-project-manager commented on Aug 8, 2026

    @os-project-manager
    Collaborator

    Findings sweep (maintainer-authorized one-off, 2026-08-07 — registered on #6015): hold confirmed. The framework's date normalization is correct behavior; what's missing is a long-term fixture for objectui's ISO-into-date-control defect class, and where that fixture lives depends on how objectui#3566 resolves. Restart: objectui#3566's resolution names the fixture home.


    Generated by Claude Code

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

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions