D198
- verify.sh takes fifty minutes, none of it work, and
D012's rule had one more place to apply
Three background runs sat for fifty, twenty-five and six minutes. They were not hung - this is simply what the gate costs on a repository that lives on a Windows 9p mount. Three separate costs, measured rather than guessed:
1. The sink wrote its report across the mount - fixed
The sink's last-resort path is a bare
obscene-report.txt, which lands in the working
directory. Every host run therefore wrote 36,000 records,
unbuffered, across 9p:
| cwd | host run |
|---|---|
<OOPS>/obscene |
57s |
$HOME/obs |
8.9s |
D012 says BUILD must be Linux-local. The sink does not
follow BUILD - it follows cwd - so the rule had a second
place to apply and nobody had applied it. All four host-run sites in the
Makefile now cd $(BUILD) first, which also stops a 2.9 MB
report appearing in the repository after every run.
2. Fifteen
cargo run invocations - not fixed here
Each gate shells out to cargo run, and cargo stats the
whole source tree over 9p before deciding it has nothing to do. The
gates themselves do almost no work:
[ 53s] === tool lints
[ 100s] === tool formatting
[ 170s] === cross-symbol guards
[ 239s] === capability ordering
Fifty to ninety seconds each, fifteen times: twelve to twenty minutes of startup. Building the binary once and calling it directly removes essentially all of it, and is safe because nothing about the tool is parameterised per gate.
3. Every build is a full rebuild, and that is probably correct
make host (full rebuild): 272s
make host (no change): 284s
A no-op costs the same as a full one, because host,
module and payload are all .PHONY
- make never checks freshness and always runs the recipe. Three targets
is roughly fourteen minutes of every run.
Left alone deliberately. These builds are
parameterised by flags make cannot see in a file dependency:
GEN, EXCLUDE, BULK,
GPU, SERVE, HARDWARE. Given a
file target, make host GEN=4 followed by
make host GEN=5 would silently reuse the first binary and
every measurement after it would describe the wrong build. That is the
exact failure this project is built to avoid, and it is worth fourteen
minutes.
Making it both fast and correct means a stamp file recording the flags, which is real machinery; worth doing, not worth doing carelessly.
Why this went unnoticed for so long
Because it never failed. A gate that is merely slow is
indistinguishable from one that has hung, and verify.sh
prints its verdict only at the end - so a fifty-minute run looks exactly
like a wedged one for forty-nine of those minutes.
scripts/verify-wsl.sh now streams each gate with the time
it started, which is how all three numbers above were obtained.
Status: derived - every figure measured on this machine today.