From 58632e07189f81600b95534ec7b37b7ba2761792 Mon Sep 17 00:00:00 2001 From: Tom Boucher Date: Sun, 12 Apr 2026 08:26:57 -0400 Subject: [PATCH] fix(2095): use cp instead of git-show for worktree STATE.md backup (#2143) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Replace `git show HEAD:.planning/STATE.md` with `cp .planning/STATE.md` in the worktree merge-back protection logic of execute-phase.md and quick.md. The git show approach exits 128 when STATE.md has uncommitted changes or is not yet in HEAD's committed tree, leaving an empty backup and causing the post-merge restore guard to silently skip — zeroing or staling the file. Using cp reads the actual working-tree file (including orchestrator updates that haven't been committed yet), which is exactly what "main always wins" should protect. --- get-shit-done/workflows/execute-phase.md | 4 ++-- get-shit-done/workflows/quick.md | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/get-shit-done/workflows/execute-phase.md b/get-shit-done/workflows/execute-phase.md index bc2f28ce1..030caad98 100644 --- a/get-shit-done/workflows/execute-phase.md +++ b/get-shit-done/workflows/execute-phase.md @@ -590,8 +590,8 @@ Execute each selected wave in sequence. Within a wave: parallel if `PARALLELIZAT # and ROADMAP.md are stale. Main always wins for these files. STATE_BACKUP=$(mktemp) ROADMAP_BACKUP=$(mktemp) - git show HEAD:.planning/STATE.md > "$STATE_BACKUP" 2>/dev/null || true - git show HEAD:.planning/ROADMAP.md > "$ROADMAP_BACKUP" 2>/dev/null || true + [ -f .planning/STATE.md ] && cp .planning/STATE.md "$STATE_BACKUP" || true + [ -f .planning/ROADMAP.md ] && cp .planning/ROADMAP.md "$ROADMAP_BACKUP" || true # Snapshot list of files on main BEFORE merge to detect resurrections PRE_MERGE_FILES=$(git ls-files .planning/) diff --git a/get-shit-done/workflows/quick.md b/get-shit-done/workflows/quick.md index 7824a4187..16627496b 100644 --- a/get-shit-done/workflows/quick.md +++ b/get-shit-done/workflows/quick.md @@ -613,8 +613,8 @@ After executor returns: # Backup STATE.md and ROADMAP.md before merge (main always wins) STATE_BACKUP=$(mktemp) ROADMAP_BACKUP=$(mktemp) - git show HEAD:.planning/STATE.md > "$STATE_BACKUP" 2>/dev/null || true - git show HEAD:.planning/ROADMAP.md > "$ROADMAP_BACKUP" 2>/dev/null || true + [ -f .planning/STATE.md ] && cp .planning/STATE.md "$STATE_BACKUP" || true + [ -f .planning/ROADMAP.md ] && cp .planning/ROADMAP.md "$ROADMAP_BACKUP" || true # Snapshot files on main to detect resurrections PRE_MERGE_FILES=$(git ls-files .planning/)