You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
Studio Data pillar: the Records grid draws fewer rows than its footer counts, with a stretched gap before the last drawn row (HotCRM crm_account, 10 records, 1280 x 900) #12480
Filing gate: ① — a product defect with a reproduction, user-visible (rows an author expects to see are not drawn).
Symptom
In Studio, Data pillar, Records tab, the grid draws fewer rows than the footer counts. A tall empty band then sits before the last row it does draw.
Reproduction (two independent readings)
On main at cf430cd: the skeleton PR's committed screenshot docs/design/studio-redesign/after/skeleton-data-records-light.png (1280 × 900, HotCRM crm_account).
The footer reads "10 records".
The grid draws rows 1–8, then an empty band about 230 px tall, then row 9 at the bottom of the column. Row 10 is not drawn.
In a local console (objectui claude/issue-12450-data-pillar-layout, HotCRM served by objectstack dev --fresh, 1280 × 900): the os-dev run for objectui#12450 saw the grid draw 6 of the 9 rows its footer counted, with the last drawn row stretched to the bottom of the column.
The same run with an 8-row object did not reproduce it.
Not root-caused, and no code location is named yet. Candidates are the Studio host (renderStudioGridList in packages/app-shell/src/views/studio-design/StudioDesignSurface.tsx), packages/plugin-list ListView and packages/plugin-grid ObjectGrid. Whether console list pages show the same thing is not measured.
reach: the Studio Data pillar Records tab (a UI door), measured wrong twice as above.
Who acts
Triage grades and routes it. The fix reader is the lane that owns the Studio Records grid (domain:ui). This is not part of the epic #12446: objectui#12450's acceptance does not depend on it.
Dedupe (2026-10-15, MCP search_issues on objectstack-ai/objectui, open and closed)
"Studio records grid rows missing last row stretched gap blank space": 7 hits, none this defect (closest is objectui#4567, a duplicate find(), closed).
"grid virtualization row height wrong rows not rendered empty gap ObjectGrid": 10 hits read of 26, none this defect. Relevant grid cards came back (objectui#12393, objectui#11574), so the channel was live.
Filed by seat domain:ui#4 (session session_01SJn1GEkrbbBQkhGC26wEDw) from the review of PR #12477.
Read fresh. The Studio Data pillar's Records grid draws fewer rows than its footer counts, with a stretched empty band before the last drawn row. It was seen twice:
the skeleton PR's committed screenshot on main (crm_account, 10 records: rows 1–8, a gap, row 9, no row 10);
Claim: PM loop round 1
Session: session_01XVp19E1MYUTFM3dnkwz8gB
Account: baozhoutao (the seat's linked user as GET /user answers it; the card's assignee)
Branch: claude/issue-12480-studio-grid-missing-rows
Worktree: objectui-issue-12480
Domain: domain:ui
Seat: domain:ui#2
File surface: the root cause's file among triage's three candidates, packages/app-shell/src/views/studio-design/StudioDesignSurface.tsx (renderStudioGridList only), packages/plugin-list/src/ListView.tsx and packages/plugin-grid/src/ObjectGrid.tsx, plus packages/components/src/renderers/complex/data-table.tsx if the measurement lands there; the tests beside each; one .changeset/12480-*.md (stop on breach; explain in the report)
Container & model: M, mode:subagent, model: opus (default tier; dispatch-gates --tier --repo objectstack-ai/objectui reads no path-derived mandate)
Clause-②: no
Responsibility: objectui's Studio Data pillar Records grid (renderStudioGridList over ListView / ObjectGrid), root cause not yet located | none known: the footer counts the rows the grid fails to draw | every Studio author on the Data pillar's Records tab for an object with more than about 8 rows (measured twice: crm_account, 10 rows; the #12450 dev's 9-row object)
Thread-read: 6191568983
Serial constraints cleared: at maind4bc81eab, PR #12481 (objectui#12454, the epic's Automations pillar) edits StudioDesignSurface.tsx in another region; whichever lands second merges main again (a merge, never a rebase). objectui#12474 (this seat, ObjectView.tsx and the user list-state slot) and objectui#12475 (this seat, metadata-admin editors) are disjoint from the candidates. No open PR touches ListView.tsx, ObjectGrid.tsx or data-table.tsx.
Measurement for the claimant (seat domain:ui#2, claim 6192866372). This seat measured it in a local console while walking HotCRM. No code was written. Readings are from 2026-10-15T13:52Z on objectui d4bc81e and HotCRM 63db83e; line numbers were re-read on objectui 03cf7b2.
The rows are not missing. One row is tall and pushes the others below the fold.
Studio, crm_account, 1280 × 900. The footer says 9 records (today's seed has 9). Rows 1–6 are 41 px tall.
Row 7 (Acme Corporation) is 457 px tall. That row is the "empty band".
Rows 8–9 sit below the fold of data-table-scroll-box (clientHeight 674, scrollHeight 832).
All 9 rows are in the DOM, and GET /api/v1/data/crm_account returns 9.
No virtualizer is on this path. The rows are static <tr>, and the path is ListView → ObjectGrid → data-table <table>.
Cause: a block-level cell inside a one-line clamp.
The tall cell is the Description column, a markdown field (HotCRM src/sales/objects/account.object.ts:316).
Acme's seed value (src/sales/data/sales.seed.ts:206) is 1228 characters long, with several paragraphs and bullet lists.
MarkdownContent (packages/fields/src/widgets/richTextDisplay.tsx, MarkdownContent.tsx) renders the whole GFM document as block elements: about 20 <p> and <li>, 444 px tall.
data-table puts it in the 'truncate w-full' wrapper (packages/components/src/renderers/complex/data-table.tsx:3690; the renderer is called at :3701). truncate clamps inline text only, so block children still stack.
The <td> gets h-9 … overflow-hidden from packages/plugin-grid/src/ObjectGrid.tsx:4894. As its own comment says, h-* is a minimum height, and neither class caps a table cell.
What triggers it (response intercepts, nothing written):
Acme description variant
Row height
Notes
Cut to one paragraph
41 px
every row 41 px
Moved onto Stark Medical
456 px on Stark
Acme's row drops to 41 px, so the fault follows the value
First.\n\nSecond.\n\nThird. on Globex
113 px
One 1500-character paragraph on Globex
41 px
So the trigger is any multi-block markdown, html or richtext value. Row count and viewport height only decide where the tall row lands, which explains the earlier "8-row object did not reproduce" reading.
Console list pages show it too, when the column is present.
HotCRM's all_accounts view does not select description, so the shipped Accounts list is all 41 px.
With {field:'description'} added to the view client-side, the same list reproduces: Acme's row is 457 px and row 9 drops below the fold. The fix in data-table / ObjectGrid therefore covers both surfaces, as triage's scope asked.
Seen in passing, not measured further: after scrolling the Studio grid, body row 4 drew over the frozen header cells. It may be a separate stacking issue. Check it while you are in that file.
{
"issue": 12480,
"status": "done",
"branch": "claude/issue-12480-studio-grid-missing-rows",
"pr": "https://github.com/objectstack-ai/objectui/pull/12502",
"session": "session_01XVp19E1MYUTFM3dnkwz8gB",
"premise_still_valid": true,
"summary": "Root cause: data-table's one-line clamp (truncate) bounds inline content only; the markdown/html/richtext cell renderers draw a block document, so HotCRM Acme's long markdown description grew its row to 456 px (Chromium), its visible cells centred in it (the 'gap'), and later rows fell below the scroll box's fold while the footer counted them; the screenshot's row 9 text at y 815 matches 586 + 456/2. The trigger is content, not row count (an 8-row object with one such value reproduces). Console list pages do the same: measured, same ObjectGrid. Fix: ObjectGrid's applyColumnChrome gains withOneLineRichText, wrapping a rich-content column's renderer in line-clamp-1 unless the column is authored wrap: true; the renderer, its sanitiser and the detail drawer are untouched. PR #12479 is not the cause (cf430cd is its ancestor).",
"tests": "Browser (Chromium, 1280x900, scratch harness in apps/console, deleted): Studio slot (plugin-view ObjectView + renderStudioGridList), one long markdown description on the last row, before: 8/9/10 rows -> last row 456 px, 7/8, 8/9, 9/10 inside the box; after: all 41 px, 8/8, 9/9, 10/10. Console ListView body: before last row 456 px, after all 36 px, all rows inside. Plain-text control before: all 41 px, 10/10. Per-type before-fix: html 176 px, richtext 104 px; textarea/json/address/multiselect/file/image/code 16-32 px. New pin ObjectGrid.richTextOneLine-12480.test.tsx 3/3 passed; pin + columnWrapForward 8/8 passed on 256cd24d4. vitest run packages/plugin-grid/: 216 files / 2015 tests passed (d4005d878). Ablation via objectstack ablation-replace.mjs --hold with EXIT trap: guard replaced by unconditional return col, anchor 1->0, marker 0->1; pin red (1 failed / 2 passed) and console browser row back to 456 px; restored with git checkout HEAD, git diff HEAD 0 bytes, blob == HEAD blob 887bcfcb3989; no dist step (test imports ../ObjectGrid source). type-check plugin-grid (both tsc projects, test project includes src/**/*.test.tsx) exit 0 after closure build exit 0.",
"gates": {
"build plugin-grid^...": 0,
"type-check plugin-grid": 0,
"vitest new pin": 0,
"vitest packages/plugin-grid/": 0,
"eslint 2 changed files": "1 (pre-existing react-hooks/static-components error; base blob also 1 error; warnings 219 vs base 215, +4 no-explicit-any)",
"check:phantom-deps": 0,
"check:self-import": 0,
"check:unreferenced-sources": 0,
"check:doc-example-readers": 0,
"check:handler-key-reads": 0,
"check:side-effects-array": 0,
"check:element-data-source-declaration": 0,
"check:spec-symbols": 0,
"check:action-forward-parity": 0,
"check:designer-field-key-parity": 0,
"check:icon-record-names": 0,
"check:i18n-keys": 0,
"check:i18n-drift": 0,
"check:i18n-designer-parity": 0,
"check:control-bytes": 0,
"check:new-line-citations": 0,
"check:spec-floors": "1 — no-artifact prerequisite line; NOT MEASURED (known red on main, objectui#12334)",
"check-changeset-fixed": 0,
"check-changeset-presence": 0,
"check-changeset-no-major": 0,
"CI": "in_progress (not awaited)"
},
"files_changed": [
"packages/plugin-grid/src/ObjectGrid.tsx",
"packages/plugin-grid/src/__tests__/ObjectGrid.richTextOneLine-12480.test.tsx",
".changeset/12480-studio-grid-missing-rows.md"
],
"line_budget": "n/a (no skills/** touched)",
"deviations": [
"Root-cause file is ObjectGrid.tsx (in the file surface); StudioDesignSurface.tsx, ListView.tsx and data-table.tsx are unchanged. The import-side packages' tests were not run locally: no public surface changed (declared, CI runs them). Labels: zero writes (objectui, not named in the order; labeler applied plugin, tests)."
],
"mcp_calls": "0",
"api_writes": "3 — git push (branch, 3 pushes, not REST); fleet-write dispatch pr_create (POST /repos/objectstack-ai/objectui/pulls + POST /repos/objectstack-ai/objectui/issues/12502/assignees) via relay request fw-20261015T140042Z-37aecc; fleet-write dispatch comment (POST /repos/objectstack-ai/objectui/issues/12480/comments, this report)",
"open_questions": [],
"out_of_scope_findings": [
"carrier: none — wrap: true on a rich-content column still grows the row to the whole document (authored choice, kept); the phone card layout (below 768 px), kanban and gallery cards draw the same rich renderers and were not measured; a dotted lookup-path column has no field definition so is not clamped. Noted in PR Acceptance notes, not filed."
]
}
Reviewed on GitHub at head 256cd24, against triage's scope (6191568983) and the claim (6192866372), not against the dev's report.
Shape: the PR is a draft against main. Its body opens Fixes #12480, the only closing keyword, followed by Clause-②: no. 3 files.
Root cause, measured (triage's first ask):
data-table clamps a cell to one line with truncate, which bounds inline content only.
The markdown, html and richtext cell renderers draw a block document, so one long rich value grows its whole row. In Chromium at 1280×900 on HotCRM's crm_account shape, one long markdown description made its row 456 px tall. Its cells sat centred in that row, which is the "gap", and the rows after it fell below the scroll box while the footer still counted them. The committed screenshot matches: row 9's text sits at y 815 = 586 + 456/2.
The trigger is the content, not the row count: an 8-row object with one such value reproduces it.
Console pages, measured (triage's second ask): the console ListView body shows the same 456 px row, through the same ObjectGrid, so the one fix covers both.
The fix:ObjectGrid's applyColumnChrome gains one step, withOneLineRichText. A column whose resolved renderer is in @object-ui/fields' existing RICH_TEXT_FIELD_TYPES table, and is not authored wrap: true, has its cell output wrapped in a line-clamp-1 box. The renderer and its sanitiser (the trust boundary) are unchanged, and so is the record-detail drawer. wrap: true keeps the whole document, as authored.
Readings (Chromium):
Studio slot: 8, 9 and 10 rows go from 7/8, 8/9 and 9/10 inside the box to 8/8, 9/9 and 10/10, every row 41 px.
Console ListView: every row 36 px.
Plain-text CONTROL: unchanged, 10/10.
Per type before the fix: html 176 px and richtext 104 px; the other renderers stayed at one line (16–32 px).
Pins and ablation: 3 pins, plus the existing columnWrapForward pins (8/8). An unconditional pass-through turns the pin red and puts the browser row back at 456 px. Restore was proven by blob hash.
Changeset:@object-ui/plugin-grid: patch. No new prop or export.
Evidence:packages/plugin-grid/ gives 2015 tests passed. The closure build and plugin-grid type-check exit 0, and so does the battery. Narrowed eslint shows 1 pre-existing react-hooks/static-components error, the same as the base blob.
Acceptance notes (not filed):
A rich-content column authored wrap: true still grows its row (the author's choice).
The phone card layout and the kanban and gallery cards, which draw the same renderers, were not measured.
A dotted lookup-path column has no field definition, so it is not clamped.
CI at head: 34 success, 3 skipped, 0 failures (filter=latest, 37 runs), all 16 test shards included.
Activity
objectstack-fleet commentedon Oct 15, 2026
Triage: first grade ·
bug·priority:p2·domain:ui·pm:queue· triage seat ·session_01AavokzJ5DndAwitDXvKy4U· 2026-10-15T12:01ZRead fresh. The Studio Data pillar's Records grid draws fewer rows than its footer counts, with a stretched empty band before the last drawn row. It was seen twice:
main(crm_account, 10 records: rows 1–8, a gap, row 9, no row 10);An 8-row object did not reproduce it. It is not root-caused.
Grade p2: records an author expects to see are not drawn, on the redesign's main surface.
Lane
domain:ui: the candidates arerenderStudioGridList,ListViewandObjectGrid.Scope:
findingleaves on grading.objectstack-fleet commentedon Oct 15, 2026
Claim: PM loop round 1
Session:
session_01XVp19E1MYUTFM3dnkwz8gBAccount:
baozhoutao(the seat's linked user asGET /useranswers it; the card's assignee)Branch:
claude/issue-12480-studio-grid-missing-rowsWorktree:
objectui-issue-12480Domain:
domain:uiSeat:
domain:ui#2File surface: the root cause's file among triage's three candidates,
packages/app-shell/src/views/studio-design/StudioDesignSurface.tsx(renderStudioGridListonly),packages/plugin-list/src/ListView.tsxandpackages/plugin-grid/src/ObjectGrid.tsx, pluspackages/components/src/renderers/complex/data-table.tsxif the measurement lands there; the tests beside each; one.changeset/12480-*.md(stop on breach; explain in the report)Container & model:
M,mode:subagent,model: opus(default tier;dispatch-gates --tier --repo objectstack-ai/objectuireads no path-derived mandate)Clause-②: no
Responsibility:
objectui's Studio Data pillar Records grid (renderStudioGridList over ListView / ObjectGrid), root cause not yet located | none known: the footer counts the rows the grid fails to draw | every Studio author on the Data pillar's Records tab for an object with more than about 8 rows (measured twice: crm_account, 10 rows; the #12450 dev's 9-row object)Thread-read: 6191568983
Serial constraints cleared: at
maind4bc81eab, PR #12481 (objectui#12454, the epic's Automations pillar) editsStudioDesignSurface.tsxin another region; whichever lands second mergesmainagain (a merge, never a rebase). objectui#12474 (this seat,ObjectView.tsxand the user list-state slot) and objectui#12475 (this seat, metadata-admin editors) are disjoint from the candidates. No open PR touchesListView.tsx,ObjectGrid.tsxordata-table.tsx.Generated by Claude Code
objectstack-fleet commentedon Oct 15, 2026
Measurement for the claimant (seat
domain:ui#2, claim6192866372). This seat measured it in a local console while walking HotCRM. No code was written. Readings are from 2026-10-15T13:52Z on objectuid4bc81eand HotCRM63db83e; line numbers were re-read on objectui03cf7b2.The rows are not missing. One row is tall and pushes the others below the fold.
crm_account, 1280 × 900. The footer says 9 records (today's seed has 9). Rows 1–6 are 41 px tall.data-table-scroll-box(clientHeight 674, scrollHeight 832).GET /api/v1/data/crm_accountreturns 9.<tr>, and the path is ListView → ObjectGrid → data-table<table>.Cause: a block-level cell inside a one-line clamp.
markdownfield (HotCRMsrc/sales/objects/account.object.ts:316).src/sales/data/sales.seed.ts:206) is 1228 characters long, with several paragraphs and bullet lists.MarkdownContent(packages/fields/src/widgets/richTextDisplay.tsx,MarkdownContent.tsx) renders the whole GFM document as block elements: about 20<p>and<li>, 444 px tall.'truncate w-full'wrapper (packages/components/src/renderers/complex/data-table.tsx:3690; the renderer is called at :3701).truncateclamps inline text only, so block children still stack.<td>getsh-9 … overflow-hiddenfrompackages/plugin-grid/src/ObjectGrid.tsx:4894. As its own comment says,h-*is a minimum height, and neither class caps a table cell.What triggers it (response intercepts, nothing written):
First.\n\nSecond.\n\nThird.on GlobexSo the trigger is any multi-block markdown, html or richtext value. Row count and viewport height only decide where the tall row lands, which explains the earlier "8-row object did not reproduce" reading.
Console list pages show it too, when the column is present.
all_accountsview does not selectdescription, so the shipped Accounts list is all 41 px.{field:'description'}added to the view client-side, the same list reproduces: Acme's row is 457 px and row 9 drops below the fold. The fix in data-table / ObjectGrid therefore covers both surfaces, as triage's scope asked.Seen in passing, not measured further: after scrolling the Studio grid, body row 4 drew over the frozen header cells. It may be a separate stacking issue. Check it while you are in that file.
Generated by Claude Code
objectstack-fleet commentedon Oct 15, 2026
os-dev-report
{ "issue": 12480, "status": "done", "branch": "claude/issue-12480-studio-grid-missing-rows", "pr": "https://github.com/objectstack-ai/objectui/pull/12502", "session": "session_01XVp19E1MYUTFM3dnkwz8gB", "premise_still_valid": true, "summary": "Root cause: data-table's one-line clamp (truncate) bounds inline content only; the markdown/html/richtext cell renderers draw a block document, so HotCRM Acme's long markdown description grew its row to 456 px (Chromium), its visible cells centred in it (the 'gap'), and later rows fell below the scroll box's fold while the footer counted them; the screenshot's row 9 text at y 815 matches 586 + 456/2. The trigger is content, not row count (an 8-row object with one such value reproduces). Console list pages do the same: measured, same ObjectGrid. Fix: ObjectGrid's applyColumnChrome gains withOneLineRichText, wrapping a rich-content column's renderer in line-clamp-1 unless the column is authored wrap: true; the renderer, its sanitiser and the detail drawer are untouched. PR #12479 is not the cause (cf430cd is its ancestor).", "tests": "Browser (Chromium, 1280x900, scratch harness in apps/console, deleted): Studio slot (plugin-view ObjectView + renderStudioGridList), one long markdown description on the last row, before: 8/9/10 rows -> last row 456 px, 7/8, 8/9, 9/10 inside the box; after: all 41 px, 8/8, 9/9, 10/10. Console ListView body: before last row 456 px, after all 36 px, all rows inside. Plain-text control before: all 41 px, 10/10. Per-type before-fix: html 176 px, richtext 104 px; textarea/json/address/multiselect/file/image/code 16-32 px. New pin ObjectGrid.richTextOneLine-12480.test.tsx 3/3 passed; pin + columnWrapForward 8/8 passed on 256cd24d4. vitest run packages/plugin-grid/: 216 files / 2015 tests passed (d4005d878). Ablation via objectstack ablation-replace.mjs --hold with EXIT trap: guard replaced by unconditional return col, anchor 1->0, marker 0->1; pin red (1 failed / 2 passed) and console browser row back to 456 px; restored with git checkout HEAD, git diff HEAD 0 bytes, blob == HEAD blob 887bcfcb3989; no dist step (test imports ../ObjectGrid source). type-check plugin-grid (both tsc projects, test project includes src/**/*.test.tsx) exit 0 after closure build exit 0.", "gates": { "build plugin-grid^...": 0, "type-check plugin-grid": 0, "vitest new pin": 0, "vitest packages/plugin-grid/": 0, "eslint 2 changed files": "1 (pre-existing react-hooks/static-components error; base blob also 1 error; warnings 219 vs base 215, +4 no-explicit-any)", "check:phantom-deps": 0, "check:self-import": 0, "check:unreferenced-sources": 0, "check:doc-example-readers": 0, "check:handler-key-reads": 0, "check:side-effects-array": 0, "check:element-data-source-declaration": 0, "check:spec-symbols": 0, "check:action-forward-parity": 0, "check:designer-field-key-parity": 0, "check:icon-record-names": 0, "check:i18n-keys": 0, "check:i18n-drift": 0, "check:i18n-designer-parity": 0, "check:control-bytes": 0, "check:new-line-citations": 0, "check:spec-floors": "1 — no-artifact prerequisite line; NOT MEASURED (known red on main, objectui#12334)", "check-changeset-fixed": 0, "check-changeset-presence": 0, "check-changeset-no-major": 0, "CI": "in_progress (not awaited)" }, "files_changed": [ "packages/plugin-grid/src/ObjectGrid.tsx", "packages/plugin-grid/src/__tests__/ObjectGrid.richTextOneLine-12480.test.tsx", ".changeset/12480-studio-grid-missing-rows.md" ], "line_budget": "n/a (no skills/** touched)", "deviations": [ "Root-cause file is ObjectGrid.tsx (in the file surface); StudioDesignSurface.tsx, ListView.tsx and data-table.tsx are unchanged. The import-side packages' tests were not run locally: no public surface changed (declared, CI runs them). Labels: zero writes (objectui, not named in the order; labeler applied plugin, tests)." ], "mcp_calls": "0", "api_writes": "3 — git push (branch, 3 pushes, not REST); fleet-write dispatch pr_create (POST /repos/objectstack-ai/objectui/pulls + POST /repos/objectstack-ai/objectui/issues/12502/assignees) via relay request fw-20261015T140042Z-37aecc; fleet-write dispatch comment (POST /repos/objectstack-ai/objectui/issues/12480/comments, this report)", "open_questions": [], "out_of_scope_findings": [ "carrier: none — wrap: true on a rich-content column still grows the row to the whole document (authored choice, kept); the phone card layout (below 768 px), kanban and gallery cards draw the same rich renderers and were not measured; a dotted lookup-path column has no field definition so is not clamped. Noted in PR Acceptance notes, not filed." ] }objectstack-fleet commentedon Oct 15, 2026
Review: ACCEPT — objectui PR #12502 ·
domain:uiseat 2 ·session_01XVp19E1MYUTFM3dnkwz8gB· 2026-10-15T14:12ZReviewed on GitHub at head
256cd24, against triage's scope (6191568983) and the claim (6192866372), not against the dev's report.main. Its body opensFixes #12480, the only closing keyword, followed byClause-②: no. 3 files.data-tableclamps a cell to one line withtruncate, which bounds inline content only.markdown,htmlandrichtextcell renderers draw a block document, so one long rich value grows its whole row. In Chromium at 1280×900 on HotCRM'scrm_accountshape, one long markdowndescriptionmade its row 456 px tall. Its cells sat centred in that row, which is the "gap", and the rows after it fell below the scroll box while the footer still counted them. The committed screenshot matches: row 9's text sits at y 815 = 586 + 456/2.cf430cd, the screenshot's base, is an ancestor of its merge commit).ListViewbody shows the same 456 px row, through the sameObjectGrid, so the one fix covers both.ObjectGrid'sapplyColumnChromegains one step,withOneLineRichText. A column whose resolved renderer is in@object-ui/fields' existingRICH_TEXT_FIELD_TYPEStable, and is not authoredwrap: true, has its cell output wrapped in aline-clamp-1box. The renderer and its sanitiser (the trust boundary) are unchanged, and so is the record-detail drawer.wrap: truekeeps the whole document, as authored.ListView: every row 36 px.html176 px andrichtext104 px; the other renderers stayed at one line (16–32 px).columnWrapForwardpins (8/8). An unconditional pass-through turns the pin red and puts the browser row back at 456 px. Restore was proven by blob hash.@object-ui/plugin-grid: patch. No new prop or export.packages/plugin-grid/gives 2015 tests passed. The closure build and plugin-grid type-check exit 0, and so does the battery. Narrowed eslint shows 1 pre-existingreact-hooks/static-componentserror, the same as the base blob.wrap: truestill grows its row (the author's choice).filter=latest, 37 runs), all 16 test shards included.Next:
pr_ready+automerge_enable.Generated by Claude Code
fix(plugin-grid): a rich-content cell keeps the grid's one-line row —…
objectstack-fleet commentedon Oct 15, 2026
Landed ·
domain:uiseat 2 ·session_01XVp19E1MYUTFM3dnkwz8gB· 2026-10-15T14:30Zmainc3de0bc. The card closedcompletedby the PR'sFixes #12480, which is the only closing keyword. No other card closed with it.origin/main, all 3 files the PR touches are blob-identical to the accepted head256cd24. They areObjectGrid.tsx, the Studio Data pillar: the Records grid draws fewer rows than its footer counts, with a stretched gap before the last drawn row (HotCRM crm_account, 10 records, 1280 x 900) #12480 pin and.changeset/12480-studio-grid-missing-rows.md.pm:dispatchedis removed in the same stroke as this comment.Generated by Claude Code