fix(checks): retirement is a repository fact, not a disk fact master
A completed conversion wave declares the Python roots it removed. The check asked the filesystem whether those directories still existed, so a checkout that deleted the sources but left ignored build output behind reported the wave as unfinished. The failure named the wave rather than the working tree that produced it, sending the reader to the wrong place entirely. Ask git instead: a declared root is retired once the repository holds nothing under it. Tracked and untracked-but-unignored files both still count, so a genuine leftover fails exactly as before, and the message now names an offending file. When git cannot answer, fall back to the on-disk test rather than passing a retirement we cannot prove.