Skip to content

Follow-up (the "C half" of the 2026-08-22 ruling): ADR-0049 enforce-or-remove retirement of table.defaultSort #5861

Description

@os-zhuang

Filed by the domain:ui execution seat while implementing #4869 (session session_01EuPCi56cnGyykygi3z9w4m). ⛔ Unassigned — for PM triage, not claimed.

Why this exists as its own card

The maintainer ruling of 2026-08-22 on #4869 (decision-inbox digest, verbatim 「接受所有」) accepted Option A now, plus "the follow-up card for the C half — an ADR-0049 enforce-or-remove retirement of table.defaultSort as its own card, not folded into this one." Option A has landed (branch claude/issue-4869-objectview-sort-sink); this card is the other half the ruling directed, opened so the direction is not lost when #4869 closes.

What Option A did and deliberately did not do

ObjectGridSchema.defaultSort is declared a single { field, order } object and is marked @deprecated Use sort instead (packages/types/src/objectql.ts). Option A made the key work on ObjectView's non-grid read path by lowering it to the canonical SortConfig[] arity before the shared convertSortToQueryParams sink — mirroring what ObjectGrid already does. It did not decide whether the key should continue to exist.

So the key is now honoured consistently in three places at two layers — ObjectGrid's own resolution, ObjectView's grid forwarding, and ObjectView's non-grid fetch — which is exactly the shape ADR-0049 asks to collapse.

The measurement that motivates removal

Re-measured on origin/main @ 1d9100eeb while implementing #4869: table.defaultSort has zero authored occurrences.

  • examples/** — none
  • apps/** — none authored; the only hits are the registry/spec-parity ledger in apps/console/src/__tests__/registry-inputs-spec-parity.test.ts
  • e2e/** — none
  • Documentation describes it as the deprecated half of the pair (content/docs/plugins/plugin-view.mdx, content/docs/api/schema-reference.md)

Prior context, in the same direction: #4648 (maintainer, 2026-08-16) already carved object-grid.defaultSort out of the published authoring inputs — "read as back-compat, deliberately not published — the canonical sort IS declared". The key is therefore live-for-reading but not-for-writing.

What this card has to settle

⚠️ Removal is not a one-line deletion, and the failure mode of getting it wrong is silence:

  1. Refuse loudly, do not merely stop reading. Dropping the read on one path while ObjectGrid still honours it re-opens the divergence in the mirror direction — the grid would sort and the calendar would not, with no error anywhere. Whichever route is chosen has to move every reader at once.
  2. The registries. ADR-0087 conversion plus the generated baselines, forms, docs and pin tests a removal needs — see the spec-property-retirement playbook.
  3. The pins that encode the key as working.packages/plugin-view/src/__tests__/ObjectView.canonicalTableKeys.test.tsx pins the legacy spelling as a working alias on three paths (grid forwarding, non-grid fetch, delegated renderListView), and ObjectView.sortSink.test.tsx pins the lowered value. Those are the ledger of what a removal must retire.

Scope note

This card is about table.defaultSort (ObjectGridSchema). It is not about ObjectViewProps.views[].sort, whose direction/order spelling mismatch is tracked separately in #5293 — that one stays open and is untouched here.

Related: #4869 (Option A, the ruled fix), #5102, #5270, #4648.


Generated by Claude Code

Metadata

Metadata

Assignees

Labels

domain:uiobjectui ui stream: fix lands on the published library or apps — objectui execution seatpm:blocked

Type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions