The re-arm in 3e1a366 only fixed the abort timer. wait() itself still
resolved "elapsed" when its clamped polling timer fired early at the same
monotonic instant as the deadline timer (monotonic 39 / target 40), moving the
intermittent failure from the deadline's remaining-budget assertion to the
wait's expected "aborted" result.
wait() now retains an absolute wait target — the earlier of the requested
polling interval and the absolute monotonic deadline — and continues the
bounded wait when a timer reports elapsed before that target. Classification
is: expired deadline -> "aborted"; elapsed polling target -> "elapsed";
early timer delivery -> re-arm and keep waiting. Caller cancellation,
reasons, and timer/listener cleanup are unchanged.
Tests: added the "keeps a full-budget wait pending when both timers fire
early" probe from the issue review (fails pre-fix: "expected 'elapsed' to
be undefined"); strengthened the dispose test with a caller signal and
verified it fails if the external removeEventListener is dropped.
ProviderDeadline + ProviderProcessOutput + GhidraProvider.behavior +
HopperProvider: 64/64 green, stable across 6 runs. check:fast green.