So "PendingAncestryResult" is a shorthand for a "SearchResult" which doesn't actually walk the whole graph.
If you actually did the SearchResult, you would end up finding the ghosts, and at that point would explicitly mark them into 'exclude_keys'.
This is essentially just folding that into PendingAncestryResult.get_keys(), so that it gives the same keys as the equivalent SearchResult.get_keys().
I'll probably work on this more later, and actually change PendingAncestryResult to track stuff like ghosts, and thus keep track of 'tails' or 'exclude_keys' or whatever you want to call it.
We certainly need this for CHK stacking, I have it already in my CHK stacking branch, although with a different test. (I test for a non-mainline ghost, but it is the same for PAR).
So "PendingAncestr yResult" is a shorthand for a "SearchResult" which doesn't actually walk the whole graph.
If you actually did the SearchResult, you would end up finding the ghosts, and at that point would explicitly mark them into 'exclude_keys'.
This is essentially just folding that into PendingAncestry Result. get_keys( ), so that it gives the same keys as the equivalent SearchResult. get_keys( ).
I'll probably work on this more later, and actually change PendingAncestry Result to track stuff like ghosts, and thus keep track of 'tails' or 'exclude_keys' or whatever you want to call it.
We certainly need this for CHK stacking, I have it already in my CHK stacking branch, although with a different test. (I test for a non-mainline ghost, but it is the same for PAR).