fix(web): chat text no longer shows through a 1px gap under composer banners - #8551
fix(web): chat text no longer shows through a 1px gap under composer banners#8551vitalyiegorov wants to merge 1 commit into
Conversation
|
No actionable comments were generated in the recent review. 🎉 ℹ️ Recent review info⚙️ Run configurationConfiguration used: Path: .coderabbit.yaml Review profile: CHILL Plan: Team Run ID: 📥 CommitsReviewing files that changed from the base of the PR and between 6abdf37 and 410f549bedfdfbe52f08b54f21fbea1f175b427d. 📒 Files selected for processing (1)
Included review availability: Your plan provides up to 10 included reviews per hour; 7 remain after this review. 📝 WalkthroughWalkthroughThe attached composer surface mask now ends one pixel before the seam. A comment documents the Chromium device-pixel bleed that caused the backdrop-filter row to disappear. ChangesComposer seam rendering
Estimated code review effort: 1 (Trivial) | ~2 minutes Merge Risk: ⚪ Minimal · up to The attached composer banner mask now covers the device-pixel seam with the composer, preventing background chat text from appearing through the join. No current merge-blocking risk remains. Suggested reviewers: 🚥 Pre-merge checks | ✅ 5✅ Passed checks (5 passed)
✨ Finishing Touches🧪 Generate unit tests (beta)
Comment |
ApprovabilityVerdict: Not approved Macroscope's review found this PR not approvable — This is a small, localized CSS visual fix for a one-pixel Chromium seam in attached composer banners. An unresolved finding identifies a plausible visible mismatch under configurable glass opacity and banner tint states, so the rendering behavior should receive human verification. No code changes detected at You can add or adjust custom eligibility rules. Learn more. |
There was a problem hiding this comment.
One finding on the new attachment-seal strip: its fill does not follow the same surface composition as the drawer it seals, so the sealed row can read as a band rather than a continuation of the drawer. Geometry, the shoulder-tab exclusion, and the --chat-composer-drawer-inset inheritance (via [data-chat-composer-form="true"]) all check out.
Posted via Macroscope — UI Consistency
69cbd4c to
cb2663d
Compare
Dismissing prior approval to re-evaluate cb2663d
There was a problem hiding this comment.
One finding on the attachment seal: the repainted strip does not reproduce the glass composition of the surfaces it covers, so it becomes visible as an opaque band under non-default glass opacity and on tinted banner variants.
Posted via Macroscope — UI Consistency
cb2663d to
36fe1b9
Compare
There was a problem hiding this comment.
Cursor Bugbot has reviewed your changes using high effort and found 1 potential issue.
❌ Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, enable autofix in the Cursor dashboard.
Reviewed by Cursor Bugbot for commit 36fe1b92229d214b56d0624f479409c7e2f677c6. Configure here.
36fe1b9 to
b6a13d1
Compare
|
On the open visual-consistency question — configurable glass opacity and the alert tint variants across the overlap. The bleed does not introduce a new surface. It extends the drawer's own masked surface one CSS px further down, into a strip the composer's surface already covers, so the two overlap there instead of leaving a row painted by neither. That means the only thing that can differ is a double composite of two semi-transparent surfaces over one CSS px. Measured every state that can vary across the overlap — glass opacity 100 / 80 (default) / 40 %, light and dark, and the default / info / warning / error banner tints:
Rows above the seam are bit-identical in every combination. Only the two device rows at the seam change, and there they go from showing chat text through the gap to the surface colour. The residual at 40 % is the expected double composite, and it lands strictly closer to the intended surface colour than the leak it replaces. Worth stating plainly: this gives back 1 px of the 17 px the overlap lost in #8083. That is the cost of the fix, and I did not find a way to seal the seam without it — a border, an inset shadow, and a token-matched strip all still leaked, and an outset shadow sealed it but broke surface parity far worse (178–222 / 255). |
2497405 to
7a8c97e
Compare
|
Closing — no longer reproducible on recent nightlies. If the seam leak resurfaces, the root-cause analysis and per-DPR measurements in this thread should spare the next person the diagnosis. |
7a8c97e to
85cc716
Compare
99f5cf3 to
b3333fd
Compare
b3333fd to
c39eede
Compare
Bugbot is paused — on-demand spend limit reachedBugbot uses usage-based billing for this team and has hit its on-demand spend limit. A team admin can raise the spend limit in the Cursor dashboard, or wait for the next billing cycle to continue. |
d168c4d to
c184c4e
Compare
Bugbot is paused — on-demand spend limit reachedBugbot uses usage-based billing for this team and has hit its on-demand spend limit. A team admin can raise the spend limit in the Cursor dashboard, or wait for the next billing cycle to continue. |
c184c4e to
410f549
Compare
42f87cd to
b67b203
Compare
At the join between an attached banner and the composer, a row one device pixel tall was painted by neither surface, so the chat behind it showed through crisp and unblurred. The drawer's mask cut-off now bleeds one pixel past the seam, so the drawer paints that row itself. Built with Claude Fable 5 in Claude Code. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
b67b203 to
4bcb1f0
Compare
|
Closing as part of the open-PR backlog sweep (wave 2). Reason: Author said closing; seam gone after later composer-banner rework. Reopen if this is still wanted and you’re willing to rebase onto current |
|
Reopening, with apologies for the stale signal: the Aug 31 "closing" comment was mine, and it was wrong. On Sep 3 I re-measured on |
|
GitHub refuses to reopen this one (422 on reopen), so the same branch continues as #10635. |


