Skip to content

docs: fix Console Template phantom tabs on record:details - #8438

Merged
qq9340100 merged 1 commit into
mainfrom
claude/issue-8403-console-template-tabs
Aug 13, 2026
Merged

docs: fix Console Template phantom tabs on record:details#8438
qq9340100 merged 1 commit into
mainfrom
claude/issue-8403-console-template-tabs

Conversation

@qq9340100

Copy link
Copy Markdown
Collaborator

Fixes#8403

What was wrong

content/docs/protocol/objectui/layout-dsl.mdx's Console Template (~line 142) authored:

- type: record:detailsproperties:
tabs: [details, related, activity]

ui/RecordDetailsProps (packages/spec/src/ui/component.zod.ts:693, strictObject) declares aria, columns, fields, hideFields, inlineEdit, sections, showHeader (+ retired layout) — no tabs.

Measurement (per triage's binding first step)

Ran validateComponentProps (packages/lint) against a fixture reproducing the doc's exact example:

{
"severity": "warning",
"rule": "component-props-unknown-key",
"where": "page \"console_probe\" · record:details",
"path": "pages[0].regions[0].components[0].properties.tabs",
"message": "`tabs` is not a prop `record:details` declares ..."
}

ComponentPropsSeverity (validate-component-props.ts:113) is a single 'warning' literal today — never 'error' — so this is not rejected at publish; it is an advisory lint finding. At runtime, objectui's SchemaRenderer spreads unknown properties keys onto the component and the renderer ignores what it doesn't read, so the doc's own "Visual Layout" ASCII diagram (a Details/Related/Activity tab strip) was never actually produced by the example as written — silently forwarded, not rejected.

Fix

Rewrote the example to the schema-accepted shape the card names: a page:tabs component (ui/PageTabsProps) whose three items each carry the appropriate child component — record:details (Details), record:related_list (Related), record:activity (Activity) — which matches the section's own ASCII "Visual Layout" (Det/Related/Activity strip, Subject/Priority/Status fields) far better than the original ever did.

Re-ran the same measurement against the new shape: zero findings.

Did not widen RecordDetailsProps — that would be a domain:spec contract change out of this card's lane (ruling in the dispatch prompt).

Same-pass check (in scope per triage item 3)

Grepped all of content/docs/**/*.mdx for record:details and for type: record:details: only one occurrence repo-wide (this file, this line). content/docs/references/ui/component.mdx and content/docs/references/ui/page.mdx are generated reference tables and declare no tabs example; content/docs/ui/pages.mdx's record:details usage already uses the valid fields key. No other findings to file.

Scope

Declared file surface: content/docs/protocol/objectui/layout-dsl.mdx only — diff is exactly that one file, 19 insertions / 2 deletions, confined to the one code block. #8303 (PR #8402) and #8251 (PR #8301)'s sections on this same page are untouched.

Gates (local)

  • pnpm check:docs-audit-scope — pass
  • pnpm check:quick-reference-counts — pass
  • pnpm check:role-word — pass
  • pnpm --filter @objectstack/lint run check:doc-formula-expressions (deps built first: pnpm --filter '@objectstack/lint^...' build) — pass, 24/24 self-test cases
  • pnpm check:nul-bytes — pass

Re-derived against the actual changed path via node scripts/pm/dispatch-gates.mjs content/docs/protocol/objectui/layout-dsl.mdx: surfaces exactly the same four content/docs-scoped families already run above (plus the standing check:nul-bytes any-edit convention). No additional family implicated.

Docs-only change — no runtime/behavior surface — skip-changeset label applied.


Generated by Claude Code

`layout-dsl.mdx`'s Console Template authored `tabs: [details, related,
activity]` under `record:details.properties` — a key `ui/RecordDetailsProps`
(strictObject) does not declare. Rewritten to the schema-accepted shape: a
`page:tabs` component whose three `items` each carry the appropriate child
(`record:details`, `record:related_list`, `record:activity`), matching the
section's own "Visual Layout" ASCII diagram (Details/Related/Activity tabs,
Subject/Priority/Status fields).
Measured via `validateComponentProps` (packages/lint) against a fixture
reproducing the doc's example: the old shape is flagged
`component-props-unknown-key`, severity `warning` (advisory only — the rule's
`ComponentPropsSeverity` type is a single `'warning'` literal, never
`'error'`) — so this was not rejected at publish, it was silently forwarded
to objectui's renderer and ignored there. The new shape produces zero
findings from the same rule.
Fixes#8403
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Jqe56GnYFddggeAyfkZFVz
@vercel

vercelBot commented Aug 13, 2026

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

1 Skipped Deployment
ProjectDeploymentActionsUpdated (UTC)
objectstackIgnoredIgnoredAug 13, 2026 1:09pm

Request Review

@qq9340100qq9340100 added the skip-changeset PR has no user-facing published change; bypasses the changeset gate label Aug 13, 2026 — with Claude
@github-actionsgithub-actionsBot added the documentation Improvements or additions to documentation label Aug 13, 2026
@qq9340100
qq9340100 marked this pull request as ready for review August 13, 2026 13:28
@qq9340100
qq9340100 added this pull request to the merge queueAug 13, 2026
Merged via the queue into main with commit 69f85f7Aug 13, 2026
25 checks passed
@qq9340100
qq9340100 deleted the claude/issue-8403-console-template-tabs branch August 13, 2026 13:39
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

documentationImprovements or additions to documentationsize/sskip-changesetPR has no user-facing published change; bypasses the changeset gate

Projects

None yet

Development

Successfully merging this pull request may close these issues.

docs: layout-dsl.mdx Console Template authors tabs on a record:details component, a key ui/RecordDetailsProps does not declare

2 participants

@qq9340100@claude