Repository navigation
docs: layout-dsl.mdx teaches section-level virtualScroll/itemHeight/lazy/renderStrategy keys that exist on no schema #8251
Description
Activity
- addeddocumentationImprovements or additions to documentationImprovements or additions to documentation
on Aug 13, 2026 Triage: lands in
content/docs/protocol/objectui/layout-dsl.mdx(docs-only) ⇒domain:devx,pm:queue, type Bug — the page teaches section/layout authoring keys (virtualScroll/itemHeight/lazy/renderStrategy) that exist on no schema atorigin/main, so an author following it writes metadata that parse-strips or rejects. Dedup was done by the filer (audit-trail notedocs/audits/2026-06-handwritten-docs-accuracy-followups.md:389never got an issue; open+closed search clean) and the referenced remedy (PerformanceConfigSchema) is itself retired, so a rewrite to real surfaces is the only correct fix. Note for the dev: docs-only ⇒skip-changeset; ⛔ this is not a rider on #7176 — that census PR deliberately excluded this surface. Size/model suggestion: S–M, subagent, sonnet.本评论来自分诊座位 Routine。
Generated by Claude Code
Claim: PM loop round 1
Session:session_01KNfj35pXRxnF1D3gZN5zjc
Branch:claude/issue-8251-layout-dsl-phantom-keys
Worktree:objectstack-issue-8251
Domain:domain:devx
File surface:content/docs/protocol/objectui/layout-dsl.mdx(stop on breach; explain in the report)
Container & model:S–M,mode:subagent,model: opus
Serial constraints cleared: no open PR and no in-flight claim declarescontent/docs/protocol/objectui/layout-dsl.mdx. #7176's census PR deliberately excluded this surface (per the card), so it is not a predecessor on this file.Premise re-checked at claim time on
origin/main— intact, with one scoping refinement for the dev:virtualScroll:966·itemHeight:967·renderStrategy:977— present, as filed.grep -cforitemHeight|renderStrategyunderpackages/spec/src⇒ 0, and the zero is trustworthy here because the positive control (FormSectionSchema, same tree, same command shape) returns hits. The keys really are on no schema.⚠️ lazy:appears in two families in this file, not one::484/:488(tab surface) and:952/:955(section surface). The card is about the section family. Do not sweep the tab occurrences on the assumption they are the same defect — measure the tab surface separately and report it rather than folding it in.
Docs-only ⇒
skip-changeset.
Generated by Claude Code
- added a commit that references this issue
on Aug 13, 2026 ACCEPT — PR #8301 (round 1,
domain:devxseat)⚠️ Accepted under the direct-review fallback: this dev never filed a report. Its container was restarted mid-task and the agent was killed. Per the seat's rule that a lost report is not a stalled acceptance, the PR was reviewed on its own merits againstorigin/main— and because the dev died between its last commit and any report, the PR body is stale and the shipped diff is what I reviewed.The body and the shipped text contradict each other — the shipped text is the correct one
The PR body (written at the first commit) says the replacement points authors at "the one real, consumed switch — the boolean
virtualScrollon a list-shaped view", with four objectuifile:linecitations. That claim is false, and the dev appears to have caught it itself: its second commit,c55cd817"align the Layout DSL performance note with the #7176 view-level retirement", rewrote exactly that passage. It died before updating the body.Verified on
origin/main, which side is true:packages/spec/src/migrations/entries/retired-keys/17.ui__ListView__virtualScroll.tsand theObjectListViewtwin both exist — the key is retired, not live.conversions/registry.ts:2282states it verbatim: "view list keys removed ([verdict question] view.jsonlist.striped/list.bordered/list.virtualScrollare LIVE on pass-through-only reads — every measured reader copies the key, none applies it #7176): 'striped'/'bordered'/'virtualScroll' — every measured reader copied the key forward and none applied it (pass-through-only; ADR-0049 enforce-or-remove)".virtualScrollhas 0 exact-key hits across all 1049 entries ofpackages/spec/authorable-surface/ui.json.
⇒ Had the first version shipped, the page would have redirected authors from one phantom key to another key retired in the same major — teaching a second wrong thing, which is the one outcome the dispatch order explicitly forbade. The self-correction is the most valuable thing in this delivery.
What I verified in the shipped text
Every load-bearing claim in the new
## Performancesection checks out onorigin/main:claim reading FormSectionSchemais strictpackages/spec/src/ui/view.zod.ts:1903, built withstrictObject⇒ authoring these keys is a parse failure, resolving the card's own "strips or rejects" hedge to rejectsno authorable virtual-scroll switch anywhere virtualScroll0 hits across the UI authorable surface, consistent with the retired-key entries abovepaginationis the right redirectview.zod.ts:1366, and spec's own retirement guidance at:1515says "large datasets page viapagination" — the doc uses spec's own wordsboth doc links resolve widget-contract.mdx:251is a real## Performanceanchor;content/docs/references/ui/view.mdxexists.Check Documentation Linksindependently greenscope 1 file, +23/−40, docs-only, skip-changesetapplied. No schema widened — correct, that would be adomain:specchangeCI 21 check runs, zero failures; TypeScript Type Checkstillin_progressat review time and will be confirmed before this is flipped readyResidual work, filed as #8306
The dispatch order asked the dev to measure the tab-level
lazy(~:484/:488) separately rather than fold it into the section fix. Its body shows it measured the surface, but it died before acting or reporting, so I completed that measurement myself:lazyhas 0 exact-key hits across all 1049 UI authorable keys, and tab schemas are represented (ui/ViewTabdeclaresfilter/icon/isDefault/label/name/order/pinned/view/visible;ui/PageTabsPropsits own set) — so the zero is real, not an artifact of tabs being missing from the surface.⇒ The tab-level
lazyis phantom too, and the page is now internally inconsistent: its new## Performancesection states that no section declareslazy, while an earlier passage still demonstrateslazyas working tab syntax. Filed as #8306, unassigned and ungraded — routing is triage's.⚠️ Worth recording how that nearly went wrong: a baregrep lazy packages/spec/src/ui/view.zod.tsreturns several hits, and every one is thelazySchemaimport helper — an unrelated identifier that would have produced the opposite conclusion. Position, not count.Fixes #8251stands: the card was scoped to the section family and that family is fully addressed.
Generated by Claude Code
Landed — PR #8301 merged 2026-08-13 04:40:05Z.
domain:devxseat closing reading.Two readings, per the seat's rule that an event notice is not a landing:
1.
closed_by_pull_requests— exactly one reference, PR #8301,MERGED. It closed this card and nothing else; in particular it did not close #8306, the tab-level residue split out of this page.2. Content on
origin/main, not the event and not the PR's self-description:⚠️ A naive grep says the phantom keys are still there —renderStrategy2,itemHeight2,virtualScroll3. Counting would have reported a failed landing. Looking at where each hit is:line what it is 946, 947 the new prose: "a section declares no virtualScroll,itemHeight,lazyorsourcekey, and there is nolayout.renderStrategy"952 the #7176 view-level retirement note 959, 960 the Callout recording what earlier revisions taught All five are backticked prose in the deliberate "absence is loud" passage. The decisive check is the authorable form, and it is clean:
grep -nE '^\s+(renderStrategy|itemHeight|virtualScroll):' → no matches⇒ Zero remaining YAML key lines for the section family. The
## Performancesection is onmainat:943. The page no longer teaches any key that parses as a failure.This is the seat's own standing pitfall firing on its closing check: counts only falsify, positions confirm — a non-zero
grep -cproves nothing until each hit is located.Still open and deliberately not closed by this PR: #8306 — tab-level
lazyat:484/:488is still authorable YAML onmainand is still phantom. Verified present after this merge, so the split held.
Generated by Claude Code
- added a commit that references this issue
on Aug 17, 2026
Found during the #7176 census (retiring the view-level
virtualScroll); this is a different surface and was deliberately left out of that PR.content/docs/protocol/objectui/layout-dsl.mdx(~lines 940-985, the "Performance Optimization" family of sections) documents YAML like:plus
lazy/sourceon sections andlayout.renderStrategy: progressive. None of these is a real authoring surface:FormSectionSchema(packages/spec/src/ui/view.zod.ts) declares novirtualScroll,itemHeight,lazy,sourceorrenderStrategy—grep -rn "itemHeight\|renderStrategy" packages/spec/src/returns zero hits atorigin/main.docs/audits/2026-06-handwritten-docs-accuracy-followups.md:389records it as "documented as section/layout keys … FormSectionSchema has no such fields … flagging for follow-up", but no issue appears to have been filed (searched open+closed for layout-dsl/section virtualScroll/itemHeight/renderStrategy — nothing beyond the audit note).PerformanceConfigSchema(responsive.zod.ts) as "the real performance config" — that schema has itself since been retired (objectui'susePerformance.tsheader records the spec schema behind it was retired in 17.0.0-rc.1), so the note's own remedy is stale too.list.striped/list.bordered/list.virtualScrollare LIVE on pass-through-only reads — every measured reader copies the key, none applies it #7176 the view-levelvirtualScrollis also retired (pass-through-only), so there is currently no authorable virtual-scrolling switch anywhere — an author following this page authors keys that parse-strip or reject, depending on the shape.Fix that lands here: rewrite/remove the affected layout-dsl.mdx sections so they describe only surfaces that exist (objectui's DetailSection
virtualScrollprop is aVirtualScrollOptionsobject on a component prop, not authorable view/section metadata — if that is what the page means, it should say so, not invent YAML keys).Refs: #7176 (view-level retirement + census), docs/audits/2026-06-handwritten-docs-accuracy-followups.md:389.
Generated by Claude Code