{"record":{"id":"a9008ddac8fc3a84","repo":"tinyhumansai/openhuman","slug":"missing-required-parameter-symbol","errorCode":null,"errorMessage":"Missing required parameter: symbol","messagePattern":"Missing required parameter: symbol","errorType":"validation","errorClass":"anyhow::Error","httpStatus":null,"severity":"error","filePath":"src/openhuman/integrations/tools/stock_prices.rs","lineNumber":178,"sourceCode":"        json!({\n            \"type\": \"object\",\n            \"properties\": {\n                \"symbol\": {\n                    \"type\": \"string\",\n                    \"description\": \"Stock or index ticker, e.g. AAPL, MSFT, SPY\"\n                }\n            },\n            \"required\": [\"symbol\"]\n        })\n    }\n\n    async fn execute(&self, args: serde_json::Value) -> anyhow::Result<ToolResult> {\n        let symbol = args\n            .get(\"symbol\")\n            .and_then(|v| v.as_str())\n            .map(str::trim)\n            .filter(|s| !s.is_empty())\n            .ok_or_else(|| anyhow::anyhow!(\"Missing required parameter: symbol\"))?;\n\n        tracing::info!(\"[stock_quote] symbol={}\", symbol);\n\n        let body = json!({ \"symbol\": symbol });\n        match self.client.post::<QuoteResponse>(PATH_QUOTE, &body).await {\n            Ok(resp) => {\n                let q = &resp.quote;\n                let mut out = format!(\n                    \"{} — ${:.4}\\n  open ${:.4}  high ${:.4}  low ${:.4}\\n  prev close ${:.4}  change {:+.4} ({})\\n  volume {}\",\n                    q.symbol,\n                    q.price,\n                    q.open,\n                    q.high,\n                    q.low,\n                    q.previous_close,\n                    q.change,\n                    q.change_percent,\n                    q.volume,","sourceCodeStart":160,"sourceCodeEnd":196,"githubUrl":"https://github.com/tinyhumansai/openhuman/blob/749120085864ce16e0f273c7b86fac7740b39c5b/src/openhuman/integrations/tools/stock_prices.rs#L160-L196","documentation":"Required-parameter guard in the stock-price tool's execute: `symbol` is missing, non-string, or trims to empty (the .filter(!is_empty) chain means blank strings also land here). Fires before any market-data request; the caller must supply a ticker such as AAPL or SPY.","triggerScenarios":"Thrown at src/openhuman/integrations/tools/stock_prices.rs:178 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Supply a non-empty ticker symbol string","Verify the ticker is valid for the quotes provider"],"exampleFix":null,"handlingStrategy":"validation","validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"749120085864ce16e0f273c7b86fac7740b39c5b","analyzedAt":"2026-08-17T21:21:45.363Z","contentChangedAt":null,"schemaVersion":2},"datasetVersion":"2026-09-14T00:17:10.932Z"}