Skip to content

revert: charmbracelet group bump #636 (lipgloss + ultraviolet) — lingering selection output - #669

Merged
zimeg merged 3 commits into
mainfrom
zimeg-fix-lipgloss-lingering-selection
Sep 9, 2026
Merged

revert: charmbracelet group bump #636 (lipgloss + ultraviolet) — lingering selection output#669
zimeg merged 3 commits into
mainfrom
zimeg-fix-lipgloss-lingering-selection

Conversation

@zimeg

@zimeg zimeg commented Sep 9, 2026

Copy link
Copy Markdown
Member

Changelog

Fix interactive selection prompts (e.g. the slack create category picker) leaving stale/lingering rendered lines on screen after a selection is made.

Summary

Reverts the charmbracelet group bump from #636 across both deps it changed. #636 was titled as a charm.land/lipgloss/v2 v2.0.5 → v2.0.6 bump, but its go.mod diff also carried github.com/charmbracelet/ultraviolet f5a850f9006e29f9. The lingering-selection regression is in ultraviolet's terminal renderer, not lipgloss:

  • slack create → select a category leaves residual lines on screen after the pick.
  • The teardown/erase behavior is owned by ultraviolet (huh → bubbletea → ultraviolet's renderer), which was substantially rewritten between f5a850f9 and 006e29f9 (new line-drift/repaint handling and changed inline erase-height logic). The wide selector glyph exercises exactly that path.
  • lipgloss v2.0.6 requires the new ultraviolet via MVS, so the two are coupled — pinning lipgloss alone left this repo resolving ultraviolet to 006e29f9, and the regressed renderer was never actually reverted. Both are pinned back together: lipgloss → v2.0.5, ultraviolet → f5a850f9.

An earlier revision of this PR pinned only lipgloss; that did not fix the symptom (verified on a real terminal — selections still lingered), which is what surfaced ultraviolet as the true cause.

Testing

  • go build ./... passes with lipgloss v2.0.5 + ultraviolet f5a850f9.
  • slack createAutomation App category selection verified by hand on a real terminal: prompt tears down cleanly, no lingering lines. The prior config (lipgloss v2.0.5, ultraviolet still 006e29f9) reproduced the lingering; pinning ultraviolet back to f5a850f9 resolves it.
  • The lingering artifact only renders through the interactive inline renderer on a real TTY (accessible-mode / model-stepping tests bypass it), so it is verified by hand rather than in headless CI.

Notes

  • The dependabot ignore rule fences both charm.land/lipgloss/v2 (>= 2.0.6) and github.com/charmbracelet/ultraviolet (>= 006e29f9) so the next charmbracelet group bump can't silently re-raise either half and undo the revert.
  • This is an interim pin — a follow-up issue upstream will track the proper ultraviolet fix (the renderer's erase-sizing on lines with wide glyphs), so we can un-pin both deps together once it ships.

Requirements

…ection output

Interactive selection prompts (e.g. `slack create` category picker) leave
stale rendered lines on screen after a choice is made or the prompt is
torn down. A manual git-bisect over the recent charmbracelet bumps pins the
regression to lipgloss v2.0.5 -> v2.0.6 (introduced by #636).

The only functional change in lipgloss v2.0.6 is that `Canvas.Render()` now
trims trailing whitespace from its output (`uv.TrimSpace(c.scr.Render())`).
bubbletea's inline renderer sizes its erase-on-quit from the cells it last
painted -- including trailing-space padding -- so a trimmed final frame no
longer covers the originally-drawn cells, leaving the residual lines behind.

Pinning back to v2.0.5 restores the correct teardown. bubbletea (2.0.9),
huh (2.0.3), and x/ansi (0.11.8) were each independently ruled out during
the bisect; lipgloss is the sole variable. This is an interim pin -- an
upstream issue will track the proper fix so we can un-pin.

Co-Authored-By: Claude <svc-devxp-claude@slack-corp.com>
@zimeg
zimeg requested a review from a team as a code owner September 9, 2026 19:44
@codecov

codecov Bot commented Sep 9, 2026

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 78.19%. Comparing base (9b4235c) to head (80fed66).

Additional details and impacted files
@@           Coverage Diff           @@
##             main     #669   +/-   ##
=======================================
  Coverage   78.19%   78.19%           
=======================================
  Files         239      239           
  Lines       18149    18149           
=======================================
  Hits        14192    14192           
  Misses       3957     3957           

☔ View full report in Codecov by Harness.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.

Add a dependabot ignore rule for charm.land/lipgloss/v2 >= 2.0.6 so the
charmbracelet group update won't undo the go.mod pin from this PR. Lift
the rule when un-pinning go.mod once the upstream fix ships.

Co-Authored-By: Claude <svc-devxp-claude@slack-corp.com>
@zimeg zimeg added bug M-T: confirmed bug report. Issues are confirmed when the reproduction steps are documented changelog Use on updates to be included in the release notes semver:patch Use on pull requests to describe the release version increment build M-T: Changes to compilation and CI processes labels Sep 9, 2026
@zimeg zimeg self-assigned this Sep 9, 2026
@zimeg zimeg added this to the Next Release milestone Sep 9, 2026
…sion

The lipgloss v2.0.5 pin alone did not fix the lingering selection lines:
verified on a real TTY, `slack create` -> Automation App still left stale
rendered lines behind with lipgloss pinned to v2.0.5.

Root cause: the charmbracelet group bump #636 was titled as a lipgloss
v2.0.5 -> v2.0.6 bump, but its go.mod diff also carried
github.com/charmbracelet/ultraviolet f5a850f9 -> 006e29f9. The erase/teardown
behavior lives in ultraviolet's terminal renderer (rewritten in that window:
new lineHasDrift/repaintLine, changed inline erase-height), which the wide
selector glyph triggers -- not in lipgloss. The earlier pin reverted the wrong
half of #636, and this repo's own go.mod line kept ultraviolet at 006e29f9
even with lipgloss at v2.0.5, so the regressed renderer was never actually
reverted until now.

lipgloss v2.0.6 requires the new ultraviolet via MVS, so the two are pinned
back together: lipgloss to v2.0.5 and ultraviolet to the f5a850f9
pseudo-version. This is the config confirmed clean on a real terminal. The
dependabot ignore rule now fences both deps; lift both together once the
upstream ultraviolet fix ships.

Co-Authored-By: Claude <svc-devxp-claude@slack-corp.com>
@zimeg zimeg changed the title revert: bump charm.land/lipgloss/v2 from 2.0.5 to 2.0.6 (#636) — lingering selection output revert: charmbracelet group bump #636 (lipgloss + ultraviolet) — lingering selection output Sep 9, 2026
@zimeg

zimeg commented Sep 9, 2026

Copy link
Copy Markdown
Member Author

@mwbrooks @srtaalej Super appreciate the fast reviews! More testing finds that pinning the ultraviolet dependencies required from lipgloss keeps this change stable 💄 ✨

Let's merge this now but search for upstream fix to remove our @dependabot changes here since I don't believe we can unit test this with confidence at this immediate time.

@zimeg
zimeg merged commit eb6139d into main Sep 9, 2026
14 checks passed
@zimeg
zimeg deleted the zimeg-fix-lipgloss-lingering-selection branch September 9, 2026 22:32
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

bug M-T: confirmed bug report. Issues are confirmed when the reproduction steps are documented build M-T: Changes to compilation and CI processes changelog Use on updates to be included in the release notes semver:patch Use on pull requests to describe the release version increment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants