Skip to content

[verdict question] view.json list.striped / list.bordered / list.virtualScroll are LIVE on pass-through-only reads — every measured reader copies the key, none applies it #7176

Description

@os-help

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:

  1. 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.
  2. 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.
  3. 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

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions