There must be a better way to tell if a repo is a Sapling repo than by running some arbitrary binary, right?
For Git one could look for .git/config. There must be something equivalent.
.git will be a file and not a directory, if you are in a submodule or a worktree.
You just illustrated why trying to assume the functionality of a third-party app instead of calling it creates even more bugs.