From 864407b240b812743d6f57a56daf9706b36fc027 Mon Sep 17 00:00:00 2001 From: Gabriel Schneider Date: Wed, 30 Sep 2026 15:14:00 -0300 Subject: pardes --wait for a new name waits on the pane it made, by serial, and a pane closed before it looks is done, not a failure fs.py's `pardes --wait 'wait new.txt'` failed two runs in three on the 0.0.8 merge. The stress case repeats the test's steps: 4 of 50 failed under load, each with "pardes: --wait: no pane shows that file". A new name's launch makes its pane, names it, then found it again by path in /index. The script had already seen the name, saved and removed the pane by then, so the lookup missed and --wait exited 1. Now the launch hands --wait the serial pane/new gave it. After a look, finding no pane on the file means that pane is already closed, which is the end --wait waits for: exit 0. The follow with its /index recheck covers a close in between, as before. Under the same load the stress case went 0 of 100. The same load showed a test race too, at fs.py's second Restore. The exec write is answered before the hang-up, but the client's clunk after it can meet the connection already cut. The test now requires the answer and tolerates the reset. Co-Authored-By: Claude Opus 5.5 --- test/fs.py | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) (limited to 'test/fs.py') diff --git a/test/fs.py b/test/fs.py index b02b9e45..3f11269a 100644 --- a/test/fs.py +++ b/test/fs.py @@ -1117,7 +1117,15 @@ def test(binary, quic=False): except OSError as refused: assert 'Modified' in str(refused), refused assert old.read('/pane/1/body') == b'changed after dump\n' - execute(old, control, 'Restore ' + str(saved)) + # Answered before the hang-up: the write's reply comes; the + # clunk after it may meet the connection already cut. + restore = old.open(f'/pane/{control}/exec', 1) + line = ('Restore ' + str(saved) + '\n').encode() + old.rpc(118, struct.pack('