From 9321c45ed9b46cca7a8e863fd3b92194093df3fc Mon Sep 17 00:00:00 2001 From: Eden Zimbelman Date: Wed, 9 Sep 2026 12:43:03 -0700 Subject: [PATCH 1/3] fix(deps): pin charm.land/lipgloss/v2 to v2.0.5 to stop lingering selection 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 --- go.mod | 2 +- go.sum | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/go.mod b/go.mod index 252e9e2b..e09da234 100644 --- a/go.mod +++ b/go.mod @@ -5,7 +5,7 @@ go 1.27.1 require ( charm.land/bubbletea/v2 v2.0.9 charm.land/huh/v2 v2.0.3 - charm.land/lipgloss/v2 v2.0.6 + charm.land/lipgloss/v2 v2.0.5 github.com/briandowns/spinner v1.23.2 github.com/charmbracelet/x/ansi v0.11.8 github.com/cli/safeexec v1.0.1 diff --git a/go.sum b/go.sum index 4d4a0035..5f5147f8 100644 --- a/go.sum +++ b/go.sum @@ -12,8 +12,8 @@ charm.land/bubbletea/v2 v2.0.9 h1:DpJCMWKgzQK8SJv4zbKKFHAI10ymWy/evClPFk0k0f8= charm.land/bubbletea/v2 v2.0.9/go.mod h1:2SkdgoTXluXJHOUwAoRlRXF/28vklb1rFl6GcgV1/ss= charm.land/huh/v2 v2.0.3 h1:2cJsMqEPwSywGHvdlKsJyQKPtSJLVnFKyFbsYZTlLkU= charm.land/huh/v2 v2.0.3/go.mod h1:93eEveeeqn47MwiC3tf+2atZ2l7Is88rAtmZNZ8x9Wc= -charm.land/lipgloss/v2 v2.0.6 h1:EaGKeuA8FvF+v2BT5VmZd2LoYLaMZJXA5n34th8nCIQ= -charm.land/lipgloss/v2 v2.0.6/go.mod h1:ipDDJNSGa1hlwDtSfW1s2/xR8Vdhbut4PXh2zEKZd0Q= +charm.land/lipgloss/v2 v2.0.5 h1:kbNxgeeUOYv5J0YdpxFjfvf3dFvqH8Aci4zB6xqFtrY= +charm.land/lipgloss/v2 v2.0.5/go.mod h1:9oqhxt4yxIMe6q5A4kHr44DremZk7J9UNh74GlWa5nc= cloud.google.com/go v0.123.0 h1:2NAUJwPR47q+E35uaJeYoNhuNEM9kM8SjgRgdeOJUSE= cloud.google.com/go v0.123.0/go.mod h1:xBoMV08QcqUGuPW65Qfm1o9Y4zKZBpGS+7bImXLTAZU= cloud.google.com/go/auth v0.20.0 h1:kXTssoVb4azsVDoUiF8KvxAqrsQcQtB53DcSgta74CA= From 99d32ea742b10bb6c4dee419f63201b2114e1557 Mon Sep 17 00:00:00 2001 From: Eden Zimbelman Date: Wed, 9 Sep 2026 13:13:39 -0700 Subject: [PATCH 2/3] build(deps): block dependabot from re-bumping lipgloss past 2.0.5 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 --- .github/dependabot.yml | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/.github/dependabot.yml b/.github/dependabot.yml index 37c61a64..6b333063 100644 --- a/.github/dependabot.yml +++ b/.github/dependabot.yml @@ -12,6 +12,14 @@ updates: patterns: - "charm.land/*" - "github.com/charmbracelet/*" + ignore: + # lipgloss v2.0.6 trims trailing whitespace in Canvas.Render(), which + # breaks bubbletea's inline erase-on-quit and leaves stale selection + # lines on screen (see #669). Pin to v2.0.5 until an upstream fix ships; + # lift this rule when un-pinning go.mod. + - dependency-name: "charm.land/lipgloss/v2" + versions: + - ">= 2.0.6" - package-ecosystem: "github-actions" directory: "/" schedule: From 80fed66e1abc711a401d49d78eb49706c75e89e2 Mon Sep 17 00:00:00 2001 From: Eden Zimbelman Date: Wed, 9 Sep 2026 15:19:17 -0700 Subject: [PATCH 3/3] =?UTF-8?q?fix(deps):=20pin=20ultraviolet=20back=20too?= =?UTF-8?q?=20=E2=80=94=20it,=20not=20lipgloss,=20is=20the=20regression?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 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 --- .github/dependabot.yml | 16 ++++++++++++---- go.mod | 2 +- go.sum | 4 ++-- 3 files changed, 15 insertions(+), 7 deletions(-) diff --git a/.github/dependabot.yml b/.github/dependabot.yml index 6b333063..51c92a3b 100644 --- a/.github/dependabot.yml +++ b/.github/dependabot.yml @@ -13,13 +13,21 @@ updates: - "charm.land/*" - "github.com/charmbracelet/*" ignore: - # lipgloss v2.0.6 trims trailing whitespace in Canvas.Render(), which - # breaks bubbletea's inline erase-on-quit and leaves stale selection - # lines on screen (see #669). Pin to v2.0.5 until an upstream fix ships; - # lift this rule when un-pinning go.mod. + # ultraviolet's terminal renderer rewrite (the 006e29f9 pseudo-version) + # leaves stale selection lines on screen after a `slack create` pick + # (see #669). The regression rode in on the charmbracelet group bump #636, + # which was titled as a lipgloss 2.0.5 -> 2.0.6 bump but also carried + # ultraviolet f5a850f9 -> 006e29f9; lipgloss 2.0.6 in turn requires the + # new ultraviolet via MVS, so both are pinned back together (lipgloss to + # v2.0.5, ultraviolet to the f5a850f9 pseudo-version) and both are fenced + # here. Lift both rules together once the upstream ultraviolet fix ships + # and we bump go.mod forward. - dependency-name: "charm.land/lipgloss/v2" versions: - ">= 2.0.6" + - dependency-name: "github.com/charmbracelet/ultraviolet" + versions: + - ">= v0.0.0-20260811164956-006e29f97886" - package-ecosystem: "github-actions" directory: "/" schedule: diff --git a/go.mod b/go.mod index e09da234..00294af7 100644 --- a/go.mod +++ b/go.mod @@ -167,7 +167,7 @@ require ( github.com/charmbracelet/colorprofile v0.4.3 // indirect github.com/charmbracelet/fang v1.0.0 // indirect github.com/charmbracelet/lipgloss v1.1.0 // indirect - github.com/charmbracelet/ultraviolet v0.0.0-20260811164956-006e29f97886 // indirect + github.com/charmbracelet/ultraviolet v0.0.0-20260703014108-f5a850f9c2b7 // indirect github.com/charmbracelet/x/cellbuf v0.0.15 // indirect github.com/charmbracelet/x/exp/charmtone v0.0.0-20250603201427-c31516f43444 // indirect github.com/charmbracelet/x/exp/ordered v0.1.0 // indirect diff --git a/go.sum b/go.sum index 5f5147f8..f771f699 100644 --- a/go.sum +++ b/go.sum @@ -335,8 +335,8 @@ github.com/charmbracelet/keygen v0.5.4 h1:XQYgf6UEaTGgQSSmiPpIQ78WfseNQp4Pz8N/c1 github.com/charmbracelet/keygen v0.5.4/go.mod h1:t4oBRr41bvK7FaJsAaAQhhkUuHslzFXVjOBwA55CZNM= github.com/charmbracelet/lipgloss v1.1.0 h1:vYXsiLHVkK7fp74RkV7b2kq9+zDLoEU4MZoFqR/noCY= github.com/charmbracelet/lipgloss v1.1.0/go.mod h1:/6Q8FR2o+kj8rz4Dq0zQc3vYf7X+B0binUUBwA0aL30= -github.com/charmbracelet/ultraviolet v0.0.0-20260811164956-006e29f97886 h1:rdnVWKgJpTVXKuKuJyxDJ+NFJdUaUqGvyGy61OcvlbA= -github.com/charmbracelet/ultraviolet v0.0.0-20260811164956-006e29f97886/go.mod h1:nAw0d9PhFp1qdzi2xhQU5YOu5sVpDIHWlaW2Uz/bCro= +github.com/charmbracelet/ultraviolet v0.0.0-20260703014108-f5a850f9c2b7 h1:3FmWoGNWK4STvqg0O0Aeav2T7rodWJAPeF0QpH+8gFw= +github.com/charmbracelet/ultraviolet v0.0.0-20260703014108-f5a850f9c2b7/go.mod h1:f/jRa757WUmaOZrbPspXymbg/GnbF+rwe4OLsG7aXYo= github.com/charmbracelet/x/ansi v0.11.8 h1:JMFwp0CgDC2+jcOB162HH5k7I3FVbgFSMMYg7dSPBQQ= github.com/charmbracelet/x/ansi v0.11.8/go.mod h1:ZNN+3mXny/516oTQPLMPIBeSINvNJJQ8uQXDgbeJxY0= github.com/charmbracelet/x/cellbuf v0.0.15 h1:ur3pZy0o6z/R7EylET877CBxaiE1Sp1GMxoFPAIztPI=