When a branch contained commits already on main (duplicate cherry-picks), the merger's local squash collapsed to an empty commit. The merger then recorded that empty commit's SHA on mergeDetails.commitSha. The actual content landed later on main as a different SHA via PR merge, but the task kept pointing at the orphaned empty commit. Symptom: TaskCard showed "N files changed" (falling back to task.modifiedFiles), but the Changes tab in the modal showed nothing because the API hit `git diff sha^..sha` on the empty commit and returned no files. Two fixes: 1. merger.ts: detect empty squash commits and skip storing commitSha, logging clearly. recoverInterruptedMergingTasks → findLandedTaskCommit already exists to backfill the right SHA when the real commit lands; a missing commitSha is a known fallback path the UI already handles. 2. TaskChangesTab.tsx: when the API returns no files for a done task, fall back to task.modifiedFiles (paths only, no patches) with a clear note. Mirrors the existing 3-tier fallback in TaskCard.tsx:1090-1124 so card and modal always agree. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
15 KiB
15 KiB