feat(platform): give AuthState::LoginFailed a typed kind - #401
feat(platform): give AuthState::LoginFailed a typed kind#401filvecchiato wants to merge 11 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.
hosts/dotli: take main's pointer (dotli-community 29ef38b); the branch side was a stale gitlink from the pre-community dotli repo.
The signing host's account rotation and the login-failure classifier both recover "this period has no slot left" from error text. Move the rule to statement_allowance::slot as reports_exhausted_period, beside the SlotError Display strings it mirrors, and call it from both. The CLI copy was case-sensitive and matched only the statement-store rendering.
The kind is recovered from wallet prose this workspace does not control, so a transient "no free slot" wording classifies the same way. Say so on the variant and in the five host-facing copies: retry should not be the primary action, rather than being impossible.
|
On the duplicated classification in
Added |
…locator statement_allowance is cfg'd out on wasm32, and the browser host classifies login failures, so hosting the predicate in its slot module broke the wasm32 build. It lives in runtime::login_failure and is re-exported as truapi_server::reports_exhausted_period; the test pinning it against the SlotError renderings stays beside those strings.
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.