Repository navigation
Conversation
There was a problem hiding this comment.
This looks good to merge. I ran resolve() with HERDR_ENV=1: on the base branch animations is left undefined, so animations run. With this change it is false, and an explicit animations: true still wins. Outside herdr nothing changes, because every consumer already treated a missing value as on.
Since the settings dialog reads the resolved config, /settings now shows Animations correctly ("on" by default, "off" under herdr). Before, it showed "off" while animations were running, which is what #52577 reports. The footer.view.test.tsx edit is needed: the test helper used to turn animations off only when the value was missing, and it is now always filled in.
Tests: config-v2 and mini/footer.view pass, and tsc -b is clean.
Public API: unchanged. There are no new config keys or environment variables; only the default of the existing animations key now depends on HERDR_ENV, and explicit settings behave as before.
Multiplexer panes re-composite pane output at the multiplexer's own cadence, so the TUI's animated repaint stream (tab pulse, marquee, shimmer, tween ticks) turns into continuous full-region recomposites on the multiplexer client, visible as flicker and shaking on remote or slow links (anomalyco#57462, anomalyco#57676). Resolve animations in resolve() the same way tabs.enabled is already environment-aware: default off when HERDR_ENV=1, on otherwise; an explicit animations setting always wins. The mini footer queue test pinned its expected statusline glyph via the test harness coercing unresolved animations to false; resolve() now always defines the field, so the test declares animations: false explicitly for its still-glyph assertion.
3eefadb to
e8b19b1
Compare
There was a problem hiding this comment.
The new push is a rebase onto a newer dev; the change itself is identical to what I reviewed before, so there is nothing new to raise. On the new head I re-ran config-v2 and mini/footer.view (all pass) and tsc -b (clean). I also re-checked /settings, which shows Animations as "on" by default.
Public API: unchanged. There are no new config keys or environment variables; only the default of the existing animations key now depends on HERDR_ENV.
|
Friendly nudge — happy to rebase on the latest dev or adjust anything if it helps the review. The change is small (resolve-time default only, mirroring the maintainer-requested tabs precedent from #50456) and the test suite is green on it. |



Issue for this PR
Related to #57462 (animated tabs cause high CPU/GPU use) and #57676 (lag with the session sidebar visible). Not claiming to close either — this is the multiplexer-specific slice of that work.
Type of change
What does this PR do?
tabs.enabledis already resolved environment-aware: inside herdr panes (HERDR_ENV=1) the animated tab rail stays off by default, because a multiplexer re-composites pane output at its own cadence and a continuous animated repaint stream turns into continuous full-region recomposites on the multiplexer's client — felt as flicker/shaking, especially over remote or slow links.This extends the same policy to
animations:resolve()now fillsanimations(likemouse/tabs) withinput.animations ?? (HERDR_ENV !== "1"). An explicitanimationssetting always wins, and theapp.toggle.animationscommand keeps working (it writes an explicit value). Outside herdr, behavior is unchanged (default on).How did you verify your code works?
packages/tui/test/config-v2.test.tsxmirroring the existing tabs-environment test: default on normally, default off underHERDR_ENV=1, explicittrue/falseoverride in both directions. Red on the old code, green with the change.packages/tuitest suite passes;bun run typecheckclean.animations: falsecollapses idle repaint output to zero, which removes the repaint pressure that multiplexer clients re-composite.Screenshots / recordings
Config-default change only; no visual artifact beyond fewer repaints.
Checklist
Added by the opencode bot (AI-generated).
Fixes #52577
Related: #57462, #57676