Release Notes
Fixed
-
Interactive alias children (e.g.
sw = "wt switch") keep the tty again: Alias execution was piping the template context JSON into each child's stdin, displacing the controlling terminal; interactive commands likewt switchthen saw a pipe and bailed withInteractive picker requires an interactive terminal. Hooks still receive the documented JSON-on-stdin contract; aliases now inherit stdin unchanged. (#2380, thanks @KieranP for reporting in #406) -
wt list --remotesstats were shadowed by a same-named local branch: If a user created a local branch literally namedorigin/foo, the remote row fororigin/foosilently reported ahead/behind (and every other integration stat) against the local branch, becausegit rev-parseprefersrefs/heads/overrefs/remotes/. Integration helpers now pass fully-qualified refs; a follow-up refactor makes the disambiguation unrepresentable at the type level by storing full refs onBranchRef. (#2365, #2378) -
{{ commit }}resolves to the per-worktree HEAD inwt step for-eachon detached worktrees: The hook context was reading HEAD via a process-CWD-keyed cache, so whenfor-eachiterated over sibling worktrees with one on detached HEAD,{{ commit }}resolved to the running worktree's SHA instead of the sibling's. (#2382) -
Global-scope
core.worktreeno longer misdetects the repo root in normal non-bare repos: The 0.43.0repo_path()fast path (#2350) readcore.worktreefrom the bulk config map, which merges global and system scope — but git itself only honorscore.worktreefrom local config for worktree discovery. When the bulk map reportscore.worktreewe now delegate togit rev-parse --show-toplevelso git applies its own scope rules. The common case (nocore.worktreeanywhere) still skips the subprocess. (#2362) -
post-createhook config is now rejected with an explicit error instead of silently migrating topre-start: Paves the way to reclaimpost-createas a background-semantics counterpart topost-start(see #1571). (Breaking: existing configs usingpost-createmust be renamed topre-start.) (#2361)
Internal
- Branch enumeration consolidated into a single canonical inventory, with follow-on perf wins: Five overlapping
for-each-refaccessors insrc/git/repository/branches.rscollapsed into two cached scans (refs/heads/andrefs/remotes/), exposed asRepository::local_branches()andremote_branches(). Shared inventory also powersBranch::remotes()(#2371),strip_remote_prefix(#2372), andis_remote_tracking_branch(#2377), dropping arev-parse/git remotesubprocess each.BranchRefstores full refs (#2378);prewarm_inforeturns a typed snapshot with HEAD SHA folded in (#2367); alias on-branch dispatch reuses the cached HEAD SHA (#2374);list_worktreescaches onRepoCache(#2375, #2383);wt listcommit subjects batched pre-skeleton, retiringCommitDetailsTask(#2369, #2379); picker's speculative preview warm-up primesprewarm_infoonce (#2381). (Breaking library API:Repository::list_local_branches,list_remote_branches,list_tracked_upstreams,list_untracked_remote_branches,commit_timestamps,commit_details,current_worktree_info,Branch::upstream_single, andBranchRef { branch, is_remote }fields are removed;Repository::batch_ahead_behindreturns().) (#2368)
Install worktrunk 0.44.0
Install prebuilt binaries via shell script
curl --proto '=https' --tlsv1.2 -LsSf https://github.com/max-sixty/worktrunk/releases/download/v0.44.0/worktrunk-installer.sh | sh && wt config shell installInstall prebuilt binaries via powershell script
powershell -ExecutionPolicy Bypass -c "irm https://github.com/max-sixty/worktrunk/releases/download/v0.44.0/worktrunk-installer.ps1 | iex"; git-wt config shell installInstall prebuilt binaries via Homebrew
brew install worktrunk && wt config shell installDownload worktrunk 0.44.0
| File | Platform | Checksum |
|---|---|---|
| worktrunk-aarch64-apple-darwin.tar.xz | Apple Silicon macOS | checksum |
| worktrunk-x86_64-apple-darwin.tar.xz | Intel macOS | checksum |
| worktrunk-x86_64-pc-windows-msvc.zip | x64 Windows | checksum |
| worktrunk-aarch64-unknown-linux-musl.tar.xz | ARM64 MUSL Linux | checksum |
| worktrunk-x86_64-unknown-linux-musl.tar.xz | x64 MUSL Linux | checksum |
Install via Cargo
cargo install worktrunk && wt config shell installInstall via Winget (Windows)
winget install max-sixty.worktrunk && git-wt config shell installInstall via AUR (Arch Linux)
paru worktrunk-bin && wt config shell install