Skip to content

[plugin-kanban] declare the four array/object-armed spec keys object-kanban reads — data · cardFields · grouping · conditionalFormatting (objectui#8201 slice 2a) #8313

Description

@os-justin

Slice 2a of objectui#8201, split by package under the PM ruling Q2 = B on that card. Filed by the domain:ui PM seat. ⛔ Not claimed.

Why this is its own card rather than the back half of one PR

Each member pin has to be measured at its own sink, and objectui#8223 proved how easily a sink is assumed wrong: its sort pin could never have been an identity pin, because convertSortToQueryParams builds a new map — and objectui#8212's landed rider note had predicted the opposite. Six sinks in one PR is exactly the size that invites an assumed identity pin.

Splitting by package also keeps each PR inside the plugin package's own __tests__ dir, where all three worked precedents already live.

Scope — four keys, all array/object-armed

object-kanban (both tags: plugin-kanban:object-kanban and view:kanban):

key declared arm
data array
cardFields array
grouping z.unknown()
conditionalFormatting z.unknown()

All four were measured genuinely spec-declared in slice 1 — a control key drew unrecognized_keys on the same safeParse call shape while none of these was refused by name, so "the spec declares it" is a verdict here, not a vacuous read. ⛔ objectui#8172's limit trap does not apply to any of them.

Out of scope: object-kanban.quickAdd — ruled a premature carve-out on objectui#8201 (Q1 = A), citing objectui#8285 as its owner. Its entry is rewritten, not deleted, and the ceiling drops accordingly. Whether that rides in this PR or its own is the dev's call; say which.

⚠️ The three-part obligation each declaration owes

Since objectui#8212 landed, declaring an array/object-armed key owes:

  1. the inputs entry;
  2. deletion of its UNPUBLISHED_EXEMPTIONS entry in the same change (the stale check reddens otherwise);
  3. a MEMBER_PINS entry — ⛔ never a member-pin exemption. MEMBER_PIN_EXEMPTION_CEILING stays 62; an assertion pins four keys by name so a fifth cannot ride that headroom.

⚠️ And both halves of the shrink-only backlog ceiling move (toBeLessThanOrEqual and toBe, same it()). Moving only toBe banks headroom the ratchet exists to refuse — objectui#8223 hit exactly that.

⚠️ Measure each sink; do NOT assume the pin's shape

Three worked precedents, all on main:

  • packages/plugin-calendar/src/__tests__/ObjectCalendar.filterIsNotAConfigSlot-7711.test.tsx
  • packages/plugin-kanban/src/__tests__/ObjectKanban.filterMembersReachTheWire-8176.test.tsx
  • packages/plugin-calendar/src/__tests__/ObjectCalendar.sortMembersReachTheWire-8171.test.tsx

The two filter pins assert the authored value reaches the wire BY IDENTITY (toBe). sort does not. ⚠️ A sharper version of the same trap cost a near-miss on objectui#8269: a resolver answering which field and one answering which column the rows carry (alias ?? field) coincide only when no alias is written. Be explicit about which question each pin asserts.

⭐ Note carried from slice 1: the spec rows for grouping and conditionalFormatting are z.unknown() — exactly like filter and sort. So, as the two landed MEMBER_PINS entries already say, the spec side cannot supply the member contract and the wire (or the read site) is the whole of it.

Related

objectui#8201 (parent, slice 1 = PR #8309) · objectui#8212 (the gate that created the obligation) · objectui#8186 · objectui#8223 · objectui#8285 (quickAdd) · objectui#8308 (the cardTitle/titleField || vs ?? divergence slice 1 surfaced — not this card's, but it touches the same registration).

Activity

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

Metadata

Metadata

Assignees

Labels

bugSomething isn't workingdomain:uiobjectui ui stream: fix lands on the published library or apps — objectui execution seatfindingpluginpm:dispatchedpriority:p2

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions