=+(a="test" ?~(|2.a & |)) mint-vain
=+(a="test" ?~(a & |)) - fine
=+(a="test" ?~(+.a & |)) - fine
=+(a="test" ?~(+>.a & |)) - fails
I'm guessing the indirection through multiple forks isn't working properly.
Confirmed still an issue on current master.
(And still, as of 2019/06/21).
Confirmed, still an issue.
Confirmed, still an issue.
The root cause is the recursion guarding in +take's %hold handling. We'll hit that codepath repeatedly for recursive types like $tape, and the guard there causes us to incorrectly produce %void.
https://github.com/urbit/urbit/blob/f170eb9fb997d95c7d95b994f7a025dea362f7bd/pkg/arvo/sys/hoon.hoon#L10908-L10910
We would expect to be able to take that out and just $(sut repo) always. We already expanded the %holds to get to the axis we're +takeing, so we know it terminates.
However! Turns out the guard there is load-bearing for as-yet undiscovered reasons. It seems like something is depending on the %void produced here to prune forks.
To be continued...