Skip to content

spec: ComponentPropsMap['object-kanban'] declares limit (row cap) — four objectui faces implement and teach it, the strict props map refuses it by name (spec half of objectui#8172) #16503

Description

@os-zhuang

Filed by the director seat under the objectui#8172 ruling (decision batch #68, 2026-09-07, option A — the contract declares the capability that is already implemented, documented and in use). objectui#8172 is pm:blocked on this card.

Measured (objectui#8172, @objectstack/spec 17.2.0)

  • objectui plugin-kanban reads schema.limit as the top-level $top (deliberately wired by objectui#4025), OBJECT_KANBAN_DATA_SOURCE maps limit: 'limit', ObjectKanbanSchema (@object-ui/types) declares limit?: number, and content/docs/plugins/plugin-kanban.mdx teaches it with a typed snippet (limit: 250) plus a Properties-table row.
  • ComponentPropsMap['object-kanban'] is a strict object (objectName, groupBy, columns, filter, data, cardTitle, titleField, cardFields, swimlaneField, grouping, quickAdd, coverImageField, conditionalFormatting); safeParse({ objectName: 'x', limit: 250 })unrecognized_keys: ['limit'], same verdict as the bogusProp control.

⇒ An author following the published docs writes a node the platform's save gate refuses. Declaring limit in objectui's registration alone is wrong (it would publish surface the save gate cannot store and break check:react-blocks-declaration-parity).

Scope

  • Add limit: z.number().int().positive().optional().describe('Maximum number of records loaded onto the board (row cap); lowered to the query's top-level $top') to object-kanban's props in the spec.
  • If the spec seat judges that the cap should instead derive from the bound named view's pagination.pageSize, propose that on this card before implementing — the ruling is that the four faces and the contract must agree, not which spelling; but the default is to declare limit, since it ships and is taught.
  • Widening a published accept set ⇒ Clause-② yes: landing PR carries needs:contract-review; changeset (minor); api-surface / authorable-surface baselines regenerated.

Acceptance

  • safeParse({ objectName: 'x', limit: 250 }) succeeds; bogusProp still refused
  • baselines regenerated; changeset present
  • objectui#8172 notified (registration then publishes the key)

Refs objectui#8172, objectui#4025, objectstack#15449.

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

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions