Skip to content

Stabilize sidebar settling animations - #4280

Merged
juliusmarminge merged 1 commit into
mainfrom
t3code/fix-janky-animation
Jul 22, 2026
Merged

Stabilize sidebar settling animations#4280
juliusmarminge merged 1 commit into
mainfrom
t3code/fix-janky-animation

Conversation

@juliusmarminge

@juliusmarminge juliusmarminge commented Jul 22, 2026

Copy link
Copy Markdown
Member

Summary

  • Stabilize sidebar settling animations by simplifying thread and session lifecycle transitions.
  • Remove pending-start state handling that could cause janky animation updates.
  • Simplify provider health checks and graceful OpenCode inventory failure behavior.
  • Remove obsolete tests and supporting code for deprecated startup-state flows.

Testing

  • Not run (no test results provided).

Note

Low Risk
Sidebar-only list rendering and keys; no settlement API or routing changes.

Overview
Improves Sidebar v2 behavior when a thread moves from an active card into the settled slim tail so auto-animate no longer looks like one row sliding through translucent neighbors.

Row React keys now include the variant (card vs slim), so settling unmounts the card and mounts the slim row at the settled position instead of morphing a single list item. The Settled label/divider is rendered as its own keyed <li> at the active→settled boundary (via flatMap), not inside the first settled row via showSettledGap.

Reviewed by Cursor Bugbot for commit 46494ca. Bugbot is set up for automated code reviews on this repo. Configure here.

Note

Stabilize sidebar settled-section divider as a standalone list item

  • Moves the 'Settled' section divider out of SidebarV2Row and into the parent list as its own <li> element, inserted immediately before the first settled row.
  • Switches the list render from map to flatMap in SidebarV2.tsx to support injecting the divider element inline.
  • Row keys now include the variant suffix (:card or :slim), forcing a remount when a thread transitions between card and slim variants, which stabilizes transition animations.

Macroscope summarized 46494ca.

- Key card and slim rows by variant to prevent cross-row FLIP artifacts
- Render the Settled divider as a stable standalone list item
@coderabbitai

coderabbitai Bot commented Jul 22, 2026

Copy link
Copy Markdown

Important

Review skipped

Auto reviews are disabled on this repository. Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration

Configuration used: Repository UI

Review profile: CHILL

Plan: Pro

Run ID: 1cf0dbb0-2e03-4078-b521-3e454378f903

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch t3code/fix-janky-animation

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

@github-actions github-actions Bot added size:M 30-99 changed lines (additions + deletions). vouch:trusted PR author is trusted by repo permissions or the VOUCHED list. labels Jul 22, 2026
@macroscopeapp

macroscopeapp Bot commented Jul 22, 2026

Copy link
Copy Markdown
Contributor

Approvability

Verdict: Approved

This PR restructures how the 'Settled' divider is rendered in the sidebar to improve animation stability when threads settle. The visual output is unchanged - only the DOM structure and React keys are modified to prevent animation artifacts. Low-risk UI fix with no business logic changes.

You can customize Macroscope's approvability policy. Learn more.

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

Labels

size:M 30-99 changed lines (additions + deletions). vouch:trusted PR author is trusted by repo permissions or the VOUCHED list.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant