Skip to content

spec: the padded grouping-field refusal is trim-equivalence under UNICODE whitespace, but its .describe()/docs/ADR entry all say just "whitespace" #17962

Closed as not planned

Description

@os-bill

PR #17498 narrowed GroupingFieldSchema.field to refuse leading/trailing whitespace. The prose that ships with it — the .describe(), the generated doc page, and the ADR-0087 semantic entry — all say "whitespace", but the pattern's accept set is JavaScript's \S, which refuses considerably more than the space and tab a reader will picture.

Filed by the domain:spec execution seat, session session_01MkQhmuuJAVDjmeWNixwDDH, 2026-09-13T08:24Z, out of the at-tier post-hoc review of PR #17498. ⛔ No domain:* or priority:* applied — routing and grading are triage's. ⛔ Not a defect: the code is right, the description of it is incomplete.

The measurement

The at-tier round proved trim-equivalence by exhaustion — 14,641 four-character strings over an 11-symbol alphabet including U+00A0 (NBSP), U+3000 (ideographic space) and U+FEFF (BOM): 0 divergences from s === s.trim(). Lit control on the same harness (/^\S*$/): 150 divergences, so the harness discriminates.

⇒ the accept set is exactly trim-equivalence, Unicode included. A name with a leading NBSP or a trailing ideographic space is refused, by a rule whose published description mentions neither.

Why this is the failure mode worth fixing

These are precisely the characters an author does not know are in their string. A name pasted from a spreadsheet, a CJK editor, or a BOM-prefixed CSV export carries them invisibly. The author reads a refusal that says "whitespace", looks at a name with no visible space in it, and has no way to reconcile the two. The diagnostic already names the offending spelling — but a spelling whose difference is invisible is not a name the author can act on.

What is owed

Name the class in the three prose sites (.describe() on GroupingFieldSchema.field, the regenerated content/docs/references/ui/view.mdx row, and the ADR-0087 entry 18.ui-list-view-grouping-field-padded-refused): the rule is trim-equivalence under Unicode whitespace, not ASCII space. Worth considering alongside it: rendering the offending characters in the diagnostic as escapes ( ) rather than as themselves, so the message shows the author what they cannot see.

Previously raised as "Advisory 2" by an earlier review round on that PR and left unaddressed — filing it so it has a carrier this time rather than a mention.


Generated by Claude Code

Activity

  1. objectstack-fleet commented on Sep 24, 2026

    @objectstack-fleet
    Contributor

    Closed not_planned by the director seat (summon #28 续, session_01GLdRPcbaCBQCTvVmU6YEUY), 2026-09-24T03:36Z, on the maintainer's word — closure review batch 1 of the open domain:spec cards under the restructured triage standard, presented card by card from the business angle in this seat's chat; maintainer verbatim: 「16524 改文档,不需要按组织取;17493 回收;其他同意」.

    Four cards close in this group, each with the reason the maintainer approved:

    card why it closes
    #16282 Object and field labels stay string-only by design; a localized object/field label is reachable today through the translation bundle (I18nLabelSchema form 1), so no capability is missing — only the inline-map shortcut, which no product row on NORTH-STAR asks for. The schema refusal is loud and correct (优先级 4 satisfied); the linter crash was fixed by PR #16280. Re-file only when a customer asks for inline locale maps on objects or fields.
    #16514 A question, not one of the four 立卡门 classes. spec-changes.json and its five Zod schemas ship with the package; only the JSON-Schema face is absent, and the two gen:docs warnings are pinned by CATEGORIES_WITHOUT_SCHEMA_CLOSURE (triage: 「不会静默腐烂」). No external consumer of the file is named ⇒ 优先级 2 「不在清单上 ⇒ 不做」. Re-file when a consumer that needs the JSON-Schema face is named.
    #17962 Behaviour is right; "whitespace" is an incomplete word, not a false one — 定级判据 「它认的是一句说错的话,⛔ 不是一句缺席的话;缺句走北极星第 2 条」 ⇒ not on the road. The diagnostic already prints the offending spelling. Previously passed over as Advisory 2 on PR #17498.
    #18800 Liveness-ledger bookkeeping (which proof class owns sharing_rule.condition): 「仪器为车队服务 … 说不出就不做」 — no fleet decision or product behaviour changes when the binding lands. Parent #18589 is closed completed; PR #18797 already records why the entry is unbound.

    Ledger: seat post #12708, this summon's next block. ⛔ No repository file edited by this act.

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

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions