tinyhumansai/openhuman · error
todo_replace: invalid cards: {e}
Error message
todo_replace: invalid cards: {e} What it means
todo_replace could not deserialize the 'cards' array into TaskBoardCard objects: at least one element is missing a required field (e.g. id, content, status) or has a wrong-typed field. The serde error {e} names the offending card and field.
Source
Thrown at src/openhuman/threads/todos/tools.rs:472
"items": { "type": "object" }
}
},
"required": ["cards"]
})
}
fn permission_level(&self) -> PermissionLevel {
PermissionLevel::Write
}
async fn execute(&self, args: serde_json::Value) -> anyhow::Result<ToolResult> {
log::debug!("[tool][todos] replace invoked");
let cards_val = args
.get("cards")
.cloned()
.ok_or_else(|| anyhow::anyhow!("missing required array argument `cards`"))?;
let cards = serde_json::from_value(cards_val)
.map_err(|e| anyhow::anyhow!("todo_replace: invalid cards: {e}"))?;
let location = board_location(&self.config, &args);
let snapshot = ops::replace(&location, cards)
.await
.map_err(|e| anyhow::anyhow!("todo_replace: {e}"))?;
snapshot_to_result(snapshot)
}
}
/// Empty the board. **Destructive** — default-OFF.
pub struct TodoClearTool {
config: Arc<Config>,
}
impl TodoClearTool {
pub fn new(config: Arc<Config>) -> Self {
Self { config }
}
}View on GitHub (pinned to 7491200858)
Solutions
- Check {e} for the exact card index and field at fault
- Ensure every card object carries the required fields with correct types
- Fetch the current board first and modify it rather than hand-writing cards from scratch
Defensive patterns
Strategy: validation
When it happens
Trigger: Thrown at src/openhuman/threads/todos/tools.rs:472 when the library encounters an invalid state.
Common situations: See trigger scenarios.
AI-assisted analysis of tinyhumansai/openhuman@7491200858 (2026-08-17).
Data as JSON: /api/errors/6fc8c37ea672658e.
Report an issue: GitHub.