Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions CLAUDE.md
Original file line number Diff line number Diff line change
Expand Up @@ -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 <worktree>` 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`. |

---

Expand Down
2 changes: 1 addition & 1 deletion Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion Cargo.toml
Original file line number Diff line number Diff line change
@@ -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"
Expand Down
Loading