Skip to content

docs(plugin-grid): make the two "Interactive Examples" real object-grid nodes - #6028

Merged
yinlianghui merged 1 commit into
mainfrom
claude/issue-5856-plugin-grid-catalog-entries
Aug 24, 2026
Merged

docs(plugin-grid): make the two "Interactive Examples" real object-grid nodes#6028
yinlianghui merged 1 commit into
mainfrom
claude/issue-5856-plugin-grid-catalog-entries

Conversation

@yinlianghui

Copy link
Copy Markdown
Collaborator

Fixes#5856

plugin-grid was the last plugin-* catalog category whose entries were pictures of the component rather than the component. Both entries sat on content/docs/plugins/plugin-grid.mdx inside a PluginLoader plugins={['grid']} wrapper neither of them used. This reuses the shape #5857 landed for plugin-view one category over.

The type-set walk, re-run on this branch's merge-base

The issue's reading was taken on the #5113branch, so it was re-measured on d2fb6efb4 rather than inherited:

== plugin-grid
plugin-grid/product-inventory-grid -> badge button card flex stack text
plugin-grid/team-members-grid -> badge button card flex stack text

Unchanged, and every other plugin-* category already authors a type its own package registers. Premise confirmed.

What changed

Two real entries.plugin-grid/object-grid-columns authors a ListColumn set carrying label / width / align / cell type / link, with sort, searchableFields and pagination shaping the query. plugin-grid/object-grid-selection-summaries adds multi-row selection, named rowActions / bulkActions and per-column footer summary roll-ups. Both query the docs gallery's demo data source through the registered renderer. No filter is authored, for the reason #5857 gave: the fixture answers $search and $orderby but not $filter, and an example authoring a parameter the fixture ignores is a lie on the page.

The two mock-ups are re-seated, not deletedcomponents-layout-card/inventory-table-card and components-layout-card/team-roster-card. They are legitimate hand-composed card layouts that were merely filed under the wrong plugin, and this is the half of the card that keeps the three corpus-wide counters still (below).

The pin is extended, not replaced.#5113's catalog-gallery-render.test.tsx pin now runs over an explicit two-entry map, keeping both of its halves per category:

const CATEGORY_OWN_TYPE = [
['plugin-view', 'object-view', 3],
['plugin-grid', 'object-grid', 2],
];

It is deliberately not generalized to all of plugin-*. #5113 scoped it per-category because the general rule needs a per-plugin map of which types each package registers, and it named plugin-grid as the specific reason the rule could not be turned on. This card removes that obstacle, so generalizing is now possible and is filed as its own card (#6024) rather than done here behind an exemption list.

One assertion is new rather than inherited: the type is asserted to be registered before the render case runs. The gallery's registration of object-grid is transitive — HOST_PACKAGES does not name @object-ui/plugin-grid, and the type arrives only because @object-ui/plugin-view imports ObjectGrid from it. That is load-bearing and invisible, so it gets its own case with its own message.

The three counters are unchanged, and no floor was edited

Deleting a catalog entry moves NODE_CENSUS in layout-dom-leak-5574.test.tsx and two floors in layout-props-conversion.test.tsx. Measured straight off the schema JSON, before and after:

beforeafter
flex / stack / container / grid / text248 / 153 / 15 / 26 / 699identical
layout nodes carrying className (floor 175)178178
stack nodes (floor 153)153153
catalog entries426428
object-grid nodes02

NODE_CENSUS is asserted with toEqual, not as a floor, so the suite passing green is the proof it did not move. Only the two intended deltas are non-zero.

Verification

Direction predicted before running, both legs mutated under trap … EXIT INT TERM, each mutation proved on disk by grepping the injected text and separately the removed text, git diff HEAD --stat empty after each.

Reverse-verification — revert object-grid-columns to the hand-built layout. Predicted both halves red; observed exactly that:

× plugin-grid/object-grid-columns authors a object-grid node
× plugin-grid/object-grid-columns puts data from the gallery data source on screen
Tests 2 failed | 462 passed (464)

The same run confirms the card's own warning empirically — the pre-existing sweep is blind to this defect by construction:

✓ objectui#4616 ... > plugin-grid/object-grid-columns renders without a red tile

Counter-probe (a) — an entry that authors object-grid but is wired to inline data: { provider: 'value', items: [...] }. Predicted structure green, data red; observed exactly that, so the pin cannot pass on a grid wired to nothing:

✓ plugin-grid/object-grid-columns authors a object-grid node
× plugin-grid/object-grid-columns puts data from the gallery data source on screen
Tests 1 failed | 463 passed (464)

Counter-probe (b) — the three plugin-view entries #5857 landed all still run and pass under the generalisation, so the pin was extended rather than replaced.

Gates, on 8d0a3502e

Each quotes its own verdict line; exit codes captured before any pipe.

GateExitVerdict line
vitest run examples/schema-catalog + the two counter suites0Test Files 12 passed (12) / Tests 1668 passed (1668)
node scripts/check-doc-component-types.mjs0✅ Every documented component type is registered.
node scripts/check-doc-snippet-types.mjs0Every covered documentation snippet compiles against the built types.
node scripts/check-doc-links.mjs0Links are valid across 13 scan roots.
node scripts/check-changeset-presence.mjs0✅ No source of a released package changed in this range, so no changeset is owed.
regenerate:check0examples/schema-catalog/src/index.ts is up to date (428 entries).
type-check (tsc --noEmit + test project)0clean
lint00 errors (1 pre-existing warning in the generated index.ts header)

check-doc-snippet-types first reported [unbuilt-package] for 20 packages — a fresh-worktree precondition, not a finding. The build was run under the container's shared verify lock (VERDICT command-exit 0, held 5m10s) and the gate then ran for real: 148 of 148 block(s) judged, 0 failed.

A changeset is included with empty frontmatter — this repo's "releases nothing" declaration — because the gate reports nothing owed: docs and catalog fixtures only, no released package source touched.

Findings filed, out of scope here


Generated by Claude Code

The `plugin-grid` category was the last `plugin-*` category whose entries were
pictures of the component rather than the component. `product-inventory-grid`
and `team-members-grid` authored only `badge button card flex stack text` and
sat on `content/docs/plugins/plugin-grid.mdx` inside a
`PluginLoader plugins={['grid']}` wrapper neither of them used.
Replaced by two entries that query the docs gallery's demo data source through
the registered `object-grid` renderer, the way objectui#5113 did for
`object-view`. The two mock-ups are re-seated into `components-layout-card`
rather than deleted, so none of the three corpus-wide counters moves.
objectui#5113's pin is extended to `plugin-grid` via an explicit two-entry
category/type map, keeping both halves: structure and the gallery-only record.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01CSoz9uGhaaSgiq3hshtN7L
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Both plugin-grid catalog entries are hand-built static card layouts that never author object-grid — the last instance of #5113's class

2 participants

@yinlianghui@claude