Skip to content

docs(spec): ComponentPropsMap['object-grid'].exportOptions's describe names 2 of the 5 members the renderer reads #17166

Description

@os-warren

Filed by the domain:spec @ objectui PM seat, session session_01Jmxdo7bmeqCQHLSfmLVX9w, from work on objectstack-ai/objectui#8731. ⛔ No domain:* or priority:* — routing and grading are triage's.

This is a docs fix, ⛔ not a decision card, under objectstack#17031: 「说明书与实现脱节的卡默认改文档,不进决策箱」 — "所有这种文档错的都应该改文档,没有什么好决裁的". The field is z.unknown(), so nothing is validated and the describe string is the entire account of this key's shape. There is no accept set to argue about; the prose is simply incomplete.

Measured on origin/main 5d12b16

packages/spec/src/ui/component.zod.ts:2527:

exportOptions: z.unknown().optional().describe('Export config ({ formats, streaming })'),

two members named.

What objectui's ObjectGrid actually reads off that key, counted on objectui origin/main (exportConfig?.KEY / exportOptions?.KEY):

member read sites named upstream?
formats 2
streaming 2
maxRecords 1
includeHeaders 1
fileNamePrefix 1
control zzzNotAMember 0

The absent-name control returning 0 on the same instrument is what makes the five counts readings rather than a matcher that matches anything.

Three of five are missing upstream.

⭐ The three surfaces disagreed three different ways — and after today only this one is still wrong

surface members named
objectui registration inputs[].descriptionbefore objectstack-ai/objectui#8842 4 (missing streaming)
objectui registration — after #8842 (open, in flight) 5
@objectstack/spec ComponentPropsMap .describe() 2
what the renderer reads 5

The objectui half is being fixed right now on objectstack-ai/objectui#8731 / PR objectstack-ai/objectui#8842, which adds streaming to the registration prose and deletes the UNDOCUMENTED_BUT_READ = ['streaming'] pin constant that recorded the gap. ⇒ Once that lands, this describe string is the last surface still giving an author a wrong member list.

⚠️ Note the direction of the two errors is opposite, which is why neither could be fixed by copying the other: objectui's prose was missing streaming; upstream's is missing the other three. Nobody's list was a subset of anybody's.

Why it matters even though nothing validates

z.unknown() means a wrong member is neither refused nor honoured — it is simply ignored. So the describe string is not a summary of an enforced shape; it is the only statement of the shape that exists at this position. An author (or a generating model) reading it learns that exportOptions takes { formats, streaming } and has no way to discover maxRecords, includeHeaders or fileNamePrefix short of reading objectui's renderer source.

⚠️ This has a precedent in this very key's history: objectstack#8010 added streaming to ListViewExportOptionsSchema precisely because "streaming was read here for releases while no schema declared it, so authoring it was refused by nothing and honoured by nobody, and the only way to discover the key was to read this renderer's source." Same failure, one layer out, three keys at a time.

⛔ What is not claimed

  • Not claimed the field should stop being z.unknown(). Giving it a real shape would be an accept-set change with its own review requirements — a different and much larger card. This one asks only that the prose name what is actually read.
  • ⛔ Not claimed objectui's read set is correct or that all five members should exist. That is objectui's ADR-0049 question, not this one.
  • ⛔ Not claimed the counts are stable — objectui's renderer can change. The reading is dated to objectui origin/main at the time of filing and should be re-derived before implementing.

Sibling filed the same day, same shape: objectstack#17140 — the spec's OBJECT_CALENDAR_FLAT_FIELD_KEYS prescription tells authors to write allDayField inside calendar: {}, a strictObject that refuses it by name. Different keys, different mechanism, same class: the spec's prose and the spec's behaviour disagree, and the prose is what authors read. ⛔ They are independent cards; the resemblance is offered as context, not as a merge proposal.

Refs: objectstack-ai/objectui#8731 · objectstack-ai/objectui#8842 · objectstack#8010 (the same key's earlier round) · objectstack-ai/objectui#4535 · objectstack#17031 (the ruling that makes this a docs fix) · objectstack#17140.

Activity

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

Metadata

Metadata

Assignees

Labels

Type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions