Recorded while re-deriving the #9313 false-positive budget (PR #10234). Not claimed.
What is measured
A synthetic console column-sort PUT for every displayed column of every shipped list surface (180 PUTs across the four authoring lineages: examples/app-crm, examples/app-showcase, examples/app-todo, packages/qa/downstream-contract) yields 3 refusals, all sort-field-unsortable, all on formula columns shipped in grid columns:
crm_opportunity.expected_revenue — displayed in examples/app-crm opportunity views (views[2].list and views[2].listViews.all);showcase_project.budget_remaining — displayed in examples/app-showcase project view (views[1].list).
The stored shipped corpus itself is clean — no shipped body declares a sort on a formula field (0 refusals / 0 advisories over all 50 shipped view-door bodies) — so #9313's rollback clause is not triggered. The 3 refusals only arise when a user clicks those column headers.
Why it is a defect today, independent of #9313
Clicking such a header already misbehaves, silently: the engine never refuses the persisted personalization, and a sort on a virtual formula field returns 'asc' and 'desc' in byte-identical order — unordered rows under a success (validate-sortable-fields.ts's own measured message; #6994 / #7095 are the engine-side measurements). The grid offers an ordering the platform cannot honor.
After #9313's widening lands (PR #10234), the same click becomes loud: the console's personalization PUT is refused 422 sort-field-unsortable. Loud beats silent-wrong, but the header should arguably never offer the click.
The open shape question
Where does the fix belong?
- objectui: the grid marks formula columns non-sortable (no sort affordance on the header). Needs the column's field type, which the served object metadata already carries.
- framework: serve an explicit per-column sortability signal with the view/object metadata, so the grid does not re-derive "virtual ⇒ unsortable" from field type —
declared = enforced, one signal both sides read.
Repro harness: the lane-C section of the measurement script referenced in PR #10234's FP-budget section.
Refs
#9313 (the widening that makes the click loud), PR #10234, #9257 / #6994 / #7095 (the SORT axis measurements), #5074 (the console sort[].id decoration shape).
Generated by Claude Code
Recorded while re-deriving the #9313 false-positive budget (PR #10234). Not claimed.
What is measured
A synthetic console column-sort PUT for every displayed column of every shipped list surface (180 PUTs across the four authoring lineages:
examples/app-crm,examples/app-showcase,examples/app-todo,packages/qa/downstream-contract) yields 3 refusals, allsort-field-unsortable, all on formula columns shipped in gridcolumns:crm_opportunity.expected_revenue— displayed inexamples/app-crmopportunity views (views[2].listandviews[2].listViews.all);showcase_project.budget_remaining— displayed inexamples/app-showcaseproject view (views[1].list).The stored shipped corpus itself is clean — no shipped body declares a sort on a formula field (0 refusals / 0 advisories over all 50 shipped view-door bodies) — so #9313's rollback clause is not triggered. The 3 refusals only arise when a user clicks those column headers.
Why it is a defect today, independent of #9313
Clicking such a header already misbehaves, silently: the engine never refuses the persisted personalization, and a sort on a virtual
formulafield returns'asc'and'desc'in byte-identical order — unordered rows under a success (validate-sortable-fields.ts's own measured message; #6994 / #7095 are the engine-side measurements). The grid offers an ordering the platform cannot honor.After #9313's widening lands (PR #10234), the same click becomes loud: the console's personalization PUT is refused 422
sort-field-unsortable. Loud beats silent-wrong, but the header should arguably never offer the click.The open shape question
Where does the fix belong?
declared = enforced, one signal both sides read.Repro harness: the lane-C section of the measurement script referenced in PR #10234's FP-budget section.
Refs
#9313 (the widening that makes the click loud), PR #10234, #9257 / #6994 / #7095 (the SORT axis measurements), #5074 (the console
sort[].iddecoration shape).Generated by Claude Code