From 0d7b89db265a186486536450c0ad1e4cacac9cd2 Mon Sep 17 00:00:00 2001 From: rohoswagger Date: Tue, 11 Aug 2026 15:36:11 -0700 Subject: [PATCH] Prepare v0.3.3 release MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Three stale-metadata and cleanup fixes since v0.3.2 (#141, #142, #143, #144). Also backfills the 0.3.0–0.3.2 rows in the version history table, which were never recorded. --- CLAUDE.md | 4 ++++ Cargo.lock | 2 +- Cargo.toml | 2 +- 3 files changed, 6 insertions(+), 2 deletions(-) diff --git a/CLAUDE.md b/CLAUDE.md index 1331257..7cdafd2 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -160,6 +160,10 @@ These features exist specifically to make ez useable by AI agents: | 0.2.27 | Restack branches in their worktree instead of skipping: `ez sync`, `ez restack`, and all auto-restack paths run `git -C ` when a branch is checked out elsewhere (including external worktrees like Superconductor). | | 0.2.28 | `ez create -m` commits on the new branch without advancing the parent (stashes uncommitted state and transfers it into the new worktree; rejects `--no-worktree`). Fix stale-`parent_head` auto-restack bug: `ez commit`/`ez amend`/`ez move` now cascade the restack across the **full descendant subtree** (`StackState::descendants_topo` + shared `restack::cascade_restack`) instead of only direct children, which left grandchildren detached from the stack until a manual `ez restack`. | | 0.2.29 | Restacks fail per-branch instead of per-run: `ez sync`/`ez restack`/auto-restack attempt every branch independently, abort any half-finished rebase, report the skipped branches at the end, and exit 3 (`RestackIncomplete`) only after the rest of the stack is synced and state is saved. Treat stack metadata as a cache of git, not the source of truth — a `parent_head` that is no longer in the branch's history falls back to `git merge-base`, and a recorded parent that no longer exists is re-derived from the commit graph (`track::infer_parent`) instead of failing the branch. Shared restack engine in `cmd/restack.rs` (`restack_branches`) replaces the duplicated loops in sync/restack. | +| 0.3.0 | Worktree-native milestone: worktree-safe stack mutations, crash-safe worktree ownership for parallel agents, transactional worktree teardown, explicit shell handoff on switch, fork stacks as first-class, GitHub native-stack reconciliation gated on trustworthy worktree graphs | +| 0.3.1 | Pre-fill new PR bodies from the repo's pull request template; sync honors every registered linked worktree; worktree leases enforce mutation isolation; sync no longer destroys uncommitted trunk work | +| 0.3.2 | Test coverage pass across navigation/status, push, sync config, create/restack, move/checkout, merge/fold, and dispatch/skill paths | +| 0.3.3 | Stale-metadata and cleanup fixes. `ez status` derives `needs_restack` from git (`restack::branch_needs_restack`) instead of comparing the parent tip against a cached `parent_head`, matching what `ez checkout` already did. `ez merge`'s post-merge restack runs through the shared engine (`restack_branches_with_options`) rather than its own pre-0.2.29 loop, so a stack entry whose branch is gone no longer aborts a completed merge — failures surface as exit 3 after the merge is recorded. `cleanup_merged_branch` runs *before* that restack in both merge paths, so a restack failure can never strand a merged branch and its worktree with no metadata to find them by. `ez sync` gains a safety net for orphans that already exist: it removes the worktree and local branch for untracked branches under this repo's `.worktrees/` whose work is provably in trunk — tip in trunk, or a merged PR whose `headRefOid` matches the local tip, since a branch-name PR lookup alone can return somebody else's merged PR after a name is recycled. `PrInfo` gains `head_oid`. | --- diff --git a/Cargo.lock b/Cargo.lock index 62fd7ae..bdab8a5 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -172,7 +172,7 @@ dependencies = [ [[package]] name = "ez-stack" -version = "0.3.2" +version = "0.3.3" dependencies = [ "anyhow", "clap", diff --git a/Cargo.toml b/Cargo.toml index f37e712..6bd8a23 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "ez-stack" -version = "0.3.2" +version = "0.3.3" edition = "2024" rust-version = "1.85" description = "A CLI tool for managing stacked PRs with GitHub"