Problem
The tsan-threadfuzz-lifecycle job for main commit 94078ba7 failed in run https://github.com/zig-utils/zig-js/actions/runs/29352841839 after the lifecycle seed exceeded the 120-second watchdog.
The lifecycle profile currently arms one timeout across 56 independently reproducible subcases. Under TSan, their aggregate runtime can exceed the watchdog even when no individual case is hung. The forced std.process.exit(124) then makes TSan report already-finished but not-yet-joined JS thread handles as secondary thread leaks.
This is inconsistent with the broad profiles, which already reset the same seed window before each subcase through runWatchedSeedCase.
Scope
- Run every lifecycle subcase through the existing per-subcase watchdog helper.
- Keep the seed and profile in timeout diagnostics so every failure remains directly reproducible.
- Do not weaken or lengthen the 120-second per-case hang detector.