Flake batch 7: slow-embedding budget test asserts the budget, not runner speed
Test-only fix. aft_search_contract_test::slow_query_embedding_degrades_within_budget_and_next_query_retries_fresh failed on a loaded Windows runner (PR #1056's shard): the 500 ms query budget fired on time (516 ms), but the lexical fallback after it took ~495 ms and tripped the test's single 1 s wall-clock bound.
The test now asserts from its recorded phases that the deadline fired near the budget (400 ms to 2.5 s) and bounds the reply at half the fake server's hold. The hold is now 10 s and ends early when the client disconnects, so a normal run still takes about 0.6 s. Next-query retry, request count and phase order assertions are unchanged.
Build server: test passed 4 of 4 runs; Windows target check with -D warnings.
Summary by cubic
Test-only fix for the flaky slow_query_embedding_degrades_within_budget_and_next_query_retries_fresh contract test, which failed on a loaded Windows runner when the lexical fallback after the 500 ms budget took ~495 ms and tripped the single 1 s wall-clock bound.
The test now asserts from its recorded phases that the deadline fired near the budget (400 ms to 2.5 s), and bounds the total reply at half the fake server's hold. The server hold is now 10 s and ends early when the client disconnects, so a normal run still takes about 0.6 s. Next-query retry, request count, and phase order assertions are unchanged.