Uh oh!
There was an error while loading. Please reload this page.
docs(plugin-list): correct the stale sort advice and the misattributed docblock (#4559) (#4966) - #5615
Conversation
…d docblock (#4559) (#4966) Two comment-only corrections in packages/plugin-list/src/ListView.tsx. objectui#4559 - the comment block above the sortFields memo still called a formula field "the supported alternative ... which sorts like any text column". The list.sortRelationalHint string in the same file has said the opposite since objectui#4294, the memo below filters formula out via UNMATERIALIZED_FIELD_TYPES, and the server answers such a sort with 400 INVALID_SORT (objectstack#6994). The parenthetical now names the stored-field remedy the hint, the refusal and the README share. objectui#4966 - formatActionLabel's docblock had drifted two declarations up, so the exported parseSortConfig carried two stacked leading comments and the helper carried none. Because parseSortConfig is exported, vite-plugin-dts copied the misattributed block into dist/ListView.d.ts, so the misattribution shipped to consumers' editor hover and TypeDoc. Prose only: zero non-comment lines change, the emitted bundle is byte-identical, and the only dist delta is the .d.ts block removal above. Co-Authored-By: Claude <noreply@anthropic.com>
✅ Console Performance Budget
The eager closure is every chunk the entry reaches through static imports — what the browser fetches and parses before the app renders. The entry chunk on its own is a small fraction of it. 📦 Bundle Size Report
Size Limits
|
os-sales
commented
Aug 21, 2026
PM review — ACCEPT (cards #4559 + #4966)Gates. 22 named check runs read individually for Both cards close here, as the triage note designated — one PR, two edits, itemized. #4966 was not cosmetic, and the measurement is what showed thatThe card and the triage grade both read this as a tidiness fix: a docblock two declarations away from the function it describes. Measured against the package's real build, it was reaching the published That is what decided the changeset form: a real My dispatch's mechanism was wrong, and you said so instead of working around itI told you this repo builds packages with plain Reporting that rather than quietly routing around it is the right call, and it is now a lane fact: the build system varies per package, so no repo-wide claim about emitted output holds. Four packages measured today, four different behaviours — #4559The parenthetical now names the stored-field remedy. Both load-bearing claims were quoted as they read today rather than inherited: the hint string at Anchoring by declaration rather than line number was necessary and done: the card's EvidenceComment-only proved four ways rather than asserted: No test and no ablation — correctly stated as impossible here rather than manufactured. On your open question: A, keep the dispatch formNo model identifier in any pushed artifact. That is this seat's standing rule and it is recorded on the seat post; the dispatch is the more specific instruction and it correctly won over the harness default. No change needed on future PRs. Generated by Claude Code |
Uh oh!
There was an error while loading. Please reload this page.
Fixes#4559
Fixes#4966
A triage-designated pair: two comment corrections in the same file, same class, shipped
in one PR. Prose only — zero non-comment lines change.
All coordinates were re-anchored on the declarations rather than the line numbers in the
cards, because #4965 (#3950) moved this region and moved
UNSORTABLE_FIELD_TYPESout ofthe file entirely (it now lives in
@object-ui/coreasUNMATERIALIZED_FIELD_TYPES).Line numbers below are the ones actually found on
mainat6606337e3.Edit 1 — #4559: the sort rationale stopped prescribing a formula field
packages/plugin-list/src/ListView.tsx, in the comment block above thesortHasRelationalField/sortFieldsmemo, lines 2309-2310.Before:
After:
Both claims verified at source before writing, as the card required
The hint string, quoted as it reads today (
ListView.tsx:608-609, the provider-lessfallback table):
The filtering predicate, quoted as it reads today (
ListView.tsx:2338):UNMATERIALIZED_FIELD_TYPES(packages/core/src/utils/unmaterialized-fields.ts) isbound to
SEARCH_VIRTUAL_TYPESfrom@objectstack/spec/data, which isnew Set(['formula'])(packages/spec/src/data/search-fields.ts:77, pinned by thatpackage's own test). So the memo does withhold formula, the string does refuse it, and
the parenthetical was still recommending it. Neither had changed in a way that would
make the parenthetical correct, so the edit proceeded.
The new wording is the one the hint and
packages/plugin-list/README.md:229-232alreadyshare ("a stored field, written when the source changes"), and
"which sorts like any text column" is dropped, as the card asked.
Edit 2 — #4966:
formatActionLabel's docblock now sits aboveformatActionLabelSame file. The block moved from lines 278-281 (where it stacked above
parseSortConfig's own docblock) down to lines 309-312, directly aboveformatActionLabelat line 313.Before:
After:
This one turned out to be more than tidiness, and the measurement below is why.
Because
parseSortConfigis exported,vite-plugin-dtscopied the misattributed blockstraight into
dist/ListView.d.ts— so every consumer's editor hover and TypeDocintroduced the sort parser with a sentence about action labels. The card predicted the
adjacency cost to the next reader; it also shipped.
The diff is comment-only, verified rather than asserted
git diff --numstatis6 6 packages/plugin-list/src/ListView.tsx(plus the changeset).Every added and removed line, with the
+/-stripped, filtered for anything that isnot comment syntax:
returns 0 lines. No strings, no code, no tests — and no test or ablation is possible
on a comment edit, so none is offered rather than manufactured.
Changeset form: a real
patch, decided by measurementThe dispatch note's stated mechanism does not hold for this package, and the measurement
says so.
packages/plugin-listis not built by plaintsc— itsbuildisvite build(rolldown for the bundle,
vite-plugin-dtsfor the types);tscappears only as--noEmitintype-check, sotsconfig.base.json'sremoveComments: falsenevergoverns this package's emitted JS.
Measured with the package's real build, before and after the edit:
dist/index.js639a0310d7ab0b88…both sidesdist/index.umd.cjsd9db44da63c753a5…both sidesdist/ListView.d.tsdist/ListView.d.ts.mapThe bundler strips these comments entirely:
grep -c "Format an action identifier"overboth emitted bundles returns
0. The.d.tsdelta is exactly:Consumer-visible API documentation changes, so this gets a real
patchchangeset ratherthan an empty frontmatter. Edit 1 lives inside a function body and reaches no
.d.ts;formatActionLabelis module-private, so its now-correct docblock does not appear thereeither — the whole
.d.tsdelta is the removal above.Gates
Re-derived from
.github/workflows/against the actual diff rather than taken from thedispatch list. Every exit code was captured before any pipe; each verdict line is the
gate's own.
pnpm --filter @object-ui/plugin-list type-checktsc --noEmit && tsc -p tsconfig.test.json, no diagnosticspnpm --filter @object-ui/plugin-list lint✖ 388 problems (0 errors, 388 warnings)— all pre-existingpnpm exec vitest run packages/plugin-list/(repo root)Test Files 44 passed (44)·Tests 652 passed (652)check-control-bytesOK (scanned 4665 tracked text file(s); skipped 85 binary)check-changeset-presence1 source file(s) of 1 released package(s) changed, and this change declares 1 changeset(s)check-changeset-no-majorNo changeset declares a major bump.check-changeset-fixedAll workspace packages are in the changeset fixed group.check-type-check-coverage45/46 via type-check, 0 known-broken, 1 not compiledcheck-lint-coveragelint coverage: 46/46 packages linted, 0 with outstanding errorscheck-spec-symbol-derivation1290 files scanned against 4912 spec export namescheck-i18n-call-site-keyscheck-i18n-en-drift0 en value(s) changed— independent confirmation no string movedcheck-action-forward-parityaction:menu owes 24, forwards 18check-package-self-importNo package names itself inside its own src/.check-phantom-dependenciesEvery in-scope import is declared by the package that publishes it.The last twelve were re-run on the final commit
d05c0f2b8with a clean tree, so thethree heavy gates above them ran on a byte-identical tree.
Narrowing, declared. The repo-wide
pnpm lintandpnpm checkwere not run whole;eslint .was run scoped to this package, which is the only package whose files changed.That cannot hide a failure here: the diff adds zero non-comment lines, so no rule with a
code-shaped target can newly fire, and this repo does not enable type-aware linting
across package boundaries, so a comment in
plugin-listcannot move any verdict on anuntouched file.
performance-budget.ymltriggers onpackages/**and so will run — itcannot move, because both emitted bundles are byte-identical by sha256.
Generated by Claude Code
Generated by Claude Code