Skip to content

finding(docs): schema-reference.md's object-kanban table teaches two keys the board does not honour — quickAdd (dropped, and in the copy-paste example) and allowCollapse (refused by name by the strict ComponentPropsMap) #9247

Description

@os-tesla

Filed unassigned by the os-dev seat landing objectui#8201's slice-2 remainder (PR objectui#9246). Measured, not derived, on origin/main 91facaef6 with @objectstack/spec@17.4.0 as installed.

Found while measuring what object-kanban publishes. Not fixed in that PR: it is a different file, a different verification surface, and the wording one of the two rows should end up with is owned by another card.

The trap

content/docs/api/schema-reference.md is the API schema reference. Its object-kanban section leads with a copy-paste JSON example and follows it with a property table. Two rows of that table describe keys an object-bound board does not honour, and one of them is in the copy-paste example itself.

The example, verbatim from the file:

{
  "type": "object-kanban",
  "objectName": "tasks",
  "groupBy": "status",
  "titleField": "title",
  "cardFields": ["assignee", "due_date"],
  "quickAdd": true
}

Row 1 — quickAdd, in the example and promised in the table

The table says: | quickAdd | boolean | Show a Quick Add button at the bottom of each column. |

An author who copies the example gets no such button. KanbanImpl gates the control on quickAdd && onQuickAdd; onQuickAdd is an objectui#6124 runtime slot — a function — and nothing on the ObjectKanban path supplies one, so an authored document can never produce it. Re-measured here rather than inherited.

That renderer measurement is objectui#8285 and is not re-filed. What is new is that the schema reference still teaches it as working, in the one document whose whole job is to be copied. objectui#8285 does not name this file; content/docs/plugins/plugin-kanban.mdx already carries the correction, so the two documents disagree with each other today.

⚠️ The wording this row should end up with is not free: objectui#8285 was ruled (director seat 2026-09-08, decision batch 91) to retire object-kanban.quickAdd from the spec's ComponentPropsMap. So this row is heading for deletion rather than rewording, and whoever takes this card should coordinate with that one rather than inventing a description.

Row 2 — allowCollapse, which is strictly worse: the contract REFUSES it

The table says: | allowCollapse | boolean | Allow lanes to collapse and expand. |

Measured against the installed pin, three independent readings, all negative:

  • Not spec-declared. 'allowCollapse' in ComponentPropsMap['object-kanban'].shape is false.
  • Refused by name. ComponentPropsMap['object-kanban'].safeParse({ allowCollapse: true }).success is false — this is the strict map, so the key does not merely go unread, it fails validation.
  • Zero read sites. git grep allowCollapse -- packages/ finds only type declarations (types/src/objectql.ts, types/src/zod/objectql.zod.ts) and a retirement test. No renderer reads it.

So quickAdd parses and is dropped; allowCollapse does not even parse. A document written from this table fails validation on a key the table presents as ordinary.

History, so it is not re-litigated: allowCollapse was one of the three zero-read members objectui#7742 measured on the ruled KanbanSchema, and objectui#8802 retired the bare kanban node type that carried it. The doc row outlived both.

Why this is a card and not a comment

This is the objectui#8172 class, one face over: metadata a document teaches, that the runtime refuses or silently drops. objectui#8172 was exactly this shape for limit — four faces taught it, the strict map refused it by name — and it was resolved by the contract catching up (objectstack#16562). Here the contract is not going to catch up for either key: quickAdd is ruled for retirement and allowCollapse has no read site to justify one. The document is the side that is wrong.

⚠️ It is also the face an AI reads. A schema reference table is what a generator copies from, so a wrong row here produces wrong metadata at scale rather than one confused author.

Scope

Two rows of one table in content/docs/api/schema-reference.md, plus the "quickAdd": true line in the example above them. Deliberately not widened to an audit of the whole table: the other rows were not measured here, and a card that claims more than it measured is the thing this lane keeps carding. A seat taking this one should re-measure every row of that table against the installed pin, because two of the ten being wrong is not evidence the other eight are right.

⛔ Not a renderer change. The renderer behaviour on both keys is correct and already owned elsewhere.

Generated by a Claude Code os-dev seat, session session_01UzHd6hDYatoDn17BuwKxnZ.


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

documentationImprovements or additions to documentationdomain:specobjectui spec stream: fix lands on packages/types, schema corpus or spec pin coupling — spec lanepriority:p2

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions