tinyhumansai/openhuman · error

thread_task_board_write: invalid cards: {e}

Error message

thread_task_board_write: invalid cards: {e}

What it means

Wrapped error in thread_task_board_write: the `cards` value was present but did not deserialize into Vec<TaskBoardCard> — typically a card object with missing or wrongly-typed fields (id, title, column, etc.). {e} carries the serde detail naming the offending field.

Source

Thrown at src/openhuman/threads/tools.rs:721

                "cards": { "type": "array", "items": { "type": "object" } }
            },
            "required": ["thread_id", "cards"]
        })
    }

    fn permission_level(&self) -> PermissionLevel {
        PermissionLevel::Write
    }

    async fn execute(&self, args: serde_json::Value) -> anyhow::Result<ToolResult> {
        log::debug!("[tool][threads] task_board_write invoked");
        let thread_id = read_required_str(&args, "thread_id")?;
        let cards_val = args
            .get("cards")
            .cloned()
            .ok_or_else(|| anyhow::anyhow!("missing required array argument `cards`"))?;
        let cards: Vec<TaskBoardCard> = serde_json::from_value(cards_val)
            .map_err(|e| anyhow::anyhow!("thread_task_board_write: invalid cards: {e}"))?;
        let board = TaskBoard {
            thread_id,
            cards,
            updated_at: Utc::now().to_rfc3339(),
        };
        let saved = TaskBoardStore::new(self.config.workspace_dir.clone())
            .put(board)
            .await
            .map_err(|e| anyhow::anyhow!("thread_task_board_write: {e}"))?;
        Ok(ToolResult::success(serde_json::to_string(&json!({
            "task_board": saved,
        }))?))
    }
}

/// Delete one thread. **Irreversible** — default-OFF.
pub struct ThreadDeleteTool;

View on GitHub (pinned to 7491200858)

Solutions

  1. Match each card object to the TaskBoardCard schema (required fields, correct JSON types)
  2. Read the serde error {e} to find the exact failing field
  3. Fix the offending card and resubmit the whole cards array
Defensive patterns

Strategy: validation

When it happens

Trigger: Thrown at src/openhuman/threads/tools.rs:721 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/a862dca257f736db. Report an issue: GitHub.