{"record":{"id":"071a1a2391869b29","repo":"zeroclaw-labs/zeroclaw","slug":"ms365-token-refresh-failed-status","errorCode":null,"errorMessage":"ms365: token refresh failed ({status})","messagePattern":"ms365: token refresh failed \\((.+?)\\)","errorType":"http","errorClass":"anyhow::Error","httpStatus":null,"severity":"error","filePath":"crates/zeroclaw-tools/src/microsoft365/auth.rs","lineNumber":329,"sourceCode":"        }\n\n        let resp = client\n            .post(&token_url)\n            .form(&params)\n            .send()\n            .await\n            .context(\"ms365: failed to refresh token\")?;\n\n        if !resp.status().is_success() {\n            let status = resp.status();\n            let body = resp.text().await.unwrap_or_default();\n            ::zeroclaw_log::record!(\n                DEBUG,\n                ::zeroclaw_log::Event::new(module_path!(), ::zeroclaw_log::Action::Note)\n                    .with_attrs(::serde_json::json!({\"body\": body})),\n                \"ms365: token refresh raw error\"\n            );\n            anyhow::bail!(\"ms365: token refresh failed ({status})\");\n        }\n\n        let token_resp: TokenResponse = resp\n            .json()\n            .await\n            .context(\"ms365: failed to parse refresh token response\")?;\n\n        Ok(CachedTokenState {\n            access_token: token_resp.access_token,\n            refresh_token: token_resp\n                .refresh_token\n                .or_else(|| Some(refresh_token.to_string())),\n            expires_at: chrono::Utc::now().timestamp() + token_resp.expires_in,\n        })\n    }\n\n    fn load_from_disk(path: &std::path::Path) -> Option<CachedTokenState> {\n        let data = std::fs::read_to_string(path).ok()?;","sourceCodeStart":311,"sourceCodeEnd":347,"githubUrl":"https://github.com/zeroclaw-labs/zeroclaw/blob/88bb9c8533fc57ed7a03e36ca7c9ed2bf8336dcc/crates/zeroclaw-tools/src/microsoft365/auth.rs#L311-L347","documentation":"Error \"ms365: token refresh failed ({status})\" thrown in zeroclaw-labs/zeroclaw.","triggerScenarios":"Thrown at crates/zeroclaw-tools/src/microsoft365/auth.rs:329 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Check the refresh response status; re-run the auth flow if the refresh token is invalid."],"exampleFix":null,"handlingStrategy":null,"validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"88bb9c8533fc57ed7a03e36ca7c9ed2bf8336dcc","analyzedAt":"2026-08-23T01:07:41.857Z","schemaVersion":2},"datasetVersion":"2026-08-23T08:06:27.607Z"}