Skip to content

fix(Notch): bleed headOnly tab connecting edge 1px to kill the fractional-DPI seam#317

Closed
I-am-nothing wants to merge 1 commit into
mainfrom
fix/notch-headonly-seam-bleed
Closed

fix(Notch): bleed headOnly tab connecting edge 1px to kill the fractional-DPI seam#317
I-am-nothing wants to merge 1 commit into
mainfrom
fix/notch-headonly-seam-bleed

Conversation

@I-am-nothing

Copy link
Copy Markdown
Contributor

Problem

A full-width 1px line at the junction where a headOnly Notch tab meets the surface below it — e.g. the agent sidebar's active tab over its message body. Visible on Windows / fractional display scaling, invisible on retina. Reported on web-landing; affects every platform app that uses the agent sidebar / a bottom-notch tab over a panel.

Root cause

The tab (a Notch SVG fill) and the body are two separate fills of the same --color-on-background, abutting edge-to-edge at the tab's flat connecting edge (build x=0). When that shared boundary lands on a fractional device-pixel row (sub-pixel transform / non-integer DPR), both fills paint <100% coverage on that physical row and the darker layer beneath shows through as a 1px seam.

Notably it is not a stroke (the active tab is stroke:"none", strokeWidth:0) and not the viewBox pad — it's a pure fill-abutment antialiasing seam.

Fix

Extend the tab fill 1px past its flat connecting edge (build x=0 → -1) so the two surfaces overlap instead of abutting, and set overflow="visible" on the headOnly svg so the bleed isn't clipped.

  • Corner-safe: only the build-x=0 edge moves; the radiused tab corners (build x=w, the tab top) are byte-for-byte unchanged.
  • bleed = 0 reproduces the original path exactly (default; non-headOnly is unaffected).

Validation

  • Static repro at a fractional offset (reproduces the seam class on any DPR): buggy junction = full-width dark line (30 dark px); fixed = 0 dark px.
  • pnpm typecheck clean; Notch tests pass (9) including a new regression test asserting overflow="visible" and the M -1, connecting edge.

Patch bump 0.5.13 → 0.5.14 (release label per the kit's versioning rule). Consumers (web-landing + platform apps) pick it up on a dep bump.

🤖 Generated with Claude Code

…actional-DPI seam

A headOnly Notch tab sits flush on the surface below it (e.g. the agent sidebar's
active tab over its message body). Both are filled with the same
--color-on-background but are SEPARATE fills meeting edge-to-edge at the tab's flat
connecting edge. When that shared boundary lands on a fractional device-pixel row —
sub-pixel transforms, or non-integer DPR such as Windows display scaling — each fill
paints <100% coverage on that physical row and the darker layer beneath shows
through as a crisp 1px line. Invisible on integer-DPR / retina, where the edges snap
and abut cleanly.

Extend the tab fill 1px past the flat connecting edge (build x=0 -> -1) so the two
surfaces OVERLAP instead of abutting, and render the headOnly svg with
overflow:visible so the bleed is not clipped. Only the build-x=0 edge moves — the
radiused tab corners (the tab top) are byte-for-byte unchanged, and bleed=0
reproduces the original path. Fixes the seam for every consumer of the agent
sidebar / notch tab.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@I-am-nothing I-am-nothing added the release Trigger a version bump on merge label Jun 23, 2026
@github-actions

Copy link
Copy Markdown
Contributor

Storybook Preview: https://mirrorstack-ai.github.io/web-ui-kit/pr/317/

github-actions Bot added a commit that referenced this pull request Jun 23, 2026
@I-am-nothing I-am-nothing deleted the fix/notch-headonly-seam-bleed branch June 23, 2026 22:40
@github-project-automation github-project-automation Bot moved this from Backlog to Done in MirrorStack Platform Jun 23, 2026
github-actions Bot added a commit that referenced this pull request Jun 23, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

release Trigger a version bump on merge

Projects

Status: Done

Development

Successfully merging this pull request may close these issues.

1 participant