Found while implementing #5342 (PR #5376), which fixed the type keys on the same five snippets. Filed unassigned, not claimed, and deliberately NOT carried in that PR — #5342's gate answers one question ("does this type name a registered component") and its docblock states that whether a snippet's OTHER keys are read is out of scope. This is that second dimension.
Measured, on f2e11ae6f
content/docs/guide/building-crud-app.md is the getting-started CRUD walkthrough. Every SchemaRenderer call in it names the object with a key called object:
212: type: 'object-grid',
213: object: 'task',
214: view: 'all',
...
249: type: 'object-form',
250: object: 'task',
...
320: type: 'detail-view',
321: object: 'task',
322: recordId: taskId,
(The type values above are post-#5376; before it they were ObjectGrid / ObjectForm / ObjectDetail, which is what that card fixed.)
None of the three renderers declares object. All three declare objectName, and it is required:
| key | declared input | site |
|---|
object-grid | { name: 'objectName', type: 'string', required: true } | packages/plugin-grid/src/index.tsx:167 (GRID_QUERY_INPUTS) |
object-form | { name: 'objectName', type: 'string', required: true } | packages/plugin-form/src/index.tsx:105 |
detail-view | { name: 'objectName', … }, plus resourceId not recordId | packages/plugin-detail/src/index.tsx:139-141 |
So a reader who follows the guide end to end now gets the right component (after #5376) addressed at no object. detail-view carries a second instance in the same snippet: the guide writes recordId, the declared input is resourceId.
Why this is worth a card
This is the first-run guide. Before #5376 the failure was loud — an OBJUI-001 red panel — and a reader would at least know something was wrong. After it the failure is quiet: the grid renders, and renders empty. #5349 is the measured shape of that quiet mode ("ObjectGrid renders a header-only grid in total silence when no column resolves"), and #5057 / #5352 are the same family on other pages — a documented key surface the renderer does not read.
Note that fixing the type alone is what converts loud into quiet, which is an argument for doing both, not for reverting either.
What needs deciding
Whether the fix is the page or the contract is genuinely open, which is why this is filed rather than patched:
- Fix the page — re-spell
object as objectName and recordId as resourceId in all five snippets. Smallest diff, and the declared surface is unambiguous. - Fix the contract — if
object is meant to be authorable (it reads like the more natural spelling, and ViewData already uses { provider: 'object', object } one level down), declare it. But per AGENTS.md #0.1 that has to be a deliberate spec move at the producer, never a lenient alias in the renderer, and objectui#5091's ruling of 2026-08-18 already pushed in the direction of a narrow declared surface for exactly these grid keys.
The ViewData overlap is the reason this needs a person: object is a real key in this system, just one level deeper, and a guide that spells it at the top level is a plausible mis-read rather than a typo.
Reproduce
grep -n "object: 'task'\|recordId:\|objectName" content/docs/guide/building-crud-app.md
grep -n "name: 'objectName'" packages/plugin-grid/src/index.tsx packages/plugin-form/src/index.tsx packages/plugin-detail/src/index.tsx
Related: #5342 / PR #5376 (the type half of these same snippets), #5349 (the silent-empty-grid mode this lands in), #5352 / #5057 (same family: documented keys the renderer does not read), #5091 (the declared-surface ruling for the grid keys).
Generated by Claude Code
Found while implementing #5342 (PR #5376), which fixed the
typekeys on the same five snippets. Filed unassigned, not claimed, and deliberately NOT carried in that PR — #5342's gate answers one question ("does thistypename a registered component") and its docblock states that whether a snippet's OTHER keys are read is out of scope. This is that second dimension.Measured, on
f2e11ae6fcontent/docs/guide/building-crud-app.mdis the getting-started CRUD walkthrough. EverySchemaRenderercall in it names the object with a key calledobject:(The
typevalues above are post-#5376; before it they wereObjectGrid/ObjectForm/ObjectDetail, which is what that card fixed.)None of the three renderers declares
object. All three declareobjectName, and it isrequired:object-grid{ name: 'objectName', type: 'string', required: true }packages/plugin-grid/src/index.tsx:167(GRID_QUERY_INPUTS)object-form{ name: 'objectName', type: 'string', required: true }packages/plugin-form/src/index.tsx:105detail-view{ name: 'objectName', … }, plusresourceIdnotrecordIdpackages/plugin-detail/src/index.tsx:139-141So a reader who follows the guide end to end now gets the right component (after #5376) addressed at no object.
detail-viewcarries a second instance in the same snippet: the guide writesrecordId, the declared input isresourceId.Why this is worth a card
This is the first-run guide. Before #5376 the failure was loud — an OBJUI-001 red panel — and a reader would at least know something was wrong. After it the failure is quiet: the grid renders, and renders empty. #5349 is the measured shape of that quiet mode ("ObjectGrid renders a header-only grid in total silence when no column resolves"), and #5057 / #5352 are the same family on other pages — a documented key surface the renderer does not read.
Note that fixing the
typealone is what converts loud into quiet, which is an argument for doing both, not for reverting either.What needs deciding
Whether the fix is the page or the contract is genuinely open, which is why this is filed rather than patched:
objectasobjectNameandrecordIdasresourceIdin all five snippets. Smallest diff, and the declared surface is unambiguous.objectis meant to be authorable (it reads like the more natural spelling, andViewDataalready uses{ provider: 'object', object }one level down), declare it. But per AGENTS.md #0.1 that has to be a deliberate spec move at the producer, never a lenient alias in the renderer, and objectui#5091's ruling of 2026-08-18 already pushed in the direction of a narrow declared surface for exactly these grid keys.The
ViewDataoverlap is the reason this needs a person:objectis a real key in this system, just one level deeper, and a guide that spells it at the top level is a plausible mis-read rather than a typo.Reproduce
Related: #5342 / PR #5376 (the
typehalf of these same snippets), #5349 (the silent-empty-grid mode this lands in), #5352 / #5057 (same family: documented keys the renderer does not read), #5091 (the declared-surface ruling for the grid keys).Generated by Claude Code