tinyhumansai/openhuman · error
todo_decide_plan: {e}
Error message
todo_decide_plan: {e} What it means
Generic wrapper from todo_decide_plan: recording the plan approval/rejection failed after arguments validated. The underlying {e} is the ops error — typically the card id is not a plan card, or the board update failed.
Source
Thrown at src/openhuman/threads/todos/tools.rs:368
"required": ["id", "approve"]
})
}
fn permission_level(&self) -> PermissionLevel {
PermissionLevel::Write
}
async fn execute(&self, args: serde_json::Value) -> anyhow::Result<ToolResult> {
log::debug!("[tool][todos] decide_plan invoked");
let id = read_required_str(&args, "id")?;
let approve = args
.get("approve")
.and_then(serde_json::Value::as_bool)
.ok_or_else(|| anyhow::anyhow!("missing required boolean argument `approve`"))?;
let location = board_location(&self.config, &args);
let snapshot = ops::decide_plan(&location, &id, approve)
.await
.map_err(|e| anyhow::anyhow!("todo_decide_plan: {e}"))?;
snapshot_to_result(snapshot)
}
}
/// Remove a single card. **Destructive** — default-OFF.
pub struct TodoRemoveTool {
config: Arc<Config>,
}
impl TodoRemoveTool {
pub fn new(config: Arc<Config>) -> Self {
Self { config }
}
}
#[async_trait]
impl Tool for TodoRemoveTool {
fn name(&self) -> &str {View on GitHub (pinned to 7491200858)
Solutions
- Confirm the id refers to a card that carries a plan
- Read {e} for whether the failure is card lookup or persistence
- Retry transient board-write failures
Defensive patterns
Strategy: try-catch
When it happens
Trigger: Thrown at src/openhuman/threads/todos/tools.rs:368 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/6ab0f12db4dfad39.
Report an issue: GitHub.