Skip to content
This repository was archived by the owner on Nov 4, 2026. It is now read-only.
This repository was archived by the owner on Nov 4, 2026. It is now read-only.

Finding: a record:highlights chip clips multi-element cell renderers with NO ellipsis (the residue of #5066) #4054

Closed as not planned

Description

@os-zhuang

Migrated from objectstack-ai/objectstack#6950 under the file-at-destination ruling (objectstack-ai/objectstack#7167, maintainer 2026-08-10). Originally filed 2026-08-09T06:13:43Z. The full prior thread — including triage rulings and hold/restart conditions — remains on the source issue and MUST be read before acting on this card.


What this is

Observation-class finding split out while fixing objectstack-ai/objectstack#5066 (objectui PR for the percent renderer). Filed unassigned, no pm:queue — nothing here is known to be hit by a user today, and the one instance that WAS hit is fixed by objectstack-ai/objectstack#5066.

The mechanism objectstack-ai/objectstack#5066 fixed only one instance of

HeaderHighlight (objectui packages/plugin-detail/src/HeaderHighlight.tsx) wraps every cell renderer's output in a single clipping span:

block min-w-0 truncate text-sm font-semibold

truncate is overflow:hidden + text-overflow:ellipsis + whitespace-nowrap. The ellipsis half only draws for text in the block's own inline formatting context. When the renderer returns a block-level flex row instead of text, an overflowing flex item is simply cut — no ellipsis, and nothing in the accessible name. objectstack-ai/objectstack#5066 measured exactly that (79px clip box, 32px text node, 25px overflow, 33% reading as 3), so the "clips silently" half of the mechanism is empirical, not inferred.

objectstack-ai/objectstack#5066 fixes the percent renderer from the renderer side: the number gets shrink priority and the decorative bar shrinks away. It deliberately did not take that issue's third suggested route (make the chip itself tolerant of renderers that are not single-line text, or measure before clipping), so the chip-side mechanism is untouched and still applies to every other multi-element renderer.

Candidates, and how far the analysis actually goes

Class-level reading of packages/fields/src/index.tsx only — no browser measurement, because the container this ran in has no Chromium binary. So treat the list as leads, not verdicts:

  • GeolocationCellRenderer — an inline-flex row: a 14px MapPin plus text like 31.2304, 121.4737 (~110px). In a chip squeezed toward min-w-[7rem] (~72px of content) the tail goes. Because the text sits inside the atomic inline-flex box rather than the chip's own inline context, no partial ellipsis is expected.
  • ColorSwatchCellRenderer — same shape, 14px swatch plus a 7-char hex. Marginal (~64px), probably fits; listed for completeness.
  • The percent renderer's own floor after Console: percent display renderer's fixed-width progress bar clips the value in a record-highlights chip (33% renders as 3) objectstack#5066: below roughly 40px of content the bar has collapsed to nothing and the number starts clipping like any other single-line cell. That floor is intrinsic to a self-contained renderer fix — the chip's width is a function of how many chips the record has, so the strip's @container cannot see it.

Renderers whose text carries its own truncate / min-w-0 (lookup, user, file, select-dot — the objectui#3466 family) are NOT affected: the ellipsis draws inside the label.

If someone picks this up

Two shapes, both objectui-only:

  1. Chip-side: stop putting a bare truncate around arbitrary renderer output — e.g. keep the clip but let the renderer opt into its own overflow handling, so a multi-element row is responsible for the ellipsis it can actually draw.
  2. Renderer-side, per renderer: give the value text min-w-0 truncate so it ellipsizes in place (the feat(storage): surface sys_file id on upload-complete — ADR-0104 D3 wave 2 (PR-1) objectstack#3466 convention), which is the cheap local version.

Worth deciding once at the chip, rather than re-litigating per renderer as each one turns up in a highlights strip.

Verification note for whoever takes it: a DOM-only probe reports this surface healthy — the DOM always carries the full value. It needs getBoundingClientRect() plus a screenshot, the way objectstack-ai/objectstack#5066 was measured.

Activity

  1. os-zhuang commented on Aug 10, 2026

    @os-zhuang
    ContributorAuthor

    Findings-triage: held (finding stays) — grade carried over onto this card from the source thread so it is readable where the label lives.

    The disposition recorded on objectstack#6950 (objectui shard PM, 2026-08-09 09:51Z) stands unchanged: the worst instance (percent renderer) is fixed via #3927; the remaining candidates (Geolocation / ColorSwatch chips, the ~40px floor) are class-level reading with no browser measurement. Restart condition: a measured, user-visible clipped instance (needs getBoundingClientRect() + screenshot, the way objectstack#5066 was measured — a DOM-only probe reports this surface healthy).

    本评论来自分诊座位 Routine(#5474 试点),不构成认领。


    Generated by Claude Code

  2. claude commented on Aug 10, 2026

    @claude
    Contributor

    Findings round — held (finding kept), premise re-verified.

    • Re-checked @ objectui origin/main e638531: the single clipping wrapper is live at packages/plugin-detail/src/HeaderHighlight.tsx:217 (block min-w-0 truncate text-sm font-semibold), so the class-level mechanism stands.
    • Held on the standing restart condition from the source thread (objectstack#6950): the one measured instance (percent renderer) is fixed via fix(fields): percent/progress 单元格让数值优先于装饰条,窄 chip 不再裁掉数值 (objectstack#5066) #3927; the remaining candidates (Geolocation / ColorSwatch chips) are class-level reading with no browser measurement. Restart on a measured, user-visible clipped instance.

    本评论来自分诊座位 Routine(#5474 试点),不构成认领。


    Generated by Claude Code

  3. os-zhuang commented on Aug 11, 2026

    @os-zhuang
    ContributorAuthor

    Findings round — held (finding kept), premise re-verified.

    Re-checked @ objectui origin/main b42558a: the single clipping wrapper is live at packages/plugin-detail/src/HeaderHighlight.tsx:217 (block min-w-0 truncate text-sm font-semibold), so the class-level mechanism stands. Held on the standing restart condition from the source thread (objectstack#6950): the one measured instance (percent renderer) is fixed; the remaining exposure is a future multi-element cell renderer landing in a highlights chip, at which point this graduates from cosmetic-latent to measured.

    本评论来自分诊座位 Routine(#5474 试点),不构成认领。


    Generated by Claude Code

  4. os-zhuang commented on Aug 11, 2026

    @os-zhuang
    ContributorAuthor

    Findings triage (re-verify @ origin/main f812de6): HOLD — the single clipping wrapper is live at packages/plugin-detail/src/HeaderHighlight.tsx:229 (block min-w-0 truncate text-sm font-semibold; drifted from :217, content unchanged). Standing restart condition unchanged: a measured, user-visible clipped instance (browser measurement, not DOM-only). finding stands.

    本评论来自分诊座位 Routine(#5474 试点),不构成认领。


    Generated by Claude Code

  5. claude commented on Aug 11, 2026

    @claude
    Contributor

    Findings cadence re-check @ origin/main 90e792e: HOLD (finding stays). The highlights strip mechanism in packages/app-shell/src/views/RecordDetailView.tsx (~:2072) is unchanged this window; no ellipsis/clamp handling has been added for multi-element cell renderers. Cosmetic-class, still real.

    本评论来自分诊座位 Routine(#5474 试点),不构成认领。


    Generated by Claude Code

  6. added theissue type on Aug 17, 2026
  7. os-zhuang commented on Aug 17, 2026

    @os-zhuang
    ContributorAuthor

    Findings centralized round, batch 2 (triage seat, 2026-08-17): state transition finding → pm:on-hold per the 2026-08-13 status-semantics ruling; type Bug (real clipping mechanism, one instance measured and fixed via #3927; remaining candidates unmeasured). Standing grade unchanged and absorbed: needs a browser measurement (getBoundingClientRect() + screenshot — a DOM-only probe reports this surface healthy), and the chip-vs-renderer ownership call is worth deciding once at the chip.

    Restart-when: a measured, user-visible clipped instance is reported, or a dispatched card's file surface includes packages/plugin-detail/src/HeaderHighlight.tsx. Trigger file: packages/plugin-detail/src/HeaderHighlight.tsx.


    Generated by Claude Code

  8. added
    domain:uiobjectui ui stream: fix lands on the published library or apps — objectui execution seat
    on Aug 23, 2026
  9. os-zhuang commented on Aug 23, 2026

    @os-zhuang
    ContributorAuthor

    Triage: domain:ui (lane only — pm:on-hold untouched). Landing: packages/plugin-detail — the record:highlights chip clipping multi-element cell renderers, with packages/fields supplying them.

    Routed via the maintainer direct-dispatch channel, this session, verbatim: 「然后 批 4–5」. PM session session_0124Qg8rLvpXnQDwCmpKUmaJ. objectui three-stream split (maintainer 2026-08-21); not a Routine triage fire — the triage seat may re-grade.


    Generated by Claude Code

  10. objectstack-fleet commented on Sep 24, 2026

    @objectstack-fleet
    Contributor

    关闭 not_planned —— 维护者同意:纯显示问题,唯一实测到的实例早已修好

    分诊席(session_01Tw7jnJinGHvoGSi8aFkhPJ,objectstack 座位贴 #6015),2026-09-24T11:05Z。objectui 清理第七批(#8587 的挂起卡一次性清点):本席读完了卡面和评论(7 条,全部读到),并在本地 main(62597c5)上重新测量,把建议报给维护者。维护者答:「objectui 第⑦批 同意」。

    本卡说的是什么

    record:highlights 的标签把任意单元格渲染器的输出包在一个 truncate 容器里。如果渲染器输出的是多元素的 flex 行,溢出部分会被直接截掉,而且不显示省略号。

    本席实测(本地 main 62597c5)

    为什么关

    纯显示问题,6 周里没有出现第二个实测实例。

    什么时候重开

    实测到一个被截断的标签时重开。⚠️ 只看 DOM 的检查会误报"正常",必须用 getBoundingClientRect() 加截图来测(和 objectstack#5066 的测法相同)。届时建议在标签这一层统一决定处理方式,不要每个渲染器单独修。

    标签:摘 pm:on-hold;以 not_planned 关闭。


    Generated by Claude Code

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    domain:uiobjectui ui stream: fix lands on the published library or apps — objectui execution seat

    Type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions