Eureka/tools/fixtures/mutation-probe
Repository files (latest commit first)
Filename Latest commit message Latest commit date
Meta Vens 4803a76dc2 ygg-verify: a RUN_ON_HOST job the watchdog killed exits 124, in its work directory, and its process group is signalled
A RUN_ON_HOST job whose TIMEOUT fired still exited 0: kill_job only killed
labelled containers and the status came from the host command (Soul F2). The
host command now runs in its own process group (set -m), in the job's work
directory (it ran in the ssh home), with stdin from /dev/null. kill_job sends
the group TERM, then KILL 20 s later, and the verdict is forced to 124 when the
watchdog killed the job, whatever the command exited with. The TIMEOUT/IDLE
notice now prints before the kill so the 20 s grace cannot swallow it.
Proved on Yggdrasil with the sleep-past-TIMEOUT probe (exit 124, cwd = the work
dir, no sleep left) and with a command that traps TERM and exits 0 (still 124);
probes recorded in tools/fixtures/mutation-probe/README.txt, with the expected
rows for the fresh and jsr reproducers.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-01 18:25:35 +02:00
..
fresh Fixtures: Soul's fresh (rerun-hostile test) and jsr (jest/vitest mutants) reproducers 2026-10-01 18:07:08 +02:00
js Fixtures: Soul's real-toolchain mutation probes (rust data.txt pollution, vitest import break) 2026-10-01 16:40:38 +02:00
jsr Fixtures: Soul's fresh (rerun-hostile test) and jsr (jest/vitest mutants) reproducers 2026-10-01 18:07:08 +02:00
rust Fixtures: Soul's real-toolchain mutation probes (rust data.txt pollution, vitest import break) 2026-10-01 16:40:38 +02:00
soul2 mutation-table: Docker owns the per-mutant snapshot; classify jest and vitest file-level load failures 2026-10-01 17:36:49 +02:00
.gitattributes Fixtures: Soul's real-toolchain mutation probes (rust data.txt pollution, vitest import break) 2026-10-01 16:40:38 +02:00
README.txt ygg-verify: a RUN_ON_HOST job the watchdog killed exits 124, in its work directory, and its process group is signalled 2026-10-01 18:25:35 +02:00

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

Real-toolchain probes for tools/mutation-table.sh (Soul's 2026-10-01 scratch repo, committed).
Run each on Yggdrasil through the stopgap; expected rows:
 rust/mutants-a.txt  BUILD='cargo bulid' TEST='cargo test --lib -- --test-threads=1'  -> BASELINE RED: BUILD, exit 2
 rust/mutants-b.txt  (same TEST, no BUILD)  -> forge row SURVIVED, caught=0, exit 1
 rust/mutants-c.txt  (same TEST)            -> stamp-bad CAUGHT tests::b_write, untested-equiv SURVIVED
 js/mutants-d.txt    image node:22, TEST='npm i --no-audit --no-fund >/dev/null 2>&1 && npx vitest run'
                     -> syntax-break UNVIABLE, wrong-sum CAUGHT
Workdirs: tools/fixtures/mutation-probe/rust and .../js.
 soul2/mutants.txt   TEST='cargo test --lib -- --test-threads=1', workdir .../soul2 -> a test keeps state in an IGNORED file
                     (target/soul-cache.txt): stamp2-bad CAUGHT tests::d_cache, untested-equiv SURVIVED, add-minus CAUGHT
                     tests::c_add; exit 1. Before the per-mutant snapshot, untested-equiv read CAUGHT d_cache and the job
                     exited 0 (the cache outlived the mutant that wrote it).
 fresh/mutants.txt   TEST='cargo test --lib -- --test-threads=1', workdir .../fresh (f_fresh creates a directory, so it cannot
                     run twice) -> `SNAPSHOT RED (exit 101) for: cargo test ...`, "no rows counted", exit 2. Before the control
                     run of the unmutated snapshot, the job read untested-equiv CAUGHT tests::f_fresh and exited 0.
 jsr/mutants.txt     workdir .../jsr, each mutant carries its own `test:` (jest 29.7.0 and vitest 3.2.4 from npm), image node:22 ->
                     jest-load UNVIABLE, jest-wrong CAUGHT add › adds, jest-exit ERROR (process.exit(1) names no test),
                     jest-equiv SURVIVED, vt-load UNVIABLE, vt-wrong CAUGHT, vt-equiv-throw-at-load UNVIABLE; exit 1.
                     (Before the fixes jest-load read ERROR and jest-exit read CAUGHT | process.exit called with "1".)
RUN_ON_HOST watchdog probe (tools/stopgap/ygg-verify.sh): RUN_ON_HOST=1 TIMEOUT=60 ygg-verify.sh <repo> HEAD rust
 'echo cwd=$PWD; sleep 300; echo hostdone' -> cwd is the job's work directory, `TIMEOUT after 60s`, exit 124, no `hostdone`,
 no sleep left on the host. With trap "exit 0" TERM around the sleep the status is still 124 (it was 0).