feat(platform): give AuthState::LoginFailed a typed kind - #401
feat(platform): give AuthState::LoginFailed a typed kind#401filvecchiato wants to merge 4 commits into
Conversation
Imod7
left a comment
There was a problem hiding this comment.
rust/crates/truapi-host-cli/src/main.rs line 1170 already does this classification:
err.to_string().contains("no free StatementStore slot")With the new classify_login_failure, the same fact lives in two crates under two different rules, and the CLI copy is the weaker one: case-sensitive, and no long-term-storage marker. It is load-bearing, prepare_pairing_response uses it to rotate an exhausted auto-managed account. Could you move the markers plus one predicate into rust/crates/truapi-server/src/runtime/statement_allowance/slot.rs, next to the SlotError Display strings they mirror, and call it from both places. I tried it: pub fn reports_exhausted_period(text: &str) -> bool there, classify_login_failure as a wrapper, and the CLI calling truapi_server::statement_allowance::slot::reports_exhausted_period(&err.to_string()). It compiles and the new tests stay green.
Closes #390.
LoginFailed { kind, reason }withLoginFailureKind::{NoFreeAllowanceSlots, Other}. Hosts branch onkindand usereasonas display copy.EncryptedResponse::Failed(String), so the core recovers the discriminant once inruntime/login_failure.rsinstead of leaving every host to regex it.SlotErrorDisplayimpls, and the tests classify straight from them — rewording one now fails CI here rather than silently turning a host's fast-fail into a retry loop.Typing the inter-host wire itself is a follow-up: it needs a coordinated wallet rollout, and
kindmeans hosts won't need a second API change when it lands.