fix(relay): address createSession code review findings
- Move clear_failures to after tx.commit() so the counter is not reset
on a mid-flight 500 (JWT sign or DB commit failure)
- Log tracing::error\! on all four Mutex::lock PoisonError paths instead
of silently discarding the error
- Log tracing::error\! when stored password_hash fails PHC parse (DB
corruption indicator) rather than treating it as a wrong password
- Return 500 for clock-before-epoch instead of issuing expired JWTs via
unwrap_or_default()
- Use DB-stored h.handle in the handle-path response instead of echoing
the raw user input (fixes non-canonical casing)
- Remove stale scaffolding doc-comment and "goroutine" terminology from
is_rate_limited
- Add three tests: deactivated_account_returns_401,
wrong_password_and_unknown_identifier_return_identical_errors,
successful_login_clears_rate_limit_counter