urbit icon indicating copy to clipboard operation
urbit copied to clipboard

=+(a="test" ?~(|2.a & |)) mint-vain

Open ohAitch opened this issue 9 years ago • 4 comments

=+(a="test" ?~(a & |)) - fine =+(a="test" ?~(+.a & |)) - fine =+(a="test" ?~(+>.a & |)) - fails

I'm guessing the indirection through multiple forks isn't working properly.

ohAitch avatar Mar 23 '16 19:03 ohAitch

Confirmed still an issue on current master.

belisarius222 avatar Jan 19 '18 19:01 belisarius222

(And still, as of 2019/06/21).

jtobin avatar Jun 21 '19 08:06 jtobin

Confirmed, still an issue.

ashelkovnykov avatar Apr 11 '23 04:04 ashelkovnykov

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...

Fang- avatar Jul 01 '25 21:07 Fang-