Conversation
worktrunk-bot
approved these changes
Aug 7, 2026
worktrunk-bot
left a comment
Collaborator
There was a problem hiding this comment.
One coverage gap noted inline — not a blocker for the cut.
A stopped cherry-pick keeps HEAD on the branch, so `worktree_for_branch` finds the target directly. A rebase detaches it, and the lookup succeeds only because `finalize_worktree` backfills the branch from `rebase-merge/head-name` — so the rebase arm's refusal rests on a helper of ours, where the fast-forward path it replaced got the refusal from git itself. Only the cherry-pick shape was pinned. Disabling the backfill leaves the suite green while `wt step push` succeeds against a worktree parked mid-rebase: the ref moves, the worktree is never synced, and `git rebase --continue` then resets the branch with the pushed commits off it. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
worktrunk-bot
approved these changes
Aug 7, 2026
Both rework features this release already documents, so they fold into the existing bullets rather than adding new ones: #3766 extends #3746's broken-pipe fix to every remaining stdout surface, and #3767 narrows the plugin removal hook's guard from #3754. #3766 also stops `wt list` coloring a pipe, which is user-visible on its own, so that gets its own entry. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
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.
Release v0.72.0 — 55 commits since v0.71.0.
Minor bump:
cargo semver-checksreports 5 breaking library changes, so patch is disallowed pre-1.0.Headline changes
wt merge/wt step pushno longer autostash the target worktree (refactor(merge): leave target-worktree changes in place, drop the autostash #3703). Both strategies now advance the target through oneadvance_target— a compare-and-swapupdate-ref, thenread-tree -m -uin the target worktree — sorefs/stashis never entered and staged changes stay staged.github-enterprise.acme.comand friends resolve again with no config.[projects."…"]keys match by*pattern and carry forge settings (feat(config): match[projects."…"]keys by pattern, and carry forge there #3701), so one user-config entry covers every repository on a self-hosted host.wt list --format=jsonschema 2 (feat(list): publish a JSON Schema for the schema-2 envelope #3747), plus machine-readable approval state andbranch_outcome(feat: machine-readable approval state and branch-removal outcomes #3710).Full detail in
CHANGELOG.md.One fix made during the release cut
The release audit surfaced a gap this release's own
advance_targetrewrite introduced, fixed here rather than deferred:wt merge/wt step pushnow refuse a target worktree parked mid-operation. The target sync is a two-tree merge, which refuses an unmerged index but not a stopped cherry-pick or rebase whose conflict has already been staged. A target paused between steps could therefore have the push range written into it, and the user's--continuewould commit the synced tree as the step's result. The old fast-forward path got this check for free fromreceive.denyCurrentBranch=updateInstead, which refused any unclean target outright; both strategies now ask directly, and the refusal names the worktree holding the operation.test_push_refuses_target_mid_operationcovers it in both shapes a stopped operation can take, and both are mutation-verified. With the gate disabled, the push succeeds and writesfeature.txtinto the mid-cherry-pick worktree.The rebase case was added in response to review feedback on this PR, and pins a second dependency. A rebase detaches HEAD, so
git worktree list --porcelainreports the target with no branch andworktree_for_branchfinds it only becausefinalize_worktreebackfills fromrebase-merge/head-name. That makes the rebase arm the one place this guarantee rests on a helper of ours rather than on git — the fast-forward path it replaced got the refusal fromfind_shared_symref. With the backfill disabled,wt step pushsucceeds against a worktree parked mid-rebase while the cherry-pick case still passes, so the gap was real.Validation
cargo run -- hook pre-merge --yes— 4570 tests, clippy, fmt, doc sync.3817df079(run 31133551751): full nextest matrix on linux/macOS/Windows, feature-powerset, all three release triples, nix-flake, minimal-versions, unused-deps, crate-build, link-check.mainadvanced during the CI wait. fix(help): name the doc-entry-point command from clap, not an argv scan #3762 ships in this release and now has a changelog entry; the other two commits that landed (chore: bump taiki-e/install-action from 2.85.7 to 2.85.8 #3758, chore: update tend workflows (0.1.13 → 0.1.14) #3749) touch only.github/.approvals.tomlkey containing*being reinterpreted as a wildcard on upgrade — was reviewed and accepted as out of scope for this release.