offerOrReap
Every route into active: the compile-completion handoff on the short-lived compile thread once EvalTask.start finishes compiling, and stepAll's flush of an eval it stepped but didn't finish. Publish the task into active, then re-read the epoch it was bound to at submit. Epoch unchanged: it waits for the next pump. Epoch advanced while it was compiling: it's stale, so pull it back out and kill it here, completing its future — otherwise the blocked caller hangs on a queue that will never be pumped again.
Publish-before-recheck pairs with reapOnStop's epoch-bump-before-drain: a straggler either lands in active in time for that drain, or misses it and sees the advanced epoch here. active.remove returning false means a concurrent reap already took it; kill is idempotent, so the future completes exactly once.
Readiness is rechecked alongside the epoch because the two boundaries don't coincide: a server's liveness flag drops at halt(), but the epoch only advances at stopServer() — a straggler landing between them sees an unchanged epoch and a source that will never pump again.