Split out of sweep #7142 by its own escalation guard (card rule 5): a row whose "real reader" turns out to be pass-through-only escalates from citation repair to a verdict question and must be split out rather than silently re-cited. #7142 repaired the other 11 rows and deliberately left these three byte-identical in packages/spec/liveness/view.json.
This is not direction-A citation rot. The recorded citation is dead and the replacement candidates are all forwarding copies, so re-citing any of them would launder a possibly-inert key as evidenced. The question is whether the live verdict itself is correct.
Measured revisions
- objectstack
origin/main @ 3e8e669c0
- objectui
origin/main @ 11c1e71e866acb032688fc61fe711c7a5deda582
objectui read via git -C + explicit fetch, through git show origin/main:PATH / git grep origin/main — never a working tree.
The three rows
All three carry "note": "objectui: ObjectGrid.tsx (audit L15)." and, per #7132, have zero occurrences in that file. The chains below are complete: each ends at ObjectGrid, which never spells the key.
list.striped and list.bordered
| hop |
site |
what it does |
| 1 |
packages/react/src/spec-bridge/bridges/list-view.ts:92,93 |
if (spec.striped != null) node.striped = spec.striped; — copy |
| 2 |
packages/plugin-list/src/ListView.tsx:1539,1540 |
...(schema.striped != null ? { striped: schema.striped } : {}) — copy onto the grid node |
| 3 |
packages/plugin-view/src/ObjectView.tsx:671,851,1019 / packages/app-shell/src/views/ObjectView.tsx:1426,1427 |
striped: viewDef.striped ?? listSchema.striped — copy |
| 4 |
packages/plugin-grid/src/ObjectGrid.tsx |
0 occurrences — the chain ends here |
ObjectGrid builds an explicit prop object for DataTable (ObjectGrid.tsx:2180-2270); there is no ...schema spread, so nothing carries the key further. DataTable itself does not read either key: packages/components/src/renderers/complex/data-table.tsx has 0 hits for striped, and its single bordered hit (:2248) is a comment. The table's own frame flag is a different key, borderless, which ObjectGrid sets to a constant true.
Two near-misses that are not appliers:
list.virtualScroll — a third instance, beyond the two #7142 knew about
| hop |
site |
what it does |
| 1 |
packages/react/src/spec-bridge/bridges/list-view.ts:105 |
copy |
| 2 |
packages/plugin-list/src/ListView.tsx:1561 |
...(schema.virtualScroll != null ? { virtualScroll: schema.virtualScroll } : {}) — copy onto the grid node |
| 3 |
packages/plugin-view/src/ObjectView.tsx:1053 / packages/app-shell/src/views/ObjectView.tsx:1506 |
copy |
| 4 |
packages/plugin-grid/src/ObjectGrid.tsx |
0 occurrences — the chain ends here |
#7132's table listed hops 1-3 as "actual measured readers", which is true as reads and misleading as evidence — they are the same forwarding shape as striped/bordered, so this row belongs with them rather than in the repair set.
Three near-misses, all different surfaces:
packages/plugin-grid/src/VirtualGrid.tsx genuinely virtualizes (useVirtualizer, :74), but it is only exported (plugin-grid/src/index.tsx:17,20) — ObjectGrid never instantiates it, and VirtualGridProps (:34) has no virtualScroll member.
packages/plugin-detail/src/DetailSection.tsx:408,409 applies a virtualScroll, but it is a VirtualScrollOptions object ({enabled, batchSize}) on a DetailSection prop — a different shape on a different surface, and no measured supplier passes the view key into it.
packages/react/src/hooks/usePerformance.ts:95 implements a virtualScroll belonging to objectui's own PerformanceConfig, whose header comment (:15-25) records that the spec schema behind it was retired in 17.0.0-rc.1.
Zero-hit falsification (per the sweep's own discipline)
Every zero above was falsified against a known-present neighbour at the same path, so the zeros are the keys' and not the scanner's:
- In
ObjectGrid.tsx: striped/bordered/virtualScroll = 0, while the nine sibling keys still cited to that file return resizable 2, rowColor 2, conditionalFormatting 4, rowActions 7, exportOptions 10, grouping 12, pagination 17, rowHeight 22, selection 31.
- In
data-table.tsx: striped 0 and virtualScroll 0, while borderless returns 3 and rowClassName returns 2.
The question for the maintainer
If nothing applies these keys, an author who writes striped: true / bordered: true / virtualScroll: true on a list view gets a parse-clean no-op — the exact silent-no-op shape ADR-0049 enforce-or-remove exists to end, and the ledger currently grades all three live.
Three dispositions, and picking is the work:
- The verdicts are over-graded — reclassify under ADR-0049 (dead, or enforce-or-remove). Cheapest to record, and it is what the measurement supports today.
- The renderer is the bug — the keys are a reasonable list-view surface that
ObjectGrid simply never wired; fix it objectui-side and the live verdicts become true. ObjectGrid.component.yml already declares striped/bordered with defaults, so the intent existed.
- Deliberate pass-through for external grid consumers — the bridge writes a spec-shaped node that a non-ObjectGrid consumer might read. If so it should be recorded, because nothing states it today.
I have not graded this, deliberately: option 2 is a product call about whether striped rows / cell borders / list virtualization are capabilities this platform wants, which is exactly the startup-focus question a dev agent should not answer alone. The instrument's own blind spots also argue for a human look — dynamic or config-driven reads would not show up in a substring sweep, though the explicit DataTable prop object at ObjectGrid.tsx:2180-2270 makes that unlikely here.
Refs
Split from sweep #7142 (rule 5). Members: #7132 (rows striped/bordered recorded there as open questions; virtualScroll was listed as repairable and is not), #7133. Related: #7131 (the designer-preview methodology fork — relevant because the inspector at previews/block-config.ts:147,148 is the only surface that even names these keys past the bridge), #5175 (chartConfig over-grades evidence, nearest relative, different rows).
Dedup: searched open issues in both repos for these key names plus the cited paths; nothing beyond the refs above.
Generated by Claude Code
Split out of sweep #7142 by its own escalation guard (card rule 5): a row whose "real reader" turns out to be pass-through-only escalates from citation repair to a verdict question and must be split out rather than silently re-cited. #7142 repaired the other 11 rows and deliberately left these three byte-identical in
packages/spec/liveness/view.json.This is not direction-A citation rot. The recorded citation is dead and the replacement candidates are all forwarding copies, so re-citing any of them would launder a possibly-inert key as evidenced. The question is whether the
liveverdict itself is correct.Measured revisions
origin/main@3e8e669c0origin/main@11c1e71e866acb032688fc61fe711c7a5deda582objectui read via
git -C+ explicit fetch, throughgit show origin/main:PATH/git grep origin/main— never a working tree.The three rows
All three carry
"note": "objectui: ObjectGrid.tsx (audit L15)."and, per #7132, have zero occurrences in that file. The chains below are complete: each ends atObjectGrid, which never spells the key.list.stripedandlist.borderedpackages/react/src/spec-bridge/bridges/list-view.ts:92,93if (spec.striped != null) node.striped = spec.striped;— copypackages/plugin-list/src/ListView.tsx:1539,1540...(schema.striped != null ? { striped: schema.striped } : {})— copy onto the grid nodepackages/plugin-view/src/ObjectView.tsx:671,851,1019/packages/app-shell/src/views/ObjectView.tsx:1426,1427striped: viewDef.striped ?? listSchema.striped— copypackages/plugin-grid/src/ObjectGrid.tsxObjectGridbuilds an explicit prop object forDataTable(ObjectGrid.tsx:2180-2270); there is no...schemaspread, so nothing carries the key further.DataTableitself does not read either key:packages/components/src/renderers/complex/data-table.tsxhas 0 hits forstriped, and its singleborderedhit (:2248) is a comment. The table's own frame flag is a different key,borderless, whichObjectGridsets to a constanttrue.Two near-misses that are not appliers:
packages/components/metadata/ObjectGrid.component.yml:45,49declares both props with defaults — a declaration the implementation never reads (already noted in finding: view.json cites "ObjectGrid.tsx (audit L15)" for 15list.*keys, but 6 of them have zero occurrences in ObjectGrid.tsx — verdicts hold via other readers, the recorded evidence doesn't #7132).packages/components/src/renderers/layout/containers.tsx:674,683applies abordered, but that is the card container block, a different surface — confirmed by the inspector carrying it under a separate key (page:card.borderedatpreviews/block-config.ts:361, vsobject-grid.borderedat:148).list.virtualScroll— a third instance, beyond the two #7142 knew aboutpackages/react/src/spec-bridge/bridges/list-view.ts:105packages/plugin-list/src/ListView.tsx:1561...(schema.virtualScroll != null ? { virtualScroll: schema.virtualScroll } : {})— copy onto the grid nodepackages/plugin-view/src/ObjectView.tsx:1053/packages/app-shell/src/views/ObjectView.tsx:1506packages/plugin-grid/src/ObjectGrid.tsx#7132's table listed hops 1-3 as "actual measured readers", which is true as reads and misleading as evidence — they are the same forwarding shape as
striped/bordered, so this row belongs with them rather than in the repair set.Three near-misses, all different surfaces:
packages/plugin-grid/src/VirtualGrid.tsxgenuinely virtualizes (useVirtualizer,:74), but it is only exported (plugin-grid/src/index.tsx:17,20) —ObjectGridnever instantiates it, andVirtualGridProps(:34) has novirtualScrollmember.packages/plugin-detail/src/DetailSection.tsx:408,409applies avirtualScroll, but it is aVirtualScrollOptionsobject ({enabled, batchSize}) on a DetailSection prop — a different shape on a different surface, and no measured supplier passes the view key into it.packages/react/src/hooks/usePerformance.ts:95implements avirtualScrollbelonging to objectui's ownPerformanceConfig, whose header comment (:15-25) records that the spec schema behind it was retired in 17.0.0-rc.1.Zero-hit falsification (per the sweep's own discipline)
Every zero above was falsified against a known-present neighbour at the same path, so the zeros are the keys' and not the scanner's:
ObjectGrid.tsx:striped/bordered/virtualScroll= 0, while the nine sibling keys still cited to that file returnresizable2,rowColor2,conditionalFormatting4,rowActions7,exportOptions10,grouping12,pagination17,rowHeight22,selection31.data-table.tsx:striped0 andvirtualScroll0, whileborderlessreturns 3 androwClassNamereturns 2.The question for the maintainer
If nothing applies these keys, an author who writes
striped: true/bordered: true/virtualScroll: trueon a list view gets a parse-clean no-op — the exact silent-no-op shape ADR-0049 enforce-or-remove exists to end, and the ledger currently grades all threelive.Three dispositions, and picking is the work:
ObjectGridsimply never wired; fix it objectui-side and theliveverdicts become true.ObjectGrid.component.ymlalready declaresstriped/borderedwith defaults, so the intent existed.I have not graded this, deliberately: option 2 is a product call about whether striped rows / cell borders / list virtualization are capabilities this platform wants, which is exactly the startup-focus question a dev agent should not answer alone. The instrument's own blind spots also argue for a human look — dynamic or config-driven reads would not show up in a substring sweep, though the explicit
DataTableprop object atObjectGrid.tsx:2180-2270makes that unlikely here.Refs
Split from sweep #7142 (rule 5). Members: #7132 (rows
striped/borderedrecorded there as open questions;virtualScrollwas listed as repairable and is not), #7133. Related: #7131 (the designer-preview methodology fork — relevant because the inspector atpreviews/block-config.ts:147,148is the only surface that even names these keys past the bridge), #5175 (chartConfigover-grades evidence, nearest relative, different rows).Dedup: searched open issues in both repos for these key names plus the cited paths; nothing beyond the refs above.
Generated by Claude Code