on master help sign in
Keep the selftest stub's loop in constant memory

tools/testdata/selftest's "a suite that never ends" check expects tools/test-arms to report the looping suite as a timeout after 6 s. The stub's +spin was built with debug hints, which keep every call's frame, so on an idle machine urbit eval ran out of memory in about 4 s and the suite failed as "(build)" instead. Building +spin without debug hints makes the loop a tail call, so only the timeout can end it. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01U4FzmSdubYxmZGDp2VJRAQ

commit9babd32762ed87b7b54556f8b33cb80cccdb9cfa authorClaude <noreply@anthropic.com> dateTue 3 Nov 2026, 03:31 (10 hours ago) parente97aebe
1 file changed+4−1
tools/testdata/stub.hoon+4−1
tools/testdata/stub.hoon+4−1
@@ -12,7 +12,9 @@
1212:: crash crashes in +explode, under a ~| trace; mule catches it
1313:: bail asks for a 3 GB atom, which ends the whole eval, as running
1414:: out of memory does; mule can't catch it
15−:: loop never returns, for testing timeouts
15+:: loop never returns, for testing timeouts; +spin is built without
16+:: debug hints, which would keep each call's frame, so it
17+:: runs in constant memory and the eval can't run out first
1618::
1719:: tools/testdata/selftest also copies this file with errors put in, to
1820:: test that errors are reported at the right lines.
@@ -69,6 +71,7 @@
6971 $(lines t.lines, n +(n))
7072::
7173++ spin
74+ !.
7275 |= n=@ud
7376 ^- @t
7477 $(n +(n))