Build and test-tree integrity: guard mk nuke, stale bytecode, and dis paths - #550
Build and test-tree integrity: guard mk nuke, stale bytecode, and dis paths#550Ticed wants to merge 7 commits into
Conversation
|
Thanks for this — the diagnosis in here is good, and two of the traps you Please split out and I'll take them
The One change to the mechanism, though: please restore Superseded by #559 / #560Not because the problems weren't real — because they've been fixed further The Two notes on the guard as written, for the record. It was Posix-only, so The
The The
|
|
Thanks — taking the split you asked for. #565 carries the two you wanted: #564 is the Dropped, per your reading: the The The |
What this changes
Six small guards and one document, all about the build and the test tree
telling the truth about their own state. No functional change to the
emulator, the VM, or any Limbo application.
**mk nukeat the repo root no longer deletes the trackeddis/runtimetree.** Root nuke walks
$DIRS($EMUDIRS+appl), and appl's nukedeletes
$DISBIN- which for appl is the committeddis/, about 900.disfiles a fresh clone needs in order to boot. Afterwards the emulatordies with
panic: loading "/dis/emuinit.dis": ... does not existandgit statusshows a wall of deletions that reads like a bad merge. Therule now refuses when
dis/emuinit.disis tracked, and names the two waysforward:
mk emunukefor an emulator-only clean, orNUKE_DIS=1 mk nuketo really do it.
cd appl && mk nukeis deliberately left unguarded.**build-macos-sdl3.shrestoresinclude/version.hwhen the build fails.**It stamps the version before compiling, so a failed build left the stamped
file behind, surfacing as an unrelated modification in the next
git status.**build-macos-headless.shbootstrapsutils/ndatebefore the emulator**,rather than failing partway through on a fresh clone.
**tools/verify-dis-paths.shnow covers the wholeapplandteststree.**It guarded
appl/cmdonly, so the wrong-target bug it exists to catch - amodule whose
PATHconstant names one location while the build installs toanother - could still land anywhere else. Sources with no inline
PATHconstant are reported as skipped rather than silently ignored, since
mkTARGgoverns those.**run-tests.shrefuses to run test bytecode older than its source.** Astale
.discarries the assertions it was compiled with, so it failsagainst code that is correct, and there is no
link typecheckerror toexplain why unless a
.minterface also changed. The failure names anassertion, which sends you into the wrong file; the natural next move is to
edit correct code until it matches a stale test. The check lists the
offending binaries and points at
mk install.**docs/WORKFLOW-TRAPS.md**records these traps and two related ones andis linked from
DOCUMENTATION-INDEX.md.Verification
mk nukeat the root refuses with exit 1 anddis/is intact afterwardrun-tests.shrefuses with the stale binary named after touching a testsource, and proceeds once the binary is rebuilt
tools/verify-dis-paths.sh:OK: 10 sources have fresh .dis at their declared PATH (1053 skipped: no inline PATH constant, mk TARG governs those)macOS ARM64. The two behavioural guards were watched failing and then
passing, not merely inspected.
Scope
Deliberately excluded to keep this to one logical change: the
tests/mkfileTARGaudit and its pre-commit guard, which need a fix tothe tests they would wire in (which follow separately).