Skip to content

Release v0.72.0 - #3759

Merged
max-sixty merged 5 commits into
mainfrom
release
Aug 7, 2026
Merged

Release v0.72.0#3759
max-sixty merged 5 commits into
mainfrom
release

Conversation

@max-sixty

@max-sixty max-sixty commented Aug 7, 2026

Copy link
Copy Markdown
Owner

Release v0.72.0 — 55 commits since v0.71.0.

Minor bump: cargo semver-checks reports 5 breaking library changes, so patch is disallowed pre-1.0.

Headline changes

Full detail in CHANGELOG.md.

One fix made during the release cut

The release audit surfaced a gap this release's own advance_target rewrite introduced, fixed here rather than deferred:

wt merge / wt step push now 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 --continue would commit the synced tree as the step's result. The old fast-forward path got this check for free from receive.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_operation covers it in both shapes a stopped operation can take, and both are mutation-verified. With the gate disabled, the push succeeds and writes feature.txt into 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 --porcelain reports the target with no branch and worktree_for_branch finds it only because finalize_worktree backfills from rebase-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 from find_shared_symref. With the backfill disabled, wt step push succeeds against a worktree parked mid-rebase while the cherry-pick case still passes, so the gap was real.

Validation

  • Local gate green: cargo run -- hook pre-merge --yes — 4570 tests, clippy, fmt, doc sync.
  • Cross-platform nightly green on the cut-from tip 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.
  • Changelog verified entry-by-entry against the diffs by an independent pass; every one of the 55 commits either maps to an entry or is a documented skip.
  • main advanced 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/.
  • Data-loss surface reviewed by four independent finders over the cumulative diff. One further finding — a pre-0.72 approvals.toml key containing * being reinterpreted as a wildcard on upgrade — was reviewed and accepted as out of scope for this release.

This was written by Claude Code on behalf of max-sixty

@worktrunk-bot worktrunk-bot left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

One coverage gap noted inline — not a blocker for the cut.

Comment thread tests/integration_tests/push.rs
max-sixty and others added 2 commits August 6, 2026 23:16
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>
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>
@max-sixty
max-sixty merged commit f57fac3 into main Aug 7, 2026
41 checks passed
@max-sixty
max-sixty deleted the release branch August 7, 2026 09:22
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants