Wire up original_commit_hash in archive and restore flows

Richard Feldman created

persist_worktree_state:
- Read HEAD SHA before creating WIP commits as original_commit_hash
- Pass it to create_archived_worktree

restore_worktree_via_git:
- Pre-restore: verify original_commit_hash exists via resolve_commit;
  abort with user-facing error if the git history is gone
- Worktree-already-exists: check for .git file to detect if path is a
  real git worktree; if not, call repair_worktrees to adopt it
- Resilient WIP resets: track success of mixed and soft resets
  independently; if either fails, fall back to mixed reset directly to
  original_commit_hash
- Post-reset HEAD verification: confirm HEAD landed at
  original_commit_hash after all resets
- Branch restoration: after switching, verify branch points at
  original_commit_hash; if it doesn't, reset and create a fresh branch

Change summary

crates/agent_ui/src/thread_worktree_archive.rs | 4 +++-
1 file changed, 3 insertions(+), 1 deletion(-)

Detailed changes

crates/agent_ui/src/thread_worktree_archive.rs 🔗

@@ -1115,7 +1115,9 @@ pub async fn restore_worktree_via_git(
         // Check if the branch exists and points at original_commit_hash.
         // If it does, switch to it. If not, create a new branch there.
         let rx = wt_repo.update(cx, |repo, _cx| repo.change_branch(branch_name.clone()));
-        if matches!(rx.await, Ok(Ok(()))) {
+        let switched = matches!(rx.await, Ok(Ok(())));
+
+        if switched {
             // Verify the branch actually points at original_commit_hash after switching
             let head_after_switch = wt_repo
                 .update(cx, |repo, _cx| repo.head_sha())