test: unit, contract and load tests stop depending on the clock, globals and copied config
First of three in a stack that makes the backend tests durable: this one covers unit, contract and the load tool; #378 makes PodRuntimeConfig's minimums required; the e2e race fixes come next.
Tests that depended on the clock now measure around the call. JWT claims used to be built when the module was collected, so a long run expired them. Expiry and Redis deadline checks used fixed windows that a loaded runner could miss, and now they're bracketed by timestamps taken before and after the call.
The notification retry test slept a real second through tenacity's backoff. NotificationService now takes its wait strategy as a constructor argument, production default unchanged, and the test passes wait_none().
Versions, images and Go's pod minimums come from the runtime registry instead of literals that break when a version is dropped. Module constants like the saga retry limit and the Redis slot grace are imported instead of retyped.
The SSE service didn't close its Redis subscription when a stream ended. async for doesn't close what it iterates, so cleanup waited for the garbage collector's async-generator hook. The three streams now iterate inside contextlib.aclosing, and the tests hold their generators in the same kind of block and check the bus saw the close.
Smaller fixes: the contract test re-enables the OTel SDK inside MonkeyPatch.context() instead of editing os.environ by hand; the worker entrypoint test patches setup_metrics and checks that the three routers and four jobs are wired; the OTel log test restores root handlers with monkeypatch; the pod builder tests use the real test settings instead of a bare MagicMock; the load tool lets the API pick the language and bounds its SSE read with asyncio.timeout.
Removed: tests that only restated defaults, called no-op metric instruments without asserting, tested PyJWT itself, or couldn't fail (the event schema file, an empty test body, x == [] or ... checks). Five pod monitor and mapper tests got the assertions their names promised, and one mapper test now has the label it needed to reach the duplicate cache it's named after. The 23 noqa comments in tests/ were for rules this repo doesn't enable, so they're gone.
Ruff, mypy, the orphan check, unit (564) and contract tests pass.