6c. The thread-churn crash is measured but not characterised

015-sync/thread-churn crashes one emulator roughly one run in seven, inside its own thread teardown, sometimes on a thread that was joined two sections earlier. What is not known is the threshold: forty cycles trigger it and two do not, and nobody has bisected between. "Fails above N live threads" is a bug report; "fails sometimes" is a complaint.

OBS_THREAD_CHURN is now overridable - make module CHURN=8 - so bisecting it is a handful of builds.

A first attempt established nothing, and how it failed is the useful part. Four runs each at 4, 16 and 40 cycles produced no crashes at all: twelve runs, zero events. At a rate near one in seven that is an unremarkable outcome and says nothing about a threshold

scripts/repeat.sh exists so this cannot happen again: it reports the denominator as loudly as the numerator, names where each short run died, and prints an explicit note when fewer than twenty runs found nothing (D079).

It still reproduces

Twenty runs at the default forty cycles: nineteen complete, one died in 015-sync/thread-churn. So the fault is alive on shadPS4 0.18.0 and a bisect is not characterising something already fixed - which was the real risk, and the reason to measure before bisecting.

One in twenty against the previously reported one in seven is not a disagreement; at these sample sizes the two are indistinguishable, and neither is a rate worth quoting to a decimal.

The threshold is the expensive question, so falsify it instead

Distinguishing "crashes above N" from "crashes at any N" by measuring both rates needs hundreds of runs at one event per twenty. Testing whether the threshold exists at all is much cheaper: run at the lowest churn the knob allows. A crash there kills the threshold hypothesis outright - the fault is thread teardown being flaky, not thread count - and twenty runs is enough to see it.

A clean twenty at the low value is weaker: it is consistent with a threshold and also with having missed a one-in-twenty fault, which the script says out loud.

Result: not falsified, and not established either

cycles runs died in thread-churn
40 (default) 20 1
2 20 0

The threshold hypothesis survives, and that is nearly all that can be said. 0 of 20 against 1 of 20 is not a distinguishable difference - at a one-in-twenty rate, twenty clean runs is the expected outcome whether the fault is absent at two cycles or merely rare there.

So the direction is not contradicted and nothing is confirmed. Separating the two needs roughly an order of magnitude more runs per point, which is hours of wall clock for a finding whose value is a sharper sentence in one bug report.

Recorded rather than pursued. The failure mode this item exists to warn about is claiming more than the runs support, and "consistent with a threshold" is the honest ceiling on 40 runs.