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:
- 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.
- The registries. ADR-0087 conversion plus the generated baselines, forms, docs and pin tests a removal needs — see the
spec-property-retirement playbook.
- 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
Filed by the
domain:uiexecution seat while implementing #4869 (sessionsession_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.defaultSortas its own card, not folded into this one." Option A has landed (branchclaude/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.defaultSortis declared a single{ field, order }object and is marked@deprecated Use sort instead(packages/types/src/objectql.ts). Option A made the key work onObjectView's non-grid read path by lowering it to the canonicalSortConfig[]arity before the sharedconvertSortToQueryParamssink — mirroring whatObjectGridalready 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, andObjectView's non-grid fetch — which is exactly the shape ADR-0049 asks to collapse.The measurement that motivates removal
Re-measured on
origin/main@1d9100eebwhile implementing #4869:table.defaultSorthas zero authored occurrences.examples/**— noneapps/**— none authored; the only hits are the registry/spec-parity ledger inapps/console/src/__tests__/registry-inputs-spec-parity.test.tse2e/**— nonecontent/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.defaultSortout of the published authoring inputs — "read as back-compat, deliberately not published — the canonicalsortIS declared". The key is therefore live-for-reading but not-for-writing.What this card has to settle
ObjectGridstill 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.spec-property-retirementplaybook.packages/plugin-view/src/__tests__/ObjectView.canonicalTableKeys.test.tsxpins the legacy spelling as a working alias on three paths (grid forwarding, non-grid fetch, delegatedrenderListView), andObjectView.sortSink.test.tsxpins 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 aboutObjectViewProps.views[].sort, whosedirection/orderspelling 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