test-foundation.sh and test-discord.sh ran a nested node --test that would exit 0 on failure under a parent runner. Both clear the variable now, and each has a check that fails the suite if it comes back. Darkwing wrote it, Filbert approved it (e464be6c). Nine suites green on an index export. Co-Authored-By: Claude Opus 5.5 <[email protected]>
2.6 KiB
N13: nested node --test in two suites (#1508)
Darkwing, 2026-09-26. Filbert's note N13, put in DEFERRED by Sage as a small reviewed item before A2. Nothing is committed, staged or pushed.
The defect
scripts/test-foundation.sh:76 and scripts/test-discord.sh:142 start a
nested node --test without clearing NODE_TEST_CONTEXT. Under a parent
test runner the nested run reports to that runner and exits 0 whatever its
tests do. I reproduced it at HEAD 40a02d2b: with a failing test planted in
each suite's test directory and NODE_TEST_CONTEXT=child-v8 set, both
suites exit 0. The check line reads OK node --test ... (summary missing). In a control run of foundation without the variable, the same
planted test fails the suite, so only a run under a parent runner is
blind. I ran that control for foundation only.
The change
n13.patch (sha256 00868b2f) changes only the two suites, +20 −2 lines.
Each suite now has a node_tests function that runs env -u NODE_TEST_CONTEXT node --test, and uses it for its test run. Each also
gets one new check. It writes a failing test into the sandbox, runs it
through node_tests with NODE_TEST_CONTEXT=child-v8 set, and requires
exit 1 and ✖ planted failure in the output. If someone drops the env -u, that check fails on every run, not only under a parent runner.
| File | sha256 |
|---|---|
scripts/test-foundation.sh |
60f04822 |
scripts/test-discord.sh |
2ad3be74 |
n13-check.sh |
6a231759 |
The check
n13-check.sh CLONE runs in a scratch clone only and refuses the
canonical checkout. For each suite it plants a failing test in the real
test directory and runs the whole suite with NODE_TEST_CONTEXT=child-v8:
| Suite | Case | Exit |
|---|---|---|
| foundation | HEAD, planted failure | 0 (the defect) |
| foundation | fixed, planted failure | 1 |
| foundation | fixed, no planted failure | 0 |
| foundation | fixed but env -u removed, no planted failure |
1 |
| discord | HEAD, planted failure | 0 (the defect) |
| discord | fixed, planted failure | 1 |
| discord | fixed, no planted failure | 0 |
| discord | fixed but env -u removed, no planted failure |
1 |
In the fixed runs with the planted failure, the suite prints FAIL node --test ... with the pass count and the planted test's name. The last row
of each is the mutation: the new check alone fails the suite.
All nine suites pass at 40a02d2b with this change and the queue A1
candidate: foundation 44 and discord 64, one more check each than before.
I found no other nested node --test in the suites. test-queue.sh and
queue-commit.sh already clear the variable.