From 96356b159ced462a977aa67b7dca8e86e503f19f Mon Sep 17 00:00:00 2001 From: Maximilian Roos Date: Wed, 1 Jul 2026 21:22:29 -0700 Subject: [PATCH 1/2] Release v0.65.0 --- CHANGELOG.md | 14 ++++++++++++-- Cargo.lock | 2 +- Cargo.toml | 2 +- 3 files changed, 14 insertions(+), 4 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index c55a2daf3..a0418bba6 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,17 @@ # Changelog +## 0.65.0 + +### Improved + +- **Picker `alt-x` flashes why a worktree wasn't removed**: When `alt-x` in the `wt switch` picker keeps a row instead of removing it, the reason now flashes in the picker header for a beat, rather than only draining to stderr after you quit — so the "why" is visible while the row is still in front of you. It covers both the by-design keeps (the current worktree; an unmerged branch-only row shows `○ Kept — branch is unmerged`) and genuine removal failures (a dirty, locked, or main worktree, shown as an error). The full diagnostic still drains on exit. The `--prs` loading marker now also matches the picker's other in-flight placeholders (`↳ Loading open PRs…`). ([#3336](https://github.com/max-sixty/worktrunk/pull/3336), [#3350](https://github.com/max-sixty/worktrunk/pull/3350)) + +- **`-vv` diagnostics consolidate on `diagnostic.md`, led by the performance profile**: A `-vv` run now opens with a one-line pointer to the log directory (`○ Verbose logging to .git/wt/logs/`) and closes by naming what it captured — `○ Logs, performance profile, and diagnostics saved @ diagnostic.md` — with the raw `trace.jsonl` / `subprocess.log` companions listed beneath and the `gh gist create` bug-report hint. `diagnostic.md` now leads with the performance profile, expanded by default and promoted above the environment / worktree / config dumps; that profile reports the 20 slowest calls (was 8) and 10 same-context redundant-command offenders (was 3). The profile lives in the `diagnostic.md` bundle, and `wt config state logs profile` re-renders it live from `trace.jsonl`. ([#3329](https://github.com/max-sixty/worktrunk/pull/3329)) + +### Fixed + +- **`wt remove` preserves your subdirectory position**: Removing a worktree from a subdirectory (e.g. `apps/gateway/`) now lands you in the equivalent subdirectory of the destination worktree rather than at its root — matching how `wt switch` already behaves, and falling back to the root when that subdirectory doesn't exist there. `wt merge` lands through the same handler, so it gains the same behavior. ([#3344](https://github.com/max-sixty/worktrunk/pull/3344), closes [#3343](https://github.com/max-sixty/worktrunk/issues/3343), thanks @caillou for reporting) + ## 0.64.0 ### Improved @@ -32,8 +44,6 @@ - **Statusline width comes from `COLUMNS`, not a parent-process walk**: `wt list statusline` used to spawn up to 10 `ps` calls plus `stty` per render to recover a terminal width, because Claude Code piped the subprocess with no inherited TTY. Claude Code now sets `COLUMNS`/`LINES` to the terminal dimensions before running the script (since v2.1.153), so the width comes straight from there — less a fixed 5-column margin for Claude Code's own UI — and the `ps`/`stty` walk is gone. On an older Claude Code that doesn't set `COLUMNS`, the line renders untruncated rather than walking the process tree. ([#3286](https://github.com/max-sixty/worktrunk/pull/3286), closes [#2950](https://github.com/max-sixty/worktrunk/issues/2950)) -- **`-vv` diagnostics consolidate on `diagnostic.md`, led by the performance profile**: A `-vv` run now opens with a one-line pointer to the log directory (`○ Verbose logging to .git/wt/logs/`) and closes by naming what it captured — `○ Logs, performance profile, and diagnostics saved @ diagnostic.md` — with the raw `trace.jsonl` / `subprocess.log` companions listed beneath and the `gh gist create` bug-report hint. `diagnostic.md` now leads with the performance profile, expanded by default and promoted above the environment / worktree / config dumps; that profile reports the 20 slowest calls (was 8) and 10 same-context redundant-command offenders (was 3). There is no standalone `profile.txt` — the profile lives in the bundle, and `wt config state logs profile` re-renders it live from `trace.jsonl`. ([#3329](https://github.com/max-sixty/worktrunk/pull/3329)) - ### Fixed - **`wt list` diff and ahead/behind columns use the upstream default tip**: The `main↕` (ahead/behind) and `main…±` (diff) columns measured every branch against the *local* default-branch tip, so in a fork whose local `main` lagged its upstream they reported inflated counts — one fork branch showed `↑44` and `+∞ / -5K` when it was ~2 commits past the real upstream tip. They now diff against the same upstream-aware base the integration column already uses. ([#3280](https://github.com/max-sixty/worktrunk/pull/3280)) diff --git a/Cargo.lock b/Cargo.lock index a3aa165a3..c75379ba0 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -5475,7 +5475,7 @@ dependencies = [ [[package]] name = "worktrunk" -version = "0.64.0" +version = "0.65.0" dependencies = [ "ansi-str", "ansi-to-html", diff --git a/Cargo.toml b/Cargo.toml index ae63af628..a791d4b40 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -48,7 +48,7 @@ filterset = "test(/readme_sync/)" [package] name = "worktrunk" -version = "0.64.0" +version = "0.65.0" edition = "2024" rust-version = "1.95" build = "build.rs" From c16d62dfac84a6d3ef954514a445aa8415a652d4 Mon Sep 17 00:00:00 2001 From: Maximilian Roos Date: Wed, 1 Jul 2026 21:23:14 -0700 Subject: [PATCH 2/2] fix(release-skill): dedup issue refs by numeric field, not sort -un MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The reporter-finding step piped `grep -oE '#[0-9]+'` into `sort -un`. Because every line starts with `#` (not a digit), numeric sort read them all as 0, so `-u` collapsed the entire list to a single ref — the "PRIMARY" step for crediting issue reporters silently surfaced only one issue. Sort on the numeric field after `#` instead, which dedups correctly and keeps numeric ordering. Found while cutting v0.65.0: the range referenced 15 issues/PRs but the command reported only #3350, nearly dropping @caillou's credit for reporting #3343. Co-Authored-By: Claude Opus 4.8 (1M context) --- .claude/skills/release/SKILL.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.claude/skills/release/SKILL.md b/.claude/skills/release/SKILL.md index c7cd08167..dd19ac839 100644 --- a/.claude/skills/release/SKILL.md +++ b/.claude/skills/release/SKILL.md @@ -177,7 +177,7 @@ Issues may have been filed months before the fix. Bug reports also appear as PR 1. **Extract every issue/PR reference from every commit** (PRIMARY): ```bash - git log v..HEAD --format="%B" | grep -oE '#[0-9]+' | sort -un + git log v..HEAD --format="%B" | grep -oE '#[0-9]+' | sort -t'#' -k2 -n -u ``` For **each** referenced number: run `gh issue view N --json title,author,state`. This catches issues filed months ago — the most commonly missed credits.