Symptom
test-files/test_gap_6908_proxy_array_mutators.ts hangs — the harness kills it after its 10 s budget. Perry prints 5 of node's lines and then stops making progress:
...
reverse-hole: 4,3,,1 true true false true
sort: 1,10,9 true
sort-cmp: 2,4,10,33 <- last line Perry emits
Node continues past that point (dense: 0,3 2, objlike-reverse: b a c, objlike-splice: 5,3 4 1) and exits 0. So the hang is in whatever the test does immediately after sort-cmp — the dense / object-like mutator section.
Reproduced on the pinned quiet mini and on the dev Mac, perry-dev build, deterministic.
Not a regression, and not snapshotted
A/B'd against f06270d06 — the commit before today's 40-PR merge stack — with its own build of the full 5-package set: exit 124, identical last line. So this predates today's work and is not caused by it.
It is absent from both test-parity/gap_snapshot.json and test-parity/known_failures.json, i.e. nothing recorded it as accepted. That makes it the same class as #7518 and #7526: a real defect sitting unnoticed because parity is gated to tag pushes only, so no per-PR run ever reports it.
Per run_gap_tests.sh's own policy — "Crashes (SIGSEGV/SIGABRT/timeout) are hard defects, never cosmetic gaps" — and the guard added in #7530, this cannot be snapshotted. It needs fixing or an open tracking issue; this is the issue.
Where to look
test_gap_6908_proxy_array_mutators.ts was added by #7424 (d255ae604, "trap-route reverse/splice/fill/copyWithin on Proxy receivers; receiver-less mutator thunks throw"). A hang rather than a throw or a wrong value suggests an unbounded loop in the trap-routing path — e.g. a mutator that re-enters its own trap, or a length-driven loop whose bound is re-read through a trap that never converges.
Worth bisecting between #7424 and now: the test presumably passed when that PR landed, which would put a second regression in the same window that produced #7518 (c6ed8175d, 2026-07-30) and #7521.
Acceptance
Byte-identical to node with exit 0, plus a note on whether the hang is bounded-but-slow or genuinely non-terminating (the 10 s budget cannot distinguish them).
Symptom
test-files/test_gap_6908_proxy_array_mutators.tshangs — the harness kills it after its 10 s budget. Perry prints 5 of node's lines and then stops making progress:Node continues past that point (
dense: 0,3 2,objlike-reverse: b a c,objlike-splice: 5,3 4 1) and exits 0. So the hang is in whatever the test does immediately aftersort-cmp— the dense / object-like mutator section.Reproduced on the pinned quiet mini and on the dev Mac,
perry-devbuild, deterministic.Not a regression, and not snapshotted
A/B'd against
f06270d06— the commit before today's 40-PR merge stack — with its own build of the full 5-package set: exit 124, identical last line. So this predates today's work and is not caused by it.It is absent from both
test-parity/gap_snapshot.jsonandtest-parity/known_failures.json, i.e. nothing recorded it as accepted. That makes it the same class as #7518 and #7526: a real defect sitting unnoticed becauseparityis gated to tag pushes only, so no per-PR run ever reports it.Per
run_gap_tests.sh's own policy — "Crashes (SIGSEGV/SIGABRT/timeout) are hard defects, never cosmetic gaps" — and the guard added in #7530, this cannot be snapshotted. It needs fixing or an open tracking issue; this is the issue.Where to look
test_gap_6908_proxy_array_mutators.tswas added by #7424 (d255ae604, "trap-route reverse/splice/fill/copyWithin on Proxy receivers; receiver-less mutator thunks throw"). A hang rather than a throw or a wrong value suggests an unbounded loop in the trap-routing path — e.g. a mutator that re-enters its own trap, or alength-driven loop whose bound is re-read through a trap that never converges.Worth bisecting between #7424 and now: the test presumably passed when that PR landed, which would put a second regression in the same window that produced #7518 (
c6ed8175d, 2026-07-30) and #7521.Acceptance
Byte-identical to node with exit 0, plus a note on whether the hang is bounded-but-slow or genuinely non-terminating (the 10 s budget cannot distinguish them).