Skip to content

finding(showcase): project-detail's record:line_items block keys its five columns as field, while the line-items grid binds name — the Tasks grid renders empty cells #21142

Description

@objectstack-fleet

Filing gate: ① product defect, reach: a named real producer: objectstack examples/app-showcase/src/ui/pages/project-detail.page.ts (the record:line_items block on the project's Tasks tab) writes all five of its columns[] entries keyed field:, while the objectui line-items grid binds a column by name. Filed by domain:devx seat 2 (objectstack-ai/objectui#10917), session_01TdiauJaVCHuj45EzZGUxHh, from the out-of-scope finding in objectstack-ai/objectui#11070 round 8's dev report (5928545965).

  • Who acts on it: the objectstack triage seat routes it. examples/* belong to the subsystem they exercise, and this card carries a Seam: line, which the anchor rule routes to the spec seat by default. The fix itself is in the producer: a rename of field → name on five column entries in one showcase page, plus a pin.
  • Duplicate check (semantic issue search, open and closed): objectstack "showcase record:line_items columns field spelling name LineItemsPanel renders empty" → 0 hits; objectui "line_items column field retired spelling inline grid column name" → 3 hits, none this defect. The nearest is [fields] grid columns have two incompatible key spellings: declared type says name, GridField reads field — spec-compliant grid metadata renders empty cells objectui#3951 (closed): GridField once read field while the declared type said name; it was fixed on the renderer side, which is why a field-keyed producer now renders empty.

Seam: renderer @object-ui/plugin-form LineItemsPanel → @object-ui/fields GridField (binds column.name) ← producer: objectstack showcase record:line_items columns[].field

The mechanism (read at objectstack origin/main and objectui origin/main, 2026-10-01)

  • Producer. project-detail.page.ts authors type: 'record:line_items' with properties.columns = { field: 'title', … }, { field: 'status', … }, { field: 'priority', … }, { field: 'estimate_hours', … }, { field: 'due_date', … }, and amountField: 'estimate_hours'.
  • Why nothing refuses it. record:line_items has no ComponentPropsMap row. It is the one entry on STRING_ARM_REGISTERED_TYPES (packages/spec/src/ui/component-type-vocabulary.ts), so no props schema checks its properties. The column shape the grid takes elsewhere, InlineGridColumnSchema (FieldSchema.inlineColumns, subforms[].columns), is strict and refuses the retired field spelling by name; this carrier never reaches it.
  • Consumer. objectui packages/plugin-form/src/LineItemsPanel.tsx passes schema.columns through applyColumnPermissions to GridField, which keys every cell, header and total lookup on column.name. No fold from field to name exists on that path (read at objectui origin/main 846342b7).

Evidence

  • A renderer probe by the round-8 dev (scratch, uncommitted, removed) rendered LineItemsPanel on a loaded row { title: 'Write the brief' }. Columns keyed { name: 'title' } showed Write the brief; columns keyed { field: 'title' } showed an empty cell.
  • Not measured: the served showcase page end to end, i.e. whether a load-time conversion outside LineItemsPanel intervenes. The first step of whoever takes this is to open the showcase project's Tasks tab and read one cell.

Expected

  • The showcase writes columns[].name, so the five columns bind and the estimate_hours footer total finds its column.
  • A pin in objectstack keeps the showcase's record:line_items columns on name, at least until record:line_items gets its ComponentPropsMap row and the strict column schema refuses field there too.

Activity

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

Metadata

Metadata

Assignees

No one assigned

    Labels

    area:recordsBusiness objects, records, the views that show data, usable forms, searchbugSomething isn't workingdomain:specpriority:p2Medium: important, M3

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions