Skip to content

fix(frontend): visual regressions from the package extraction - #6177

Merged
mmabrouk merged 1 commit into
release/v0.113.0from
fix/desktop-visual-regressions-113
Aug 21, 2026
Merged

mmabrouk merged 1 commit into
release/v0.113.0from
fix/desktop-visual-regressions-113

Conversation

@mmabrouk

Copy link
Copy Markdown
Member

Context

Three desktop surfaces look wrong on v0.113.0 next to the shipped v0.112.3. Mahmoud found all three during release QA. Two are real losses from the package extraction (#6065); the third turns out not to be a regression at all, and the section on it says why it is still worth changing.

1. Home rail cards are white instead of the warm surface

On Home, the three cards on the right ("Your agents", "Next triggers", "Usage") paint plain white against the warm page background, so they read as three floating boxes rather than one rail.

v0.112.3 put the tint on the rail wrapper in StripHome.tsx:

[&_.ag-panel-section]:bg-[var(--ag-surface-paper)]
dark:[&_.ag-panel-section]:bg-colorBgElevated

with the note "The rail's cards carry the warm tinted surface rather than plain white, so they read as one object against the page."

In v0.113.0 StripHome renders <HomeOverview> and no longer owns a rail div, and the rail wrapper in @agenta/home-ui never got the classes. The loss happened in 6549aac263, the merge of release/v0.112.1 into the extraction lane, not in the extraction commit itself: the tint landed on the release line after the lane forked, and the resolution kept the lane's HomeOverview rail. The cards then fell back to bg-colorBgElevated, which is #ffffff in light mode. Dark mode was always colorBgElevated, so this is light-mode only.

The token is fine. --ag-surface-paper still resolves, #fbfaf8 light and #272727 dark.

The fix puts the tint in PanelSection's rail variant, which is the single place the card's three surfaces are stated. All three had to move together, because v0.113.0 gave the card body its own background. Restoring only the two selectors v0.112.3 had would have left the body white inside a paper frame.

Doing it here rather than on HomeOverview also repairs the agent overview rail, which lost the identical override in AgentOverviewBody.tsx.

Measured on a live v0.113.0 build, all three slots of all three cards:

before:  rgb(255,255,255)
after:   rgb(251,250,248)   = #fbfaf8 = --ag-surface-paper

The main column's variant="page" sections are untouched, and dark mode still resolves to colorBgElevated.

2. Playground dividers do not match each other

The seam between the settings pane and the chat looks different from the seam between the chat and the files pane, and both differ from v0.112.3.

packages/agenta-ui/src/components/ui/split-pane.tsx is a new file from the extraction. Its docstring says the divider is "ported from .playground-splitter-agent in globals.css", but that CSS says the opposite of what shipped:

v0.112.3 CSS v0.113.0 SplitPane
bar box flex-basis: 0; width: 0, panes flush BAR_WIDTH = 9, painted with --ag-surface-gutter
hairline 2px, --ag-colorBorderSecondary 1px, colorFillQuaternary
hit target invisible 12px dragger the 9px painted box
grip pill 4x24 growing to 36 same, correct

Two things follow. colorFillQuaternary is 2 to 4 percent alpha, so a 1px hairline painted on top of an opaque band is invisible; what you actually see as "the line" is the band's edges. And because the band is opaque, each seam takes its appearance from its neighbours: in light mode the gutter #f6f5f3 is byte-identical to the app ground, so the settings seam swallows it, while the files seam sits against the white chat canvas and shows a clear grey stripe. In v0.112.3 the two matched by construction, and RightPanelSplit.tsx said so: "this divider renders EXACTLY like the config pane's, so all vertical seams match."

Worth noting that --ag-surface-gutter existed in v0.112.3 with zero consumers. The extraction started painting a token nothing had ever painted.

The fix restores the flush seam: BAR_WIDTH goes to 0, the gutter background goes away, overflow-hidden becomes overflow-visible, the hairline goes back to 2px colorBorderSecondary, and a 12px invisible overlay carries the grab target the way antd's dragger did. The hairline and grip are now gated on !barHidden, which the old zero width plus overflow-hidden used to handle for free.

All the geometry (readTotal, the ResizeObserver, the pointer math, the aria-value* bounds) already reads the live barWidth, so a zero-width bar flows through unchanged.

3. "Generate API key" button, and why this one is not a regression

In Deployment, in the "How to use API" drawer, the button reads as the wrong colour.

I could not find a regression, and I looked hard. DeploymentsDashboard/** is byte-identical to v0.112.3. In ApiKeyInput.tsx the only change is that createApiKey moved from @/oss/services/apiKeys/api to @agenta/settings; the JSX still says <Button type="primary" loading={...}> in both revisions. No ConfigProvider was lost, the antd button tokens are not in the diff, antd is 6.3.7 in both lockfiles, and no global CSS reaches it.

What actually changed is everything around it. This is one of the last antd-native type="primary" buttons sitting on a surface whose chrome is now a shadcn Sheet, so it no longer matches the migrated primary actions beside it: different shadow, radius and height ramp, antd control geometry against the control-* scale.

So the fix is the migration the rest of the app already had: LoadingButton from @agenta/ui/ui, which is the documented mapping for type="primary".

Both copies had to change. web/ee/tsconfig.json maps "@/oss/*" to ["./src/*", "../oss/src/*"], so the dynamic import in UseApiContent.tsx resolves to the EE ApiKeyInput inside the EE app. Patching only the OSS file would have changed nothing on staging.

Tests

  • @agenta/ui unit tests: 85/85 across 12 files, including SplitPaneSingleMount.render.test.tsx.
  • tsc --noEmit clean for @agenta/oss and @agenta/ee; pnpm turbo run build --filter=@agenta/ui clean.
  • pnpm lint-fix in web/: 25/25. Prettier 3.7.4 clean on all four files.
  • One @agenta/oss production build.
  • Divider behaviour checked live on a v0.113.0 build after the change: pointer drag on the new hit target moves aria-valuenow 440 to 400, and the keyboard path still works (ArrowLeft 400 to 336, ArrowRight to 368, Home to 300, End to 440).

What to QA

  • Open Home with at least one agent. The three cards on the right sit on the same warm surface as the rail instead of reading as white boxes. Switch to dark mode: they go back to the elevated grey, unchanged from today.
  • Open an agent playground. The seam between the configuration pane and the chat is a thin flush hairline with a centred grip, with no grey channel behind it. Open the files pane: that seam looks identical to the first one. Check dark mode too, where the old channel was loudest.
  • Drag both dividers, then focus one and use the arrow keys, Home and End. Resizing still works and the grip still tints on hover.
  • Deployment, "How to use API" drawer: the "Generate API Key" button matches the other primary buttons in the app. Click it and confirm a key still appears in the field. Check this in the EE build, not only OSS.
  • Regression to watch: PanelSection is shared, so glance at the agent overview rail (/apps/<id>/overview) and at Agents and Sessions. Their cards should look the same as Home's, not white.

Three surfaces the #6065 extraction changed, restored to their v0.112.3 look.

Home rail cards (PanelSection). v0.112.3's StripHome carried
`[&_.ag-panel-section]:bg-[var(--ag-surface-paper)]` on the rail wrapper, with
`dark:` restoring colorBgElevated. The merge that brought the rail under
HomeOverview dropped it, so the cards fell back to colorBgElevated — plain white
in light mode — and read as white boxes on the warm page. The tint now lives in
PanelSection's rail variant, which is the one place the frame, the header and the
body are all stated: 0.113 gave the body its own background, so restoring only the
old two selectors would have left the card body white.

Playground dividers (split-pane). The extracted SplitPane says it ports
`.playground-splitter-agent`, but that CSS sets `flex-basis: 0; width: 0` —
the panes sit FLUSH and the divider is painted on the seam. SplitPane instead gave
the bar a 9px `--ag-surface-gutter` channel and thinned the hairline from 2px
colorBorderSecondary to 1px colorFillQuaternary. The channel is why the two seams
stopped matching each other: the same band reads differently against the config
pane than against the chat canvas. Bar width goes back to 0 with a 12px invisible
hit target (antd's dragger width), and the hairline back to 2px.

Generate API key button. The markup and the tokens are unchanged since v0.112.3 —
DeploymentsDashboard is byte-identical — so this is not a lost prop. It is one of
the last antd `type="primary"` buttons on a surface whose chrome is now a shadcn
Sheet, so it mismatches the migrated primaries beside it. Moved to the package
LoadingButton, in BOTH copies: web/ee shadows this file and EE's tsconfig resolves
`@/oss/*` to the EE one first, so patching only OSS would change nothing in EE.
@dosubot dosubot Bot added the size:M This PR changes 30-99 lines, ignoring generated files. label Aug 21, 2026
@vercel

vercel Bot commented Aug 21, 2026 •

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
agenta-documentation Ready Ready Preview Aug 21, 2026 6:29pm

Request Review

@CLAassistant

Copy link
Copy Markdown

CLA assistant check
Thank you for your submission! We really appreciate it. Like many open source projects, we ask that you sign our Contributor License Agreement before we can accept your contribution.


Mahmoud Mabrouk seems not to be a GitHub user. You need a GitHub account to be able to sign the CLA. If you have already a GitHub account, please add the email address used for this commit to your account.
You have signed the CLA already but the status is still pending? Let us recheck it.

@coderabbitai

coderabbitai Bot commented Aug 21, 2026

Copy link
Copy Markdown
Contributor

Warning

Review limit reached

@mmabrouk, you've reached your PR review limit, so we couldn't start this review.

Next review available in: 19 minutes

Limit details: You’ve used all 8 included reviews currently available.

You've used all free OSS reviews for now. Wait for the free limit to reset to keep reviewing this public repository.

How can I continue?

Wait for the limit to reset, then comment @coderabbitai review or push new commits to the PR.

An organization admin can change what happens after included review limits in Billing.

How do review limits work?

CodeRabbit enforces per-developer PR review limits within each organization.

For paid Pro and Pro+ reviews, CodeRabbit uses a developer's included PR review attempts over the past 7 days to set the current hourly allowance. At typical activity levels, the full plan allowance applies. Higher sustained activity can lower the allowance until earlier attempts leave the 7-day window.

Please refer docs for additional details.

Review details
⚙️ Run configuration

Configuration used: Repository YAML (base), Organization UI (inherited)

Review profile: CHILL

Plan: Pro Plus

Run ID: 8fa95593-9c6f-45ab-92e4-ba37e671bfe9

📥 Commits

Reviewing files that changed from the base of the PR and between 87792cf and 02cda51.

📒 Files selected for processing (4)
  • web/ee/src/components/pages/app-management/components/ApiKeyInput.tsx
  • web/oss/src/components/pages/app-management/components/ApiKeyInput.tsx
  • web/packages/agenta-ui/src/components/presentational/layout/PanelSection.tsx
  • web/packages/agenta-ui/src/components/ui/split-pane.tsx

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@github-actions

github-actions Bot commented Aug 21, 2026 •

Copy link
Copy Markdown
Contributor

Railway Preview Environment

Status Destroyed (PR closed)

Updated at 2026-08-21T19:05:32.098Z

@mmabrouk
mmabrouk merged commit 7d13337 into release/v0.113.0 Aug 21, 2026
66 of 68 checks passed

This branch was successfully deployed

1 active deployment
Preview — 02cda51a Deployed Aug 21, 2026 by vercel[bot]
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

bug frontend size:M This PR changes 30-99 lines, ignoring generated files. ui

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants