Found while implementing #4294 (re-wording list.sortRelationalHint across the ten locale packs). Recorded, not claimed — same wrong advice, different surface, and the card's scope note says to file rather than expand.
The line
packages/plugin-list/README.md:229-230, in the section "Sorting (and why relational columns are not offered)":
So the sort picker withholds relational fields and says so. To sort by a related record's name, denormalize it onto this object with a formula field and sort that column like any other text column.
A formula field is the one type the server refuses to order by: UNMATERIALIZED_SORT_TYPES = new Set(['formula']) in objectstack packages/metadata-protocol/src/protocol.ts:1593, a hard 400 INVALID_SORT since objectstack#6994. This is the same contradiction #4294 records for the UI hint, one surface over — and here it is doubly odd, because the sentence already uses the right verb ("denormalize it onto this object") and then names the one field type that cannot carry the result.
#4243 also makes the paragraph internally inconsistent: the sort picker now withholds formula fields, so "sort that column like any other text column" describes a column the picker does not offer.
Why it is separate from #4294
#4294 is the ten locale packs plus the component's provider-less fallback copy of that one string — a bounded string swap, gated by check:i18n-drift. This is developer-facing prose with its own explanatory paragraph: fixing it means rewriting the remedy sentence and probably the "like any other text column" clause after it, and deciding whether the paragraph should also name the refusal (a 400) rather than only the workaround. No gate connects the two files, which is why the README kept the retired advice when the hint's own PR moved.
Suggested fix
Re-word to the vocabulary the refusal doors and (as of #4294) the sort panel now share: a stored, denormalised field, written when the source changes — explicitly not a formula field, which is virtual, has no column behind it, and is refused. Source wording: objectstack packages/metadata-protocol/src/protocol.ts:5046-5049.
Docs-only; no runtime effect and nothing a product user hits — a reader of this README is the one misled.
Generated by Claude Code
Found while implementing #4294 (re-wording
list.sortRelationalHintacross the ten locale packs). Recorded, not claimed — same wrong advice, different surface, and the card's scope note says to file rather than expand.The line
packages/plugin-list/README.md:229-230, in the section "Sorting (and why relational columns are not offered)":A formula field is the one type the server refuses to order by:
UNMATERIALIZED_SORT_TYPES = new Set(['formula'])in objectstackpackages/metadata-protocol/src/protocol.ts:1593, a hard400 INVALID_SORTsince objectstack#6994. This is the same contradiction #4294 records for the UI hint, one surface over — and here it is doubly odd, because the sentence already uses the right verb ("denormalize it onto this object") and then names the one field type that cannot carry the result.#4243 also makes the paragraph internally inconsistent: the sort picker now withholds
formulafields, so "sort that column like any other text column" describes a column the picker does not offer.Why it is separate from #4294
#4294 is the ten locale packs plus the component's provider-less fallback copy of that one string — a bounded string swap, gated by
check:i18n-drift. This is developer-facing prose with its own explanatory paragraph: fixing it means rewriting the remedy sentence and probably the "like any other text column" clause after it, and deciding whether the paragraph should also name the refusal (a 400) rather than only the workaround. No gate connects the two files, which is why the README kept the retired advice when the hint's own PR moved.Suggested fix
Re-word to the vocabulary the refusal doors and (as of #4294) the sort panel now share: a stored, denormalised field, written when the source changes — explicitly not a formula field, which is virtual, has no column behind it, and is refused. Source wording: objectstack
packages/metadata-protocol/src/protocol.ts:5046-5049.Docs-only; no runtime effect and nothing a product user hits — a reader of this README is the one misled.
Generated by Claude Code