xai-org/grok-build · error
chat-state actor unavailable
Error message
chat-state actor unavailable
What it means
Error "chat-state actor unavailable" thrown in xai-org/grok-build.
Source
Thrown at crates/codegen/xai-grok-shell/src/session/acp_session_impl/rewind.rs:604
/// is just a fast path.
pub(super) async fn handle_repair_history(
&self,
dry_run: bool,
) -> anyhow::Result<xai_chat_state::compaction_utils::HistoryRepairReport> {
// Per-session flag — NOT `tool_context.is_turn_active`, which is the
// agent-wide coordinator flag shared by all sessions (using it would
// refuse repair of an idle session while any other session runs a
// turn, and another session's turn end could clear it mid-turn).
let turn_flag = self.session_turn_active.clone();
if turn_flag.load(std::sync::atomic::Ordering::SeqCst) {
anyhow::bail!(xai_chat_state::commands::RepairHistoryBlocked);
}
let report = self
.chat_state_handle
.repair_history(dry_run, Some(turn_flag))
.await
.ok_or_else(|| anyhow::anyhow!("chat-state actor unavailable"))?
.map_err(anyhow::Error::new)?;
if report.changed() && !dry_run {
// Flush barrier: success must mean the rewrite is on disk.
let (flush_tx, flush_rx) = tokio::sync::oneshot::channel();
if self
.notifications
.persistence_tx
.send(PersistenceMsg::FlushAndAck {
respond_to: flush_tx,
})
.is_err()
|| !matches!(flush_rx.await, Ok(Ok(())))
{
anyhow::bail!("history repaired in memory but the persistence flush failed");
}
tracing::warn!(
session_id = %self.session_info.id.0,View on GitHub (pinned to bc7f02eddd)
When it happens
Trigger: Thrown at crates/codegen/xai-grok-shell/src/session/acp_session_impl/rewind.rs:604 when the library encounters an invalid state.
Common situations: See trigger scenarios.
AI-assisted analysis of xai-org/grok-build@bc7f02eddd (2026-08-31).
Data as JSON: /api/errors/c3b9fa36696696f7.
Report an issue: GitHub.