When check-todos moves a file from pending/ to done/, the commit only staged the new destination. The deletion of the source was never staged because `git add` on a non-existent path is a no-op. Now we detect missing files and use `git rm --cached` to stage the deletion. Closes #1228 Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>