Skip to content

finding(types,plugin-kanban): the ruled KanbanSchema carries three zero-read members (allowCollapse, cardTemplates, columnWidths) and the board reads an undeclared titleField — enforce-or-remove on the shape objectui#7664 declared #7742

Description

@claude

Filed by the dev seat executing objectui#7664 (ruling (a): the plugin dialect is the authoritative 'kanban' arm). Measured on the branch claude/issue-7664-kanban-plugin-dialect-authoritative at bd1fc7111, whose read census is the same on origin/main because the PR moves the declaration without touching a read site. Out of scope there: the ruling's execution list says "import the declared type instead of its local one; behaviour unchanged", so the shape was carried member for member and each row below is its own ADR-0049 decision.

The facts

Read census over packages/plugin-kanban/src (non-test files), per member of the now-declared KanbanSchema (packages/types/src/complex.ts):

member declared read sites in the plugin (non-test)
allowCollapse yes 0KanbanEnhanced collapses lanes off column.collapsed, never off the board flag
cardTemplates yes 0CardTemplates.tsx takes templates as a component prop; nothing reads schema.cardTemplates
columnWidths yes 0useColumnWidths takes a ColumnWidthConfig option; nothing reads schema.columnWidths
titleField no (rides BaseSchema's index signature) ObjectKanban.tsx — `schema.cardTitle

The other 15 declared members each have at least one read site (objectName 25, groupBy 14, columns 6, data 4, cardTitle 3, swimlaneField, grouping, cardFields, limit, className, quickAdd, onQuickAdd, coverImageField, conditionalFormatting via KanbanRenderer, onCardMove via KanbanRenderer). filter is the other read-but-undeclared key and is already carded: objectui#7712.

Probe used, so the zeros are readings: grep -o of schema.MEMBER and bare MEMBER over ObjectKanban.tsx + index.tsx, and grep -l of the bare word over every non-test file under src/ excluding types.ts; a same-shaped control on coverImageField returns 2 files / 7 hits.

Why it is a card

The whole point of the objectui#7664 ruling is that "declared = rendered" for the 'kanban' key. Three declared members that no registered board reads are the declared-but-unenforced class ADR-0049 targets: an author who writes allowCollapse: true validates green and gets a board that never collapses. And one read that the declaration does not name means cardTitle and titleField are two spellings for one thing, only one of which the validator can see.

Docs half (same class, adjacent)

The root README.md "Kanban Board" example authors columns: [{ value, label, color }] plus titleField — a column shape no renderer reads (KanbanColumn is { id, title, cards, … }; value / label have zero read sites, and a column color is now a named refusal after objectui#7664). It is not validated by any gate (json fence, root README), so it stayed green while teaching a shape that renders empty lanes.

Not decided here

Each row is enforce-or-remove: retire the three (tombstone + refusal, changeset), or wire them (a read site each); and for titleField, either declare it as the alias it is or retire the fallback and let cardTitle be the one spelling. Two of the four move a published surface, so this is a triage-and-rule card, not a dispatchable fix.

Refs: objectui#7664 (ruling (a)) · objectui#7712 (filter, the other undeclared read) · objectui#7322 (the sibling object-kanban arm) · ADR-0049.

Filed from Claude Code session https://claude.ai/code/session_01KbJQ1y1J12nZxYzFWhP8Q3.


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

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions