5981d106

By: Tom Sydney Kerckhove <syd@cs-syd.eu>

Let a failed control name the test that killed it

A control is a no-op mutation, so it cannot legitimately be killed: a killed
control means the suite is flaky or the harness is buggy, and it fails the run.
But the report said only that one had failed, never which test killed it, and
report.json carried nothing but a count. Survivors and timeouts each get their
child's output; a failed control got none.

The cause was one hardcoded Nothing. A child that exits non-zero is a kill and
its output was discarded, which is right for the thousand-odd ordinary
mutations of a healthy run, whose kill is expected and whose output says
nothing. For a control the kill is the finding, so this dropped the evidence at
exactly the moment it mattered.

SuiteKilled now carries an optional log path, and the driver keeps the log only
when the killed mutation is a control, under a control-failure- prefix. So the
report gains one file per control failure rather than one per mutation, and the
failed-control section points at it.

Found while chasing a control that failed once in nix-ci, at a time-based wait
computation, with no way to tell which test did it and no way to reproduce it
outside a loaded mutation run.

Total

23m41s

Created Started Finished

Time to Start Worker time Duration Time to finish Idle
Config 33s 0s 0s 34s 33s
Eval 54s 20s 20s 1m14s 19s
Build 17m11s 27s 6m32s 23m44s 22m02s
Deploy 24m02s 13s 13s 24m15s 17s
Suite 33s 1m01s 23m41s 24m15s 23m13s

Timeline

Config Eval Build Deploy Compressed gap
0s1m1m10s23m20s23m30s23m40s24m10s