A tool for breaking things, since doing it by hand went wrong twice

A check that passes proves nothing until it has been seen to fail. Doing
that by hand failed twice in two days, and BOTH TIMES IT LOOKED LIKE A
RESULT - the suite ran, went green, and read exactly like "this check does
not catch that".

Once the edit produced code that would not compile, make failed, the exit
status was not looked at, and the previous binary ran the suite. Once the
anchor was right and the filename was wrong, so nothing was edited at all.

Neither had anything to do with header dependencies, which have always
worked: DEPFLAGS is -MMD -MP and every .d is included. What was missing
was a harness that refuses to report a result it did not earn.

So Tests/break.sh checks every step of its own work and treats anything
unexpected as a hard error rather than a green run. Not finding the break
is the answer it exists to give, and it is worthless if it can also be the
answer when the break never happened. It restores the file on the way out,
including on an interrupt.

It is not in the suite and docs.sh does not count it, for the reason
makedisks.sh is not counted turned round - but being left out of the count
is not being left out of the manual, and that gap is where a script goes
undocumented for months. So docs.sh now requires both of them to be
described, and caught this one being missing.

Also: video.sh reads the fixture disks and does not build them, so after
make sanitize clears the build directory it reported SEVEN product-looking
failures for a missing file. It builds them now and says so.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01E2JrLzFvuFX9fgi1LDRjrW
This commit is contained in:
Anachronaut
2026-09-02 13:19:22 -04:00
co-authored by Claude Opus 5
parent 9eed23120f
commit f8c3db5d56
4 changed files with 162 additions and 2 deletions
+18 -2
View File
@@ -643,7 +643,11 @@ else:
# file.
#
# The bullets now live in the Test Manual rather than the README, so that is what is read.
# makedisks.sh is not counted, because it builds the images rather than checking anything;
# makedisks.sh is not counted, because it builds the images rather than checking anything,
# and break.sh is not counted for the same reason turned round: it checks that a check works,
# is run by hand at the moment a check is written, and is not part of what "make test" means.
# Both are still described in the manual - what they are excluded from is the COUNT of the
# suite, not from being documented, and the check below enforces that.
# run.sh is counted, because the manual describes it alongside the rest.
rootReadme = open("README.md").read()
manual = open("SplitBit Test Manual.md").read()
@@ -651,8 +655,9 @@ manual = open("SplitBit Test Manual.md").read()
# lines. Every pattern below runs against a copy with its whitespace flattened.
flat = re.sub(r"\s+", " ", manual)
notSuite = ("makedisks.sh", "break.sh")
scripts = sorted(os.path.basename(p) for p in glob.glob("Tests/*.sh")
if os.path.basename(p) != "makedisks.sh")
if os.path.basename(p) not in notSuite)
# Spelled out, because that is how the documents say them. Kept a few ahead of the count so
# that adding a script fails on the number being wrong rather than on the word being unknown,
# which is a much less helpful thing to be told.
@@ -669,6 +674,17 @@ for name in scripts:
problems.append("Tests/%s runs in the suite and the Test Manual does not say what"
" it is for" % name)
# ---- And the two that are not in the suite are still described ----
#
# Being left out of the COUNT is not the same as being left out of the manual, and the gap
# between those two is exactly where a script goes undocumented for months. A tool nobody has
# written down is a tool nobody uses, which for break.sh would be a particular waste: it
# exists because the technique it automates was got wrong by hand twice.
for name in notSuite:
if ("`Tests/%s`" % name) not in manual:
problems.append("Tests/%s is a tool the suite does not count, and the Test Manual"
" does not say what it is for" % name)
# ---- The shape of the manifest, which the manual states outright ----
#
# Five numbers in one sentence, all of them countable from the file they describe. This is