From 007ec29082fcd24764db0405c12f1cdf5638bdca Mon Sep 17 00:00:00 2001 From: Gabriel Schneider Date: Wed, 30 Sep 2026 15:56:43 -0300 Subject: The 9P monkey's chunked read check allows a live file that changed between its two reads Seed 131 flagged a command pane's tag: the whole read said `running`, the chunked read on the same open said `exit 0`. A tag is live, not frozen at the open, and the command ended between the reads, so this was a false alarm that did not reproduce on replay. A mismatch now counts only when a third, whole read still differs from the chunks. Seeds 131, 133 and 134 at 3000 steps each run clean. Co-Authored-By: Claude Opus 5.5 --- test/monkey9p.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) (limited to 'test') diff --git a/test/monkey9p.py b/test/monkey9p.py index fd8c80fa..87e386b3 100644 --- a/test/monkey9p.py +++ b/test/monkey9p.py @@ -1616,7 +1616,10 @@ def chunked_equals_whole(ctx, res): whole_n, chunk_n = dir_names(whole), dir_names(chunked) if whole_n != chunk_n: return f'{path}: whole {whole_n} != chunked({size}) {chunk_n}' - elif whole != chunked: + elif whole != chunked and w.read_all(fid) != chunked: + # A live file (a tag says `running`, then `exit 0`) may change + # between the two reads: only chunks that no whole read matches, + # read again, are a chunking fault. return f'{path}: whole {whole[:200]!r} != chunked({size}) {chunked[:200]!r}' finally: w.clunk(fid) -- cgit v1.3