Closes #8546.
What Changed
On 125% and 150% displays, a crisp line of chat text shows through a one-pixel gap between any attached composer banner ("Monitoring", offline, "This thread is snoozed", "Resume with less context") and the composer. It looks like a rendering glitch every time the timeline scrolls under the banner.
One line in
apps/web/src/components/chat/ComposerBanner.tsx: the banner's glass mask now ends one pixel below the seam instead of exactly on it, so the banner paints the row the composer never reaches. The composer's own glass sits over that pixel, so the overlap is invisible.Why
Chromium drops the last device-pixel row of a
backdrop-filtersurface when its mask cut-off lands between device pixels, and the composer surface starts exactly at that cut-off, so nothing paints the row. A border or shadow on the composer cannot reach it; only the banner's own mask can. A fixed1px(not scaled with the1removerlap) because this repairs a device-pixel rounding artefact, not a layout distance.UI Changes
Dark theme, DPR 1.25, collapsed resting composer with the snoozed notice attached, chat text scrolled under the join. Before, then after:
Seam at 4×, before and after:
No motion, so no video.
Verification
mainvs this commit: crisp-text leaks at DPR 1.25 / 1.5 / 2 go from 24 / 21 / 0 to 0 / 0 / 0. Rows above the seam are byte-identical before and after.+ 10pxvalue on the same element.Measurement history and alternatives tried
Per-device-row luminance at the cut-off (Rec. 709), collapsed composer:
Alternatives, 224 configurations (7 DPRs × 8 sub-pixel phases × ancestor transform × light/dark):
mainborder-toporbox-shadow: inset 0 1px 0on the composerbackdrop-filterOriginal report (macOS desktop app, "Resume with less context" banner):
Expanded composer with the offline banner, before and after:
History: #8733 removed the masked overlap and #8734 restored it into
ComposerBanner.tsx, which is where the fix now lives.Checklist
Built with Claude Fable 5 in Claude Code.
Note
Fix 1px gap showing chat text under composer banner in Chromium
Adjusts the surface pseudo-element mask gradient in ComposerBanner.tsx so the opaque cutoff sits one pixel before the attachment overlap. This covers a Chromium
backdrop-filterseam that let chat text bleed through.Macroscope summarized 4bcb1f0.