BUG: if we run git sparse-checkout set A A/B, then A is registered as a recursive closure AND A/B is marked as a recursive closure. This also means that A is marked as a parent path.
This results in Git complaining that the patterns are not cone-style, and reverts to the slow pattern matching algorithm.
To fix, consider removing paths from the "parent" list if they are in the "recursive" list. Further: remove children from the recursive list.