|
| 1 | +--- |
| 2 | +'@objectstack/spec': patch |
| 3 | +--- |
| 4 | + |
| 5 | +`ComponentPropsMap['object-grid'].exportOptions` names all five members the renderer reads, not two |
| 6 | + |
| 7 | +The entry is `z.unknown()`, so nothing about this key is parsed, refused or |
| 8 | +stripped: a member that does not exist draws no error and has no effect, and a |
| 9 | +member that does exist cannot be discovered from the schema. That makes the |
| 10 | +`.describe()` string the entire account of the key's shape rather than a summary |
| 11 | +of an enforced one — and it projects straight into |
| 12 | +`content/docs/references/ui/component.mdx`, which is what an author (or a |
| 13 | +generating model, ADR-0033) reads. |
| 14 | + |
| 15 | +It named two members, `formats` and `streaming`. The only renderer reads five. |
| 16 | + |
| 17 | +Measured at the `.objectui-sha` pin `53ded82bf7a494f54e344e19099dbf00854b8694` |
| 18 | +— objectui `packages/plugin-grid/src/ObjectGrid.tsx`, through the |
| 19 | +`schema.exportOptions` expression and the `exportConfig` local bound to it, with |
| 20 | +objectui's own scanner (`ObjectGrid.exportOptionsKeys.test.ts`, whose |
| 21 | +comment/string stripping is what stops a prose mention of a key being counted as |
| 22 | +a read): `formats` 2 read sites, `streaming` 2, `maxRecords` 1, |
| 23 | +`includeHeaders` 1, `fileNamePrefix` 1, and an absent-name control |
| 24 | +(`zzzNotAMember`) 0 on the same instrument — which is what makes those five |
| 25 | +counts readings rather than a matcher that matches anything. The same instrument |
| 26 | +answers the same five, with the same per-member counts, at objectui |
| 27 | +`3fbdd4a2dae1`, so the set is not an artefact of the pin's age. |
| 28 | + |
| 29 | +The three missing members are `maxRecords`, `includeHeaders` and |
| 30 | +`fileNamePrefix`. An author reading the old string learned that |
| 31 | +`exportOptions` takes `{ formats, streaming }` and had no way to reach the other |
| 32 | +three short of reading the renderer's source — the shape objectstack#8010 |
| 33 | +closed for this same key one layer out, when `streaming` was read for releases |
| 34 | +while no schema declared it. |
| 35 | + |
| 36 | +⛔ The key is unchanged: it stays `z.unknown()` and no accept set moves in either |
| 37 | +direction. Giving `exportOptions` a real shape is a separate and much larger |
| 38 | +change with its own review requirements; this is the docs half only. |
| 39 | + |
| 40 | +The new list is not restated in prose that can drift on its own. A pin holds the |
| 41 | +describe string's member enumeration equal to the members |
| 42 | +`ListViewExportOptionsSchema` declares — the spec's own five-key declaration of |
| 43 | +this same authoring block, reached through `ListViewSchema.exportOptions`'s |
| 44 | +object branch and itself derived from that same read set. Both spellings reach |
| 45 | +one renderer, so narrowing or widening the declared block now reds the |
| 46 | +`z.unknown()` prose instead of leaving it quietly behind: the declared side has |
| 47 | +parse failures to catch drift, this side had nothing. The pin also records that |
| 48 | +the key is unvalidated today, so the day it grows an accept set is a deliberate |
| 49 | +decision rather than a silent one. |
| 50 | + |
| 51 | +`content/docs/references/ui/component.mdx` is regenerated from the string |
| 52 | +(`gen:schema` then `gen:docs`) and carries the same one-line change. |
0 commit comments