Hmbown/CodeWhale · error
guardian context contains only serializable values
Error message
guardian context contains only serializable values
What it means
build_reviewer_context serializes a json! literal whose fields are all strings and booleans (tool name, input Value, risk label, hold reason, trust flags). serde_json::to_string on such a value cannot fail — it fails only on maps with non-string keys or unserializable types — so this expect marks a serializeability invariant for the guardian context payload.
Source
Thrown at crates/tui/src/tui/auto_review.rs:540
pub(crate) fn build_reviewer_context(
ctx: &AutoReviewContext<'_>,
held_reason: &str,
tool_input: &Value,
) -> String {
serde_json::to_string(&serde_json::json!({
"proposed_tool_call": {
"tool": ctx.tool_name,
"input": tool_input,
},
"deterministic_observations": {
"action_kind": ctx.action_kind.as_str(),
"risk": risk_label(ctx.risk),
"run_origin": ctx.run_origin.as_str(),
"workspace_trusted": ctx.workspace_trusted,
"hold_reason": held_reason,
}
}))
.expect("guardian context contains only serializable values")
}
/// Strict JSON-object parse of a reviewer reply. Extra prose, fields, or an
/// empty rationale are unavailable answers and therefore fail closed.
pub(crate) fn parse_reviewer_verdict(text: &str) -> Option<ReviewerVerdict> {
let object: Value = serde_json::from_str(text.trim()).ok()?;
let fields = object.as_object()?;
if fields.len() != 3
|| !fields.contains_key("risk_level")
|| !fields.contains_key("decision")
|| !fields.contains_key("reason")
{
return None;
}
let risk = match object
.get("risk_level")?
.as_str()?
.trim()View on GitHub (pinned to 0c42157ee5)
Solutions
- Keep the json! payload limited to strings, booleans, and Value (already serializable)
- If a struct field is added, ensure it is Serialize or map it to a string first
- On failure, the reviewer hold path cannot proceed; log the tool name and hold reason before any panic
Defensive patterns
Strategy: type-guard
When it happens
Trigger: Thrown at crates/tui/src/tui/auto_review.rs:540 when the library encounters an invalid state.
Common situations: See trigger scenarios.
AI-assisted analysis of Hmbown/CodeWhale@0c42157ee5 (2026-08-20).
Data as JSON: /api/errors/d6c4a7aa57997713.
Report an issue: GitHub.