Repository navigation
docs(skills): stop teaching the table renderer's retired column aliases - #6738
Merged
Merged
Conversation
The published `skills/objectui/guides/schema-expressions.md` taught the static
`table` renderer's two retired column aliases. Both were measured against
`origin/main` before this change:
- Prose claimed cell accessors fall back to `name`. The renderer reads
`row[col.accessorKey]` only; `col.name` appears zero times.
- The worked example authored `{ "label": "Name", ... }`. The renderer reads
`col.header` only, so that example renders an EMPTY heading -- exactly what
`table-column-contract.test.tsx` pins.
Scope is the `type: "table"` prose and example only. The `data-table` block
earlier in the same file is untouched.
os-zhuang
approved these changes
Aug 29, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Fixes #5473
The customer-published guide
skills/objectui/guides/schema-expressions.mdtaught the statictablerenderer's two retired column aliases. Both sites were re-derived againstorigin/main(line numbers in the filing had drifted) and both card premises were verified in-tree before editing.Alias-retirement state: LANDED
Measured in-tree at base
546f610, not recalled:packages/components/src/renderers/complex/table.tsxreads exactly two column keys, and neither alias survives:{col.header}— one occurrence{row[col.accessorKey]}— one occurrencecol.label/col.name— zero occurrences (positive control:col.headerreturns 1, so the grep is real, not a mistyped path)The renderer imports
StaticTableColumn, andpackages/components/src/renderers/complex/__tests__/table-column-contract.test.tsxpins the retirement, naming it in its header:That test pins this PR's exact broken example as the failure case:
So the guide was shipping an example that the repo's own pin test asserts renders an empty heading.
The correction is safe in any ordering —
header+accessorKeyis the declared contract both before and after the retirement — but since the retirement has landed, the guide was actively wrong onmain, not merely ahead of it.Declared contract, verified independently
One refinement to the filing worth reviewer attention. The card cited
TableColumn; that interface does declare requiredheaderand requiredaccessorKey, so the conclusion holds. Buttype: "table"columns are now typed asStaticTableColumn, the narrow split introduced by objectui#5474 (maintainer ruling 2026-08-22, Option C). It likewise declares requiredheaderandaccessorKey, and carries?: nevertombstones for the keys the static renderer never read.TableColumnremains the rich shapedata-tablehonours. Either waylabelis declared nowhere andnameis not an accessor.The change
Two edits, both inside the
type: "table"section.Prose — before:
after:
Worked example — before:
after:
Scope fence
Only the
type: "table"prose and example. Thedata-tableexample earlier in the same file still authors{ "name": ..., "label": ... }columns; that block belongs to #5120 and #5351 and is deliberately untouched here.data-integration.mdis owned by another dispatch and is not in this diff. Those cards are not addressed by this PR and remain open.Line counts (published-skills ruling, 2026-08-21)
Correction, not expansion — the net is exactly zero.
skills/objectui/guides/schema-expressions.md.mdunderskills/)SKILL.mdfiles onlygit diff --numstat:3 3 skills/objectui/guides/schema-expressions.md— three lines replaced, none added.Gates
Derived from
package.jsonagainst the actual diff path, not recalled. Exit codes captured by redirect-then-capture; verdict lines are each gate's own.check:skills-pathscheck-skills-paths: OK (93/94 stated path(s) resolve across 18 guide file(s); 1 baselined).check:doc-typesEvery documented component type is registered.check:doc-fencesevery TypeScript block in 223 document(s) is fenced ts/tsx/typescriptcheck:doc-snippetsSemantic phase: 267 of 267 block(s) judged, 0 failed./Every covered documentation snippet compiles against the built types.docs:check-linksLinks are valid across 17 scan roots.check:control-bytescheck-control-bytes: OK (scanned 5593 tracked text file(s); skipped 85 binary).check:shell-escape-residuecheck-shell-escape-residue: OK (... skills: 18 file(s), 235 fence(s) ...)check-changeset-presenceNo source of a released package changed in this range, so no changeset is owed.check:doc-snippetsfirst returned exit 2, which that gate defines as "I could not run", not a failure — it needs the packages built. Afterturbo run buildover its own--build-filterclosure (32/32 tasks successful) it reached a real verdict, quoted above. Build and gate ran joined with&&under the shared verify lock, whose verdict wascommand-exit 0, so that number covers both parts.check:shell-escape-residuereports scanning theskillsroot (18 files, 235 fences), so it genuinely covered the edited file rather than skipping it.Declared narrowing:
pnpm lintThe repo-wide eslint scan was not run locally. This is a measured narrowing, not a skip — CI runs the farm regardless:
files:selector ineslint.config.jsis**/*.{ts,tsx}or**/*.tsx. No markdown processor is configured.File ignored because no matching configuration was supplied.ts/tsxfile and changes no eslint or tsconfig setting, so no untouched file's verdict can move.Changeset
None owed, and none added.
skills/has nopackage.jsonand appears in no package'sfiles— it ships throughskills-lock.json, not an npm tarball — so no released package's source changed.node scripts/check-changeset-presence.mjsagrees, exit 0.Precedent from git log matches:
9363ad0(docs-only,apps/console/docs/error-tracking.md) carried no changeset, while0a2918fdid carry one because it editedpackages/plugin-map/README.md, which ships inside the published package. This diff is the former case. Noskip-changesetlabel was applied — in this repo that label is a phantom, read by no workflow.Review note
This PR is left as a draft per dispatch. Worth flagging that
AGENTS.mdclassifies the publishedskills/**tree as not a governed surface — the governed set isAGENTS.md,CLAUDE.md,.claude/**, anddocs/adr/**, and only paths starting with.claude/count. So this PR is eligible for the ordinary merge-queue path once CI is green, at the maintainer's discretion.Generated by Claude Code
Generated by Claude Code