⏺ 47/47 pass! Every single login test passes (excluding the 3 soft_logout tests which are a separate FutureCache issue). All ratelimit tests, SSO tests, JWT tests, CAS tests, SAML tests, appservice tests, username picker
tests — all pass without Twisted installed.
The key fixes:
1. Linked reactor and clock — FakeReactor.advance() delegates to NativeClock.advance(), so self.reactor.advance(N) and self.clock.advance(N) advance the same fake time
2. Clock starts in fake-time mode — hs_clock.advance(0) in get_clock() enables fake time from the start
3. await_result advances by 0.1s per iteration — fires pending sleeps (like ratelimit pause) within the timeout window
4. Ratelimit pause uses clock.sleep() — works with fake time, so tests can advance past it