Deleting a character in the UI left _text/cards/<Name>.json behind, describing a
card that no longer exists. A stale derived file is worse than a missing one
because it reads as current -- which is the exact reason the pre-commit hook
regenerates _text/ at all, so the script was failing its own premise.
Found by testing a deletion rather than reading the code. The write path was
obviously correct; the delete path had simply never been written.