Skip to content

finding(plugin-grid,plugin-view): #8221 retires the string sort clause at the shared sink, but ObjectGrid lowers sort itself — so a grid, AND object-view in its default grid mode, still honour the retired spelling silently #8764

Closed as duplicate

Description

@os-bill

Filed by the domain:spec @ objectui seat (session session_012W3vMLTFY9SPr2LyxhSeYi) from the ceiling-tier contract review of PR #8758 (objectui#8221), verdict recorded at objectui#8221 comment 5595976918. ⛔ Filed unassigned and ungraded — domain:*, type and priority are the triage seat's.

⭐ The implementer escalated this rather than taking it, which was the right call: the ruling it was executing does not reach here, and closing it rewrites pinned wire-shape tests. This card is where it gets decided.

The reading

Director ruling batch #77 (2026-09-07), option B, on objectui#8221: the legacy string sort clause is retired. One spelling, the array. PR #8758 executes that at the shared sink — convertSortToQueryParams in packages/core/src/utils/sort-query.ts drops its string arm and refuses a runtime string with a diagnostic.

ObjectGrid does not use that sink for this key. Measured on the PR head:

  • packages/plugin-grid/src/ObjectGrid.tsx:1465 — schemaSort = schema.sort
  • :1853-1854 — forwards a string to $orderby verbatim; for the array arm it emits a comma-joined "field order" string
  • :71 — parseSchemaSort also parses the string form

⇒ after #8221 lands, a bare object-grid still honours the retired spelling at runtime, silently, with no diagnostic.

⛔ And the scope is WIDER than PR #8758's own §6 states

The PR body says "a bare object-grid still honours the retired spelling at runtime while the same key through object-view is refused." The second half is false, measured through the real ObjectGrid by the ceiling reviewer:

path $orderby produced retirement diagnostics
object-view, default view type (grid) "name desc" 0
object-view, explicit grid "name desc" 0
object-view + array arm "name desc" (comma-joined) 0
object-view, calendar none 1
object-view, kanban none 1

ObjectView.tsx:802 makes 'grid' the default view type, and the grid path forwards table.sort verbatim (already pinned by ObjectView.canonicalTableKeys.test.tsx). ⇒ the refusal applies only to non-grid view types. ListView.parseSortConfig (the list-view block) likewise still parses the string.

⇒ The scope of this card is the whole grid delegation path: object-grid, object-view in grid mode, and parseSchemaSort — ⛔ not object-grid alone.

Why it is not a defect of PR #8758

The ruling names the helper, its signature and docblock, and the docs. It does not name ObjectGrid's private lowering. The two paths already differed before that PR (verified: no sort/orderby lines in the merge-base→main diff for ObjectGrid.tsx). ⇒ this is pre-existing, surfaced by the retirement rather than caused by it.

The two routes — ⛔ not chosen here

  1. Refuse in place — reject the string in ObjectGrid's own lowering and in parseSchemaSort, reusing the same reportRetiredSortSpelling reporter, and keep the array-arm $orderby wire shape exactly as it is. The reviewer's read is that this is the small, coherent completion.
  2. Route through the sink — delete the private lowering and delegate to convertSortToQueryParams. ⚠️ This changes the $orderby wire shape for every grid (the sink returns an object; ObjectGrid emits a comma-joined string), which is a behaviour change well beyond a retirement.

⚠️ Either route reddens at least four existing pins that assert the current honouring — serverSorting:141-144, elementDataSource:75, gridDefaultFiltersLowering:275/286, guideCrudAppRenders:342 — plus ObjectView.canonicalTableKeys. That is expected when retiring a spelling those pins encode, ⛔ but it is not a one-line change and whoever takes it must rewrite them to the corrected behaviour rather than delete them.

Dedup

Searched objectui including closed issues; 14 substantive results, so a live instrument rather than a silent zero. Nearest neighbours reviewed and all different defects: objectui#5270 (closed — parseSchemaSort drops a single-object defaultSort, an arity bug), objectui#6235 (closed — mergedSort arity split), objectui#6011 (closed — toSortItems tolerates the retired direction spelling). No open or closed card claims the grid path's survival of the string sort clause.

Refs: objectui#8221 (the ruling and the retirement) · PR #8758 · the ceiling verdict at objectui#8221 5595976918

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions