From 1f42064d20dd3d9e554e6e418fa66b8a1d1da295 Mon Sep 17 00:00:00 2001 From: Claude Date: Mon, 24 Aug 2026 12:49:53 -0500 Subject: [PATCH] docs(publish): point the torn-clone note at the suite that reproduces it MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit publish-snapshot.sh's header described the silent-truncation failure mode as the one "this script's own selftest (scenario 8)" reproduces. Wrong twice: the scenario that reproduces a truncated clone is in seed-target-dir-selftest.sh, and since #4 split the old scenario 8 into 8a and 8b it is 8b. publish-snapshot-selftest.sh does have a scenario 8 — the abandoned-marker case — so the pointer landed on a real scenario with a plausible number that tests something else. Names the suite as well as the number, and says what the local scenario 8 actually is so the collision cannot re-form. Closes #6 --- scripts/publish-snapshot.sh | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/scripts/publish-snapshot.sh b/scripts/publish-snapshot.sh index 4c26834..3f33682 100755 --- a/scripts/publish-snapshot.sh +++ b/scripts/publish-snapshot.sh @@ -29,8 +29,9 @@ # consumer still WALKING the old generation has its entries unlinked out from # under it, and `cp -al` does not report a subtree that was removed before it # read the parent's listing. That is a silently truncated clone — the failure -# mode this script's own selftest (scenario 8) reproduces against the -# unguarded version. +# mode seed-target-dir-selftest.sh's scenario 8b reproduces from the consumer's +# side, against the unguarded version. (This script's own selftest also has a +# scenario 8; that one is the abandoned-reader-marker case, not this.) # # So the unlink is interlocked with the consume side rather than # unconditional: after the swap, this script waits for every in-flight reader