chore(deps): update dependency github:max-sixty/worktrunk to v0.46.1#892
Open
renovate[bot] wants to merge 1 commit intomainfrom
Open
chore(deps): update dependency github:max-sixty/worktrunk to v0.46.1#892renovate[bot] wants to merge 1 commit intomainfrom
renovate[bot] wants to merge 1 commit intomainfrom
Conversation
de0fc68 to
afa79cd
Compare
afa79cd to
e4d4912
Compare
e4d4912 to
193a87c
Compare
fb471ae to
9b240bd
Compare
3537594 to
c95432c
Compare
c95432c to
5439708
Compare
5439708 to
2d381f9
Compare
2d381f9 to
97cc2a7
Compare
97cc2a7 to
a366113
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
This PR contains the following updates:
0.39.0→0.46.1v0.47.0Warning
Some dependencies could not be looked up. Check the Dependency Dashboard for more information.
Release Notes
max-sixty/worktrunk (github:max-sixty/worktrunk)
v0.46.1: 0.46.1Compare Source
Release Notes
Fixed
Skipping pre-commit hooks (--no-hooks)line after declined approval:wt step commit,wt step squash, andwt mergecollapsed two distinct hook-skip reasons — the user passing--no-hooksand the user declining an interactive approval prompt — into a singleverify: bool. With hooks configured, declining produced both○ Commands declined, committing without hooksand○ Skipping pre-commit hooks (--no-hooks)back-to-back; the second line was wrong because the user never passed--no-hooks. The call chain now carries aHookGate(Run/NoHooksFlag/Silent), so declined-approval paths skip hooks silently while the explicit--no-hooksflag still prints its message exactly once. (#2485)Internal
HookAnnounceris the single entry point for hook dispatch:post-commitandpost-switchnow route through the same announcer used by other phases, and remaining call sites adoptTemplateVarsfor variable assembly. (#2481, #2482, #2484)Merge cleanup extracted: The post-merge finish sequence moves into
worktree::finish_after_merge, andwt listthreads the placeholder explicitly instead of reaching throughCell. (#2491, #2492)CI consolidated onto a shared composite action: New advisory
cargo-affectedjobs land, and the test matrix and affected-jobs setup now share one composite action. (#2475, #2483, #2486)Install worktrunk 0.46.1
Install prebuilt binaries via shell script
Install prebuilt binaries via powershell script
Install prebuilt binaries via Homebrew
brew install worktrunk && wt config shell installDownload worktrunk 0.46.1
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 installv0.46.0: 0.46.0Compare Source
Release Notes
Improved
sanitize_dbtemplate filter caps output at 48 chars (was 63 — PostgreSQL's identifier limit). The new budget leaves headroom for users composing the output into longer paths or identifiers, e.g., Unix socket paths capped at 107 bytes. The 3-character hash suffix is unchanged, so collision avoidance is preserved at the new budget; only the truncated base shrinks. (Breaking: branches whose previoussanitize_dboutput exceeded 48 chars get a different identifier — most names are well under 48 and pass through unchanged.) (#2467, thanks @yajo for #2397)New
hashtemplate filter:{{ value | hash }}produces a 3-character base36 digest of the input — useful for composing custom truncate-with-collision-avoidance recipes whensanitize_db's 48-char budget still isn't tight enough. (#2453)Background hook announces collapse to one line per command:
wt merge(with removal) previously emitted two or three separate◎ Running …lines forpost-remove + post-switchandpost-merge. Hooks across all phases of a single command now share one combined announce:◎ Running post-remove: user:cleanup; post-switch: user:notify; post-merge: user:sync. (#2457)Picker-driven
post-switchhooks now receivetarget/target_worktree_pathtemplate variables, matching hooks fired fromwt switch <branch>. Closes a pre-existing asymmetry where interactive switching exposed strictly fewer variables than the non-interactive path. (#2470)Fixed
wt <alias>stdout is pipeable again:wt my-alias | tr …(and any other downstream pipe) silently produced no output because the foreground executor redirected every alias body's stdout to wt's stderr — a hook-only redirect that PR #2089 inherited uniformly. Aliases now pass stdout through; hooks andwt step for-eachkeep the merged-stderr behavior so their output stays ordered with wt's own status messages. (#2479, thanks @davidmyersdev for reporting #2478)wt switch <symlink>resolves to the existing worktree instead of failing withNo branch named …. The path-based fallback inRepository::worktree_at_pathpreviously compared paths via lexical normalization only, so symlink-equivalent spellings never matched. The same symlink-aware comparison is now used everywhere the library identifies a worktree by path. (#2466)Deleted-CWD recovery handles symlinked subdirectories: When a worktree is removed while a shell sits in a subdirectory whose parents include a symlink (e.g.
~/link/repo.feature/src),wtnow finds the parent repository and recovers as expected. Previously the symlink-aware path compared only file names and bailed for any path deeper than the worktree root. (#2464)Merge safety backups for slash branches:
WorkingTree::create_safety_backup()flattened/to-in the ref path, so distinct branches likea/banda-bcollided at the samerefs/wt-backup/a-bref — the latest backup for one could clobber the other, and the documentedrefs/wt-backup/<branch>recovery path didn't match what was actually written. Slashes are valid in git ref names; the branch name is now used as-is. (#2463)Nushell wrapper migrates to function-level
@complete: Per fdncred's recommendation in nushell/nushell#18128, the wrapper replaces the parameter-level[...args: string@"nu-complete wt"]with a function-level@completeattribute on an untyped[...args]rest, and the completer signature moves from[context: string](with manualsplit row " "reconstruction) to[spans: list<string>]. Net deletion of seven lines of fragile token reassembly; once nushell/nushell#18131 ships in stable nu the wrapper will automatically benefit from--flag="value"quote stripping and~expansion. (#2458)Internal
Hook dispatch unified: A single
HookAnnouncerorchestrates per-command announces across phases, replacing scatteredCommandOrigin-keyed dispatch with closures, and the various background-hook entry points now share one path. Switch and merge sites assemble template variables through a singleTemplateVarsbuilder. (#2457, #2470, #2472, #2477)wt listrendering modes collapse: The internalRenderTargetenum replaces three parallel rendering paths, the JSON path skips the per-result render that the formatter never used, and deadis_ttyplumbing is removed. (#2469, #2473)Push handling switches to a
PushKindenum instead of sniffing verb strings (#2468);try_aliasandstep_aliasshare one help-intercept implementation (#2471); lazy template expansion in the command executor lives in one place viaresolve_command_str(#2476).Install worktrunk 0.46.0
Install prebuilt binaries via shell script
Install prebuilt binaries via powershell script
Install prebuilt binaries via Homebrew
brew install worktrunk && wt config shell installDownload worktrunk 0.46.0
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 installv0.45.2: 0.45.2Compare Source
Release Notes
Fixed
wt sw(and other aliases that wrapwt switch) still hung — the alias child was placed in a new process group, so when the skim picker calledtcsetattron/dev/ttythe kernel raised SIGTTOU and stopped it mid-render. The interactive (no-stdin-payload) execution path now keeps the alias child in wt's process group; a PID-targeted signal forwarder ensures externally-delivered signals (kill -TERM <wt-pid>) still reach the child. Hooks (which receive JSON on stdin) are unaffected. (#2444)Improved
wt <alias> --helphint follows output guidelines: The hint emitted onwt <alias> --helppreviously printed to stdout without a status symbol, used backticks around commands, and stacked three indented bullet suggestions. It now renders as an info line plus a single semicolon-joined hint on stderr, with commands styled via underline (dim-safe). (#2447)Install worktrunk 0.45.2
Install prebuilt binaries via shell script
Install prebuilt binaries via powershell script
Install prebuilt binaries via Homebrew
brew install worktrunk && wt config shell installDownload worktrunk 0.45.2
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 installv0.45.1: 0.45.1Compare Source
Release Notes
Fixed
worktrunkbuilds again with--no-default-features(regression in v0.45.0): The TTY progress spinner added in #2420 usedcrosstermunconditionally, butcrosstermis gated behind theclifeature inCargo.toml.cargo install --locked --no-default-features worktrunkand library consumers depending on worktrunk withdefault-features = falsefailed to compile. The crossterm-using internals are now#[cfg(feature = "cli")]-gated; withoutcli,Progressdegrades to a no-op (the public API is unchanged). The bug slipped past the in-workspacecargo hack check --feature-powerset --no-dev-depsbecause workspace dev-dependencies pullcrosstermin transitively and Cargo's feature unifier leaks it into the lib build. (#2441)Improved
--claude-codeflag andwt hook post-createalias: Both surfaces previously mapped silently to their canonical replacements (--format=claude-codeandpre-start), giving users no signal to migrate before eventual removal. Each invocation now emits a stderr warning, matching the pattern used bywt select,--no-verify, andwt hook approvals. (#2436)Install worktrunk 0.45.1
Install prebuilt binaries via shell script
Install prebuilt binaries via powershell script
Install prebuilt binaries via Homebrew
brew install worktrunk && wt config shell installDownload worktrunk 0.45.1
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 installv0.45.0: 0.45.0Compare Source
Release Notes
Improved
wt remove --foregroundshows a TTY progress spinner: Removing a worktree with a fatnode_modules(or any large trash payload) now prints⠼ Removing 7,272 files · 64.5 MiBto stderr while the unlink proceeds, with a matching(N files · X MiB)suffix on the success line. TTY-gated; pipes and the background path are byte-for-byte unchanged. Driven by the same machinery introduced forwt step copy-ignoredin #2413. (#2420)wt step copy-ignoredshows a TTY progress spinner: Large copies ofnode_modules,build/, ortarget/previously ran silently. A stderr-only spinner (⠼ Copying 7,272 files · 64.5 MiB) ticks while the copy proceeds, gated on TTY +verbosity == 0+ not--dry-run, with a 300ms startup delay so sub-second copies stay quiet. (#2413, thanks @tehdb for the suggestion)wt switch -c <new> --base <name>accepts a remote-only base:--base releases/4.x.xpreviously failed withNo branch, tag, or commit named "releases/4.x.x"when the branch existed only as a remote-tracking ref. The bare name now resolves through the single matching remote (the existing safety code still unsets the new branch's upstream so a straygit pushdoesn't target the base). Multi-remote and zero-remote cases pass through unchanged. (#2411, thanks @viicslen for reporting #2410)LLM
wt step commitsummaries surfaced inwt config state:wt config state getnow includes aSUMMARY CACHEtable (and JSON section) listing per-branch entries, andwt config state clearremoves them alongside markers/vars/CI status. Backed by a new content-addressed layout at.git/wt/cache/summary/{branch}/{hash}.jsonso a cache hit is a single file-existence check. (#2407)Fixed
wt config state clearno longer reports "Cleared 0" when an I/O or config error actually occurred: Across markers, vars, previous-branch, default-branch, and CI-status (single + aggregate), elevenunwrap_or(false)/let _ = unset_config(...)swallows silently turned real failures into "nothing to clear" messages. Genuinegit config --unsetfailures andread_dir/remove_fileerrors now surface; the common "key didn't exist" exit-5 path stays silent. The sharedclear_*machinery for the on-disk caches is now consolidated inworktrunk::cache. (#2394, #2400)wt config state ci-status clear <branch>actually clears the cache file: The single-branch path was still callingunset_config("worktrunk.state.<branch>.ci-status")from before the cache moved to.git/wt/cache/ci-status/<branch>.json. The command always took the info branch and never touched the real cache;--allwas already correct. (#2392)wt config state get/clear ci-statusfororigin/foo-style branches when a same-named local branch exists: A local branch literally namedorigin/foowould shadow the remote-tracking ref —is_remoteresolved against the remote while the SHA used for cache keys came from the local branch, sogh/glabwas invoked for the remote while the cache tracked the local. A singlefor-each-refquery now sourcesis_remote, the short name, and the HEAD SHA from the same ref. Tags and raw SHAs passed via--branchnow returnBranchNotFoundinstead of being accepted as "local branches" with nonsensical CI lookups. (#2388)Documentation
worktrunk.dev/llms.txtplus.mdcompanions for every page: Each docs page is now also served as clean markdown atworktrunk.dev/<page>.md, with anllms.txtindex per the llms.txt spec so LLM tools can find the docs without scraping HTML. (#2404)Static command-output blocks for the GIF-heavy docs pages:
merge,step,remove,hook, andllm-commitsnow include realistic colorized command-output blocks driven by insta snapshots, alongside (or instead of) the GIFs — so they stay in lockstep with whatwtactually prints. (#2405, thanks @drewnoakes for reporting #2403)Conda / Pixi installation listed in the install section: The README and worktrunk-page install table now mention the conda-forge package alongside Homebrew, Cargo, winget, and pacman. (#2425, thanks @noamgot for reporting #2424)
FAQ documents the new summary cache layout: The "What files does Worktrunk create?" inventory now includes the
.git/wt/cache/summary/{branch}/{hash}.jsonLLM-summary cache. (#2408)Internal
Three on-disk caches unified onto a shared
worktrunk::cachemodule:sha_cache,ci_status, and the newsummarycache now share one implementation of torn-write semantics, error policy, LRU sweep, and clear mechanics. Thesummaries/directory is renamedsummary/to match the singular-operation convention used by every other kind (ci-status,is-ancestor, etc.); stalesummaries/dirs are harmless. (Breaking library API:Repository::clear_git_commands_cacheandRepository::git_commands_cache_countremoved;worktrunk::copy::copy_dir_recursivenow takes 4 parameters instead of 3 andworktrunk::copy::copy_leafnow returnsResult<Option<u64>>instead ofResult<bool>to thread the progress reporter.) (#2407, #2420)Repository::root()no longer caches the fallback path for callers outside any work tree, dropping the dedicatedprewarm_is_insidesentinel cache —worktree_roots.contains_key(path)is now a reliable "path is inside a work tree" signal. No external behavior change. (#2390)MSRV bumped from 1.93 to 1.94 following the latest stable − 1 policy. (#2423)
Claude Code plugin now uses the commit SHA for versioning: The static
version: 1.0.0in the plugin manifest hadn't moved despite ongoing changes to skills and hooks. Removing it lets Claude Code use the commit SHA, so every commit becomes an update for installed users. (#2402)Docs-sync pipeline simplification:
--help-pageplain/web paths unified behindPageMode(#2412); blank-line corruption in mixed$ cmd + outputblocks fixed at the root inconvert_dollar_console_to_terminaland theMARKER_OPEN_PREFIX/MARKER_CLOSEconstants extracted (#2417, #2418); three sync tests collapsed intotest_docs_are_in_syncand dead inner snapshot wrappers stripped (#2419); mirrored close form retired in favour of bare with atest_no_nested_auto_generated_markersinvariant guard (#2422); two more sync helpers aligned with the per-file error channel (#2427);write_trackedhelper extracted and 14 auto-generated outputs markedlinguist-generated=trueso PR diffs collapse them (#2409).running-tendskill leads bug-triage asks withwt -vv <command>so a single gist URL replaces multi-step diagnostic chains (#2415, thanks @viicslen for the feedback in #2410).CiBranchName::from_branch_reftakes&BranchRefinstead of(&str, bool), removing the historical "string from one source, bool from another" footgun. (#2391)Install worktrunk 0.45.0
Install prebuilt binaries via shell script
Install prebuilt binaries via powershell script
Install prebuilt binaries via Homebrew
brew install worktrunk && wt config shell installDownload worktrunk 0.45.0
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 installv0.44.0: 0.44.0Compare Source
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: Clears the silent migration ahead of the planned*-start→*-createrename (see #1571). (#2361)Internal
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
Install prebuilt binaries via powershell script
Install prebuilt binaries via Homebrew
brew install worktrunk && wt config shell installDownload worktrunk 0.44.0
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 installv0.43.0: 0.43.0Compare Source
Release Notes
Fixed
wt step copy-ignoredno longer self-lowers priority in the foreground: Since v0.37.0,copy-ignoredwrapped its work intaskpolicy -b(macOS) /ionice -c3(Linux) unconditionally, which throttled disk I/O for interactive runs and synchronouspre-*hooks — not just the backgroundpost-startflows the lowering was meant for. Detached background hook pipelines now set an internal sentinel, andcopy-ignoredonly self-lowers when it sees it. Interactivewt step copy-ignoredand foreground hooks run at normal priority. Seewt step copy-ignored --help→ Background-hook priority. (#2358, thanks @bram-rongen for reporting #2342)wt step commitno longer panics on large CRLF diffs containing multi-byte UTF-8:parse_diff_sectionsusedstr::lines()(strips\nand\r\n) but advanced the byte-offset accumulator byline.len() + 1, under-counting one byte per CRLF line. Once the diff exceeded the 400k filtering threshold the drift landed inside a multi-byte character and panicked withbyte index N is not a char boundary. Now iterates withsplit_inclusive('\n')so offsets match real byte positions regardless of line-ending style. (#2356, closes #2355, thanks @Qnurye for reporting with a minimal reproduction)wt step relocatesurfaces failedgit checkout/git worktree moveinstead of printing false success: The four rawCmd::new("git")...run()?call sites inrelocate.rsswallowed non-zero exit codes — only spawn errors propagated through?— so a failed checkout or move returnedOkand the caller printedRelocated 1 worktree. All four sites now route throughrepo.worktree_at(path).run_command(...), the project's fail-fast git pattern. Triggered most often whenworktrunk.default-branchcached a branch that no longer resolves locally. (#2348)Improved
Alias dispatch ~15-20% faster via batched
rev-parse: Parent-side alias dispatch was firing four separategit rev-parsesubprocesses on the worktree path (--is-inside-work-tree,--show-toplevel,--git-dir,--symbolic-full-name HEAD). A newWorkingTree::prewarm_infofolds all four selectors into a single invocation and populates theworktree_roots,git_dirs, andcurrent_branchescaches so later accessors hit cache.benches/alias:warm/153.3 → 43.5 ms (−19.6%),cold/10062.1 → 49.7 ms (−18.2%). On systems with slowexecve(macOS Gatekeeper, AV), three saved forks translate to ~600 ms perwt <alias>. (#2352, thanks @markjaquith for continuing to report #2322)Non-submodule repos no longer pay for a failing submodule probe:
Repository::repo_path()used to rungit rev-parse --show-toplevelinside.gitto resolve the submodule case — that probe fails unconditionally on normal repos, costing ~5 ms per call. Now readscore.worktreedirectly from the bulk config map (the same signal git itself uses): bare repos short-circuit oncore.bare, submodules readcore.worktree, normal repos fall through toparent(git_common_dir). hyperfine on a healthy macOS system:wt noopin a normal repo 53.2 → 48.8 ms (1.09×); in a submodule 62.1 → 55.5 ms (1.12×).repo_path()fires ~2× during alias dispatch, so the win compounds. (#2350, thanks @markjaquith for reporting #2322)Documentation
pre-startandpost-starthook rows say when the hook fires, not just what to put in it: The hook types table rows forpre-startandpost-startnow match the phrasing of neighbouring rows (pre-switchhas "Runs before…",post-mergehas "Runs in the target…"): "Runs once when a new worktree is created, blockingpost-start/--executeuntil complete" and "Runs once when a new worktree is created, in the background". (#2360, thanks @ortonomy for reporting #1571)Hook docs: Recipes restructured as a table of contents: The "Designing Effective Hooks" umbrella heading was removed; "Recipes" is promoted to a top-level section with each bullet leading with a specifically-named link to its Tips & Patterns section. "Copying untracked files" moved up next to the JSON context section. (#2349, #2351)
Refreshed stale docstrings across recently refactored modules. (#2354)
Internal
ahead_behindcollapsed into single get-or-insert accessor:cached_ahead_behindwas open-coded get-or-insert at the call site.ahead_behindnow readscache.ahead_behindfirst and falls back to the merge-base + rev-list computation on miss, caching the result. Thewt listahead/behind task collapses from a manual cache check + dual codepath to a single call.batch_ahead_behindstill primes the cache in bulk on git ≥ 2.36. (Breaking library API:Repository::cached_ahead_behindremoved.) (#2347)Install worktrunk 0.43.0
Install prebuilt binaries via shell script
Install prebuilt binaries via powershell script
Install prebuilt binaries via Homebrew
brew install worktrunk && wt config shell installDownload worktrunk 0.43.0
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 installv0.42.0: 0.42.0Compare Source
Release Notes
Improved
Alias banner is silent when there's nothing to summarize:
◎ Running alias <name>now only prints when the alias has at least one named step worth naming. Single unnamed aliases (ls = "wt list") and all-anonymous pipelines return no announcement — the banner was just echoing the user's typed name. Pipelines with named steps keep their informative summary (◎ Running alias deploy: install; build, lint).-vstill prints the bare form as a confirmation line. (#2339, thanks @markjaquith for reporting #2322)Alias dispatch ~30% faster via batched git config reads:
RepoCachenow reads every config key with a singlegit config --list -zinstead of onegit configsubprocess per key. Config-backed accessors (is_bare,primary_remote,remote_url,default_branchfast path,switch_previous,has_shown_hint,core.fsmonitor,core.pager, and more) resolve via an O(1) map lookup. Writes route throughset_config_value/unset_confighelpers that update the on-disk config and the in-memory map together. Benchmarked onbenches/alias:warm/177.4 → 56.9 ms (−29%),cold/10080.5 → 54.5 ms (−30%) — ~25 ms saved perwt <alias>invocation. (#2344, #2346, thanks @markjaquith for reporting #2322)Further O(1) single-branch upstream lookups on
wt merge/wt switch: Follow-up to #2337.effective_integration_targetand thewt switchtracking-info report switched from bulkBranch::upstream()(afor-each-refover every local branch) toupstream_single()—wt liststill uses the bulk cache, but one-shot callers no longer pay for it. (#2338)Stale cached default branch surfaces a clear error with a reset hint:
default_branch()'s fast path no lon