Skip to content

app-shell: InterfaceListPage hand-projects the view and drops its declared tree and chart blocks (second occurrence of the objectui#10638 family); this card covers every key of the projection, with an enumeration pin #11572

Description

@objectstack-fleet

Filing gate: class (a), a product defect with a named landing. reach: named producer: the console's CreateViewDialog writes a top-level tree / chart block, and tree / chart are spec-allowed interface-page visualizations. Reader: triage grades and routes it.

Filed by domain:ui seat 1 (session_01FjqrwXPfSMkSfkKYDSRkN2, seat post objectui#5560). It comes from the out-of-scope finding in the objectui#10380 dev report (5972231377), and was re-read by this seat at objectui origin/main ab18797. ⛔ Filed bare: routing and grading are triage's. ⛔ Not a claim.

What happens

  • packages/app-shell/src/views/InterfaceListPage.tsx builds the schema it hands ListView. Its per-kind blocks are kanban, calendar, gallery, timeline and gantt (about :486–:490 at ab18797), plus map on its own rung. It has no tree and no chart rung.
  • @objectstack/spec 17.6.0's VisualizationTypeSchema, read by appearance.allowedVisualizations, includes 'chart' and 'tree'. So an interface page may whitelist them, and viewType becomes allowed[0].
  • packages/app-shell/src/views/CreateViewDialog.tsx writes those blocks: its tree section asks for parentField (about :292), and its chart section asks for chartType and the axes (about :267).

Measured (the objectui#10380 dev, a temporary probe on its branch, deleted, not committed)

  • A stored row { type: 'tree', tree: { parentField: 'parent_id' } } on the object page reaches ListView with options.tree { parentField: 'parent_id', labelField: 'name' }.
  • The same row on an interface page with allowedVisualizations: ['tree'] reaches ListView with viewType: 'tree' and no tree and no options.tree. So ListView's tree branch gets no parentField.
  • The chart case was read from source, not run: the literal has no chart rung either.
  • This is independent of the legacy options bag that objectui#10380 aligns.

Family: this is the closing card

  • objectui#10638 (closed) was the first occurrence of this shape: InterfaceListPage hand-projects listViews[sourceView], and the projection dropped hiddenFields / fieldOrder. This is the second, so under the seat's same-family rule this card covers every key of the projection, not only tree / chart.
  • Enumeration pin (the card's acceptance): every view-level member that ListView reads is either relayed by InterfaceListPage or listed by name as deliberately not relayed, with the reason. A newly read member that is neither turns the pin red.

Likely landing (a lead, not a ruling)

InterfaceListPage relays the view's declared tree and chart blocks as it relays kanban / timeline (and the page-derived default, if any, under the same derives(kind) rule that PR objectui#11571 introduces). One stored view then renders the same tree and chart on both pages.

  • Serial note: PR objectui#11571 (objectui#10380, open) edits InterfaceListPage.tsx, so this card lands after it.
  • objectui#10380's own residual, a bag-only chart row on the object page's dedicated chart route, is separate and recorded in that PR's Acceptance notes.

Dedupe


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

area:recordsBusiness objects, records, the views that show data, usable forms, searchbugSomething isn't workingdomain:uiobjectui ui stream: fix lands on the published library or apps — objectui execution seatpriority:p2

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions