Skip to content

/import: common spreadsheet cell shapes fail whole rows (dotted / compact dates, option value case, one error per row) #25493

Closed as duplicate

Description

@marchtian

Ruled: 6377844879 · batch #9 item 3a · letter A · 2026-10-24T00:43:45Z (proposals 1, 2, 4; not 3)

Context

Trial import of a simulated messy supplier ledger (hotsrm#10, the kind of sheet a purchasing department keeps in Excel for years). These are the cell shapes that failed rows which a person reads without hesitation. Each failure rejects the whole row, including rows where the bad cell is an optional field.

Cell Field type Result Expected
2011.07.01 date invalid_date 2011-07-01 (YYYY.MM.DD is the most common Chinese written date form)
20090615 date invalid_date 2009-06-15 (8-digit compact date, common in ERP exports)
2005/3/8 date accepted ✓ —
CN select, option value cn invalid_option match option values case-insensitively (labels already are)
中国大陆 / 物流 select (labels 中国 / 物流商) invalid_option fine to refuse, but there is no way to declare synonyms on an option or picklist, so every legacy sheet needs a hand clean-up

And one reporting problem: when a row has several bad cells, only the first coercion error is reported (coerceRow collects all errors, the runner keeps errors[0]). The operator fixes one cell, re-runs, finds the next one. Two to three rounds per row in our trial.

Proposal

  1. Accept YYYY.MM.DD and YYYYMMDD in parseDateCell (unambiguous, year first).
  2. Case-insensitive match on option values.
  3. Optional aliases: string[] on select options / picklist options, used by import coercion only. (not in letter A — a new permanent metadata key waits for a second app; ruling 6377844879)
  4. Report all cell errors of a row (e.g. errors: [{ field, code, message }] next to the existing first-error keys).

Temporary measure in hotsrm

The import guide lists a cleaning checklist (date format, option labels, ISO country labels) to run on the sheet before importing.

Activity

  1. added
    area:recordsBusiness objects, records, the views that show data, usable forms, search
    domain:serverDomain lane — seat card indexed by label:pm:seat
    enhancementNew feature or request
    needs-user-decisionBlocked on a maintainer decision — do not dispatch; decision cards only, never on a PR
    on Oct 23, 2026
  2. objectstack-fleet commented on Oct 23, 2026

    @objectstack-fleet
    Contributor

    Triage: decision-shaped (filing-gate ②: a feature / contract-shape proposal from a real app). Lands in the import cell coercion in the server lane (parseDateCell, option matching, coerceRow / the runner's errors[0]); option aliases would also touch packages/spec. Marked needs-user-decision; not dispatchable until ruled.
    Path: records · 把客户的存量数据搬进来 | records-forms.import-transform-matrix (P2) | step ⑥
    Type: Feature

    维护者速读

    客户多年维护的 Excel 台账里,2011.07.01、20090615 这样的日期,CN 这样大小写不同的选项值,都会让整行导入失败;而且一行有多个错只报第一个,要改一个跑一遍。

    • A:做三件不加元数据键的事:接受 YYYY.MM.DD 和 YYYYMMDD;选项值大小写不敏感匹配;一行的所有单元格错误都报出来。选项别名不做。
    • B:A 再加选项/选项集的 aliases(同义词,只给导入用)。
    • C:不做,继续让操作员先手工清洗。

    推荐 A:三项都是无歧义的放宽和更完整的报错,不新增元数据键;别名是新契约面,等第二个应用要时再议。问:A / B / C?

    os-decision-facets

    • ① 项目长远合理性:A 让导入读懂常见的、无歧义的写法;B 再加一个永久的元数据键;C 把清洗成本留给每次迁移。
    • ② 实际业务拉动:hotsrm#10 试导实测,每行要改两到三轮。
    • ③ 防 AI 犯错:A 一次报全所有错,响亮且完整;放宽的只限年在前的无歧义格式,不会把错的日期静默读对。
    • ④ 创业阶段不扩散:A 零新元数据键(报错里加一个数组字段);B 新增 aliases;C 零新增。

    Governing text: the import coercion contract in packages/spec (ImportRequestSchema) and the runner's row report.
    Prior rulings read: unresolved (not searched with check-prior-rulings.mjs).

    Batch note: one of five import / automation proposals from hotsrm's trial import filed on 2026-10-23 (#25475, #25476, #25477, #25481, #25493); the earlier hotsrm platform evaluation is the decision card #25496. They can be ruled as one batch.

    Session: session_01AkmasAfXt3cu83xGzkuKhe (objectstack triage, run on the maintainer's request in the project thread)


    Generated by Claude Code

  3. os-elon-musk commented on Oct 24, 2026

    @os-elon-musk
    Collaborator

    Ruling: batch #9 item 3a · letter A · maintainer 「#9 同意」 2026-10-24T00:43:45Z

    A = parseDateCell 接受 YYYY.MM.DD 与 YYYYMMDD(年在前、无歧义,不放宽其它形式);选项值大小写不敏感匹配(标签已是);一行所有单元格错误一次报全(报告加 errors: [{ field, code, message }],原有第一错字段保留)。不做 aliases(B),等第二个应用要。工作量 server S,零元数据键。执行席先复现「一行只报第一个错」的那一行代码再改(总监席未定位到)。

    标签 needs-user-decision → pm:queue,分级按协议变更口径由分诊定;裁不派。简报:https://claude.ai/artifact/XKBVwFLq2V5nBTNy3enkbz(卡 3)。


    Generated by Claude Code

  4. added
    pm:queueReady for the PM dispatch loop
    and removed
    needs-user-decisionBlocked on a maintainer decision — do not dispatch; decision cards only, never on a PR
    on Oct 24, 2026
  5. objectstack-fleet commented on Oct 24, 2026

    @objectstack-fleet
    Contributor

    Closed 2026-10-24T01:40Z. Superseded by #25582 — the same card ("common spreadsheet cell shapes fail whole /import rows"), re-filed as objectstack-fleet[bot] with this body and these labels. This card was written off the fleet relay, under the maintainer's personal account, by a project-thread session through GitHub MCP, which pm-dispatch does not allow for content writes. The thread above stays here for reference; the queue continues on #25582.

    Instruction: the maintainer 田騏, in the Objectstack project thread, 2026-10-24T01:19:49Z: 「我看到有一些使用个人账户而不是车队账户提交的issue,应该严格按照 pm-dispatch 的规则处理」
    Session: session_018fnREjMeK9XQeHDwkJXKMW

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

Metadata

Metadata

Assignees

No one assigned

    Labels

    area:recordsBusiness objects, records, the views that show data, usable forms, searchdomain:serverDomain lane — seat card indexed by label:pm:seatenhancementNew feature or requestpriority:p2Medium: important, M3

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions