Skip to content

finding(app-shell): the object-view relay hands ListView a SIX-KEY projection of the chart block, dropping the whole ADR-0021 shape (dataset / dimensions / values) #7823

Description

@claude

Found while implementing objectui#7544 (the ListView capability gate never resolved chart). Recording only, no fix in that PR — it is a different package and outside that card's file surface.

What is measured

On origin/main 900f8d995, packages/app-shell/src/views/ObjectView.tsx reads the SAME authored chart: block two different ways, 337 lines apart:

:2098 — the dedicated chart-view branch, which renders ObjectChart directly and is ADR-0021 aware:

if (viewDef.type === 'chart') {
    const chartConfig = viewDef.chart || {};
    if (chartConfig.dataset) { ...dimensions, values... }

:2435 — the rung that relays the block into ListView (inside the fullSchema literal at :2170), a hand-listed projection of exactly six keys:

chart: {
    chartType: viewDef.chart?.chartType,
    xAxisField: viewDef.chart?.xAxisField,
    yAxisFields: viewDef.chart?.yAxisFields,
    aggregation: viewDef.chart?.aggregation,
    series: viewDef.chart?.series,
    config: viewDef.chart?.config,
},

dataset, dimensions and values — the whole ADR-0021 (#1890) authoring shape — are absent, as are categoryField / valueField. The list is the pre-ADR-0021 key set, frozen. The active view's block also does not reach ListView under its canonical chart: key: fullSchema spreads listSchema (the OBJECT's list schema), so schema.chart at the ListView end is the object-level list's block, never the active view's.

⇒ On the object-view route, a view that declares the ADR-0021 shape reaches ListView with its binding stripped, and ListView cannot tell that from a view that declared nothing.

Why this is load-bearing now

objectui#7544 gave ListView.availableViews a chart capability check: a grid view that declares a chart block and whitelists ['grid', 'chart'] is offered the Chart toggle, and one that declares nothing is not. That gate asks the block it is handed. Through this relay an ADR-0021 block arrives as six undefined keys, so the gate correctly answers "nothing declared" about a view whose author declared everything — the toggle stays hidden and the author gets no diagnostic. The legacy xAxisField / yAxisFields spelling survives the relay and does resolve, so the two authoring shapes behave differently on this route for reasons that live entirely in this projection.

Before objectui#7544 nothing downstream read those keys through this rung, which is why the gap was invisible.

What this is NOT

Not verified here

Whether InterfaceListPage (the other host that builds a ListView schema) has the same projection — it does not name chart at all in a grep of that file, which may mean it relays the block whole or does not relay it. Worth one reading before choosing the fix shape.


Generated by Claude Code

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions